~適当な工作情報を投げるブログ

ゲーム、音楽なども作ってるよ~



【STMマイコンでモータを制御しよう】No.1 まえがき

 こんにちは。そして、ブログに顔を出すのはいつぶりでしょう。

ここ最近いろいろなことがありまして…ということを紹介するのはまた別の機会に。

 

 今回は、手ごろに手に入るマイコンを使用して、みんなでブラシレスモータを制御できるようになってみませんか?というお話です。

ブラシレスモータを回すことだけを趣旨にしている為、なかなかオタッキーな目的ではありますが、パワーエレクトロニクスが発展してきた今、モータ制御エンジニアの需要は高まりつつあると思うのです。

 

f:id:Kamomesan:20200904233442j:plain

自作のモータ制御実験装置です

 

 少し昔の話、電気自動車の制御部品やモータの開発を行う某P社にてお手伝いをさせて頂いた時に耳に挟んだ話でありますが、モータ制御というものは目標を成すまでの必要な勉強量が膨大で、なかなか安易に手出ししづらい分野と認識されているようです。(というか実際そうです)

たしかに、基本的な制御工学の知識だけでなく、デジタル情報処理の知識や電気回路の知識まで要求されます。

そのため、今日では自社でモータ制御装置を製造するのではなく、既製品の制御IC等を使用して、やむなく「とりあえず回ればいい」妥協が生まれているのだとか。

これは、少し残念ですね…。

モータがいかにうまく制御できるか、というのは、損失に直結しますから、例えば電気自動車でいえば燃費がここで大きく決まってしまうわけです。

 

 とりあえずモータを制御してみたい、という方はぜひ、この【STMマイコンでモータを制御しよう】シリーズを参考に、ゆるーく挑戦してみてはいかがでしょうか?

 

STMマイコンとは

 まずSTMマイコンとは何かについて軽く触れます。

STMマイコンは、STMicroelectronics社が製造しているマイコンで、用途に応じて様々なファミリーが展開されています。

簡単な「コントローラ」として使用するようなローコスト・ファミリーから、映像やOSを動かすなどの用途に使えるハイスペック・ファミリーまで幅広い製品があります。

 その中にはモータ制御に特化したファミリーも含まれていて、比較低簡単にモータ制御デバイスの開発を行うことができます。

STMマイコンはその導入コストの低さと開発環境の簡易・自由さから、近年製品レベルでもスタンダートなマイコンになりつつあるようです。

 

8bitデバイスの「STM8」, 32bitデバイスの「STM32」などがあり、今回は性能からSTM32マイコンを使用してお話を進めることにします。

 

f:id:Kamomesan:20200904233556j:plain

これはNucleo F767ZI というSTMマイコンの評価ボード

 

モータ制御とは

 そもそも、モータを「回す」事と、「制御する」事の違いはなんでしょうか。

モータというものはトルクを発生するためのアクチュエータであると同時に、電気エネルギーを運動エネルギーに変換するエネルギー変換器でもあります。

この問いに対する回答は賛否両論, 多種多様となるでしょうが、私の個人的な意見としては、「回す」というのは単純にモータを回転させること、

「制御する」というのは、モータを回転させることは大前提で、要求されるトルクや回転速度、効率や力率を達成すること、だと考えています。

この表現が最もシンプルかつ的確かなと思いますが、もっといいのあるのかな…?

 

 前述したとおり、モータをただ回すだけでなく、必要とされているトルク等の出力状態を満たしてやる、というのが「モータ制御」になります。

このモータ制御というものは、モータが導入される製品だったり、環境だったり、その場その時その状況によって最適解が変わってきますから、モータ制御エンジニアとしてそのニーズを正確に判断する能力も求められるでしょう。

制御したいのはトルクか?回転速度か?インバータ効率か?これを間違えるとシステム全体が破綻しかねません。

 

f:id:Kamomesan:20200904233654j:plain

ドローン用ブラシレスモータのセンサレスベクトル制御


 

準備をしよう

 本記事は、とりあえずモータを制御してみたい!という方向けです。

難しい数学の話などはできる限り排除する方針です。

すでにプロの方は、新中先生の書籍などをより熟読することをオススメします ↓

モータ制御の可能性は無限大です。

 

・上

www.google.com

・下

www.google.com

・センサレス

www.google.com

 

f:id:Kamomesan:20200904235230p:plain

強くなれる本

(これらの書籍は制御工学とかカジりたての方はマジでキツいかも…)

 

 

STMマイコンの調達

 まず、マイコンを用意しなければ話が始まりませんので、買ってきましょう。

STMマイコンならなんでも良いというわけじゃありませんので、オススメの製品を並べておきます。

モータ制御においては、かな~りマイコンの性能が必要になります。

マイコンの性能が十分でないと、計算が追い付かずにきちんと制御できません…。

 

f:id:Kamomesan:20200904235342p:plain

こうゆう評価ボードを使うのが楽かな?

 

・STM32F302

秋月電子で買えるものだとこれくらいでしょうか…

他の物だと性能不足感がありますので、この製品が"最低ライン"でしょう。

Cortex-M4搭載の汎用STMマイコンです。

akizukidenshi.com

 

・STM32F446

↑のSTM32F302よりちょっと高性能になったもの。

akizukidenshi.com

 

・STM32F767

Cortex-M7を搭載した多機能アプリケーション向けSTMマイコンボード。

クロック周波数やARTアクセラレータなど、上記2製品よりも圧倒的に高性能なマイコンです。

私は色んな用途でよく使います。

https://www.st.com/ja/evaluation-tools/nucleo-f767zi.html

 

・STM32G474

Cortex-M4ではあるものの、モータ制御で多用するsinやcosなど三角関数の計算を高速に行うことができる「CORDICエンジン」が搭載されています。

本記事ではCORDICは使用せずに制御を行いますが、プログラムがわかる方ならば簡単にCORDICでの計算に書き換えることができるでしょう。

https://www.st.com/ja/evaluation-tools/nucleo-g474re.html

 

 

ちなみに、

・STM32モータ制御キット

f:id:Kamomesan:20200904235450j:plain

jp.rs-online.com

こんなキットもあります。

回路を作らなくて良い点は便利かもしれませんが、自由が利きませんし、これを使うなら当記事よりもこのキットの専用本を読んだ方が確実です。

 

開発環境の構築

 既に構築済みの方は必要ありませんが、STMマイコンを使って開発するためのソフトが必要なので、インストールします。

おおかた、必要なのは

・コードジェネレータ

IDE

でしょう。

コードジェネレータは、使用するSTMマイコンで使いたい機能があったとき、それを使用するためのコンフィグレーションコード、テンプレートコードを生成してくれます。

例えば、USB機能が使いたければUSB機能を有効にしてやって、コード生成をすればUSB機能を使うための各所設定がなされたソースコードが吐き出されます。

0からコードを書くのも良いですが、正直何も良いことはないのですなおにこの便利ツールを使うことをオススメします。

 

コードジェネレータは STM32CubeMX を使用します。

ダウンロードにはSTMicroelectronicsのアカウントが必要なので、適当に作ってインストールしましょう。

インストール方法などはここに書かないので、調べるなどして導入をしましょう。

 

www.st.com

 

次に、IDE (統合開発環境) を準備します。

IDEは、簡単に言えば「ソースコードを編集する機能」と「書いたコードをコンパイル、ビルドする機能」と「ビルドしたバイナリをマイコンに書き込む機能」が集まったソフトになります。

先ほど紹介したコードジェネレータ CubeMX で生成したコードをベースに、このIDEでコーディング(プログラムの記述)し、STMマイコンにプログラミングするという手順になります。

今回使用するIDEは、SystemWorkbench for STM32 (SW4STM32) です。

こちらも CubeMX 同様インストール方法など書きません。

 

www.st.com

 

 

準備はいかが?

 いま、手元に STMマイコン と CubeMX、SW4STM32 がインストールされたPCがある状態だと思います。

 

f:id:Kamomesan:20200904233845p:plain

とりあえず使うソフト

 

が、これだけではモータを回すことはできませんね。

モータを回すための回路が必要です。

 

 

次回はこれを準備しましょう。それでは!!