I'm using a commercial off-the-shelf brushless DC motor controller. It combines a PID controller and an absolute encoder to regulate position. When my motor reaches its target state, it generates a lot of audible noise (sounds like a buzz) as it jitters back and forth. Monitoring the measured encoder position, I can see the reading oscillating back and forth between the target and (target+1), or (target-1).

Is there a general principle to apply to the PID coefficients to reduce or eliminate the buzzing sound? Asked another way, is there an intuitive first thing to try in this circumstance?

  • \$\begingroup\$ Ensure control voltage is noise free from commutation. Then increase P gain and D gain. Test then repeat with reduced gain. Decide what stability criteria is most important. ISAE, overshoot, seek time etc. PP error, stability margin etc, \$\endgroup\$ – Tony Stewart Sunnyskyguy EE75 Aug 28 '17 at 19:44
  • 1
    \$\begingroup\$ You may need to apply a little hysteresis, or a deadband ... assuming you can tolerate one encoder step error. \$\endgroup\$ – Brian Drummond Aug 28 '17 at 19:52
  • \$\begingroup\$ Ther must be different PID parameters for feedback sensing for accleration using current from velocity dx/dt from position error signal (PES) and switching modes from g , v , x controlled steps or ramps. \$\endgroup\$ – Tony Stewart Sunnyskyguy EE75 Aug 28 '17 at 19:52
  • \$\begingroup\$ presumably PES resolution , hence SNR is > 20 dB pref. 30 dB implying resolution of 3% , hysteresis will only make it worse. \$\endgroup\$ – Tony Stewart Sunnyskyguy EE75 Aug 28 '17 at 19:53
  • \$\begingroup\$ I just finished buillding a CNC XY gantry table with 1m/s max velocity with 1.2m square rails and 0.1 mm resolution. But I chose to use small stepper motors. No PID but had to tweak max each parameter for g, v and x resolution and ended up using full steps with 200s/rev 2mm track 16 tooth gear and 3 motors. Very stable now. After testing 6 s/w packages ended up with a great one called GRBL Panel \$\endgroup\$ – Tony Stewart Sunnyskyguy EE75 Aug 28 '17 at 20:03

In general, there is no guaranteed way to fix your problem. The heart of it is your deriving an error signal from the encoder. When the encoder is at the desired position, you get zero error, and hence zero drive. Any drift in the system will eventually cause a one step error. The control loop will drive the motor back towards zero. At zero, the motor will continue to drift in the opposite direction until it produces a one step error, and the process repeats in the opposite direction.

The buzzing that you get means that your gain is very high, and even a one step error produces a large error torque, so the cycling happens at high frequency. One thing you might try is to produce a non-linear amplifier which has low gain for low error inputs, but this will introduce various control loop problems which may or may not be acceptable.

In many respects, the simplest fix is to use stepper motors, since these display a detent torque which prevents the limit cycling you're seeing. Alternatively, dropping your I term to zero will minimize drift.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.