<p>I think the problem is that you're not setting the throttle to zero at the start, so it's not arming.</p>
<p>The three beeps are the boot sequence. It sees 12v and assumes it's connected to a 3 cell lipo, and sets the low-voltage cut off accordingly. After that there should be an arming beep when it detects a zero-throttle signal.</p>
<p>If it doesn't see a zero, it may go into a programming sequence, where it continues beeping.</p>

CC BY-SA 4.0
2022-09-23T08:10:38.043Z
2022-09-23T08:10:38.043Z
Robin Bennett
<p>It's possible your ESC is not calibrated to the PI's output.</p>
<p>Most ESCs are calibrated by this procedure (using a controller, you can translate this to your code):</p>
<ul>
<li>Move throttle stick to Max position.</li>
<li>Power on model. You will here the battery cell count beeps, and a periodic single beep.</li>
<li>Move throttle to Min position.  You will hear a beep confirmation.</li>
</ul>
<p>Doing this configures the ESC for the</p>

CC BY-SA 4.0
2021-12-26T23:21:11.503Z
2021-12-26T23:21:11.503Z
Mark Harrison
<p>I'm currently working on a drone which is controlled by a Raspberry Pi. I try to control the motors by using PWM on the connected ESCs, which is described in many guides and forums. For that I use the code below with little success. The ESC makes 3 beeps when connected to the power and then 3 beeps for the first to changes of the duty cycle. Those first two changes are for arming the ESC (at least that's what I read). It seems that the arming kinda works, as it makes those beeping sounds. But the motor is not spinning after the last change to 7.5 (which should make it run at 50% power).</p>
<p>I do not see the problem here, from what I read it should work just fine that way.</p>
<p>Hopefully someone with more experience can explain to me what I'm doing wrong.</p>
<p>Those are the ESCs I'm using: <a href="https://emaxmodel.com/products/emax-formula-series-45a-esc-support-blheli_32-2-5s#" rel="nofollow noreferrer">https://emaxmodel.com/products/emax-formula-series-45a-esc-support-blheli_32-2-5s#</a></p>
<pre><code>from time import sleep
import RPi.GPIO as GPIO

esc_gpio = 11

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

GPIO.setup(esc_gpio, GPIO.OUT)

t1 = GPIO.PWM(esc_gpio, 50)

t1.start(0)

t1.ChangeDutyCycle(10)
sleep(2) # =&gt; during this the esc makes 3 beeps

t1.ChangeDutyCycle(5)
sleep(2) # =&gt; during this the esc again makes 3 beeps

t1.ChangeDutyCycle(7.5)
sleep(5) # =&gt; no beeps here

t1.stop()
GPIO.cleanup()
</code></pre>
<p>I then found the manual where two different procedures for setting up the ESCs are described (<a href="https://www.tme.eu/Document/959503479e9fa7b0e61049c62875b2e2/BLHeli%20Instruction.pdf" rel="nofollow noreferrer">https://www.tme.eu/Document/959503479e9fa7b0e61049c62875b2e2/BLHeli%20Instruction.pdf</a>):</p>
<p>C1.Normal startup procedures:</p>
<p>Move throttle stick to the bottom position and then switch on transmitter→Connect battery pack to ESC→The long “beep” sound should be
emitted , means the bottom point of throttle range has been detected→Several “beep” tones should be emitted to present the amount of battery
cells→When self-test is finished, a “♪1 2 3” tune should be emitted→Move throttle stick upwards to go flying.</p>
<p>C2.Throttle range setting procedures: (when users change a transmitter, throttle range setting is recommended.)</p>
<p>Switch on the transmitter, move throttle stick to the top position→Connect battery pack to ESC→Two “beep” sounds should be emitted, means
the top point of throttle range has been confirmed and saved→Move throttle stick to the bottom position (within 2s), a long “beep” sound should
be emitted , means the bottom point of throttle range has been detected→Several “beep” tones should be emitted to present the amount of
battery cells→When self-test is finished, a “♪1 2 3” tune should be emitted, Move throttle stick upwards to go flying.
If the throttle stick is neither at the bottom position nor the top position after powered on, it will constantly make “beep” sounds.</p>
<p>Following this I tried the first method with no success and then the second one with a little more:</p>
<pre><code># import and setup as before...
t1.start()

t1.ChangeDutyCycle(10)

input('Connect battery and press Enter within 2 seconds')
# =&gt; multiple beeps after connecting battery

t1.ChangeDutyCycle(5)

# =&gt; motor does a very short spin at the end of his beeping-phase

input('Wait until beeping ends then press enter to start spinning at 50%')

t1.ChangeDutyCycle(7.5)
# =&gt; motor does another short spin and then stops and beeps

input('Press Enter to stop')
# =&gt; it beeped one last time

t1.ChangeDutyCycle(5)
t1.stop()
GPIO.cleanup()
</code></pre>

CC BY-SA 4.0
2021-11-29T14:48:59.163Z
It appears you're doing everything right. From experience - you get three "boot" tones, then a low, then [number of cells] high tone. From there, you have a climbing tone that's played on repeat until you lower the throttle, then a set of descending tones, then the arming beeps.
Consider increasing the PWM frequency. Look into oneshot 125 or multishot as these ESCs might not like such a slow signal (though I've done it before)
Brydon Gibson
CC BY-SA 4.0
2022-01-26T09:09:19.127Z
Are any of those commands for zero throttle? ESCs have a failsafe that prevents them running if the throttle is open when they boot.
Robin Bennett
<esc><brushless-motors><diy><raspberry-pi>
Brushless Motor not spinning when controlling with Raspberry Pi, PWM and ESC
HexadiemsnionalerAlp
# Brushless Motor not spinning when controlling with Raspberry Pi, PWM and ESC

(Asked by: username_0 on 2021-11-29)

I'm currently working on a drone which is controlled by a Raspberry Pi. I try to control the motors by using PWM on the connected ESCs, which is described in many guides and forums. For that I use the code below with little success. The ESC makes 3 beeps when connected to the power and then 3 beeps for the first to changes of the duty cycle. Those first two changes are for arming the ESC (at least that's what I read). It seems that the arming kinda works, as it makes those beeping sounds. But the motor is not spinning after the last change to 7.5 (which should make it run at 50% power).
I do not see the problem here, from what I read it should work just fine that way.
Hopefully someone with more experience can explain to me what I'm doing wrong.
Those are the ESCs I'm using: https://emaxmodel.com/products/emax-formula-series-45a-esc-support-blheli_32-2-5s#
from time import sleep
import RPi.GPIO as GPIO

esc_gpio = 11

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

GPIO.setup(esc_gpio, GPIO.OUT)

t1 = GPIO.PWM(esc_gpio, 50)

t1.start(0)

t1.ChangeDutyCycle(10)
sleep(2) # => during this the esc makes 3 beeps

t1.ChangeDutyCycle(5)
sleep(2) # => during this the esc again makes 3 beeps

t1.ChangeDutyCycle(7.5)
sleep(5) # => no beeps here

t1.stop()
GPIO.cleanup()

I then found the manual where two different procedures for setting up the ESCs are described (https://www.tme.eu/Document/959503479e9fa7b0e61049c62875b2e2/BLHeli%20Instruction.pdf):
C1.Normal startup procedures:
Move throttle stick to the bottom position and then switch on transmitter→Connect battery pack to ESC→The long “beep” sound should be
emitted , means the bottom point of throttle range has been detected→Several “beep” tones should be emitted to present the amount of battery
cells→When self-test is finished, a “♪1 2 3” tune should be emitted→Move throttle stick upwards to go flying.
C2.Throttle range setting procedures: (when users change a transmitter, throttle range setting is recommended.)
Switch on the transmitter, move throttle stick to the top position→Connect battery pack to ESC→Two “beep” sounds should be emitted, means
the top point of throttle range has been confirmed and saved→Move throttle stick to the bottom position (within 2s), a long “beep” sound should
be emitted , means the bottom point of throttle range has been detected→Several “beep” tones should be emitted to present the amount of
battery cells→When self-test is finished, a “♪1 2 3” tune should be emitted, Move throttle stick upwards to go flying.
If the throttle stick is neither at the bottom position nor the top position after powered on, it will constantly make “beep” sounds.
Following this I tried the first method with no success and then the second one with a little more:
# import and setup as before...
t1.start()

t1.ChangeDutyCycle(10)

input('Connect battery and press Enter within 2 seconds')
# => multiple beeps after connecting battery

t1.ChangeDutyCycle(5)

# => motor does a very short spin at the end of his beeping-phase

input('Wait until beeping ends then press enter to start spinning at 50%')

t1.ChangeDutyCycle(7.5)
# => motor does another short spin and then stops and beeps

input('Press Enter to stop')
# => it beeped one last time

t1.ChangeDutyCycle(5)
t1.stop()
GPIO.cleanup()

**Tags:** esc, brushless-motors, diy, raspberry-pi
> **Comments:**
> **username_1**: It appears you're doing everything right. From experience - you get three "boot" tones, then a low, then [number of cells] high tone. From there, you have a climbing tone that's played on repeat until you lower the throttle, then a set of descending tones, then the arming beeps. Consider increasing the PWM frequency. Look into oneshot 125 or multishot as these ESCs might not like such a slow signal (though I've done it before)  
> **username_2**: Are any of those commands for zero throttle? ESCs have a failsafe that prevents them running if the throttle is open when they boot.  

---

## 2 answers

### Answer by username_2 on 2022-09-23. Score: 0

I think the problem is that you're not setting the throttle to zero at the start, so it's not arming.

The three beeps are the boot sequence. It sees 12v and assumes it's connected to a 3 cell lipo, and sets the low-voltage cut off accordingly. After that there should be an arming beep when it detects a zero-throttle signal.

If it doesn't see a zero, it may go into a programming sequence, where it continues beeping.


---

### Answer by username_3 on 2021-12-26. Score: 0

It's possible your ESC is not calibrated to the PI's output.

Most ESCs are calibrated by this procedure (using a controller, you can translate this to your code):

* Move throttle stick to Max position.
* Power on model. You will here the battery cell count beeps, and a periodic single beep.
* Move throttle to Min position. You will hear a beep confirmation.

Doing this configures the ESC for the


---

