Does anyone know if the common ESC units used for drones allow for target speed tracking as either open-loop or closed loop system? A lot of the units I have seen only let you set min/max throttle via PWM and don't allow you to actually set a target rotational velocity.

Brushless DC motors should in theory be able to have their rotational velocities controlled using an open-loop controller which varies the rate of coils energizing.

  • \$\begingroup\$ Questions on the usage of products are off topic as this site is dedicated to design questions. There are several open source firmwares which can be reflashed into commodity ESC hardware, they are presumably well documented and have active user communities which could help you understand what they do currently, and would be excellent starting points for adding additional functionality you might desire. \$\endgroup\$ Commented Sep 5, 2020 at 2:56
  • \$\begingroup\$ I disagree, maybe the question isn't focused enough but for example, people ask how to do things with MCU and SBC here all the time which have highly device dependent answers. As a side thing I noticed people debate being able to use BLDC in an open loop system but in principle I think it's possible. The reason being that torque goes up as the coil becomes perpendicular to the magnet so obviously if you increase the rate of coil energizing the motor will attempt to track it. \$\endgroup\$ Commented Sep 5, 2020 at 4:01
  • \$\begingroup\$ The question is off topic because it asks "does this unspecified product in stock form do x". There is absolutely no question that such a product could be built to do that, the only question is if it currently does. Given that I pointed out a path to efficiently achieving your goal, and how that path would have to take you elsewhere, it really doesn't belong here, where people can only make guesses. Quite likely, wrong guesses. The people who you need to talk to are those up to their elbows in the available open source firwmares. \$\endgroup\$ Commented Sep 5, 2020 at 8:00

1 Answer 1


In the common ESCs used in drones, they don't care about rpm. The IMU measures rotation and acceleration in x, y and z axes. These signals are used in the PID loops that control tilt, pitch, yaw and vertical movement. The controller varies PWM on the ESCs to control motor power, and the resulting rpm is whatever is needed to produce the thrust required to stabilize the drone.

For full autonomous control the drone also needs absolute measurement of altitude and heading, which is provided by an altimeter (air pressure sensor) and magnetometer. It may also have a GPS for positioning control and to follow waypoints, and infrared or ultrasonic distance sensors for collision avoidance.

Note that while there is a relatively linear relationship between PWM and thrust, it is also affected by air currents. When the drone is hovering the propellers create circular air movement which reduces thrust. This causes the drone to sink when hovering in one spot, and rise when moving into 'clean' air. To maintain lateral balance the thrust of each propeller has to be precisely matched, which requires constant ESC throttle adjustment. Without feedback the slightest amount of thrust imbalance would cause the drone to flip over instantly.

One application that may set a 'target rotational velocity' is the main rotor of a collective pitch model helicopter. Having closed loop control of motor speed stops it from 'bogging down' under heavy load, making the collective control more responsive and precise. An ESC designed for this use may have a specific target rpm programmed into it, or it may allow setting open-loop motor speed with the throttle, then locks into the resulting rpm until the throttle is changed.

  • \$\begingroup\$ Interesting. Every derivation I have seen for the linearized control loop for quadcopters all assume knowing the rotational velocity of the different motors. In addition it's literally impossible to do any type of sensor fusion(Kalman, etc) with the IMU and control input without being able to track rotational velocity of the motors. It's very surprising to me the motor controllers can't track target velocity(or at least report motor speed). \$\endgroup\$ Commented Sep 5, 2020 at 5:41
  • 1
    \$\begingroup\$ "all assume knowing the rotational velocity" - but they don't, so rpm can only be an estimate based on battery voltage and motor Kv. And since thrust is dependent on the propellers used, it's useless unless calibrated for the particular props (and motors too, since a more powerful motor will spin the prop faster). Then there are small drones which use brushed DC motors. How do think the IMU measures their speed? Answer - It doesn't. \$\endgroup\$ Commented Sep 5, 2020 at 5:49
  • 1
    \$\begingroup\$ Unless all the parameters of the drone are known (including weight and rotational inertia) the PID has to be tuned to it experimentally. I've had to do that with fixed-wing drones (which are controlled by servos), but all the multirotors I've used so far are commercial units which were already set up. \$\endgroup\$ Commented Sep 5, 2020 at 6:12
  • 1
    \$\begingroup\$ Yes, you must determine the parameters experimentally. A lot of motor and prop test data can be found here, and I have some test data on my website. \$\endgroup\$ Commented Sep 5, 2020 at 6:27
  • 1
    \$\begingroup\$ Torque is proportional to motor current (minus no-load current), and Kt is the inverse of Kv, so torque can be calculated from motor constants and electrical measurements. To verify this I built a dyno. You can see the results in some of my motor tests. \$\endgroup\$ Commented Sep 5, 2020 at 18:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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