在使用RPi.GPIO 库里的PWM功能时候,出现了一个问题,电机的啸叫声特别明显,低频(200以下)也是,高频(20K)更是,后来用示波器检测它的输出端,发现将占空比设置为0的时候,它还是会产生一个PWM信号。电机正反转时候,转速断断续续。
后来,查到了一个比较靠谱的库 pigpio, 可以用pip下载。这个库的PWM非常稳定。用示波器检测,比较平稳。
将一端口设置成PWM,四步走:
修改端口的占空比
set_PWM_dutycycle()
import pigpio
pi = pigpio.pi() # 创建实例
pi.set_mode(17,pigpio.OUTPUT) # 设置17端口
pi.set_PWM_frequency(17,127) # 修改17端口的PWM频率
pi.set_PWM_range(17,100) # 设置PWM占空比的切分
pi.set_mode(27,pigpio.OUTPUT) # 设置27端口
pi.set_PWM_frequency(27,127)
pi.set_PWM_range(27,100)
def forward(pwm): # 向前
# pi.write(17,1) # 两个电机输入1,制动
# pi.write(27,1)
pi.set_PWM_dutycycle(17,pwm)
pi.set_PWM_dutycycle(27, 0)
def backword(pwm): # 向后
# pi.write(17,1) # 两个电机输入1,制动
# pi.write(27,1)
pi.set_PWM_dutycycle(17,0)
pi.set_PWM_dutycycle(27, pwm)
def stop(): # 停止
pi.write(17,1) # 两个电机输入1,制动
pi.write(27,1)
pass
def main():
flag = int(input("请输入前/后/停(1,0,其它):"))
if(flag==1):
pwm = int(input("请输入占空比:"))
forward(pwm)
elif(flag==0):
pwm = int(input("请输入占空比:"))
backword(pwm)
else:
stop()
if __name__ == '__main__':
while 1:
main()