STM32マイコンインバータSTEVAL-SPIN3201でモータのベクトル制御を実装する

# 概要紹介
・STMマイコンの入門キット P-NUCLEO-IHM002では低電力/電圧のモータしか使えかった。今後、より出力が大きい100Wくらいのモータでベクトル制御をしたかったので、そのぐらいの出力のモータを制御できるSTEVAL-SPIN3201のINVを使ってSTM入門キットと同じモータを動かしたものになります。

![IMG_0926.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/29b409f8-8809-138a-1733-b9b49b766207.jpeg)


https://www.digikey.jp/product-detail/ja/stmicroelectronics/STEVAL-SPIN3201/497-16988-ND/6555317?utm_adgroup=IoT&utm_source=google&utm_medium=cpc&utm_campaign=Smart%20Shopping_Product_IoT&utm_term=&productid=6555317&gclid=Cj0KCQjw8p2MBhCiARIsADDUFVFlhj0iEb7W5zUsOJmVSBy54dD8EDRwdYLJk6MjXFVszEw-TGfCAUYaAl6QEALw_wcB

https://www.digikey.jp/product-detail/ja/stmicroelectronics/P-NUCLEO-IHM002/497-16526-ND/6004741

# github
25MB以上だったので、後日またアップロードする予定

# 環境
・INV/Controller : STEVL-SPIN3201
・Motor :  Bull-Running BR2804-1700kV motor
・安定化電源
・Windows10 PC
　- ( ST Motor Profiler ) → SPIN3201は対象のINVではないので使用不可
　- ST MotorControl Workbench
　- (  STM32CubeMX )  → 自動コード生成により、マイコンのピン機能設定は使用しない
　- ST STM32CubeIDE
 

# 参考
STEVAL-SPIN3201 参考先URL & マニュアル

http://www.emcu.eu/how-to-use-the-steval-spin3201-based-on-stspin32f0/

https://usermanual.wiki/m/40a5950cdbe3a494d7fa8249c03d6895fec76bd47cd2f08b9df71fe596d844c5.pdf

STMマイコン使用環境準備

https://qiita.com/usashirou/items/9aa311654e2aa859a9a2

# はじめに
今回使用するINVは、STEVL-SPIN3201
 - Input voltage from 8 V to 45 V, Output current up to 15 Arms
こちら電圧は8~45V,電流は15Armsまで使用できるので最大675Wほどまで使用できる代物のよう。おそらくそこまでは使わないが、24V,36Vのモータを250Wくらいまで使えればいいなと思っている。STM入門キットを使って動作させた環境をそのままこちらのINVでも再現してみる。微妙に書いていないこともちらほら見つかっているので、その備忘録も兼ねて残しておきたいと思います。

# 内容
　今回、参照元にあるSTM32入門キットで使用したソフト：ST Motor Profiler は、使用しているSPIN3201は対象のINVではないので使用不可です。ただ、こちらは元々モータのスペックをINVで計測してくれるものでしたので今回は必要なし。同じモーターなので、同じファイルを参照すればよい。後は、STMCubeMXも自動コードを生成した後に設定することはないのでこちらも使用しません。

① ST MotorControl Workbench (パラメータ設定とコード自動生成)
 ・MotorContorol Workbench を起動
 ・New Project
 ・Select Boards : Inverter を選択
 ・Inverter : STEVAL-SPIN3201 を選択
 ・Motor : motor1
   *事前にSTM入門キットを使用してST Motor Profilerで取得したプロファイルを使用

![stm01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/bd0219ae-faa3-8d50-7fdd-a24a613d0022.jpeg)

OKを押すとINVのパラメータのセッティングとなる。変更点は一点
 ・Dirive Management
   → PWM generation and current reading
     → PWM frequency 15000Hzに設定する
＊Maximum resulting modulation index clamped to minimum allowed(81%)
初期設定の30000Hzだとこちらのエラーに引っかかりコード自動生成ができない。また後ほどだが手順の中でモニターでモータ制御を行う際に20000Hz以上だと何故か"Software error"が発生して動かせない状態となるので15000Hzに設定している。
・通信設定の確認：初期設定のままで問題なければ変更必要なし
 Control Stage- Digital I/O  : Serial communication 9600bps  

![stm02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/9a84ccfd-7436-86f8-1b84-256f3b923697.jpeg)

・マイコンマークの隣の青矢印ファイルアイコンをクリック
・STMCubeMX : 6.3.0
・Target Toolchain : ST STM32CubeIDE
・Firmware Package Version : STM32 FW V1.11.3
・Genarateでコード自動生成開始、終わったらCLOSE
![stm32.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/4ab2e1d1-b852-eebf-fbad-32268a5b66fe.jpeg)

② ST STM32CubeIDE (ビルド/デバッグダウンロード)
・ST STM32CubeIDEを起動
・File : importを選択
・import ac6 System Workbench for STM32 Project を選択してNextを選択

![stm04.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/268e81f3-d8b1-d91c-b9cb-163a722b6cbb.jpeg)

・Directoryで自動生成したコードが入っているファイルを選択（DriversやInc,Srcなどが諸々入っているファイル自体）
・Folderに二つ選択欄があり、チェックが既に両方入っているのでspin3201のみの方を外す。
・Finishを選択

![stm05.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/b24f3207-eba9-1fb5-809c-cb51d905d62e.jpeg)

・自動生成したコードを取り込めるので、トンカチアイコンでBuildでエラーないことを確認
・虫アイコンでデバッグ/ダウンロードを行う。
＊SPIN3201はDC12Vを先にかけてからusb接続によりエラーがなく接続できて、デバッグ/ダウンロードができるようになった。STM32入門開発キットの場合はboot0と3.3Vのショートが必要だったがこちらの場合は違った。

② MotorControl Workbench (モニター/モータコントロール)
・ソフトダウンロード完了：Sucessfulとなったら、再度 MotorControl Workbenchを開く
・メータアイコンを選択
・DC12V,USBが接続された状態で、Portの番号とbpsの設定（ソフトは9600bpsが初期設定）
・コネクタアイコンを選択して接続する。
・Firmware:ST MC SDK Ver.5.4.7 となり、StatusがIdleになれば接続OK
![stm07.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/d628c79c-4815-f1f6-4b72-4baa44a46b4c.jpeg)

・Start Motor でモータが回転,初期設定の2500rpmまで回り始める。
・ツマミを回すことでモータ回転数制御が行える。
・Stop Motorで停止。

![stm06.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820416/2c719f87-9007-6f0e-a93b-b01fdfe5968c.jpeg)

すんなり回ればOKだが、何故か回し始めた直後に一回通信が切れる。その時、モータ停止せずにずっと回り続けていれば、もう一回コネクタアイコンを選択して接続が上手くいって回転数制御ができるようになる。モータが停止してしまう場合は、再起動/接続する。

他エラーの備忘録
・モニタ画面：Start Motor後にFaults:Over current 
 知らないうちに解消していたので、結果よくわからないエラーだったのだが、ネットで検索した際にOver currentの設定がコード生成時に低い係数が勝手に選択されるバグがあるとのことでした。とはいえ、今は一番下の係数選択だから低くしようにも一番低いのだが、何故かOver currentが発生していた時があり、色々いじっているうちに無くなりました。(ソフトは同じ)

```php:main.c
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(OCTH_STBY2_GPIO_Port, OCTH_STBY2_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(OCTH_STBY1_GPIO_Port, OCTH_STBY1_Pin, GPIO_PIN_SET);
```

・モニタ画面：Start Motor後にFaults:Software error
 ここも理由はあまりよくわからないがPWM周期が20kHz以上だと発生していたので、15kHzに選択した場合には解消された。イマイチ謎なところが多いが、とりあえず動かすことだけできたのでコードはこれからちゃんと見ていきます。