zoukankan      html  css  js  c++  java
  • 树莓派操作案例1-使用python GPIO+TB6612驱动步进电机

    原理图:

    接口说明

                    A控制信号输入------PWMA               VM ------电机驱动电压输入端(4.5V-15V)

                       A电机输入端2 ------AIN2                VCC ------逻辑电平输入端(2.7V-5.5V)

                       A电机输入端1 ------AIN1                GND ------ 接地

    正常工作/待机状态控制端------STBY                 AO1 ------- A电机输出端1

                        B电机输入端1------BIN1                AO2 ------ A电机输出端2

                        B电机输入端2------BIN2                BO2 ------ B电机输出端2

                B控制信号输入端------PWMB                BO1 ------ B电机输出端1

                                       接地------GND                GND ------- 接地

     该实验的基础是两块并联在一起的驱动模块,所以和单独一个驱动模块有些许差别。

    其他关于该驱动模块的介绍详见百度。

    不多说,上代码。

    import  RPi.GPIO as GPIO
    import time
    
    PWMA = 18
    AIN1   =  22
    AIN2   =  27
    
    PWMB = 23
    BIN1   = 25
    BIN2  =  24

    #该驱动模块调速区间为[0-100]
    #前进 def t_up(speed,t_time): L_Motor.ChangeDutyCycle(speed) GPIO.output(AIN2,False)#AIN2 GPIO.output(AIN1,True) #AIN1 R_Motor.ChangeDutyCycle(speed) GPIO.output(BIN2,False)#BIN2 GPIO.output(BIN1,True) #BIN1 time.sleep(t_time) #停止 def t_stop(t_time): L_Motor.ChangeDutyCycle(0) GPIO.output(AIN2,False)#AIN2 GPIO.output(AIN1,False) #AIN1 R_Motor.ChangeDutyCycle(0) GPIO.output(BIN2,False)#BIN2 GPIO.output(BIN1,False) #BIN1 time.sleep(t_time) #后退 def t_down(speed,t_time): L_Motor.ChangeDutyCycle(speed) GPIO.output(AIN2,True)#AIN2 GPIO.output(AIN1,False) #AIN1 R_Motor.ChangeDutyCycle(speed) GPIO.output(BIN2,True)#BIN2 GPIO.output(BIN1,False) #BIN1 time.sleep(t_time) #左转 def t_left(speed,t_time): L_Motor.ChangeDutyCycle(speed) GPIO.output(AIN2,True)#AIN2 GPIO.output(AIN1,False) #AIN1 R_Motor.ChangeDutyCycle(speed) GPIO.output(BIN2,False)#BIN2 GPIO.output(BIN1,True) #BIN1 time.sleep(t_time) #右转 def t_right(speed,t_time): L_Motor.ChangeDutyCycle(speed) GPIO.output(AIN2,False)#AIN2 GPIO.output(AIN1,True) #AIN1 R_Motor.ChangeDutyCycle(speed) GPIO.output(BIN2,True)#BIN2 GPIO.output(BIN1,False) #BIN1 time.sleep(t_time) GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(AIN2,GPIO.OUT) GPIO.setup(AIN1,GPIO.OUT) GPIO.setup(PWMA,GPIO.OUT) GPIO.setup(BIN1,GPIO.OUT) GPIO.setup(BIN2,GPIO.OUT) GPIO.setup(PWMB,GPIO.OUT) L_Motor= GPIO.PWM(PWMA,100) L_Motor.start(0) R_Motor = GPIO.PWM(PWMB,100) R_Motor.start(0) try: while True: t_up(50,3) t_down(50,3) t_left(50,3) t_right(50,3) t_stop(3) except KeyboardInterrupt: GPIO.cleanup()

    需要注意的是由于该电机模块的峰值电流能达到2A/3A,如果发现代码运行一段时间出现了电机停止运行,那么很有可能是电压不够导致了PWM复位。

    代码参考:http://bildr.org/2012/04/tb6612fng-arduino/

  • 相关阅读:
    BZOJ 3158: 千钧一发
    BZOJ 1677: [Usaco2005 Jan]Sumsets 求和
    BZOJ 1574: [Usaco2009 Jan]地震损坏Damage
    BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
    BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞
    BZOJ 1634: [Usaco2007 Jan]Protecting the Flowers 护花
    Vijos P1740聪明的质检员
    Vijos P1680距离
    Vijos P1067Warcraft III 守望者的烦恼
    BZOJ 1385: [Baltic2000]Division expression
  • 原文地址:https://www.cnblogs.com/fanwenhao/p/9280462.html
Copyright © 2011-2022 走看看