BLOG

STM32を組み込んだ制御用ボードの開発を行いました
2本のリニアアクチュエータ、真空ポンプ、電磁弁を制御し、圧力センシング、リミットSWなどのデジタル入力を行い装置機能をソフトウェアで実現します。

ボード仕様:
 MCU  STM32G431CBU6  Arm® Cortex®-M4  170MHz
 モータドライバー TB6608FNG,C8,EL 2ケ(X軸、Z軸)
 駆動モータ PFL35T-48W(048)‐60 2台 (4.8Vバイポーラ 7.5°/step )
 ADコンバータ ADS1115 16-Bit ADC 4Ch
インターフェース:
 USB、Qwiic / STEMMA QTコネクタ(I2Cデバイス用)、STDC14コネクタ(STLINK-V3接続用、JTAG/SWD/VCP)

ソフトウェア開発環境について
 定番である、 STM32CubeIDEの他に、手軽なArduino IDEが使えるようになっています(Generic STM32F4 boards・Generic STM32G431CBxを設定する)。(あらかじめSTM32CubeProgrammerのインストールが必要)
これにより、Arduino環境で豊富なライブラリの利用が可能となり、公開されている過去のリソースもそもまま使えたりしますので開発時間が短縮できます。
細かいSTM32の内部機能を使おうとすると難点はありますが、それを除く基本的な制御は十分可能です。


STM32で ArduinoIDEを 使う

工夫した点
ボードは装置本体に内蔵されるため、ブログラムの書き換え時によくあるRESET+BOOTボタンにアクセスができない。
そこで、装置にタイプC パネルマウント カプラー USB C スルーコネクターを取り付け、装置のパネルをとり外すことなく、USBケーブルを接続してボードにアクセスできるようにした。また、ソフトウェアにSTM32のDFU(Device Firmware Update)を呼び出す機能を追加した。(メンテナス用)

パネルマウントUSBスルーコネクタ

//
// change DFU modde
//
typedef void (*pFunction)(void);
void jumpToBootloader() { 
__disable_irq();
  HAL_RCC_DeInit();  HAL_DeInit();
  SysTick->CTRL = 0;  SysTick->LOAD = 0;  SysTick->VAL = 0;
  uint32_t bootAddr = 0x1FFF0000;
  __set_MSP(*(uint32_t *)bootAddr);
  pFunction bootEntry = (pFunction)(*(uint32_t *)(bootAddr + 4)); 
bootEntry();
  while (1)    ;
}

追記
今回のハード開発は、EagleCADのサポート終了直前に行いましたので、製作までは影響がなかったのですが、その後旧ツールのログインができなくなったため、設計データをAutodesk Fusionに移行しました。結構とまどいはありましたが、サポートもしっかりしているので、だいぶ慣れてきて、新しい有効な機能(例えばティアドロップが簡単になった)の発見も多々あります。契約もサブスクが高額になりましたので有効に使っていけたらと思います。いずれ、Fusionの話もあげられたらと思っています。

Autodesk Fusionに移行した
Autodesk Fusion プロジェクト