I have connected an ESC (an electronic speed control) with a battery and a brushless motor. The Raspberry is connected to the ESC to control it. I know - when I turn on the program that is on the Raspberry - the battery and the ESC used to do some beeps, then I could turn the motor. I think I have a stupid problem, now with the same configuration the battery and the ESC doesn't want to beep anymore and I can't use the motor. Nothing happend. I'm suspecting GIPOs Pi to be "broken" and not send the signal but I already check them with a voltmeter and it's seems all GPIOs are OK.
Do you have any idea where the problem comes from ?
Here a drawing of the setup. I call Output the pin who send the right energy voltage to control the speed of the motor.
Raspberry Pi b+
Ground on pin 9 (GND)
Output on pin 11 (GPIO17)
5V on pin 2
The ESC is control with PWM
Here the specs of the product :
• Smooth and linear throttle control • Fast response to throttle input • Atmel MCU • Stalled motor protection • Throttle signal lose protection • Safe power-on (throttle lockout) • Support 480Hz+ high refresh rates (up to 499hz)
Specs ESC :
Constant Current: 20A
Input Voltage: 2-4 cells Lipo
BEC: None (OPTO)
PWM: 8 KHz
PCB Size: 41mm x 24mm
That's the link to download the datasheet.pdf (Beez2b send me that) : http://uplea.com/dl/5B9F54B59E9B9FB
Here the code I use :
main file :
#solenerotech 2013.09.06 from motor import motor mymotor = motor('m1', 17, simulation=False) #where 17 is GPIO17 = pin 11 print('***Disconnect ESC power') print('***then press ENTER') res = raw_input() mymotor.start() mymotor.setW(100) #NOTE:the angular motor speed W can vary from 0 (min) to 100 (max) #the scaling to pwm is done inside motor class print('***Connect ESC Power') print('***Wait beep-beep') print('***then press ENTER') res = raw_input() mymotor.setW(0) print('***Wait N beep for battery cell') print('***Wait beeeeeep for ready') print('***then press ENTER') res = raw_input() cycling = True try: while cycling: mymotor.increaseW() finally: # shut down cleanly mymotor.stop() print ("well done!")
motor file :
class motor(object): """Manages the currect Angular rotation Implements the IO interface using the RPIO lib __init_(self, name, pin, kv=1000, RPMMin=1, RPMMax=100, debug=True, simulation=True):
def __init__(self, name, pin, kv=1000, WMin=0, WMax=100, debug=True, simulation=True): self.name = name self.powered = False self.simulation = simulation self.__pin = pin self.__kv = kv self.setWLimits(WMin, WMax) self.setDebug(debug) self.__W = self.__WMin self.__Wh = 10 try: from RPIO import PWM self.__IO = PWM.Servo() except ImportError: self.simulation = True def start(self): "Run the procedure to init the PWM" if not self.simulation: try: from RPIO import PWM self.__IO = PWM.Servo() self.powered = True #TODO Decide How to manage the WMax < 100 #to keep anyhow the throttle range 0-100 except ImportError: self.simulation = True self.powered = False def stop(self): "Stop PWM signal" self.setW(0) if self.powered: self.__IO.stop_servo(self.__pin) self.powered = False def increaseW(self, step=1): "increases W% for the motor" self.__W = self.__W + step self.setW(self.__W) def setW(self, W): "Checks W% is between limits than sets it" PW = 0 self.__W = W if self.__W < self.__WMin: self.__W = self.__WMin if self.__W > self.__WMax: self.__W = self.__WMax PW = (1000 + (self.__W) * 10) # Set servo to xxx us if self.powered: self.__IO.set_servo(self.__pin, PW)