【活用事例】既存評価ボードからSTM32リーフへの移植
【活用事例】既存評価ボードからSTM32リーフへの移植
- このトピックには0件の返信、1人の参加者があり、最後にKeith Mineにより2021-02-24 11:11に更新されました。
- 投稿者投稿
- 2021-02-24 11:11 #12045Keith Mine参加者
こちらは、KDDI協賛 Leafony応用コンテストの参加作品です。
自己紹介
計画工学研究所の三根(みね)と申します。個人事業として組込みシステムの機能安全・サイバーセキュリティに興味をもっています。応用先としては「自律して移動するIoT-Edge端末」で、ラジコンカーとかドローンの産業展開が目標です。
目的
STマイクロエレクトロニクス社から豊富な評価ボード(NUCLEO)が提供されています。
それらの組み込み資産をLeafonyに移植する方法を検討しました。最終的な目標は小型ドローンの開発で、そのための準備作業の結果を報告いたします。目次
- NUCLEOをMCUリーフと見立ててリーフを使う
- STM32リーフからNUCLEOシールドを使う
- カスタムボード設定方法
- PWM制御方法の検討
- Quadcopter制御ソフト移植の準備
1. NUCLEOをMCUリーフと見立ててリーフを使う
Leafonyと同じMCUを搭載する「NUCLEO-64 STM32L452RE」をMCUリーフと見立てて既存のセンサーやI/Oリーフを利用できないかと考えました。
NUCLEO-64にはL452RE無印とL452RE-P の2種類存在します。
Arduino Uno 互換性 Leafony端子との相性 シールド (AX01) L452RE無印 ピンヘッダ無し 7ピン異なる ジャンパ線でつなぐ L452RE-P 裏面にピンヘッダ有り 相当異なる 裏面に装着、使いづらい 使い勝手が悪いとの結論です。
2. STM32リーフからNUCLEOシールドを使う
NUCLEOシールド: DCモーター制御 を使ってみました。
- 製品名: X-NUCLEO-IHM12A1
- 制御IC: STSPIN240
上記1.の結果からSTM32リーフとNUCLEO-64マイコンの信号割当に7本の差分があることが分かっています。本ボードのデモ・プロフラムとして提供されている「STSPin240」とモーターシールドの回路図を調べると、以下のピン番号の読替えで動作しました。
【元】 motor = new STSpin240_250 (D2, D9, D6, D7, D5, D4, A0);
【変更】motor = new STSpin240_250 (D9, D2, PA8, PB12, D5, D4, D8);
A0に割り当てられるPA4にはタイマー機能が無いので、その替りにD8を使い、ジャンパ線でD8からA0(設定しないと入力モードの筈)に接続しました。
NUCLEO-64はIOREFに3.3Vを供給するが、Leafony(AX01 + STM32リーフ)からは供給されないので、CN6 pin2 VDD端子と3.3V端子をジャンパー線で接続しました。
結論として、ピン番号の読替えとジャンパー線2つでデモプログラムが動作しました。
3. カスタムボード設定方法
ピン番号の読替えは結構煩雑なので、カスタムボード設定によりピン番号でなくArduino端子番号で利用できないか試行してみました。
Windows10に限定された対処方法です。Arduino IDEのインストールに際して「Portable」フォルダーの使用が推奨されていました。Windows10になって「ArduinoData」フォルダーが使用されており、スケッチを収める「Arduino」フォルダーの「hardware」サブフォルダーが未使用である事に気が付きました。ここにカスタムボード設定を置けば良さそうです。
手順としては、\ArduinoData\packages\STM32\hardware\stm32\1.9.0から
boards.txt とplatform.txt をコピーして、後者のタイトル行を修正。
上記の「variants」サブフォルダーにある NUCLEO_L452REサブフォルダーをコピー
して、その中にある variant.h variant.cpp のピン割当を編集する。
詳細については下記を参照して下さい。充分に検証できてなく、又、コンパイラの警告が出る課題があります。
gitlab.com/cubicrootk/leafony-stm32-mcu
AI03 MIC&VR&LEDリーフのLEDで動作検証をしてみました。
4. PWM制御方法の検討
4.1 モーター制御ICの制御ピンはGPIOで制御する
モーター制御ICの品種毎に、制御のピン、及び、論理が異なるだけなので制御は簡単そうです。
4.2 一方、PWMについてはマイコン毎に制御が異なります
Atmega328P
6つのPWMチャンネル (Timer3個にコンペア・レジスタが2つ)
analogWrite(pin, dutyCycle)
ESP32
16個のPWMチャンネルがあるが、名称が“LEDc”に注意
ledcWrite(ledChannel, dutyCycle)
STM32
Hardware Timerを使う
AVRと同様に analogWrite() も使える4.3 PWMを同時に幾つまで制御できるのでしょうか?
先程の\variants サブフォルダーにある PeripheralPin.c にそのヒントがあります
WEAK const PinMap PinMap_PWM[] = {
{PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1使える Timer と Channel の組み合わせに重複があるので、
TIM1: Ch1/ 2/ 3
TIM2: Ch1/ 2
TIM3: Ch1/ 2/ 3
TM16: Ch1n (nは極性反転の意味)
(尚、TIM6 は端子を使わないので、ブザーとかに使える)例えばPWMを 4チャンネル制御したい場合、その候補は限られてきます:
D3/ 5/ 6/ 10 = TIM2_ch2/ TIM3_ch1/ TIM1_ch1/ TIM16_ch1n (Arduino端子)
D6/ 9/ 10/ 11 = TIM1_ch1/ TIM1_ch3/ TIM16_ch1n/ TIM3_ch2 (LED leaf)
D3/ 5/ 4/ 10 = TIM2_ch2/ TIM3_ch1/ TIM3_ch2/ TIM16_ch1n
D13/12/11/6 = TIM3_ch2/ TIM2_ch1/ TIM3_ch1/ TIM1_ch1 (SPI 使用不可)
A1/ A2/ A3/ D2 = TIM2_ch1/ TIM2_ch2/ TIM3_ch3/ TIM3_ch2 (UART 使用不可)同じくAI03 MIC&VR&LEDリーフのLEDにて動作検証をしてみました。
5. Quadcopter制御ソフト移植の準備
ここまでの準備でQuadcopter(4枚プロペラのドローン)の飛行制御ソフトウェアを移植できそうな予感がしてきました。
ブレッドボードと29ピンリーフでモーター制御基盤を仮試作しました。
モーター制御ICとしてTB6612FNGモジュールを2個(4つのPWM制御が必要)
6軸センサーMPU-6050モジュール(I2C接続)市販の木製ドローンの制御回路を置き換えてみました。
AX02 29pin, AP03 STM32 MCU, AZ01 USB, AV04 2V~4.5V
Aerowood Modular Wooden Drone (SOPHON)
1セルのLiPoバッテリービデオ
以上
- 投稿者投稿
- このトピックに返信するにはログインが必要です。