树莓派PWM调速
如果电机的控制器有VSP接口并可以通过旋钮的方式调速,那么就可以改造成PWM调速。本文简述如何基于树莓派利用控制器的VSP接口改造成PWM调速。
某电机控制器接口如下。
按照上述方法正确接线,电机能转动,通过旋钮可以控制电机转速。
我们的目标是取消这个旋钮,在树莓派上通过程序能控制电机转速。
树莓派可以同时产生两路独立的pwm。每一路可以配置到规定的几个gpio上,而实际能用的物理接口只有12、32、33、35。本文试验采用物理接口32。
通过电机控制器的说明书,可知PWM配置参数如下:
PWM 频率1K~10khz,占空比10~100%调速有效。
将连接到电位器(旋钮)的VSP线剪断,连接到树莓派的32端口。将连接到电位器的GND,并联到树莓派的任意GND端口。在树莓派上编辑如下程序:
import RPi.GPIO as GPIOfrom time
import sleep
rledpin = 32 # 指定引脚,物理引脚编号32
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD) # 设置引脚编号系统,BOARD指的是物理引脚命名方式
GPIO.setup(rledpin,GPIO.OUT) # 设置引脚32为输出
pwm0 = GPIO.PWM(rledpin,50) # 创建PWM0实例,并设置频率为50Hz
while True:
pwm0.start(0) # 启动PWM0实例,占空比为0
for duty0 in range(0,101,5): # 范围在0 - 100的占空比变化
pwm0.ChangeDutyCycle(duty0)
sleep(0.05)
sleep(0.5)
for duty0 in range(100,-1,-5):
pwm0.ChangeDutyCycle(duty0)
sleep(0.05)
sleep(0.5)
pwm0.stop() # 停止PWM0实例
运行该程序:
#sudo python3 pwm.py
电机即从速度0提高到最大转速。
我们还可以用C程序写一个PWM控制转速程序
编译
#sudo gcc pwm.c -o pwm -l wringPi
运行
#sudo ./pwm
电机即可达到占空比为50%时的速度。
最后补充说明一句调试手段的经验:
调试PWM的时候,由于频率太高(即使50hz,也是每秒变化50次),数字万用表看不到波形变化,可以通过示波器看到。数字万用表和模拟万用表能看到树莓派的PWM输出(端口32)和GND之间的直流电压一直在不断增加(大约从0V增加到2.7V)。这个非常有趣。旋钮调整的是电阻,但实际是调整的分压电阻上的电压。旋钮调电阻时,电阻上的电压随之调整,电机上的电压也同时调整了,这就是电机能变速的原因。树莓派PWM输出的不同的分压,电机上的分压自然也变化,从而达到调速的目的。这也是我们还可以通过发光二极管看到PWM是否有效的原因。