コンテンツにスキップ

システム・ハードウェア概要

4輪独立ステアロボットのステアリング制御基板のソースコードです。 1基板(1マイコン)で1つのステアリングモーターを制御します。 ステアリングモーターは16歯の歯車を持ち、ステアリング側は36歯なので、減速比2.25:1です。 ステアリングモーターには磁気エンコーダが搭載されており、駆動歯車の角度を計測できます。 基板には8つのフォトリフレクタが円形に並んでおり、ステアリングの反射板を検知してゼロ位置検知をします。

制御システム全般

TIM7によるタイマ割り込みで1kHzの制御サイクルを実行しています。 タイマ割り込み中でエンコーダなどの入力、モーター制御処理、出力を行います。 メインループの中ではデバッグ用のシリアル入出力、時間依存のエラー処理のみを行います。

入力

磁気エンコーダ、フォトリフレクタによるゼロ位置検知、ユーザースイッチを持ちます。 ユーザースイッチはPC15に接続され、押されるとLOWになります。 バッテリー電圧は

出力

TIM8を使用したPWM出力のDCモーターです。 ADCの2チャンネル目(adc_raw[1])で電流を取得できます。 モーターの電流の方向は検知できません。ADC値0~4095で、電流は0~2.2Aに対応します。 LEDはPC13,PC14に接続されています。High点灯です。

モーター制御

目標を位置(角度)としたPID制御を行います。 制御には解像度の高いモーター側のエンコーダーを使用します。 モーターはギアードモーターで、モーターとエンコーダーの間にバックラッシュがあるので、目標付近ではP値にデッドゾーンを設定して発振を抑制しています。

ステアリング角度初期化

ステアリングには角度限界がありますが、モーターのエンコーダーでは何回転目であるかを検知することはできないため、起動後に初期角度検知をします。 モーターを低速(1rad/s)で回転させつつ、ステアリングエンコーダが初期角度から2段階変化する角度を取得します。 減速比2.25:1なので、

設定の保存

内部flashに4KBのデータ保存領域を確保します。 ボードID(0~3)、モーターキャリブレーションデータ、エンコーダーのゼロ位置を保存します。

設定の変更

起動直後2秒以内に、UARTから改行文字列を連続で受信したとき、設定変更モードになります。 いまのところ、ボードIDのみを変更できます。 変更したいボードIDを入力されると、内部flashに保存して再起動します。

通信

0x100+ボードIDに設定された角度にステアリングを動かします。 ステアリング角度は、ゼロ位置を中心に+-2回転です。回転限界を考慮した角度制御は、メイン基板側で制御されるので、このステアリング制御基板側では考慮しません。 ステアリング角度指令コマンドの型はfloatで、単位はradianです。 モーター電流を0x230+ボードID、ステアリングの現在角度を0x250+ボードIDで出力します。 floatで単位は[A]です。

エラー検知

1.過電流検知 モーター電流が 1A以上を3秒を超えて続いた場合 2A以上を1秒を超えて続いた場合

2. ステアリング角度が+-3回転を超えた場合

エラーモード

エラーが検出された際、モーター出力は強制的に0になり、マイコンがリセットされるまでその状態が維持される。