前回のパルスモードの記事の続きです。
BLDCに流す波形が決まったので次は実際にモノを作っていきます。
基板1枚でBLDC2台を駆動しこれを3枚使用して6台のBLDCを駆動する構成にしました。今回は基板1枚にATmega328Pを1つ載せマイコン1台で2つのモータを制御する構成にしましたが、パルスモードの検討の結果これがかなりの痛手になってしまいました。(詳細は最後に書きます)
回路の信号の流れとしてはマイコンの出力→絶縁用の信号用フォトカプラ(TLP2361)→ゲートドライバ(NCP5104)→MOSFET(TPCA8024)となっています。似た構造のモータドライバでは絶縁用にもゲート駆動用フォトカプラを使う例も見られますが、信号用フォトカプラはこれらより安価で周波数帯域が広いのが特徴です。
ゲートドライバに関してはRSで安さと性能を比較検討してNCP5104にしました。50個購入で1つあたり50円、出力電流Out250mA Sink500mA動作電圧範囲9~20Vと個人レベルではコスパがいいほうだと思います。なお、MOSFETはヤフオクの安いやつです。
KiCadなので3DViwerで確認をしてからFusionPCBに発注して基板を組み立てます。
これを3枚作ればBLDCの基板は完成です。
STM32マイコンのDMA機能を使って確実に制御信号を受け取れるようにしました。
MIDIの受信のプログラムに関しては過去の記事に書いています。
基板が完成したので次は本体を作っていきます。
続いてソフトウェアを作っていきます。
シリアルでの受信と回転速度の設定部以外は基本的にコンペアマッチ割り込みで処理を行っています。タイマー0,2の8bitタイマーを回転界磁生成用,
タイマー1の16bitタイマーをPWM生成用に使ってます。
PWMを高周波にしたことでこのPWM生成の割り込み(コンペアA,B割り込みとオーバーフロー割り込みでPWMを生成)の回数が非常に多くなり処理性能の限界が結構来ました。実験的にはPWM周波数はマイコンクロックの1/1024が限度でした。そのため、実際にBLDCを回したい場合はPWMをハードウェアで生成できるようにモータ1台につき1つのマイコンを使うことを強く勧めます。
余計なコードも混じってますが、実際に使用したコードを公開します。
https://github.com/HanDenMotor/BLDCMusic-ATmega328P
(PWM周波数の確保を目的にATmega328Pを24MHzでオーバークロックしてるので注意)
そして完成。
動画がこちら
https://www.nicovideo.jp/watch/sm34805846
以上簡単ですが、作品の製作日記でした。