[ODrive Micro] Vibration in closed-loop control with brushless DC motor — reducing encoder_bandwidth suppresses vibration, but forces fw_fb_bandwidth down and degrades control performance
Setup
- Controller: ODrive Micro
- Motor: CubeMars GL40 KV70 gimbal motor
- Encoder: ODrive Micro onboard encoder
Problem Summary
With the default setting (encoder_bandwidth = 1000), the motor vibrates noticeably upon entering closed-loop control — specifically in velocity control mode with input_vel = 0. The vibration is not extremely loud, but is clearly felt by hand.
I confirmed that reducing encoder_bandwidth (e.g., from 1000 to 200) significantly suppresses the vibration, which leads me to conclude that encoder noise is the root cause.
(As a side note, the vibration is less severe in torque control mode.)
I also tried reducing vel_gain directly from the dashboard. This partially reduced the vibration, but did not eliminate it entirely. Furthermore, reducing vel_gain too much caused the motor to fail to track the target velocity, so I could not continue lowering it.
The tradeoff I am stuck on
Lowering encoder_bandwidth introduces phase lag into vel_estimate. In an attempt to maintain cascade stability, I tried to keep the following condition satisfied:
encoder_bandwidth ≥ 2 × fw_fb_bandwidth
This means reducing encoder_bandwidth forces me to also reduce fw_fb_bandwidth, which in turn lowers the auto-set vel_gain and vel_integrator_gain. At the settings where vibration disappears, the velocity loop becomes unacceptably sluggish (~1–2 Hz effective bandwidth).
In short: suppressing the noise makes the control performance too slow to be practical.
Calibrated motor parameters vs. datasheet (for reference)
| Parameter | Expected (line-to-neutral) | ODrive calibrated | Error |
|---|---|---|---|
| phase_resistance | 2250 mΩ | 1609 mΩ | −28.5% |
| phase_inductance | 900 μH | 931 μH | +3.5% |
Inductance appears well calibrated. Resistance is underestimated by ~28%, which may affect the current loop integrator gain, but I do not believe it is the primary cause of the vibration.
Questions
- Is it expected that the ODrive Micro onboard encoder produces significant noise when driving a high-pole-pair gimbal motor like the GL40 KV70? Is this a known issue?
- Is there any way to filter
vel_estimateindependently ofencoder_bandwidth— i.e., suppress the noise while keepingfw_fb_bandwidthhigh enough for adequate control performance?
Any advice would be greatly appreciated.