コンテンツにスキップ

Orion_F303_sub 概要

役割

STM32F303CBT6(LQFP48)を使用し、次のサブ基板機能をまとめて扱う。

  • ドリブラーESCへのPWM指令
  • サーボへのPWM指令
  • ESCテレメトリの受信
  • 2系統の遮断型ボールセンサ判定
  • バッテリ電圧測定
  • 状態のCAN送信とUARTデバッグ出力
  • I2C接続ディスプレイへの状態表示

システムクロックは72 MHz。主要処理はTIM17の2 kHz割り込みから実行し、 メインループは待機する構成である。

CAN通信

Classical CAN、標準11 bit ID、データ長8 byteを使用する。CAN初期化値は Prescaler=2、BS1=9 TQ、BS2=8 TQ。現在のフィルタは全IDを受信し、アプリ側で 必要なIDを選別する。

方向 CAN ID 内容 データ形式
受信 0x104 ドリブラー速度指令 byte 0..3: float32 little endian
受信 0x105 サーボ角度指令 byte 0..3: float32 little endian
受信 0x300 予約(現在は処理なし) 8 byte
送信 0x204 ESCテレメトリ速度 byte 0..3: float32 little endian
送信 0x214 バッテリ電圧 byte 0..3: float32 little endian
送信 0x240 ボール検出状態 byte 0: 検出有無、byte 1: 位置

ドリブラー/サーボ指令は、約100 msごとの監視カウンタが50を超えると0へ戻る。 したがって、指令が約5秒途絶えると停止側へ移行する。

UART

  • USART1(PA9/PA10): 2,000,000 bps。printfによるデバッグ出力と受信確認に使用。
  • USART3(PB10/PB11): 115,200 bps。ESCテレメトリ受信に使用。

USART1ログは次のコマンドで確認できる。

powershell -ExecutionPolicy Bypass -File .\Script\monitor_uart.ps1 -Port COM3

周期処理

TIM17の2 kHzコールバックでボールセンサ処理を3段階に分けて実行する。

  1. センサ0側を駆動し、ADC値を取得して速度テレメトリをCAN送信する。
  2. センサ1側を駆動し、ADC値とバッテリ電圧を取得して電圧をCAN送信する。
  3. 消灯時との差分からボール検出を判定し、結果をCAN送信する。

200割り込み(約100 ms)ごとにUARTログ、LED、PWM指令、通信タイムアウトを更新する。

ビルドと書き込み

# Debugビルド
powershell -ExecutionPolicy Bypass -File .\Script\build.ps1

# Releaseビルド
powershell -ExecutionPolicy Bypass -File .\Script\build.ps1 -Configuration Release

# 既存ELFを書き込み
powershell -ExecutionPolicy Bypass -File .\Script\flash.ps1

# リビルド後に書き込み
powershell -ExecutionPolicy Bypass -File .\Script\build_and_flash.ps1 -Rebuild

flash.ps1 は各構成の生成済みmakefileから BUILD_ARTIFACT_NAME を読み取るため、 DebugとReleaseでELF名が異なっていても対応できる。

現在のRelease生成makefileには、移動前のリンカスクリプト絶対パス C:\Users\hiroy\Documents\Orion_F303_sub\STM32F303CBTX_FLASH.ld が残っている。 Releaseを使用する前にCubeIDEでRelease構成のmakefileを再生成し、現在の STM32F303CBTX_FLASH.ld を参照していることを確認する。

CubeMX再生成時の注意

アプリケーション処理の多くは Core/Src/main.c の USER CODE 範囲内にある。 CubeMXからコードを再生成した場合は、ビルドだけでなくCAN送受信、2 kHz周期、PWM、 UART DMA出力が維持されていることを確認する。