コンテンツにスキップ

プロジェクト概要

用途と責務

RoboCup SSL用ロボットの4輪ステアリング機体に搭載するメイン制御ボードです。2026-09-13に提示された要求として、次を定義します。

  • ochin-CM4v2にマウントされたCM4とSPIで通信する。
  • 機体内部の高速なフィードバック制御を担う。制御対象、CM4やアクチュエーター側基板との制御分担は今後決定する。周期はユーザー指定の500 Hzとする。
  • 通常動作とボタン操作による出力デバッグなど、単純なモード切替を行う。
モード 要求される動作 未確定事項
通常モード CM4からのコマンドを受け付けて動作する 共通の設計案・未決事項を参照
アクチュエーター出力デバッグモード ボタン操作でアクチュエーターを動かす 同上

モード一覧は現時点の要求例です。モード選択に使う入力、遷移条件、起動時のモード、切替時の出力処理は未確定です。CM4通信、フィードバック制御、モード切替は未実装です。基礎ドライバとCAN・IMU・OLEDの取得・診断機能を実装しています。実機検証は開発手順の記録と区別してください。

通信仕様と実装状況

対象 参照する契約・設計 本FWの状態
CM4からの指令 共通コマンド、4WSのモード・SPI設計案 未実装。モードの採用設計と実際の受信・制御対応を区別する
MainからCM4への帰還 共通128バイトfeedback 採用設計あり。各項目の取得・格納、CRC生成、SPI送信は未実装
SPIの物理条件・転送手順 SPI設計案 未実装。生成設定のSPI2はslave、CM4_CSはGPIO出力のため、設計案との対応確認が必要
CAN機器通信 Orion CAN契約 Classic CAN転送、電源API、Orion受信解析を実装。対応範囲とDLC制約は基礎ドライバ・CAN受信を参照。4WSのノード・車輪割当は未確定

共通feedbackの採用設計は、転送や制御の実装完了を示しません。現在のUART4ログ・SWD診断RAMは本repoの内部診断で、CM4向けfeedbackではありません。Orionの停止条件・UART・更新方式を4WSの確定仕様へ転用しません。文書の所有範囲は管理境界を参照してください。

旧世代ボードの参照先

旧世代のプロジェクトはC:\Users\hiroyuki\STM32CubeIDE\workspace_1.17.0\G474_Orion_mainです。

参照ファイル 参照する内容
README.md 通常動作、モーター・ドリブラー・キッカーなどのテストモードと操作説明
doc/overview.md、doc/board_spec.md 旧世代の構成、通信、周辺HWの説明
doc/hw_control.md 旧世代の速度制御の構成
Core/Src/ai_comm.c、Core/Inc/robot_packet.h 上位通信の処理とパケット定義
Core/Src/state_func.c、Core/Src/robot_control.c モードごとの処理と制御の構成

旧世代ではCM4との通信にUSART2を使用しています。4WS向けの指令・帰還の採用設計と未確定のSPI転送手順は通信仕様と実装状況を参照してください。2026-09-13の追加要求により、CAN、デバッグUART、ブザーPWM、ユーザーSWなど同等化できる部分は旧世代と同等仕様にする方針です。ドライバ互換調査は旧ソースの調査履歴として保持します。4WSの操作モード、CAN機器割当、制御方式、ブートローダー構成は別途定義します。共通契約はspecsを参照し、移植時は該当ソースと照合します。

対象

項目 現在の設定
CubeMXプロジェクト 4WS_MainFW.ioc
CMakeターゲット/成果物名 4WS_MainFW
MCU STM32G474RET6、LQFP64
CPU Arm Cortex-M4F
システムクロック 170 MHz
FW基盤 STM32Cube HAL、RTOSなし、C11
Flash配置 0x08000000から512 KiB
RAM配置 0x20000000から128 KiB

現在は単一アプリケーション構成です。独立したブートローダー、設定保存領域、アプリケーションオフセットは設けていません。

ディレクトリ構成

パス 内容
Core/Inc、Core/Src CubeMX生成のアプリケーション、初期化、割り込みコード
Application/ ユーザーコード。Board / Device / Protocol / Appに基礎ドライバを実装、Controlは今後追加
Drivers/ CMSISとSTM32G4 HALドライバー
cmake/stm32cubemx/ CubeMXが管理するソース一覧とビルド設定
cmake/ Arm GCC/STArmClang用ツールチェーン定義
Script/ ビルド、書き込み用PowerShellスクリプト
doc/ プロジェクト文書
.vscode/ VS Codeのタスク、デバッグ、補完設定
build/<Configuration>/ CMakeが生成するビルド成果物

ルートのCMakeLists.txtはユーザーが保守する設定です。cmake/stm32cubemx/CMakeLists.txtはCubeMXが生成する設定として扱います。

現在の起動処理

main()はHALとクロックを初期化し、GPIO、ADC1、FDCAN½、I2C1、LPUART1、UART4、SPI½、TIM½/3、CORDICの初期化関数を呼び出します。その後、USER CODEからapp_init()を呼び、while (1)でapp_process()を繰り返します。

AppはUART4デバッグ、ADCユーザーSW、両Classic CAN、IMU取得の状態管理、OLED検出を開始し、制御IRQ開始後に起動ブザーを2 kHz・100 ms鳴らします。メイン処理で電源・Orionテレメトリー受信、IMU取得、OLED表示、UART入力・状態表示、ブザー時間管理を行います。制御入口はTIM6 IRQで500 Hz、UART状態表示はmainのp()で常時10 Hzを基準に実行します。電源指令の自動送信、アクチュエーター出力、CM4 SPIは実装していません。詳細は基礎ドライバとCAN・IMU・OLEDを参照してください。

Application/Board/board_gpio.cには、名前付きデジタル入力の生レベル取得とLED端子のレベル設定を実装しています。LEDはHigh点灯の指定に従い、Appの起動シーケンスから使用します。コード階層に各層の責務、依存方向、旧世代の実装から整理する方針を定義しています。

今後の実装と確認

機器間の制御分担、通信条件、CANノード割当、モード切替・停止・復帰の定義はspecsの未決事項で管理します。FW側では次の内部実装と確認を進めます。

  • TIM6 IRQの500 Hz入口へ制御演算・出力処理を接続し、実行時間とデータ受渡しを確認
  • PHOTO_0/1とBATT_Vの取得方法・しきい値。BATT_Vは10 kΩ/1 kΩ分圧の11倍換算とユーザー指定、ADC基準電圧・校正は未確定。U_BTNは旧5方向判定値を実装済み
  • ICM-20602の機体軸対応・校正・制御への受渡し。SPI1での識別・取得は実機確認済み
  • CM4 SPIを設計案に従って実装し、生成設定・CSとの整合、指令の反映・帰還の生成と通信契約への適合を確認
  • ブザー以外のPWMの周波数・デューティ範囲・起動時の安全状態
  • DIPの表示位置とコードの対応、追加SWの実入力を確認し、specsで決める操作仕様をAppへ実装

未確定事項はピン名から用途を推測せず、要求仕様、回路図と接続機器の仕様を確認して決定します。