How to decouple RPM and phase control on two BLDC motors?

Hello,


I am working on a test bench with two BLDC motors driven by ESCs and monitored using optical sensors. My goal is to control both:


  • a common target RPM,
  • a target phase difference between the two motors.

To do this, I implemented two control loops:


  • an RPM control loop that adjusts the PWM commands to maintain the target speed,
  • a phase control loop that also adjusts the PWM commands to correct the phase error.

However, I have the impression that the two loops are inherently coupled. The phase controller corrects the phase difference by modifying the motor speeds, while the RPM controller simultaneously tries to eliminate those speed variations and keep both motors at the target RPM.


Because of this, it seems that the two controllers are constantly fighting each other. The phase loop changes the speed to reduce the phase error, and the RPM loop then tries to cancel those changes. I suspect that this interaction may be responsible for the oscillations and poor stability I am observing.


My intuition is that a better solution would be to use a control architecture where the two loops are more decoupled and do not act on the system in exactly the same way.


Does this analysis make sense?


If so, what control architecture would be recommended for this type of problem? For example:


  • master-slave control,
  • cascaded loops,
  • differential/common-mode control,
  • another approach?
 

Attachments

You're right that the two loops can fight each other since the only way to set the phase angle is to tweak the actual speed between the motors, which your RPM loop might want to hold rigid.

I'm not an expert at this level, but I would probably start with a master-slave control where the master is controlled only to maintain a particular RPM. The master motor's RPM feedback becomes the base speed reference for the slave. That speed reference has a trim based on the phase angle between the two motors.

I've seen this scheme work well with master-slave VFDs where the drive gets a speed reference trimmed by some other input like strip tension measured by load cells or strip loop angle measured by a potentiometer on a dancer arm. The speed reference from the outside system is constant(ish) but the drive's actual speed reference is adjusted from that based on the secondary input.
 
I'll assume you can get one motor running at the target RPM as desired, with a speed only control loop. For that motor have an angle sensor with available output of some sort. For the second motor have a similar angle sensor. Control the second motor by having it track the angle of the first motor, with an offset corresponding to the desired phase.
 
Top