プリント基板コイル(PCBステータ)を使ってモーターを作る会 その2 制御編

どうもこんにちは。さばねっこです。

今回は製作した自作モーターをいい感じに制御する記事(tekitou)です。

前回はこちら

sabanekko2.hatenablog.com

まあとはいってもやることは一般的な同期モーターのベクトル制御の実装なのでさほど目新しい内容はないよう(激ウマギャグ)。

ドライバ基板

とりあえず、ベクトル制御しようにも回路が無いとどうにもならないので適当に基板を設計します。

pcb設計

マイコンはSTM32F303を採用。デバッグ用にUSB type-Cも載せておきました。

今見るとパワー部分のGNDがちょっとキモいかも。まあ問題なく動いてたのでヨシ!

ちなみに、この時はじめてkicad7使いましたが結構いいですね。まあ自動配線機能とか使ってないのでほとんどkicad6として動かしてるわけですが…。

基板のデータはこちらにアップロードしてあります。参考になるかは知りませんがしてください。

github.com

そして基板をJLCPCBに発注して着弾

 

基板とおしゃべりかわいいね

特に目新しいことはやってないので問題なく動いてくれました。

制御実装

ここからベクトル制御を実装していくわけですが、現在のローター角度を取得する必要があるので適当な磁気エンコーダーを使います。センサレスなんもわからん

一応基板の裏にAS5048を乗せられるようにしているのですが、高いので取り合えずアマゾンで売ってた安い奴(AS5600)を使ってみます。

https://www.amazon.co.jp/dp/B0BLSHGNNL/

これで無事に角度を取得してベクトル制御できましたバンザイ!!、とはなりませんでしたありがとうございます。

そもそもAS5048はSPI通信なのに対してこいつはI2C通信なんですよね。なのでこんな感じのカス違法建築で無理矢理接続してます。

卍違法建築卍

そして無事接続できたはいいもののどうにも安定しない。僕の送ってるコマンドが悪いのかもしれませんが、定期的に角度値が一定値にへばりついてしまい、まともに角度を取得できませんでした。

しょうがないのでクソ高いAS5048を購入。

ついでにドライバ基板とモーターを合体させます。

見た目は割と気に入ってる。

ドライバ基板の裏にこんな感じでAS5048を乗せています。わかりずらいけど。

エンコーダー(わかりづらい)



これでようやくベクトル制御~~と思ったらなぜかまたうまくいかない。現在の3相電流をdq電流に変換しようとしても、なぜかpark変換が思うようにできないんですよね。

原因が全く分からずに色々試行錯誤していたのですが、全然わかりませんでした。というわけでtwitterに投下

一瞬で解決してしまいました。つよい方々本当にありがとうございます!!!!!

原因としては3相交流を生成するところで位相を逆向きにずらしていたという話でした。要は符号ミスですゴミカスウンチ

何はともあれ無事にベクトル制御(dq軸電流制御)できました。よかったよかった。

ソフトは全てここに公開してあります。

github.com

まあ構造がキモくなってしまったのであんまり見るとこないです。コメントもほとんど書いてないのでやさしくない。あ、CMSIS-DSPライブラリを使っているので使う人がいたら注意(?)してください。
僕のコードを見たいもの好きはCore/driverフォルダ内とCore/Src/main.cppを見てください。他は自動生成なので。

 

いやーここまで長かった。基板が届いてから動かせるようになるまで1か月はかかり過ぎでは。まあほとんどエンコーダー周りなんですけどね。これもすべて学ロボが悪い。

 

次はモーター本体の構造に関する考察的な記事を書く(書くとは言っていない)ので需要があるか知らないけどお楽しみに。

 

参考にした記事

toshiba.semicon-storage.com

基礎的な内容がまとまっているので定期的に見てた

qiita.com

やっぱり実装例を見るとわかりやすい。

jp.mathworks.com

このGIFが無ければ理解まで5倍ぐらい時間かかったかも。ビジュアライズは正義

 

本買いたいけどお金あんまりないんだよなあ…