今回の記事は本当に日記ですね。自己満足記事です。
やっとBLDCモータが回った・・・
私は制御ツールベンダ社員かつパワエレネタで記事を書いておきながら
いままで自力でモータを回したことがないことに負い目を感じておりました。(個人の感想です)
ですがその負い目を感じる日々も終わりです。
ついにモータを回せたのでその時やったことを書こうと思います!
まずは回ったときの動画をどうぞ。
おおおおお!回った! pic.twitter.com/WCXFIyEG8B
— griffin921 (@griffin921) February 10, 2021
では回すために何をやったかを紹介します。
ツイートする
オシロスコープとSTのモータ駆動評価ボードを買ったことをツイートしました。
思えばここら辺から始まったのだと思います。
https://www.st.com/ja/evaluation-tools/p-nucleo-ihm001.html
絶望する
買ってみたはいいんですが、どうやって回せばいいかわかりません。
「系統連系とモータ制御ってだいたい同じだろ」などと舐めていた私は速攻撃沈しました。
じたばたしてみる
サンプルプログラムは書き込まれてるので
とりあえず回るのは回るんですがどういう理屈で回ってるのかよくわかりません。
そこで、色々とっかかりを得るためにオシロスコープでいろんなとこの波形をみてみました。
STのインプリコードなんですがちゃんと120degズレて電圧出てます。
— griffin921 (@griffin921) November 27, 2020
ハーフブリッジの中間電圧を見ていると思います。 pic.twitter.com/E9HPrrbbFW
マイコン購入時ビルドインされてるサンプルを見ながら120°通電の動かし方を理解してsimulinkに落とし込んでECでコード生成してみたいが、サンプルコードはどこで見れるかわからん。
— griffin921 (@griffin921) December 28, 2020
ので実際の波形みながらどういう実装か予想する。
そんなツイートをしているとですね・・・
なぜかアドバイスをくださるモータ制御大好きエンジニアの皆さんがよってきてくださります。なぜか。
だんだんわかってくる
アドバイスいただいた中からなんとなく私がモータの特性というものを理解していないから、どういうインバータ波形をだせば回るのかがわかっていないのだということがわかってきました。分からないところがどこかがわかるとしめたものです。
それに関連する資料をネットで漁ってみました、するとこういう記事にたどりつきました。
STのモータ制御開発キットで『自力で』モータを回す Vol.1 強制転流
https://qiita.com/motorcontrolman/items/5a9c17008314f0224ef9
これはまさにアドバイスいただいたモータ制御マンさんの記事です。
ここでSTMのペリフェラル部分のコード実装についてだいぶ勉強になりました。
BLモータのベクトル制御を実装する手順
https://qiita.com/fumiya_sato/items/ecc9f22c6f137f9dc0ac
この記事は私に足りてなかったモータが回る原理についてだいぶヒントを与えてくれました。これでモータ制御の本の内容がちょっとだけわかるようになってきました!
MATLAB Youtubeチャンネル:モーター制御 Part1 ブラシレスDCモーター入門
手前味噌になっちゃいますが。。。
これも勉強になりました。
https://www.youtube.com/watch?v=gNpoTPzEkco&list=PLn8PRpmsu08qL-EG3DRMtRyokpXQJyhp7
#モデリングができそうになってくる
せっかくモータのことも理解でき始めたし、MBDを推進している会社で働いてるのでSimulinkでソフトウェアの挙動をモデリングしてそれをコード生成してみることをやってみました。
モータのモデリング
Simulinkには別途Simscapeという物理モデリングがされたブロックが存在します。ここにBLDCのブロックがありますので、パラメータを入力してバーチャル上に今手元にあるモータに近しいモデルをつくりました。
パラメータについてはRRいにょさん
のこちらの記事を参考にさせて頂きました。ありがとうございます。
https://negligible.hatenablog.com/entry/2020/11/11/195751
## モータドライバのモデリング
購入したサンプルボートにはL6230というモータドライバが載っています。
これも特徴としてはPWMの入力と各ハーフブリッジをEnable/Disableにする信号をうまく組み合わせることがモータを回すのに重要なポイントであることが理解でき始めていたので、データシートを参考にしながらしっかりモデリングしました。
コントローラのモデリング
ここまでくれば回転するために必要な計算をモデリングしていきます。
ここではrpmを指定すれば3相のPWM波形を生成してくれる変調部分をモデリングしました。
そうやって作られたモデルの全体図がこちらです。
左下のバーはコントローラに入力するrpm値を操作するものです。
グラフの一番下がモータの機械角です。しっかり回ってることが確認できますし、
RPMの値を急激に変えすぎるとモータが脱調してしまうところも確認できました。
動画でみるとこんな感じです
Simulink上ではこんな感じになってて、左の緑色の箱のとこだけコード生成してます。 pic.twitter.com/PapAJCstAU
— griffin921 (@griffin921) February 10, 2021
ここまで理解がすすむと回る
ここまできたらしめたもの。
EmbeddedCoderのパワーをフルに使いコントローラ部をコード生成、
予めペリフェラル部だけ作っておいたハンドコードコードといっしょにビルドしました。
その結果まさかの一発動作。
モデルベース開発の神髄をいまさらながら確認することができました。
おおおおお!回った! pic.twitter.com/WCXFIyEG8B
— griffin921 (@griffin921) February 10, 2021
#まとめ
- twitterでモータについてつぶやくと色々教えてくれる
- 情報が断片的でもそれをまとめると自分が知りたかったところに導いてくれる
- モデルにして検討することで より早く現象を理解することができる
- モータ回るのはとても楽しい
以上です。
ここにくるまでに助けてくださった皆さん!本当にありがとうございます!
皆さんの助けやツールによる助けによってできてしまった気もしますが、
これからも自分のペースで勉強していきたいなと思っています!