duty_cycle control vs current_control

This evolved as a sub topic in a few threads, so I thought i’d give it it’s own thread. to collect any future discussions on the topic

RC controllers like hobbywing, castle, use a duty_cycle control mode. with Vesc we usually use a current control mode. With vesc there’s a duty_cycle control mode, but it’s not quite the same it doesn’t have braking so we’re not usually referring to that when we say duty_cycle mode.

this was a major subtopic in my 3rd comparing castle based board vs vesc based board:

this is the wrapup, which is a decent starting point for this new topic.



1 Like

Interesting! I reckon it wouldn’t be too hard to implement another control mode in the same way that RC esc’s do it.

1 Like

I sometimes wonder how hard this would be to implement on vesc. when it comes to braking and freewheel response I don’t actually know what the RC controllers are doing I think it’s a bit more than just moving the duty_cycle down.

1 Like

yeah i think it would be neat to have an equiv control mode on vesc so more people could play with it.

1 Like

Interesting fun fact, the Acedeck N3 has a setting that allows you to change between duty control and speed control. Haven’t tried it yet


thinking more on this, i could be convinced that’s not all of it.

I think @Mbrady put this thought in my head a while back.

with duty_cycle control if the wheel starts to slip the current wil drop as the duty_cycle based target speed is still met and requies less torque to stay there.

with current_control if the wheel slips, the current will be maintained which will cause the wheel to spin up to higher speeds.


Great topic

I’m wondering if this screen is where one could tune the PID values for current control.


That’s exactly it, and that new remote with a longer trigger pull probably makes it even easier to control.
Imo it’s why Morgan dominates even more on slick surfaces, he has full control of tire slip.

1 Like

What is the difference between these two modes?

1 Like

This is such an interesting topic to me. I have been programming VESC for self balance boards for some time now. One of the behaviors in my code is to switch from current control to duty control. I do this specifically when the motor has reached max torque. This is a dangerous condition for self balance boards because if you ask for too much torque the board can’t balance. So when the motor approaches max torque it kicks over to duty control.

The duty ramp rate can be set but I use the maximum possible rate. The board continues to ramp duty until the IMU detects the nose of the board has lifted sufficiently and then it hands back over to current control. I have noticed a significant difference between duty and current control in terms of how punchy it is. Even when pulling max torque in current control, the shift to duty control is easy felt.

I would suggest a similar hand off for remote controlled boards. When the current (torque) hits the maximum you can switch to duty control for the smoothest transfer while still getting the punch of duty control. This is dependent on your motor and battery set up. At low duty cycles I have found max torque is governed more by the peak torque of the esc and at high duty cycles max torque is more influenced by max battery amps.

Practically I imagine this would feel like normal current control at lower throttle values but if you quickly push the throttle to 80%+ it will probably switch to duty. Perhaps this can be incorporated into muscle memory but I don’t use a remote so I don’t know. I’m happy to help write some code if anyone wants to take this on.


I have no idea tbh, it’s just something I saw in the settings, sounds similar to changing between hw and vesc though

He’s asking because duty cycle mode and speed control mode are often used as synonyms


I’d love to try a board with this, very curious how it’d feel

1 Like

same, i’ll soon have a spare solo to mess around with


Please start a patreon or something, I need to support this project. I’m tired of boards with less watts out-launching much more powerful boards


Duty control controls voltage to the motor (% of battery voltage), current control controls the current in amps.

New guy here. A couple of questions regarding terms.

  1. What is meant by duty cycle control? I interpret this to mean basic control of PWM voltage duty cycle. 50% throttle == 50% PWM duty. IOW, a basic square or trapezoidal wave controller.
  2. What is meant by current control? This could mean the above duty cycle control with current feedback, or it could mean something like FOC in which PWM duty is modulated to produce something that looks more like a sine wave.

Yup, pretty much

Current control (in vesc) is where the throttle sets a desired amount of current to flow into the motor, then a PID loop controls the duty cycle to achieve this set point.

Highly recommend reading through the @fessyfoo’s thread linked in the first post, if you haven’t already.



“trapazoidal” vs “sinusoidal” is a different axis. in vesc these are roughly FOC vs BLDC.

both have “duty_cycle” involved, it’s kinda how much battery power is pushed through into the motors.

duty_cycle control maps throttle to duty_cycle.
current_control maps throttle to current, (ESC watches current and adjust duty_cycle to achieve target)