モーター制御基板設計変更 STM32F303K8にて
モーター制御基板をラズパイPicoからSTM32F303K8へ変更
理由
2.100LPR程度のエンコーダーを使えるようにしたい
3.そもそも処理能力がカツカツになった
STM32F303K8へ変更後
■通信
>SPI通信10MHzのスレーブデバイス
>DMA転送で通信処理負荷低減
>設定値等の通信は、レジスタマップとして複数同時処理できるようにした
>ペリフェラルのエンコーダを使用
■RTOS
>オーバーヘッドのデメリットの方が多く、
STM32F303K8ではメモリがギリギリになりそうなので不採用とした。
■構成
以下の通り、ギリギリ足ります。現状空きPINは2点。
・I2C×1・・・ジャイロ用
・SPI全二重×1・・・主制御装置通信用(ラズパイ)
・動力モーター用PWM(TIM1、CH1,2)
・サーボモータ用PWM(TIM2、CH1,2)
・エンコーダー用タイマ(TIM3)・・・入力は5V耐圧端子にて
・GPIO×3・・・超音波センサーSR04用、TRIGは共用
・制御系5V及びバッテリー電圧監視用ADC×2(ADC1,IN4,IN11)
注意点:Nucleoを使用する場合、I2CとSPIを同時使用する場合
裏面ショートジャンパ SB16とSB18は取り除く必要があります。
これに気づくのに一週間位溶かしました。
完成はしてませんが、概ね形になってきたのでソースご参考迄に
最初はLLで書こうかと思いましたが、後でF4に変更したりの可能性もあったので
HALで書いてあります。
SPI通信は1フレーム8bit固定×任意フレーム数として通信できるように
マスターから送信時に以下のようにしました。
「ヘッダ、開始アドレス0xXX、R/Wアドレス数」
ヘッダは、読み込み0x10、書き込み0x20。
将来的に、このヘッダを拡張してバースト処理できるようにしようと思います。