I'm trying to build a drone with my Raspberry Pi 3. I'm using Windows 10 IoT and C#.

I've bought a DJI E300 pack (motor + ESC + Propeller) and in the data sheet it says that the ESC works with signals in 30 to 450 Hertz. It also says that if you hear a single Beep on an interval (which I'm hearing) it means that the input signal is abnormal.

This is how I'm providing the signal:

public sealed partial class MainPage : Page
    PwmPin motorPin;
    PwmController pwmController;

    public MainPage()

    public async void Init()
        if (LightningProvider.IsLightningEnabled)
            LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();

        pwmController = (await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider()))[1];
        motorPin = pwmController.OpenPin(21);

    private void M1_Slider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
        M1_Label.Text = $"M1 ({e.NewValue})";
        motorPin.SetActiveDutyCyclePercentage(((double)e.NewValue / 100.0));

First I used this code to dim a LED and it worked, so I know that the PWM is working fine. But I don't know what else is required for the ESC to work.


closed as unclear what you're asking by Chris Stratton, JYelton, RoyC, StainlessSteelRat, Sparky256 Aug 13 at 2:06

Please clarify your specific problem or add additional details to highlight exactly what you need. As it's currently written, it’s hard to tell exactly what you're asking. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • \$\begingroup\$ says that the ESC works with signals in 30 to 450 Hertz. So what frequency are you sending? \$\endgroup\$ – StainlessSteelRat Aug 10 at 1:36

The ESC almost certainly comes from the RC plane heritage, which means that it's not designed to respond to the average on-time of the PWM, but rather that it expects a 1ms to 2ms pulse.

Moreover, most ESCs are designed with the assumption that there's a human holding a transmitter. They won't arm unless the PWM is below some threshold (usually 1.1 to 1.2ms).

To make such an ESC work, your PWM needs to do the following:

  • Choose a rate. The original radios ran at a frame rate of 50-60Hz.
  • Control the PMW by on time. 1ms is 0% throttle, 2ms is 100% throttle. The ESC may use a narrower range (i.e. 1.1 - 1.9ms).
  • Start at 0% throttle (1ms pulses) for as long as it takes for the ESC to be happy. This is probably a second or so.
  • \$\begingroup\$ I wish you could show me these steps in code \$\endgroup\$ – Sasan Aug 7 at 17:01
  • \$\begingroup\$ I'm using 50Hz and my initial value for PWM signal is 0 (as you can see in the code above) \$\endgroup\$ – Sasan Aug 7 at 17:07
  • \$\begingroup\$ I would suggest a search on "drive a servo from Raspberry Pi". The ESC thinks its a servo. \$\endgroup\$ – TimWescott Aug 7 at 18:42

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