smellbomb’s blog

主にマイコンと電子工作

モーター制御基板設計変更 STM32F303K8にて

モーター制御基板をラズパイPicoからSTM32F303K8へ変更

 

理由

1.高速通信制御可能なスレーブデバイスにしたい

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は取り除く必要があります。

これに気づくのに一週間位溶かしました。

f:id:smellbomb:20211115005835j:plain

SB16,SB18

f:id:smellbomb:20211114235121j:plain

STM32F303K8ピン配置

完成はしてませんが、概ね形になってきたのでソースご参考迄に

最初はLLで書こうかと思いましたが、後でF4に変更したりの可能性もあったので

HALで書いてあります。

 

SPI通信は1フレーム8bit固定×任意フレーム数として通信できるように

マスターから送信時に以下のようにしました。

「ヘッダ、開始アドレス0xXX、R/Wアドレス数」

ヘッダは、読み込み0x10、書き込み0x20。

将来的に、このヘッダを拡張してバースト処理できるようにしようと思います。

 

 

smellbomb.hatenablog.com