I am using the 30A BLDC ESC to control a brushless motor from my Raspberry Pi 3 B+. The documentation for the ESC can be found here: ESC pdf
I seem to have successfully calibrated the ESC, but after it is finished arming, it emits a 56712 tone and, indicating the direction of throttle is reversed -- I'm not quite sure what this means and how to fix. I have the right battery for the ESC (11.1V Li-Po battery).
I do not have an additional hat or board for my Raspberry Pi... Should I invest in one? Could this provide throttle control that the Pi is unable to for some reason?
The code I wrote is below (Python 3.8):
# libraries
import os
import sys
# Linux path
sys.path.append('./subsystems')
# RPi path
sys.path.insert(0, '/home/reyna/Airplane/subsystems')
# subsystems
from motor_pigpio import Motor_Pigpio
class Configure():
def __init__(self):
### INSTANTIATE ###
self.cockpit = Motor_Pigpio()
### CALIBRATE ###
self.cockpit.calibrate(18)
config = Configure()
# libraries
import pigpio
import time
class Motor_Pigpio():
### define ###
# duty cycle
# frequency
def __init__(self):
self.pi = pigpio.pi()
print(self.pi.connected)
# successfully prints 'True'
def max_val(self, pin_num):
self.pi.set_servo_pulsewidth(pin_num, 2000)
def min_val(self, pin_num):
self.pi.set_servo_pulsewidth(pin_num, 700)
def calibrate(self, pin_num):
self.pi.set_mode(pin_num, 1)
self.pi.set_servo_pulsewidth(pin_num, 0)
time.sleep(1)
inpt = input()
if inpt == '':
self.max_val(pin_num)
print("Connect BATTERY now. Wait for 2 beeps. Enter.")
inpt = input()
time.sleep(1)
if inpt == '':
self.min_val(pin_num)
print("Special tone")
time.sleep(7)
print("Just wait...")
time. sleep(5)
self.pi.set_servo_pulsewidth(pin_num, 0)
time.sleep(2)
print("ARMING")
time.sleep(1)
def arm(self, pin_num):
# minimum throttle
self.min_val(pin_num)
time.sleep(1)
self.max_val(pin_num)
time.sleep(1)
def run(self, pin_num, freq, throttle):
# self.pi.set_PWM_range(pin_num, 255)
self.pi.set_PWM_frequency(pin_num, freq)
# self.pi.set_PWM_dutycycle(pin_num, dc)
self.pi.set_servo_pulsewidth(pin_num, throttle)
def end_run(self):
#self.pi.stop()
pass
I apologize in advance if another thread already exists for this. I have been searching for a few hours to no avail.
Edit: I have tested the code on a servo. Noticed that the servo goes almost to its extrema but not all the way. Is this to be expected or is something off?