notes
Control

電流センサの零点校正 (offset baseline)

電流フィードバックの offset を FW 側で測って引く。Host で毎回測ると feedback がノイズ交じりで stall 検出の閾値がぶれる

要点: 電流センサの零点は起動ごとに 100〜500 ms 静止状態で raw ADC を平均して求め、以後の feedback から引く。この処理は Host ではなく FW 側 (制御周期 1 kHz を持っている層) でやる。

数字#

項目値根拠
baseline 積算時間100〜500 ms100 Hz sampling なら 100 ms で 10 サンプル (σ の推定精度 ±25%)、500 ms で 50 サンプル (±10%)
静止判定duty=0 かつ `v
中断条件上記条件を外れた瞬間に abort、前回 offset を維持校正中に motor を叩かれたら以前の値を使う (無校正よりマシ)
上限クランプ5 s誤設定で長時間止める事故防止

FW 側でやる理由#

Host 側で毎回校正すると 2 つ困る:

  1. feedback がノイズ交じり: raw ADC がそのまま流れてくるので、下流 (homing / current 制御 / diagnostics) が全部同じ offset を引く必要がある。忘れると閾値がぶれる
  2. サンプル数が少ない: 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 異常のシグナル

関連#

最終更新:

On this page