Control
電流センサの零点校正 (offset baseline)
電流フィードバックの offset を FW 側で測って引く。Host で毎回測ると feedback がノイズ交じりで stall 検出の閾値がぶれる
要点: 電流センサの零点は起動ごとに 100〜500 ms 静止状態で raw ADC を平均して求め、以後の feedback から引く。この処理は Host ではなく FW 側 (制御周期 1 kHz を持っている層) でやる。
数字
| 項目 | 値 | 根拠 |
|---|---|---|
| baseline 積算時間 | 100〜500 ms | 100 Hz sampling なら 100 ms で 10 サンプル (σ の推定精度 ±25%)、500 ms で 50 サンプル (±10%) |
| 静止判定 | duty=0 かつ ` | v |
| 中断条件 | 上記条件を外れた瞬間に abort、前回 offset を維持 | 校正中に motor を叩かれたら以前の値を使う (無校正よりマシ) |
| 上限クランプ | 5 s | 誤設定で長時間止める事故防止 |
FW 側でやる理由
Host 側で毎回校正すると 2 つ困る:
- feedback がノイズ交じり: raw ADC がそのまま流れてくるので、下流 (homing / current 制御 / diagnostics) が全部同じ offset を引く必要がある。忘れると閾値がぶれる
- サンプル数が少ない: Host は 100 Hz、FW は 1 kHz。500 ms で 10x サンプル差、σ 推定精度が √10 良くなる
FW 側で raw から offset を引いた値を feedback として送れば、上流は「電流は 0 中心」を前提にできる。
起動方式の 3 択
| 方式 | 特徴 |
|---|---|
| Boot 時 auto-baseline | 電源投入直後に自動。呼び出し不要だが「boot 時に本当に静止か」を保証できない (残留トルク、カップリング負荷、外力) |
| On-demand (service call) | Host が「今静止している」と保証した瞬間に呼ぶ。安全。呼び忘れると offset=0 のまま (=校正未実施) |
| 自動 (opportunistic) | duty=0 の期間を検出して勝手に更新。実装複雑、副作用の予測が難しい |
推奨: on-demand。boot 直後は「本当に motor が止まっている」を保証できないので、Host が起動シーケンスの中で明示的に呼ぶ流儀のほうが事故が少ない。
温度・時間 drift
- 巻線抵抗 + 電流センサ IC の温度係数で offset は 10 分単位で drift する
- 長時間駆動後は再校正推奨。目安: 20 分ごと or 温度センサ差分で trigger
- σ (ノイズ幅) は温度で大きく変わらない → 一度取れれば流用可
Offset を保存するか
- 保存しない: 毎起動で再校正。個体差 + 経時変化を毎回吸える。ただし呼び出しシーケンスが必要
- 保存する: yaml or flash に前回値を書いて起動時 restore。呼び出しなしで済むが、温度が違う環境で起動すると外れる
- 併用: yaml に default 値、boot 直後 restore、機会があれば再校正で上書き
校正結果の使い方
stall detectionの閾値:offset + 4·σを「電流が上がった」判定に使うcurrent 制御ループの入力: baseline を引いた値で PID が動くdiagnostics: offset や σ が過去値から大きくズレたら sensor 異常のシグナル
関連
- 電流ベースの homing — この offset を使う下流
- Homing 用パラメータ校正 — offset の測定は準備の第一歩
最終更新: