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/

  • 相关阅读:
    最大子数组问题(分治策略实现)
    Solving the Detached Many-to-Many Problem with the Entity Framework
    Working With Entity Framework Detached Objects
    Attaching detached POCO to EF DbContext
    如何获取qq空间最近访问人列表
    Health Monitoring in ASP.NET 2.0
    problem with displaying the markers on Google maps
    WebMatrix Database.Open… Close() and Dispose()
    Accessing and Updating Data in ASP.NET: Retrieving XML Data with XmlDataSource Control
    Create web setup project that has crystal reports and sql script run manually on client system
  • 原文地址:https://www.cnblogs.com/fanwenhao/p/9280462.html
Copyright © 2011-2022 走看看