树莓派PWM调速

 

 

如果电机的控制器有VSP接口并可以通过旋钮的方式调速,那么就可以改造成PWM调速。本文简述如何基于树莓派利用控制器的VSP接口改造成PWM调速。

某电机控制器接口如下。

 

按照上述方法正确接线,电机能转动,通过旋钮可以控制电机转速。

 

我们的目标是取消这个旋钮,在树莓派上通过程序能控制电机转速。

树莓派可以同时产生两路独立的pwm。每一路可以配置到规定的几个gpio上,而实际能用的物理接口只有12323335。本文试验采用物理接口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是否有效的原因。