Electronic – Electronic Speed Control Concepts

brushless-dc-motormotormotor controllerpid controllerservo

I am a programmer who has never worked with electronics before. I am learning the concepts and hoping to build a quadcopter, with the control software entirely written by me. Motor control seems to be the most important part.

Is it true that the typical brushless DC motor and ESC (Electronic Speed Control) can only approximately control the speed? That's because the ESC seems to have only a very approximate idea how fast the motor is revolving. This still works for a PID (Proportional Integral Derivative) controller because it gets indirect feedback from say a gyroscope whether the motor is going fast enough and so it can tell the ESC to make it revolve "even faster" or "even slower", and that's good enough.

Is my understanding in the above paragraph correct?

If so, I wonder whether a servo motor that can inform about its current rate of rotation could help do away with the ESC entirely? I feel that if the microcontroller can receive an input about motor speeds and send an output requesting a certain speed, it would not need the ESC. But I am not sure how servo motors work — what happens immediately after you request 100rpm when say they were at 80rpm?

Since they cannot adjust the immediately, should the microcontroller immediately adjust other motors to account for the fact that not all motors are at 100rpm yet? Does that imply that the microcontroller should only request very small deltas from the currently measured speed, so that the period of deviation from desired state is negligible?

In the latter model, of requesting only very small deltas from currently measured speed, the algorithm seems like it would not really be PID since there is no way to control the acceleration? But may be requesting the servo to go from 80rpm to 100rpm causes it to reach 81rpm much faster than requesting it to go from 80rpm to 81rpm?

I feel I know so little I cannot put my finger on it more precisely, but I hope this gives an idea of the concepts I am struggling to absorb.

To summarize, the questions are:

  • can a servo (brushless dc) motor allow doing away with ESC?
  • does a servo motor accept control inputs such as "revolve at 100rpm"?
  • does a servo motor offer an output saying "i am at 80rpm now"?
  • does a servo motor at 80rpm go to 81rpm faster if it is requested to revolve at 100rpm versus at 81rpm?
  • the less precise questions implicit in the text above.

Best Answer

First, there are several definitional errors in your assumptions:

  1. No, there is no way to do away with a ESC entirely, since the majority of what the ESC is doing is taking the small signal from the receiver, and converting that into a much larger signal capable of actually powering the coils in the motor. Most motors require far more power then the micro controller can supply.
  2. Even brushed motors actually require ESCs. A ESC is, at it's most basic, a specialized type of amplifier (brushless models require more local complexity). Maybe take a look at the wikipedia page on ESCs for more clarity.
  3. Brushless ESCs actually know the rotor position and speed to quite a high degree of precision. The issue is that with typical "hobby" level ESCs, there is no way to access this information. Howerver, to properly commutate a brushless motor, the controller has to know "where" in the rotation the motor's rotor is, so it can determine which coil to energize.
  4. When you say "Servo Motor", what exactly do you mean? Do you mean the little encapsulated "RC Model" servos? Those are not servo motors, but actually little self-contained servo systems. See the wikipedia definition of a servo-motor for more clarity.

So, in summary:

  • can a servo (brushless dc) motor allow doing away with ESC?
    First, there is no such thing as a "brushless DC" motor. Motors are fundamentally AC devices. "DC" motors actually convert the DC power to AC internally, via the brushes. A brushless motor just replaces the internal brushes with solid-state electronics.
  • does a servo motor accept control inputs such as "revolve at 100rpm"?
    No. A servo system can accept such control inputs, but it would do so with a motor, a ESC/motor-driver of some sort, a mechanism for reading motor speed back, and a microcontroller/circuit to control the input to the motor driver in response to readings from the tachometer/speed-measurement-interface.
  • does a servo motor offer an output saying "i am at 80rpm now"?
    Again, no, but a servo system could offer such a interface.
  • does a servo motor at 80rpm go to 81rpm faster if it is requested to revolve at 100rpm versus at 81rpm?
    This is somewhat dependent on the servo system's configuration, but most of the time, probably. A proper closed loop system has to account for the time it will take to stop changing velocity, which is within the time for the 80-81 rpm velocity, and not within the time for the 80-100 rpm velocity change.
    Think about it like a physical movement. If you run 10 feet and stop, would it take longer then running to 10 feet and continuing at full running speed? Yes, because you have to begin stopping before you arrive at the destination, as infinite acceleration and deceleration are physically impossible.
  • the less precise questions implicit in the text above.
    Please clarify

Realistically, there are numerous limiting factors in the precision of a control system (like a PID-based control loop). Even if you have direct feedback of the rotation speed of a motor, the ability of the control loop to correct for errors in velocity is limited by the available torque, the rotor inertia, the bandwidth of the control electronics, and the precision of the measurement interface.

Further reading: http://en.wikipedia.org/wiki/Servomechanism