折腾了2个晚上无刷电调(ESC),电机终于转起来了,特此记录一下
昨天折腾了一个晚上电机就是一直每隔两秒钟响一次,意思就是没有收到任何油门信号。 我只把电调的信号线接到树莓派上的pwm引脚上,只接了这一根线。所有问题都因为这一根线引的货。
切记:一定要把电调信号线的gnd线接上要不然根本没法设定行程。
要注意几个问题:
1.首次接通电调必须设定行程,行程设定过程中可能会出现连续急促的 滴,滴,滴,滴,大概有N声,这是因为油门行程设置最低点的时候油门最低点的值太低了,我这里用30的占空比来设定最低行程
2.最好使用400hz频率来设置,因为400hz的周期是2.5ms ,而电调的中油门的范围是1.0-20ms之间,请看好了,是之间。也就是1.1-1.9ms 所以400hz频率是最接近这个范围的,当然你也可以测试更高的频率.
3.电调必须接上电机,然后在通电,单接电调是无法调试的(写给小白)
4.行程设定过程中,是必须限设置油门上限,然后在设置油门下限。油门上线设置成功会有2声连续的"哔哔 ",然后这时候是设置油门下限,设置成功会有两声连续"哔哔"和一声长的哔,到此设定完成
motor_pin = 12;
GPIO.setup(motor_pin, GPIO.OUT);
motor = GPIO.PWM(motor_pin, 400)
def myprint(msg):
sys.stdout.write(msg+"\n");
def changePower(power):
motor.ChangeDutyCycle(0.002/(1.0/power*100))
motor.start(0)
#最高油门设定,这里最高油门的占空比是96
motor.ChangeDutyCycle(96)
#changePower(90)
time.sleep(3);
myprint("hight is finish");
#最低油门设定 占空比30
motor.ChangeDutyCycle(30)
#changePower(10)
time.sleep(6);
#motor.ChangeDutyCycle(0)
#changePower(10)
#time.sleep(3);
myprint("low is finish");
#设定完毕,测试油门,一点一点增加
for dc in range(20, 80, 1):
motor.ChangeDutyCycle(dc)
myprint("dc:"+str(dc))
time.sleep(0.3);
#time.sleep(10)
motor.stop()