The Negligible Lab

Drowning in the sea of electrical and electronic circuits. Lost in the forest of computers and programs. 独立独歩を是とする。

Raspberry PiとFlaskでスマートリモコンを作る

はじめに

今回のテーマは「家族の役に立つ工作」です。

泊まりがけの旅行から帰宅すると,戸締まりした部屋の中は真夏であれば蒸し風呂のように,また,真冬であれば冷蔵庫のように感じられます。帰宅する数時間前に外出先からエアコンを運転できれば,家に着く頃には快適な温度になっていることでしょう。このような機能を持ったエアコンも製品化されているようですし,そうでなくても,赤外線リモコンの信号を利用してこのような機能を後付けするための「スマートリモコン」と呼ばれるデバイスが今日では低価格で手に入ります。

また,昨今では天井照明がかつてのような「ヒモ」(正式にはプルスイッチ)ではなく,リモコンで制御されることが多くなって参りましたが,これを留守中にも点灯・消灯することにより,あたかも人が在宅しているかの如く見せ掛けて空き巣防止を狙うこともできます。

今回は,勉強とリハビリを兼ねてRaspberry Pi Zero WHでエアコンと天井照明を制御するスマートリモコンを自作した経緯や結果について書きます。なお,有名なirrp.pyに頼るのではなく,赤外線リモコン信号を送信するためのPythonモジュールを自作しました(と言ってもpigpioモジュールには同じように依存します)。これによって,例えばエアコンの温度設定や運転モードの組み合わせに応じたフレームを生成して送信することができます(学習リモコンの場合,すべての組み合わせを予めひとつひとつ学習しておく必要がありますよね)。

また,インターネットからエアコンや天井照明を制御するため,Flaskと呼ばれるフレームワークを用いたWebアプリを作りました。

なお,Raspberry Piを使って学習リモコンやスマートリモコン,スマートハウスを作るという先行研究は非常に多いので*1,本記事のオリジナリティを問われると「ぐぬぬ…」となってしまいますが,敢えて言えば自作モジュールirxmit.pyの部分でしょうか。また,pigpioライブラリ(モジュール)のwaveform機能について基礎的な部分のみですが,和文で書いた記事は少ないのではないかと推測しています。

完成イメージ

まず,結論として完成したスマートリモコンのハードウェアとそのWebアプリのイメージを記載します。趣味なので仕様書のようなものは作っていませんが,作り始める前に思い描いていたものに近い形で実装することができました。

ハードウェア

図1に自作スマートリモコンHATを取り付けたRaspberry Pi Zero WHを示します。秋月電子通商Raspberry Pi Zero用ユニバーサル基板に手持ちの部品を実装して組み上げました。温湿度センサ,赤外線LEDとそれを駆動するパワーMOSFET,赤外線受光モジュールを搭載しております。思ったよりコンパクトに収まっておりますが,望ましくはOLEDディスプレイやキャラクLCDなど,表示デバイスを搭載できていたらと反省しております。温湿度センサの周りに抵抗器が密集しているのもあまりよろしくないですね。今年中にこれをプリント基板として作り直してみたいと密かに思っています。

f:id:s-inoue2010:20210406182828j:plain:w500
図1: 自作スマートリモコンHATを取り付けたRaspberry Pi Zero WH

Webアプリ

図2に完成したWebアプリのキャプチャ画面を示します。ブラウザ上での見た目はBootstrap 4によってそれっぽく仕上がっております。この裏ではFlaskを用いたPythonのプログラムや,自作の赤外線リモコン信号送信モジュールなどが動いております。また,温湿度のトレンドグラフは馴れ親しんだ(?)Matplotlibで描いております。なお,自宅の家電機器を赤の他人に勝手に制御されると困るので,一応はパスワードで保護しています。これはFlaskのsessionとcookieを使って実現しています。

f:id:s-inoue2010:20210407014509p:plain:w600
図2: Webアプリ画面キャプチャ

実際に動いている様子は動画の方が分かりやすいと思いますので,図3にYouTubeの動画を貼りつけます。

www.youtube.com
図3: FlaskによるWebアプリの動作の様子

おぉ…自分で作ったWebアプリとは思えないような美しさ…❗ 何もかもFlaskとBootstapのお陰ですね💦 たまに温湿度が欠測しているのが玉に瑕です。もう少し工夫が必要かもしれませんね。以下,開発の経緯や具体的な回路,ソフトの作り方について書いていきます。

続きを読む

Raspberry PiでBLDCモータを120°通電制御する

はじめに

本ブログの前々記事にてブラシレスDC (BLDC)モータの120°通電制御について書きました。STMicroelectronicsのモータ制御開発キットP-NUCLEO-IHM001の制御装置はもちろんSTM32マイコンの載ったNucleo F302R8です。

このNucleoをRaspberry Piに繋ぎ替えてみたら面白いのではないか──。技術的にはほとんど意味のないことかもしれませんが,Raspberry Pi OS(旧称Raspbian)というLinuxが走っている「コンピュータ」であるRaspberry Piでも交流モータを制御できるのかどうか*1,試してみたいじゃありませんか?

インターネット上にはRaspberry PiでBLDCモータを廻している記事も散見されますが,ESC (electronic speed controller)を途中に挿入している場合が多いようです。モータドライブインバータへのゲートパルスをRaspberry Piで直接生成している例は見つけられませんでしたので,ひょっとすると新しい試みなのかもしれません*2。図1にRaspberry Piを接続したBLDCモータ実験システムを示します。

f:id:s-inoue2010:20210321031911j:plain:w400
図1: Raspberry Piを接続したBLDCモータ実験システム

結論として,C言語でpigpioライブラリ(pigpiod_if2.hではなくpigpio.h)を使い,かつ,マルチコアのRaspberry Piでは,Nucleoに肉薄する制御を(120°通電制御という範囲内で)実現できるらしいことが判りました。

当初はPythonで交流モータを廻すという異端を試してみたかったのですが,今のRaspberry Piではまだ難しいようです*3。 以下では,Raspberry Piでモータを廻すに至る経緯や,プログラム実装への試み,実装したC言語プログラム,シングルコアと4コアの比較について述べます。

*1:Raspberry PiリアルタイムOSを載せたり,ベアメタルで使うという記事もありますね。いろんな技術を試してみたいものです。

*2:まぁ,Nucleoみたいな普通のマイコンボードでやろうよという制御ではあるのですが…。

*3:Raspberry Pi PicoのMicroPythonだったらできるかも──などと変なことを考えています。

続きを読む

LTspice用制御ライブラリContraille ~概要編~

はじめに

随分と間が開いてしまいましたが,如何お過ごしでしょうか? さて,今年(2021年)の元日,ぱわみ社さんより「パワーエレクトロニクス」第2号が発行されましたが,大変光栄なことに,本ブログの内容を基にして私もそこに寄稿させて頂きました。まさか自分がいわゆる〝同人誌〟に参加するなどとは思っていませんでしたが,Twitterでのご縁からこのような機会を頂戴することとなった次第です。

booth.pm rr-inyo.booth.pm

私の記事「LTspiceで三相PWM整流器を作る」の中で,掲題の自作制御ライブラリContrailleを紹介しておりますが,この度,Contrailleを下記に置きましたので,拙い完成度ではありますが,ご興味のある方は試してみて下さると幸いです。

github.com

続きを読む

ブラシレスDCモータのホールセンサ付き120°通電制御

はじめに

モータ制御への思い

交流電動機の可変速制御──。私のごく個人的な思いに過ぎませんが,そう,それこそがパワエレの本家本元ではないでしょうか。 パワーエレクトロニクスを学び,(ある程度)実践してきた私ですが,モータ制御を理解していないことに後ろめたさを感じております。交流電動機の可変速制御を勉強したいとの思いはあったのですが,ついぞ,今年に入るまで,自堕落な数年間を過ごしてしまっていました。 とは言いながら,机上で教科書を勉強するのみで,モータを実際に触らないとなると,深い理解は得られないだろうとも思っていました。

機は熟す

一方,ARMマイコンC++言語で便利にプログラミングできる「Mbed」というクラウド開発環境が2009年にARMよりリリースされ*1,それに対応する各種マイコンボードがNXPやSTMicroelectronicsより売り出されるようになりました。国内でも秋月電子通商をはじめとして,各種の店舗や通販から容易に入手できるようになっています。

os.mbed.com

また,CQ出版社より,NXPのマイコンLPC1114/301を搭載した超小型のマイコンボード「MARY基板」を付録とする書籍[1]が2011に出版されました。私も2014年にMARY基板を使った温度・湿度・気圧ロガー,通称「MARY気象台」を作り,プログラムをMbedで作って遊んでいました*2

f:id:s-inoue2010:20201109033442j:plain:w480
図1: 通称MARY気象台

そんな中,STMicroelectronicsより,Mbedに対応した「Nucleo」と呼ばれるマイコンボードに,モータドライバ(三相インバータ)基板と小形のブラシレスDCモータをセットにしたモータ制御開発キットP-NUCLEO-IHM001がリリースされました。

www.st.com

Nucleoは秋月電子通商等でも千数百円で簡単に入手できるマイコン基板ですが,それにインバータとモータが付いても,5,000円前後で買えてしまいます。 さらにこの2020年,このP-NUCLEO-IHM001を用いたモータ制御の解説書として,CQ出版社より書籍[2]が発売されました。 これは勉強する好機かもしれない。また,今の私にはLTspice XVIIという強力な味方も付いています。 同じくCQ出版社よりホールIC等やワイヤハーネスを追加したキットが発売されており,私はそれを購入しました。

f:id:s-inoue2010:20201109035217j:plain:w480
図2: 購入したP-NUCLEO-IHM001

センサレスベクトル制御の理解と実装を目指しますが,本記事ではまず,いわゆるホールセンサ付き120°通電制御を実装して試してみます。 制御プログラムはSTMicroelectronicsの統合開発環境STM32CubeIDEを用いて自分で書くことにしました*3。 しかし…最初に立ちはだかる壁は,制御というよりはモータそのものの原理でした…💦

*1:今はさらにMbed OSと呼ばれるRTOSがあって,初期のMbedライブラリ(Mbed OS 2.0)とは区別されているようです。私の知識もアップデートが必要です。

*2:本来はmbedに対応する基板ではありませんが,MARY基板にはNXPのLPC1114/301と接続するUSB-シリアル変換ICが搭載されており,Mbedで作成したプログラムを,別途用意したツールからUSBケーブル経由で書き込むと,プログラムがきちんと動作します。

*3:Mbedに移行するかもしれません。

続きを読む

LTspiceで三相PWM整流器を作る ~直流電圧制御編~

はじめに

三相PWM整流器および単相を含む一般の系統連系変換器においては,交流電流制御系の上位(外側)に直流電圧制御系を設けます。 直流電圧を制御するためには交流電流を制御する必要があるとも言えます。

マイナーループである電流制御系に対して,直流電圧制御系のゲインが高過ぎると,系全体として不安定になることは容易に想像できます。 例えてみれば,部下が仕事を終えないうちに,上司がまた新しい仕事を積み上げる…そんな感じになるからです。 したがって,直流電圧制御系の制御応答を電流制御系のそれより遅くしなければならない,とよく言われています。 私もこれを口伝のように教わってきましたが,しかし,具体的にどのような状況で,また,どのようなメカニズムで不安定になるのか,噛み砕いて理解・消化できておりませんでした。

そこで本記事では,本ブログで扱ってきたLTspiceによる三相PWM整流器を例に,直流電圧制御系の小信号モデルを立てます。 安定性や外乱応答についてナイキスト線図やボード線図を描き,LTspiceによる過渡解析(.TRAN解析)の結果と比較してみます。

ナイーブな考え方

どのような考え方か

図1に本ブログで扱っている三相PWM整流器の概略図を示します。

f:id:s-inoue2010:20200929174821p:plain:w400
図1: 三相PWM整流器とフェーザ図

LTspiceによるモデル構築,シミュレーションの様子やd-q座標系での等価回路の導出については,本ブログの過去の記事をご参照下さい*1*2。 なお,図1では電流の方向として変換器から系統に流出する方向を正にとっていますが,以下の議論では,流入する方向を正にとっています…💦 分かり難くて大変申し訳ありません…。

直流電圧vdcを制御するためには,直流電圧指令値vdc*と実際の値vdcとの誤差に基づいたPI(比例積分)制御にて,有効電力に相当するd軸電流の指令値id*を生成する,というのが基本的な考え方かと存じます。 もう少し具体的に描くと,図2,3のように表現できそうです。 d軸電流idと系統電圧のd軸成分vsd*3によって電力pが形成され,それと同じ電力pを生み出す直流電流idcコンデンサCと抵抗器RLに流れ込む…。ごく自然な考え方ですね。 なお,コンデンサではエネルギーが電圧の2乗に比例するため,本来は非線形なシステムになります*4。 したがって,図3は動作点の近傍での小信号モデルとして描いており,各物理量には動作点からの摂動を表す「Δ」を付しています。 直流電流ΔIdcは,電力ΔPを動作点での直流電圧Vdcで除したものとして書けます*5

f:id:s-inoue2010:20201009023122p:plain:w350
図2: 直流電圧制御系のモデル(ナイーブなもの)

f:id:s-inoue2010:20201009023207p:plain:w700
図3: 直流電圧制御系の小信号ブロック線図(ナイーブなもの)

図3中のGc(s)は電流制御系の伝達関数(後述の図4中のGc(s)に相当)です。 直流電圧制御系の応答速度が電流制御系のそれよりも十分遅ければ,Gc(s) ≈ 1と近似しても良いでしょう。 しかし,本記事ではそれができない場合の挙動を明らかにしたいと思います。

ここでは両図に「ナイーブなもの」と注記を付けました。naïveとは,Weblio辞書によれば,

(特に若いために)世間知らずの; 単純[素朴]な; 純真[うぶ]な; だまされやすい.

との意です*6。 そう,結論から言うと,この考え方では三相PWM整流器の挙動をうまく表現できておりませんでした…💦 何がダメだったのでしょうか?

*1:https://negligible.hatenablog.com/entry/2020/09/07/043141

*2:https://negligible.hatenablog.com/entry/2020/09/30/023013

*3:PLLが正常に働いていれば,系統電圧のq軸成分vsq = 0になります。

*4:直流電圧制御系は,直流電圧そのものではなく,その2乗を制御したほうが何かと都合が良いのではないかと昔から考えています。

*5:vac × idc = pとし,同じpがある決まった直流電圧vdcを有する系に流入したとすれば,直流電流idcはpをvdcで割ったものとして書けますね。

*6:https://ejje.weblio.jp/content/na%C3%AFve

続きを読む

LTspiceで三相PWM整流器を作る ~d-q座標系編~

はじめに

秋分を過ぎ,本格的に季節が巡って参りましたね🍂 前記事よりまた間が空いてしまいましたが,三相PWM整流器の直流電圧制御について,私の理解が非常に浅かったことが分かり,改めて考え直していたところです。 本記事では,まず,前記事で宿題となっていたd-q座標系での等価回路を導出します。 本題である直流電圧制御系とその安定性については,長くなりそうなので次記事に譲ることとします。

何を導出したいか

ここでは,系統と変換器が抵抗とインダクタンスを介して向き合っている三相回路をd-q座標系で表現した等価回路を導出します。 図1に三相PWM整流器(単線図)とフェーザ図を示します。

f:id:s-inoue2010:20200929174821p:plain:w420
図1: 三相PWM整流器とフェーザ図

スイッチング周波数成分を無視し,電圧形インバータ部分も正弦波と見なして3線図とすれば,図2(a)の等価回路を得ます。 図2(b), (c)はd-q座標系での等価回路(d軸・q軸等価回路)です。これはどのように導出するのでしょうか? d軸とq軸の干渉項である−ωLiqやωLidは一体どこから出てくるのか…?

f:id:s-inoue2010:20200929175041p:plain:w600
図2: 三相等価回路とd-q座標系での等価回路

なお,本記事では三相等価回路である図2(a)から出発し,座標変換にて図2(b), (c)が得られることを示しますが, α-β変換(Clarke変換)やd-q変換(Park変換)そのものの概念や効用については記載していません…💦 アニメーションを使った説明が秀逸なMathWorksさんの記事へのリンクを貼っておきます。

jp.mathworks.com

続きを読む

LTspiceで三相PWM整流器を作る ~モデル作成編~

はじめに

前記事から間が開いてしまいました。もう秋に入りつつありますが,まだまだ暑い日が続いていますね。 本記事では,LTspiceで三相PWM整流器(回生もできるので,一般の三相系統連系変換器*1として考えてください)を作った過程を書いてみました。

自作制御ライブラリの活用例として

さて,前記事を書き終えた後,LTspice向けに開発中の自作制御ライブラリContrailleの活用例の1つとして,三相PWM整流器を作ることにしました。 LTspiceというと,「オペアンプ等のアナログ回路やスイッチング電源のシミュレーションに使うもの」というイメージがありますが,系統連系変換器のシミュレーションにも使えるのではないか,ひいては小規模であれば,電力系統解析にも応用できるのでは…? そのような思いから,(不十分とは思いますが)デモンストレーションとして,解析モデルを作ってみることにしました。

なお,本記事では公知の回路方式,公知の制御方法をLTspiceのモデルとして実装しただけですので,学術的な新規性は一切ありません💦

三相PWM整流器のモデルの作り方のまとめとして

インターネットを眺めていると,完成したモデルの動作を説明している記事は見掛けるのですが,モデルを組み立てていく過程を紹介しているものは少ないのかと思われます。 三相PWM整流器では,直流電圧制御の内側にマイナーループとして交流電流制御があり,さらに電圧形インバータとしてのPWMがあります。 これらをいっぺんに組み上げてから全体をシミュレーションするというのは,動作確認やデバッグの難易度を考えると,現実的ではないと考えます。 本記事では,下位制御であるPWMからボトムアップでモデルを構築していく過程を記載してみようと思います。

なお,本記事では三相PWM整流器の作り方を記述するのみに留め,PWM整流器の制御上のキモとなる直流電圧制御の詳細については次記事に譲りたいと思います(1つの記事にしてしまうと分量が膨大になりそうなため💦)。

完成したモデルと波形

いきなりですが,どんなモデルと波形が出来上がるのか,イメージを示します。 図1は直流電圧制御,d-q軸上での交流電流制御,PWM,三相PLLを実装したシミュレーションモデル(schematic)です。 また,図2は図1のシミュレーションを実行した波形です。 直流側に電流源負荷を接続し,200 kWの電力を消費しています。 直流電圧を720 V一定に保つため,交流系統から力率1の正弦波電流を取り込むように電流制御しています。 詳細は後述しますが,PLLのおかげで系統電圧の位相,周波数,振幅が急変しても,直流電圧を概ね一定に制御できていることが判りますね。

f:id:s-inoue2010:20200904010922p:plain
図1: LTspiceによるPWM整流器のschematic

f:id:s-inoue2010:20200904011122p:plain
図2: LTspiceによる三相PWM整流器のシミュレーション波形

なお,制御系はアナログ制御(連続時間制御)です。 離散時間制御におけるサンプル & ホールドの周波数特性を模擬するため,電圧や電流をセンシングした直後に,移動平均フィルタを置いています。 また,演算によるむだ時間(いわゆる1サンプル遅延)を模擬するため,むだ時間要素を置いています。 これらの考え方は,本ブログの過去の記事にも記載していますので,ご興味のある方はご覧ください*2

それでは,早速モデル(schematic)を作って行きましょう📝

*1:「系統連系はパワエレじゃない」とのご意見もTwitterで見掛けたことがあります…ちょっと悲しい…です…😥

*2:https://negligible.hatenablog.com/entry/2020/07/15/011258

続きを読む