Control
電流ベースの homing (stall detection)
電流と速度の両方を監視して物理ストッパーを検出する homing 手法。振動対策は EMA + baseline 学習 + 連続条件で対応する
要点: 定速 or 低 duty で走らせて、|v| < v_min かつ filtered_i > baseline + k·σ を N 連続サンプル 満たしたら stall と判定して停止。振動誤検出は EMA フィルタ + baseline 学習 + 連続条件で潰す。
基本原理
モータが物理ストッパーに当たると:
- 速度 → 0
- 電流 → 増加 (押し続けようとする)
この 2 条件で機構原点を検出する。センサーレス homing / stall detection とも呼ぶ。3D プリンタ、ロボットアーム、産業機械で標準。
検出アルゴリズム
# baseline を先に学習 (自由回転で 2 秒程度)
baseline_i, sigma_i = measure_baseline(duration=2.0)
alpha = 0.1 # EMA: 100Hz なら時定数 100ms
i_thresh = baseline_i + 4.0 * sigma_i
v_min = 0.05 # rad/s
required_consecutive = 5 # 50ms 連続 (@100Hz)
filtered_i = 0
filtered_v = 0
consec = 0
while running:
filtered_i = alpha * raw_i + (1 - alpha) * filtered_i
filtered_v = alpha * raw_v + (1 - alpha) * filtered_v
if abs(filtered_v) < v_min and abs(filtered_i) > i_thresh:
consec += 1
else:
consec = 0
if consec >= required_consecutive:
homing_complete()
break振動の出所と対処
| 出所 | 見え方 | 対処 |
|---|---|---|
| Motor cogging | 位置に周期的 sin ノイズ | EMA で消える |
| Encoder 微分ノイズ | v がガタつく | host or FW で LPF、または差分ウィンドウ幅を広げる |
| Stick-slip 摩擦 | v がガクガク | 検出速度を上げる (0.3→1.0 rad/s)、または摩擦分を差し引く |
| EMI / cable | 電流だけ噴く | ハード側の問題。CAN もれ、シールド疑い |
| PID 発振 | 全体的にヒステリシス震動 | gain 下げる、kd 抜く、homing 中は低 gain 固定 |
| CAN aliasing | 100Hz sample 下で 30Hz 振動が折り返し | FW 側で on-board LPF が本命 |
先に data を見て切り分ける。raw_i と filtered_i を並べて、振動の周波数・振幅・分布を確認する。
誤検出防止の工夫
- duty 上限: PID 発振で電流が上がるのを防ぐ (
duty_cap = 0.3程度) - speed 制御ではなく低 duty 直押し:
duty = 0.15固定 → 速度が落ちて電流が上がるのを見る。振動源が減る - 双方向確認: 一度当てたら少し戻して再度当てる → 位置の再現性 ε 確認
- soft limit 併用: 過大 stroke で破損しないよう物理的な上限も別途
- homing 中は FF 全 OFF: velocity_ff / duty_ff / 摩擦補償を切って生の応答を見る (auto-tune 前提の系で特に重要)
FW 側実装の利点
Host からの CAN feedback は 2-10 ms 遅れ、サンプル 100 Hz。FW 側 (1 kHz サンプル) で判定するなら:
- 1 kHz → 10 サンプル EMA で 10 ms 時定数、滑らか
- 判定粒度が host 側の 10 倍細かい
- FW 内完結 → host の jitter に影響されない
Baseline 学習の設計
- 自由回転中の電流分布は概ね Gaussian
- 2 秒 (100 Hz なら 200 サンプル) 取って mean と std を計算
- 温度・機構状態で変わるので毎回計測が理想 (auto-tune シーケンスの一部として)
手法比較
| 方式 | 特徴 | 精度 |
|---|---|---|
| Current + velocity (本手法) | シンプル、追加センサー不要 | 中〜高、振動対策必須 |
| リミットスイッチ | 電気的に明確、追加センサー要 | 高 |
| エンコーダ Z 相 | 光学的に明確 | 高、位相ずれ確認要 |
| モデル同定 (JMt 既知) | トルクと予測比較 | 中 |
| Load cell | 直接トルク測定 | 高、コスト大 |
リミットスイッチが 1 つでも付いてるならその方が確実。無くて機構だけで済ませるなら電流ベースが定番。
関連
- Homing 用パラメータ校正 — この閾値・v_min を決める準備段階
- Homing の状態機械 — 速度主信号 + soft-start + 6 相の実行フロー
- 電流センサの零点校正 — baseline を毎回 host で測らずに FW 側で吸う
- PID と FF 項の自動チューニング — homing はこの最初のステップ
- FF スタック
最終更新: