3軸リアクションホイール倒立振子を作るアドカレ の9日目です。
1. 序論:64ピン・パッケージへの高密度実装への挑戦
前回のあらすじ
[Day 8] では、「AIの高速推論」と「FOCの演算負荷軽減 (CORDIC)」を両立させる最適解として、STM32G474RET6 (LQFP64) を選定しました。
直面した物理的制約
頭脳(マイコン)は決まりましたが、いざ回路設計フェーズに入ると、LQFP64パッケージのピン数制約という壁に直面しました。
Cubliの3軸制御システムに必要なI/Oを列挙します。
- モータ制御 (PWM): 3相 $\times$ 3軸 = 9ピン
- エンコーダ (I2C): 2ピン $\times$ 3系統 = 6ピン (※アドレス競合回避のため独立バス必須)
- 電流センシング (ADC/OPAMP): 1ピン $\times$ 3軸 = 3ピン
- 姿勢センサ (SPI): SCK, MISO, MOSI, CS = 4ピン
- 通信・デバッグ: USB(2), UART(2), SWD(2) = 6ピン
- その他: LED, スイッチ, 電源/GNDピン...
これらを、電源ピンを除いた実質50本程度のGPIOに、ペリフェラル機能(Timer, I2C, SPI...)の制約を満たしつつ割り当てる必要があります。
本日のゴールは、STM32CubeMXを用いたピン配置(Pinout)の最適化と、モータドライバ周辺の回路図(Schematic)設計を完了させることです。
2. STM32G474 ピンコンフィギュレーションの最適化戦略
単純に機能を割り当てると必ず「ピン競合(Conflict)」が発生します。
今回は以下の3つの技術的アプローチにより、LQFP64パッケージ内での共存を実現しました。
2.1 外部発振子(HSE)の廃止によるI2Cバス3系統の確保
課題:
採用した磁気エンコーダ AS5600 はI2Cスレーブアドレスが固定(0x36)であるため、3軸独立して通信するにはハードウェアI2Cバスが3系統必要です。
しかし、I2C2 のピン配置を確認すると、SDAピンが PF0 (外部クロック入力ピン: OSC_IN) と物理的に共有されており、競合してしまいました。
解決策:
「外部水晶発振子 (Crystal) を廃止し、内蔵発振器 (HSI) で運用する」 設計に変更しました。
STM32G4は、高精度な内蔵クロック HSI16 (High Speed Internal) および、USB通信用にトリミングされた HSI48 を搭載しています。
これにより、外部クロックなしでもUSB 2.0 Full Speed通信やFOC制御に十分な精度(±0.25% typ.)を確保可能です。
結果:
PF0 をGPIOとして開放し、ここに I2C2_SDA を割り当てることで、追加部品なしで3系統の独立I2Cバス (I2C1, I2C2, I2C3) を確保しました。

(HSEをDisableにし、PF0をI2C2に割り当てた様子)
2.2 3つの「最強タイマー」による3軸完全同期制御
課題:
3軸すべてのモータ制御ループをハードウェアレベルで同期させるには、通常の汎用タイマーではなく、3相PWM生成とADCトリガーに特化した「Advanced Control Timer」が必要です。
一般的なマイコンではTIM1の1つしか搭載していないことが多く、3軸制御のネックになります。
解決策:
STM32G474特有の強みである 3つのAdvanced Control Timer (TIM1, TIM8, TIM20) をフル活用しました。
-
X軸:
TIM1 -
Y軸:
TIM8 -
Z軸:
TIM20
これにより、3軸全てにおいて以下の高度な制御機能を使用可能にしました。
- Center-Aligned PWM: 山型のPWM波形を生成し、スイッチングノイズを低減。
- ADC Injection: PWMの谷(ノイズが最も少ないタイミング)でADC変換を自動トリガー。
「タイマーリソースが足りないから汎用タイマーで妥協する」ということをせず、3軸とも最高スペックの制御ループを構築できるのがG474の真価です。

(TIM1, TIM8, TIM20の3つをPWM Generationモードで有効化)
2.3 OPAMPの「Internal Connection」によるGPIO節約
課題:
電流計測用に内蔵オペアンプ (OPAMP1, 2, 3) を使用すると、増幅後の信号を出力するためのピン (OPAMP_VOUT) がGPIOを消費し、ADC入力ピンと場所を取り合ってしまいます。
解決策:
「PGA Linked to ADC (Internal Connection)」モード を採用しました。
STM32G4は、オペアンプの出力を物理ピンに出さず、シリコンチップ内部の配線だけで直接ADCモジュールに渡す機能を持っています。
これにより、貴重なGPIOピンを3本節約しつつ、基板上の配線ノイズの影響を全く受けない理想的なアナログ信号経路を構築できました。

(OPAMP出力をピンに出さず、内部ADCに直結する設定)
3. モータ駆動回路と電流センシングの設計
ピン配置が確定したため、KiCadを用いた回路図設計に移ります。
ここではFOCの性能を左右する DRV8313 周辺の設計について詳述します。
3.1 3相ブラシレスモータドライバ (DRV8313) の接続
TI製の DRV8313 は、3つのハーフブリッジを独立制御できるドライバICです。
-
PWM入力: マイコンの
TIMx_CHxをIN1, IN2, IN3に直結します。 -
Enable制御:
EN1, EN2, EN3はまとめて1つのGPIOで制御します。これにより、緊急停止(Emergency Stop)時に1アクションで全相をハイインピーダンス状態にできます。 - 電源: モータ用電源 ($V_M \approx 12V$) とロジック電源 ($V_{CC} = 3.3V$) を供給します。$V_M$ ピンの直近にはパスコンが必須です(詳細はDay 10で解説)。
3.2 ローサイド電流検出回路 (Low-Side Current Sensing)
FOCを行うためには、モータに流れる相電流を測定する必要があります。今回は回路構成が最も単純な 「1シャント・ローサイド方式」 を各軸に採用しました。
-
シャント抵抗:
ドライバのGND側(PGND)と回路GNDの間に、低抵抗・高精度のシャント抵抗($R_{shunt} = 50m\Omega, 1%$精度)を挿入します。 -
RCフィルタ:
PWMスイッチングに伴うスパイクノイズを除去するため、オペアンプ入力段にRCローパスフィルタ($R=100\Omega, C=1000pF$)を配置します。カットオフ周波数は約1.6MHzとなり、PWM周波数(20kHz)の信号を通しつつ、リンギング等の高周波ノイズを減衰させます。 -
入力:
フィルタを通した電圧を STM32G4 のOPAMP_VINPピンに入力します。
(DRV8313とシャント抵抗、STM32への接続回路図)
4. センサインターフェースの設計
4.1 磁気エンコーダ (AS5600)
3つのI2Cバス (I2C1, I2C2, I2C3) にそれぞれ接続します。
I2Cはオープンドレイン方式であるため、SCL/SDAラインにはそれぞれ $2.2k\Omega$ のプルアップ抵抗 を配置します。これを忘れると通信が不安定になります。
4.2 6軸IMU (ICM-42688-P)
姿勢制御の要となるセンサです。
I2C接続も可能ですが、Sim-to-Realのための高速サンプリング(1kHz以上)を安定して行うため、SPI接続 (SPI2) を採用しました。
最大通信速度24MHzに対応しており、DMA転送と組み合わせることでCPU負荷をかけずに最新の姿勢データを取得可能です。

5. 最終実装結果:LQFP64パッケージへの高密度機能集約
5. 最終実装結果:LQFP64パッケージへの高密度機能集約
上述した「外部クロックの廃止」「タイマー出力の極性反転」「オペアンプの内部結線」といった複数の最適化アプローチを統合した結果、LQFP64パッケージ上に全ての必要機能を実装することに成功しました。
以下のSTM32CubeMXのピン配置ビューをご覧ください。
リソース最適化の技術的評価
画像において緑色で示されたピンは機能割り当てが完了している箇所を表しています。
ご覧の通り、電源およびグラウンドピンを除くほぼ全てのI/Oピンが有効化されており、GPIO利用率はパッケージの物理限界に近い90%以上に達しています。
単にピンが埋まっているだけではありません。本設計の技術的な要点は、以下の「3つの密度」を最大化したことにあります。
-
ペリフェラル密度:
3系統のハードウェアI2C、3系統のAdvanced Timer、3系統のアナログセンシングチェーン(ADC+OPAMP)を、一切の妥協(ソフトウェアエミュレーション等)なしにハードウェアIPとして実装しました。 -
配線密度:
アナログ信号経路(OPAMP出力→ADC入力)をシリコン内部で完結させることで、物理的なピン数を節約するだけでなく、基板上の配線インピーダンスによる信号劣化を原理的に排除しました。 -
実装密度:
外部水晶発振子や外部オペアンプICを削減したことで、回路図上の部品点数が減少し、後のPCBレイアウトにおける実装面積の最小化にも寄与しています。
これこそが、STM32G4シリーズが持つ柔軟なピンリマッピング機能と、内部インターコネクト(配線)能力を極限まで引き出した成果です。「64ピンの中に宇宙を詰め込む」という当初の難題は、論理的なパズルとして完全に解かれました。
次回予告 [Day 10]
次回は 「回路設計 Part 2:ノイズ対策と電源設計」 です。
この論理回路を、物理的なプリント基板(PCB)上で安定動作させるための、アナログ的な工夫(パスコンの配置、GNDベタの分離、電源設計の指針)について解説します。
アドベントカレンダー参加中
STM32×AIで「3軸倒立振子」を作る25日間(ひとりアドカレ)Advent Calendar 2025
