周辺HWとハードウェア設定¶
この文書はユーザーが定義した周辺HW、回路図上の接続、4WS_MainFW.iocおよびCubeMX生成コードの現行設定を区別して記録します。回路図で確認した接続と極性は各節に記載し、実機検証の結果は個別に記録します。
周辺HWの定義¶
2026-09-13時点のユーザー指定事項です。
| 対象 | 定義 | 未確定事項 |
|---|---|---|
| 機体 | RoboCup SSL用の4輪ステアリング機体 | 駆動・操舵用アクチュエーター、ドライバー、フィードバックセンサーの構成 |
| メイン制御ボード | 機体内の高速フィードバック制御と単純なモード切替を担当。TIM6で500 Hz | 制御演算・制御分担 |
| 上位側HW | ochin-CM4v2にマウントされたCM4 | 接続コネクター、信号配線 |
| CM4との通信 | 通信方式と役割・指令・帰還はspecsのSPI設計案を参照 | 未確定の通信条件はspecsで管理。現在のピン・生成設定との整合は下記「SPIとCS」で確認 |
| 操作入力 | ボタン操作によるアクチュエーター出力デバッグを行う。U_BTNは旧HW同等。DIPと追加SWの配線は下記の対応表を参照 | DIPと追加SWによるモード選択方法・操作仕様 |
以降のピン・周辺機能表は設定済みの内容であり、接続HWの型番や用途の確定を意味しません。IMUはICM-20602、OLEDはSH1106として実装しています。機体軸対応や校正、モータードライバー、その他のセンサーやサブ基板の詳細は追加定義が必要です。
ドライバ実装状況¶
Application/Board/board_gpio.c/.hにDIP_0~3、SW_90、SW_1、SW_2、IMU_FSYNCの生レベル取得と、LED_0~3・LED_R/G/Bの端子レベル設定を実装しています。生成されたmain.hのピン定義を利用し、入力はHigh/Low、出力はHigh/Low指定として扱います。LED APIはAppのLED循環表示から使用し、ユーザー指定により全LEDをHigh点灯として扱います。SWとDIPの回路上の極性は下記に記録しますが、APIは押下や選択値への変換を行いません。IMU_FSYNCの有効極性と各入力の用途は未確定です。
Classic CAN、旧電源基板、UART4デバッグ、ブザー、U_BTN取得・判定を実装済みです。2026-10-08の接続情報に基づき、Orion CAN受信解析、SPI1のICM-20602取得、I2C1のSH1106表示を追加しました。CM4 SPIとアクチュエーター出力系は未実装です。基礎ドライバとCAN・IMU・OLEDに実装仕様、開発手順に検証結果を記載しています。
CAN、デバッグUART、ブザー、ユーザーSWの調査時点の比較はドライバ互換調査を参照してください。以降の表は生成設定とBoardの実行時設定を記録します。CANのClassic化とADCのU_BTN取得は.ioc・生成コードへ反映済みです。DMA・NVICはBoardが実行時に設定します。
MCUとクロック¶
STM32G474RET6(LQFP64)を使用します。16 MHz HSIをPLLへ入力し、M=4、N=85、R=2でSYSCLKを170 MHzに設定しています。AHB、APB1、APB2はいずれも分周なしです。電源スケールはBoost、Flash latencyは4です。
リンカースクリプトはFlashを0x08000000から512 KiB、RAMを0x20000000から128 KiBとして使用します。アプリケーションもFlash先頭に配置されます。
ピン割当¶
| ピン | ラベル/機能 | 現在のモード |
|---|---|---|
| PA0 | PHOTO_0 / ADC1_IN1 | アナログ |
| PA1 | PHOTO_1 / ADC1_IN2 | アナログ |
| PA2 | U_BTN / ADC1_IN3 | アナログ |
| PA3 | BATT_V / ADC1_IN4 | アナログ |
| PA4 | SPI_IMU_CS | GPIO出力、初期Low |
| PA5 / PA6 / PA7 | SPI1 SCK / MISO / MOSI | SPI1マスター |
| PA8 | BUZZER | TIM1_CH1 PWM |
| PA9 / PA10 | LED_3 / LED_2 | GPIO出力、初期Low |
| PA11 / PA12 | FDCAN1 RX / TX | FDCAN1 |
| PA13 / PA14 | SWDIO / SWCLK | Serial Wireデバッグ |
| PB0 / PB1 / PB2 / PB10 | DIP_0 / DIP_1 / DIP_2 / DIP_3 | GPIO入力、内部pullなし |
| PB3 | ESC_PWM | TIM2_CH2 PWM |
| PB5 | INTERRUPTER_OUT | TIM3_CH2 PWM |
| PB6 / PB12 | FDCAN2 TX / RX | FDCAN2 |
| PB7 / PA15 | I2C1 SDA / SCL | I2C1、AF4・open-drain。PA15 SCLはLCD用J18-3(ユーザー提示の回路図・基板対応) |
| PB11 | LED_1 | GPIO出力、初期Low |
| PB13 / PB14 / PB15 | SPI2 SCK / MISO / MOSI | SPI2スレーブ |
| PC0 / PC1 | LPUART1 RX / TX | LPUART1 |
| PC4 | ラベルなし | GPIO出力、初期Low |
| PC5 | IMU_FSYNC | GPIO入力、内部pullなし |
| PC6 | CM4_CS | GPIO出力、初期Low |
| PC7 / PC8 / PC9 | LED_G / LED_R / LED_B | GPIO出力、初期Low |
| PC10 / PC11 | UART4 TX / RX | UART4 |
| PC12 | LED_0 | GPIO出力、初期Low |
| PC13 | SW_90(回路のSW_0) | GPIO入力、内部pull-up |
| PC14 | SW_1 | GPIO入力、内部pull-up |
| PC15 | SW_2 | GPIO入力、内部pull-up |
| PF0 / PF1 | HSE OSC_IN / OSC_OUT | 外部発振子用に割当。ただし現在のシステムクロック源はHSI |
スイッチの対応とIO設定¶
2026-10-09に、C:\Users\hiroyuki\Documents\KiCAD_Projects\mother_4steer_v3\mother_4steer_v3.kicad_schの確認結果を現行FWと照合しました。以下のピン番号はU2(STM32G474RET6、LQFP64)のパッケージピン番号です。回路図上の接続を示すもので、実機での押下・接点動作の確認結果ではありません。
| 部品 | 回路図上の入力 | MCUポート | ピン番号 | FWラベル | 現在のIO設定 |
|---|---|---|---|---|---|
| SW1 | L_BTN(左) | PA2 | 14 | U_BTN | ADC1_IN3、アナログ、内部pullなし |
| SW2 | T_BTN(上/前) | PA2 | 14 | U_BTN | 同上、抵抗ラダー経由 |
| SW3 | R_BTN(右) | PA2 | 14 | U_BTN | 同上、抵抗ラダー経由 |
| SW4 | B_BTN(下/後) | PA2 | 14 | U_BTN | 同上、抵抗ラダー経由 |
| SW5 | C_BTN(中央) | PA2 | 14 | U_BTN | 同上、抵抗ラダー経由 |
| SW6 | nRST | NRST/PG10 | 7 | GPIOラベルなし | リセット端子として使用、GPIO入力APIの対象外 |
| SW8 | SW_0 | PC13 | 2 | SW_90 | GPIO入力、内部pull-up |
| SW9 | SW_1 | PC14 | 3 | SW_1 | GPIO入力、内部pull-up |
| SW10 | SW_2 | PC15 | 4 | SW_2 | GPIO入力、内部pull-up |
| SW7端子1 | DIP_0(bit 0) | PB0 | 24 | DIP_0 | GPIO入力、内部pullなし |
| SW7端子2 | DIP_1(bit 1) | PB1 | 25 | DIP_1 | GPIO入力、内部pullなし |
| SW7端子4 | DIP_2(bit 2) | PB2 | 26 | DIP_2 | GPIO入力、内部pullなし |
| SW7端子8 | DIP_3(bit 3) | PB10 | 30 | DIP_3 | GPIO入力、内部pullなし |
U_BTNとリセット¶
SW1~SW5は独立したGPIO入力ではなく、抵抗ラダーを介してPA2のADC入力1本に接続されています。R12の1 kΩで3.3 Vへプルアップし、押下位置ごとの電圧を読み取ります。ADC取得と方向判定は実装済みで、判定しきい値と制約は基礎ドライバを参照してください。複数ボタン同時押下の識別は定義していません。
SW6は押下でNRSTをGNDへ接続します。回路図上はR16の1 kΩで3.3 Vへプルアップし、C12の100 nFをGNDへ接続しています。通常のボタン入力としては取得しません。
追加SW¶
SW8~SW10は押下で各入力をGNDへ接続するため、回路上は押下時Lowです。外付けプルアップがないため、2026-10-10に.iocとMX_GPIO_Init()をGPIO_PULLUPへ変更しました。PC13~15を内部プルアップ付き入力として設定し、IMU_FSYNCの内部pullなし設定は維持します。
PC13は回路図のSW_0に対してFWではSW_90という名称を維持しています。PC14はmain.hにSW_1の名前付き定義を追加しました。PC13/14/15はそれぞれBOARD_GPIO_INPUT_SW_90、BOARD_GPIO_INPUT_SW_1、BOARD_GPIO_INPUT_SW_2で生レベルを取得します。操作の意味付けとデバウンスは未実装です。
DIP入力¶
SW7はコード式ロータリースイッチです。共通端子CはGND、端子1/2/4/8にはそれぞれR21/R22/R23/R24の10 kΩで3.3 Vへの外付けプルアップがあります。このため、現行の内部pullなし設定でも回路上は接点開放時High、閉成時Lowです。
BOARD_GPIO_INPUT_DIP_0~BOARD_GPIO_INPUT_DIP_3で生レベルを取得できます。接点閉成を1とする値へ変換する場合は各ビットのHigh/Lowを反転する必要があります。ロータリーの表示位置とコードの対応、選択値の組み立て、モードへの割当、接点切替時の安定判定は未実装・未検証です。
ディスプレイのスイッチ表示¶
診断画面の下3行に次を表示します。GPIOはHigh=1・Low=0で、追加SWは非押下1・押下0、DIPは接点開放1・閉成0です。U_BTNはADC判定から同じ0押下・1非押下表記を作ります。
| 行表示 | 左からの順序 | 例 |
|---|---|---|
DIP 0123 |
DIP_0/½/3(PB0/½/10) | 0111 |
SW 012 |
SW8/9/10(PC13/14/15) | 111 |
BTN LTRBC |
SW½/¾/5(左・上/前・右・下/後・中央) | 11111 |
U_BTNの複数押下は識別せず、ADC判定した方向だけ0にします。ADC未取得・無効時は?????。NRSTのSW6はリセット入力なので通常の状態表示対象外です。約100 msごとに画面生成を試みますが、実表示更新は低速OLED転送の完了を待つため通信負荷に依存します。
周辺機能の設定¶
| 機能 | 現在の設定 |
|---|---|
| ADC1 | IN3 U_BTN、12 bit、PCLK/4、連続、640.5 cycles、4倍平均、DMA1 Channel1循環 |
| FDCAN1 | Normal、Classic、自動再送、1 Mbit/s |
| FDCAN2 | Normal、Classic、自動再送、1 Mbit/s |
| I2C1 | 7 bit address、400 kHz設定、timing 0x60400D28。.ioc・生成コード・Boardの値は一致。PB7/PA15の内部プルアップはBoardが実行時に適用 |
| LPUART1 | 2,000,000 baud、8-N-1、flow controlなし |
| UART4 | デバッグ、2,000,000 baud、8-N-1、TX DMA1 Channel2、RX 1 byte割り込み |
| SPI1 | マスター、full duplex、8 bit、Mode 0、MSB first、software NSS。生成初期値10.625 Mbit/s、IMU開始時にBoardが5.3125 Mbit/sへ設定 |
| SPI2 | スレーブ、full duplex、8 bit、Mode 0、MSB first、software NSS |
| TIM1 CH1 | PWM、prescaler 16、period 65535、pulse 0 |
| TIM2 CH2 | PWM、prescaler 170、period 1000、pulse 0 |
| TIM3 CH2 | PWM、prescaler 0、period 65535、pulse 0 |
| TIM6 | Boardの実行時設定。PSC=169、ARR=1999、500 Hz、IRQ優先度2 |
| CORDIC | 有効 |
タイマー欄は生成初期値です。TIM1 CH1は起動時にpulse=0でPWMを開始し、Hz指定時にPSC/ARR/CCRを計算して更新します。TIM⅔のPWMは開始しません。
要確認事項¶
ADC¶
PA0~PA3はアナログ設定ですが、regular conversionはADC1_IN3(PA2、U_BTN)だけに変更しました。スキャンは無効で変換数は1です。PHOTO_0/1とBATT_Vを追加取得する際は、ADC1を所有するboard_user_adcとの統合が必要です。
2026-10-09のユーザー指定でBATT_Vの分圧は10 kΩ/1 kΩ。電池側10 kΩ・GND側1 kΩとして、電池電圧はADC端子電圧の11倍となる。12 bitではVbat = raw / 4095 × Vref × 11。Vrefの測定・校正、抵抗誤差、フィルターと保護しきい値は未確定で、BATT_Vの取得・換算処理はまだ実装していない。
FDCAN¶
2026-10-08のVIO誤配線はユーザーが修正し、2026-10-09に両CANの実受信を確認した。CAN2ではソフトウェア受信キュー満杯による破棄が継続している。測定条件・受信ID・未確認範囲は開発手順を参照。
両FDCANはClassic CANで、170 MHz、prescaler 10、time segment ½が14/2、SJW=1で1 Mbit/sになります。data phase設定はClassicでは使用しません。トランシーバー、終端、配線、HSI起点の通信精度は実機で未確認です。
標準フィルターは各1個、拡張フィルターは0。Boardが標準ID全受入れと拡張・remote拒否、開始・通知を設定します。旧電源基板通信とOrion形式テレメトリーの受信解析を実装し、アクチュエーター出力系は未実装です。
SPIとCS¶
CM4との通信条件・役割はspecsのSPI設計案を参照します。SPI1はIMU用のmasterで、SPI2は現状software NSSのslave設定です。CM4_CSはSTM32側のGPIO出力になっており、設計案を実装する際にピン・生成設定との対応を確認します。SPIの生成設定と.iocは今回変更していません。
SPI_IMU_CSとCM4_CSの生成初期レベルはLowです。IMUはBoard開始時にCSをHighへ戻し、SPI転送時だけLowにします。CM4_CSの役割と初期レベルはCM4通信仕様の確定時に確認します。