树莓派:直流电机正反转(pigpio)

在使用RPi.GPIO 库里的PWM功能时候,出现了一个问题,电机的啸叫声特别明显,低频(200以下)也是,高频(20K)更是,后来用示波器检测它的输出端,发现将占空比设置为0的时候,它还是会产生一个PWM信号。电机正反转时候,转速断断续续。

 

后来,查到了一个比较靠谱的库 pigpio, 可以用pip下载。这个库的PWM非常稳定。用示波器检测,比较平稳。

 

将一端口设置成PWM,四步走:

  1. 生成一个 pi()实例
  2. 设置端口模式 set_mode()
  3. 设置端口PWM的频率 set_PWM_frequency()
  4. 设置PWM占空比的范围 set_PWM_range()

修改端口的占空比

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()

 

你可能感兴趣的:(树莓派,python)