树莓派控制直流电机_树莓派 控制 直流电机 - CSDN
精华内容
参与话题
  • 第7章 用树莓派控制直流电机(L298N)

    千次阅读 2019-06-09 12:12:59
    在第5章和第6章您已经了解到如何用树莓派控制一个LED灯,本章我们将进一步介绍如何用树莓派控制直流电机,主要内容如下。 直流电机的基本知识。 L298N双H桥直流电机驱动模块相关知识。 如何控制直流电机的转向和...

       直流电机是机器人行走机构的理想选择之一,我们通常使用直流电机来驱动机器人行走。在第5章第6章您已经了解到如何用树莓派控制一个LED灯,本章我们将进一步介绍如何用树莓派控制直流电机,主要内容如下。

    • 直流电机的基本知识。
    • L298N双H桥直流电机驱动模块相关知识。
    • 如何控制直流电机的转向和转速。

       本章我们将继续使用第5章搭建的多功能实验平台。此外,还需要以下材料:

    • 一个小型直流电机。
    • 一个可以为小型直流电机供电的电源,为便于后续的实验,我们这里使用一个3V-24V的直流可调电源。
    • 一个L298N直流电机驱动模块。

    7.1 直流电机

       直流电机是一种将直流电能转换为机械能的装置,被广泛的用于驱动各种设备,如电风扇、遥控小车、电动车窗等,非常适合作为机器人的行走机构,您可以很容易的在网上购买到,价格也不是很贵。
       小型直流电机的的电压范围通常是1.5V~30V,使用两根导线连接到直流电源上就能让电机转动起来,电压越高转得就越快。每个直流电机都有一个推荐电压,超出推荐电压太多容易导致电机被烧毁,而供电电压太低则转不起来。通过交换两根连接在电机上的导线顺序(实际上是改变电源的正负极),可以改变电机的转向。前面章节我们说过,直流电机属于高功耗元件,不可以直接使用树莓派进行驱动,因此我们需要使用一个外部电源。
       小型直流电机通常输出很高的转速和较低的扭矩,在作为机器人的驱动装置时,一般需要连接一个变速器,将其转换为低转速、高扭矩,使之有足够的力量驱动机器人。图7.1是典型的带变速器的小型直流电机,建议变速器和电机一起购买。
    图 7.1 带变速器的小型直流电机

    图 7.1 带变速器的小型直流电机

    7.2 双H桥直流电机驱动模块(L298N)

       H桥(H-Bridge)是控制直流电机的常用电路,因其电路形状酷似字母H而得名,可以控制直流电机的转速和方向,典型的H桥芯片有L293D、L298N等,以下我们以L298N为例进行介绍。实际使用的时候,为提高芯片的安全性、可靠性和方便性,我们一般会给芯片外接一些保护电路,并把输入输出引脚引接到排针上,从而形成一个功能模块。图7.2是一款典型的L298N双H桥直流电机驱动模块,可以很容易从网上购买到,价格也便宜。该模块的主要特点如下:
    图 7.2 L298N双H桥直流电机驱动模块

    图 7.2 L298N双H桥直流电机驱动模块

    • 采用L298N双桥直流电机驱动芯片
    • 工作电压范围5V35V,如果需要从模块内取电,则供电范围为7V35V
    • 峰值输出电流2A
    • 每个通道有一个使能输入端
    • 可以驱动两个直流电机或者一个四线步进电机

       L298N双H桥直流电机驱动模块的引脚可以归纳成电源、控制和输出等三大类,下面是各类引脚的功能说明。

    • 电压类引脚

       +12V输入:L298N芯片的电源正极,模块上标称+12V,但实际范围可以是5V35V,如果需从模块内取电,则其范围为7V35V。
       GND:L298N芯片的电源地,使用的时候应该把树莓派的GND接到这里,即两者需要共地。
       +5V输出:L298N芯片输出的5V电源,可以给外部设备供电,使用的时候需要用跳线把5V输出使能端短接起来。

    • 控制类引脚

       ENA、ENB:A、B通道的使能端,高电平有效,可以用PWM来实现调速。使用时,可以接到树莓派的GPIO上,实现用程序进行控制。
       IN1、IN2、IN3、IN4:IN1、IN2为A通道的控制输入,IN3、IN4为B通道的控制输入。

    • 输出类引脚

       OUT1、OUT2、OUT3、OUT4:OUT1、OUT2由A通道输出,OUT3、OUT4由B通道输出,可以用于连接直流电机等设备。

       控制直流电机的转向和转速实际是通过给控制类引脚设置不同的值来实现的,表7.1是使用通道A的控制直流电机的真值表,通道B与此类似。
    表 7.1 通道A的控制直流电机的真值表

    表 7.1 通道A的控制直流电机的真值表

    提示:

    您购买到的L298N双H桥直流电机驱动模块可能与本章介绍的存在一定的差异,但这一类功能模块大同小异,请跟商家索要相应的技术资料了解更多的使用细节。

    7.3 让直流电机动起来

       下面进入实战环节,我们将用树莓派通过L298N双H桥直流电机驱动模块控制一个电机的转向和转速。为了能让读者更好的理解,我们首先演示如何控制电机的转向,然后再进一步介绍如何控制电机转速。

    7.3.1 实验电路

       图7.3所示的是树莓派、L298N双H桥直流电机驱动模块和电机间连接的电路图,最终实物连线图如图7.4所示。我们使用树莓派的GPIO13、GPIO19和GPIO26等3个引脚,分别连接到L298N双H桥直流电机驱动模块的ENA、IN1和IN2,通过输入表7.1所示的不同电平组合就可以实现对电机的操纵。控制电机的转向和转速都是使用该电路,向ENA输入不同占空比的PWM脉冲信号就可以控制电机的转速。
    图 7.3 小型直流电机控制电路图

    图 7.3 小型直流电机控制电路图

    图 7.4 小型直流电机控制实物连接图

    图 7.4 小型直流电机控制实物连接图

       尽管L298N双H桥直流电机驱动模块能驱动两个直流电机,但我们只演示如何驱动一个。驱动两个电机使用的是相同的技术,如果在您的项目中需要用到两个,也可以很容易地扩展它。

    7.3.2 程序思路

       控制电机转向和转速可以使用同一个电路,但程序思路上我们分两个程序来演示,具体思路如下:

    • 控制电机转向思路
    BEGIN  
        引入GPIO库  
        将连接ENA的GPIO引脚设置为输出模式
        将连接IN1的GPIO引脚设置为输出模式
        将连接IN2的GPIO引脚设置为输出模式
        
        DO FOREVER  
            将IN1设置为0,IN2设置为1,将电机设置为正向转动  
            将ENA设置为1,驱动A通道电机转动  
            等待5秒  
    
            将ENA设置为0,停止电机转动  
            等待2秒  
    
            将IN1设置为1,IN2设置为0,将电机设置为反向转动  
            将ENA设置为1,驱动A通道电机转动  
            等待5秒  
    
            将ENA设置为0,停止电机转动  
            等待2秒
        ENDO  
        停止PWM  
        清理释放GPIO资源  
    END  
    

    提示:

    除了采用将ENA置0的方法来让电机停止转动,将IN1和IN2同时设置为0或1也可以让电机停止下来。

    • 控制电机转速思路
    BEGIN  
        引入GPIO库  
        将连接ENA的GPIO引脚设置为输出模式
        将连接IN1的GPIO引脚设置为输出模式
        将连接IN2的GPIO引脚设置为输出模式
    
        设置ENA输入一定频率的PWM脉冲信号,创建PWM对象  
        开始向ENA输入占空比为0的PWM脉冲信号  
        
        DO FOREVER  
            将IN1设置为0,IN2设置为1,将电机设置为正向转动  
            将ENA设置为1,驱动A通道电机转动  
            
            speed = 0
            DOWHILE speed < 100  
                将输入ENA的PWM脉冲信号的占空比修改为speed
                speed += 5
                等待1秒
            ENDDO
    
            将IN1设置为1,IN2设置为0,将电机设置为反向转动  
            将ENA设置为1,驱动A通道电机转动  
            
            speed = 0
            DOWHILE speed < 100  
                将输入ENA的PWM脉冲信号的占空比修改为speed
                speed += 5
                等待1秒
            ENDDO
        ENDO  
        
        停止PWM  
        清理释放GPIO资源  
    END  
    

       电机的转向控制和转速控制的程序思路的最大区别在于ENA输入信号的不同。控制电机转向的程序思路只是简单的通过将ENA设置为1或0来启动和停止电机。对于电机转速控制,ENA输入的PWM脉冲信号,通过改变PWM脉冲信号的占空比来改变电机转速,占空比越大速度就越快,占空比为100%时相当于输入1(高电平),占空比为0%时相当于输入0(低电平)。

    7.3.3 程序代码

       以下是直流电机转向和转速控制程序,程序的详细说明见注释。

    • 控制电机转向程序
    import RPi.GPIO as GPIO         # 引入GPIO模块
    import time                     # 引入time模块
    
    ENA = 13
    IN1 = 19
    IN2 = 26
    
    if __name__ == '__main__':
        try:
            # 初始化
            GPIO.setmode(GPIO.BCM)          # 使用BCM编号方式
            GPIO.setup(ENA, GPIO.OUT)       # 将连接ENA的GPIO引脚设置为输出模式
            GPIO.setup(IN1, GPIO.OUT)       # 将连接IN1的GPIO引脚设置为输出模式
            GPIO.setup(IN2, GPIO.OUT)       # 将连接IN2的GPIO引脚设置为输出模式
    
            while True:
                # 驱动电机正向旋转5秒
                GPIO.output(IN1, False)     # 将IN1设置为0
                GPIO.output(IN2, True)      # 将IN2设置为1
                GPIO.output(ENA, True)      # 将ENA设置为1,启动A通道电机
                time.sleep(5)            	# 等待电机转动5秒
    
                # 电机停止2秒
                GPIO.output(ENA, False)     # 将ENA设置为0
                time.sleep(2)            	# 等待电机停止2秒
    
                # 驱动电机反向旋转5秒
                GPIO.output(IN1, True)      # 将IN1设置为1
                GPIO.output(IN2, False)     # 将IN2设置为0
                GPIO.output(ENA, True)      # 将ENA设置为1,启动A通道电机
                time.sleep(5)            	# 等待电机转动5秒
    
                # 电机停止2秒
                GPIO.output(ENA, False)     # 将ENA设置为0
                time.sleep(2)            	# 等待电机停止2秒
    
        finally:
        	pwm.stop()                      # 停止PWM
            GPIO.cleanup()                  # 清理释放GPIO资源,将GPIO复位
    

       运行这个程序后,您将看到直流电机反复的正向转动5秒后,停止两秒,再反向转动5秒后,停止2秒。

    • 控制电机转速程序
    import RPi.GPIO as GPIO         # 引入GPIO模块
    import time                     # 引入time模块
    
    ENA = 13
    IN1 = 19
    IN2 = 26
    
    if __name__ == '__main__':
        try:
            # 初始化
            GPIO.setmode(GPIO.BCM)              # 使用BCM编号方式
            GPIO.setup(ENA, GPIO.OUT)           # 将ENA对应的GPIO引脚设置为输出模式
            GPIO.setup(IN1, GPIO.OUT)           # 将IN1对应的GPIO引脚设置为输出模式
            GPIO.setup(IN2, GPIO.OUT)           # 将IN2对应的GPIO引脚设置为输出模式
    
            freq = 500
            speed = 0
            pwm = GPIO.PWM(ENA, freq)           # 设置向ENA输入PWM脉冲信号,频率为freq并创建PWM对象
            pwm.start(speed)                    # 以speed的初始占空比开始向ENA输入PWM脉冲信号
    
            while True:
                # 将电机设置为正向转动
                GPIO.output(IN1, False)         # 将IN1设置为0
                GPIO.output(IN2, True)          # 将IN2设置为1
    
                # 通过改变PWM占空比,让电机转速不断加快
                for speed in range(0, 100, 5):
                    pwm.ChangeDutyCycle(speed)  # 改变PWM占空比
                    time.sleep(1)
    
                # 将电机设置为反向转动
                GPIO.output(IN1, True)          # 将IN1设置为1
                GPIO.output(IN2, False)         # 将IN2设置为0
    
                # 通过改变PWM占空比,让电机转速不断加快
                for speed in range(0, 100, 5):
                    pwm.ChangeDutyCycle(speed)  # 改变PWM占空比
                    time.sleep(1)
        finally:
            pwm.stop()                          # 停止PWM
            GPIO.cleanup()                      # 清理释放GPIO资源,将GPIO复位
    

       运行这个程序后,您将看到直流电机首先正向转动,转动速度不断增加,在达到最大转速后,直流电机短暂停止转动,然后反向转动,转动速度不断增加,如此反复运动。

    7.4 本章小结

       本章首先介绍了直流电机的基本知识,然后介绍了L298N双H桥直流电机驱动模块的相关基础知识,最后介绍了使用树莓派和L298N双H桥直流电机驱动模块来控制一个直流电机的转向和转速的电路、思路和程序等知识。

    后记

       最近工作太忙,项目在赶进度,几乎每周都有几天要跑现场,这两周又增加网络安全的事情,断断续续写了一个多月,乘着端午小长假陪完家人还有点时间,好不容易才把这篇给完成了。写这篇文章的成本算是较低,就烧坏了两个一块多钱的小直流电机。另外,把十几年没用过的烙铁又整了出来,居然还能焊得上,且没烧东西,算是对得起当年的老师哈!

    展开全文
  • 零基础玩转树莓派(五)—控制直流电机

    万次阅读 多人点赞 2018-10-17 19:31:17
    直流电机控制主要用到的硬件为: 1、烧写好系统的树莓派控制板·········1块 2、L298N电机驱动板模块···············1个 3、直流电机·························...

    前面教程学会如何使用树莓派来控制LED灯,接下来主要讲如何控制直流电机,这样就可以做小车等可以运动的项目,可玩性更高。

    一、硬件介绍

    直流电机控制主要用到的硬件为:
    1、烧写好系统的树莓派控制板·········1块
    2、L298N电机驱动板模块···············1个
    3、直流电机·································2个
    4、外接电源·································1个
    5、杜邦线···································若干
    注:由于树莓派自身没有电机驱动模块,因此控制电机时要配合L298N电机驱动板模块,一起来使用。
    在这里插入图片描述

    二、硬件连接

    连接原理图:
    在这里插入图片描述
    连接实物图:
    在这里插入图片描述

    三、程序启动电机转

    1、硬件按照上述连接好后,将树莓派上电,使用SSH远程连接树莓派
    在这里插入图片描述
    2、输入nano motor.py,创建一个名为motor的python文件

    nano motor.py
    

    在这里插入图片描述
    3、文件编辑界面输入以下内容:注意#后面为注释(# – coding: utf-8 – 除外),不参与程序运行,可以省略

    
    # -*- coding: utf-8 -*-                 #通过声明可以在程序中书写中文
    import RPi.GPIO as GPIO                 #引入RPi.GPIO库函数命名为GPIO
    import time                             #引入计时time函数
    
    # BOARD编号方式,基于插座引脚编号
    GPIO.setmode(GPIO.BOARD)                #将GPIO编程方式设置为BOARD模式
    
    #接口定义
    INT1 = 11                               #将L298 INT1口连接到树莓派Pin11
    INT2 = 12                               #将L298 INT2口连接到树莓派Pin12
    INT3 = 13                               #将L298 INT3口连接到树莓派Pin13
    INT4 = 15                               #将L298 INT4口连接到树莓派Pin15
    
    #输出模式
    GPIO.setup(INT1,GPIO.OUT)
    GPIO.setup(INT2,GPIO.OUT)
    GPIO.setup(INT3,GPIO.OUT)
    GPIO.setup(INT4,GPIO.OUT)
    
    GPIO.output(INT1,GPIO.HIGH)
    GPIO.output(INT2,GPIO.LOW)
    GPIO.output(INT3,GPIO.HIGH)
    GPIO.output(INT4,GPIO.LOW)
    
    

    程序主要通过控制电机驱动模块INT1-4接口来实现电机的运动
    在这里插入图片描述
    4、保存退出编辑界面,直行程序,会看到两电机开始转动

    sudo python motor.py
    

    四、控制电机转速

    树莓派3B+的PWM控制可以参考一下文档:https://www.jianshu.com/p/775b4fb2c98d 。此处直接使用相关知识。
    1、接线原理图
    在这里插入图片描述
    将L298的ENA与ENB分别接到树莓派的Pin16,Pin18接口。ENA与ENB分别为左右电机的使能接口,通过树莓派PWM输出,可以用来控制电机转速。(注:连接时需要将ENA、ENB上的跳帽拔掉)
    2、连接成功后,打开motor.py文件

    nano motor.py
    

    修改文件如下

    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    import time
    
    GPIO.setmode(GPIO.BOARD)
    
    INT1 = 11
    INT2 = 12
    INT3 = 13
    INT4 = 15
    ENA = 16
    ENB = 18
    
    GPIO.setup(INT1,GPIO.OUT)
    GPIO.setup(INT2,GPIO.OUT)
    GPIO.setup(INT3,GPIO.OUT)
    GPIO.setup(INT4,GPIO.OUT)
    GPIO.setup(ENA,GPIO.OUT)
    GPIO.setup(ENB,GPIO.OUT)
    
    pwma = GPIO.PWM(16,80)
    pwmb = GPIO.PWM(18,80)
    pwma.start(90)
    pwmb.start(90)
    GPIO.output(INT1,GPIO.HIGH)
    GPIO.output(INT2,GPIO.LOW)
    GPIO.output(INT3,GPIO.HIGH)
    GPIO.output(INT4,GPIO.LOW)
    
    while 1:
            pwma.ChangeDutyCycle(90)
            pwmb.ChangeDutyCycle(90)
            time.sleep(3)
            pwma.ChangeDutyCycle(10)
            pwmb.ChangeDutyCycle(10)
            time.sleep(3)
    
    

    3、保存退出文件并且执行程序,会看到两电机快转3秒,慢转3秒依次循环

    sudo python motor.py
    
    展开全文
  • 树莓派控制直流电机

    2019-08-03 23:25:27
    直流电机是一种将直流电能转换为机械能的装置,被广泛的用于驱动各种设备,如电风扇、遥控小车、电动车窗等,在控制设备运转领域中,它是不可或缺的一种设备。 小型直流电机的的电压范围通常是1.5V~30V,使用两根...

    古月金真

    1、直流电机

    直流电机是一种将直流电能转换为机械能的装置,被广泛的用于驱动各种设备,如电风扇、遥控小车、电动车窗等,在控制设备运转领域中,它是不可或缺的一种设备。

    小型直流电机的的电压范围通常是1.5V~30V,使用两根导线连接到直流电源上就能让电机转动起来,电压越高转得就越快。每个直流电机都有一个推荐电压,超出推荐电压太多容易导致电机被烧毁,而供电电压太低则转不起来。通过交换两根连接在电机上的导线顺序(实际上是改变电源的正负极),可以改变电机的转向。直流电机属于高功耗元件,不可以直接使用树莓派进行驱动,因此我们需要使用一个外部电源。

    小型直流电机通常输出很高的转速和较低的扭矩,在作为机器人的驱动装置时,一般需要连接一个变速器,将其转换为低转速、高扭矩,使之有足够的力量驱动机器人。
    下图为一个普通的直流电机图片。
    在这里插入图片描述

    2、双H桥直流电机驱动模块(L298N)

    H桥(H-Bridge)是控制直流电机的常用电路,因其电路形状酷似字母H而得名,可以控制直流电机的转速和方向,典型的H桥芯片有L293D、L298N等,我们以L298N为例进行介绍,下图是一款典型的L298N双H桥直流电机驱动模块。
    在这里插入图片描述
    在这里插入图片描述

    • 采用L298N双桥直流电机驱动芯片
    • 工作电压范围5V~35V,如果需要从模块内取电,则供电范围为7V—35V。
    • 峰值输出电流2A。
    • 每个通道有一个使能输入端。
    • 可以驱动两个直流电机或者一个四线步进电机。

    L298N双H桥直流电机驱动模块的引脚可以归纳成电源、控制和输出等三大类,下面是各类引脚的功能说明。

    • 电压类引脚

    +12V输入:L298N芯片的电源正极,模块上标称+12V,但实际范围可以是5V35V,如果需从模块内取电,则其范围为7V35V。
      GND:L298N芯片的电源地,使用的时候应该把树莓派的GND接到这里,即两者需要共地。
      +5V输出:L298N芯片输出的5V电源,可以给外部设备供电,使用的时候需要用跳线把5V输出使能端短接起来。

    • 控制类引脚

      ENA、ENB:A、B通道的使能端,高电平有效,可以用PWM来实现调速。使用时,可以接到树莓派的GPIO上,实现用程序进行控制。
      IN1、IN2、IN3、IN4:IN1、IN2为A通道的控制输入,IN3、IN4为B通道的控制输入。

    • 输出类引脚
      OUT1、OUT2、OUT3、OUT4:OUT1、OUT2由A通道输出,OUT3、OUT4由B通道输出,可以用于连接直流电机等设备。
        控制直流电机的转向和转速实际是通过给控制类引脚设置不同的值来实现的,表7.1是使用通道A的控制直流电机的真值表,通道B与此类似。
        在这里插入图片描述

    3.电路

    下图为树莓派、L298N双H桥直流电机驱动模块和电机间连接的电路图,最终实物连线图如图7.4所示。我们使用树莓派的GPIO13、GPIO19和GPIO26等3个引脚,分别连接到L298N双H桥直流电机驱动模块的ENA、IN1和IN2,通过输入表7.1所示的不同电平组合就可以实现对电机的操纵。控制电机的转向和转速都是使用该电路,向ENA输入不同占空比的PWM脉冲信号就可以控制电机的转速。
    在这里插入图片描述

    4、程序

    - 一、控制电机转动

       import RPi.GPIO as GPIO      # 引入GPIO模块
        
        ENA = 13                    #定义对应的引脚变量(等一下用)
        IN1 = 19
        IN2 = 26
        
        GPIO.setmode(GPIO.BCM)      # 使用BCM编号方式
        GPIO.setup(ENA, GPIO.OUT)   # 将连接ENA的GPIO引脚设置为输出模式
        GPIO.setup(IN1, GPIO.OUT)    # 将连接IN1的GPIO引脚设置为输出模式
        GPIO.setup(IN2, GPIO.OUT)    # 将连接IN2的GPIO引脚设置为输出模式
        
        while True:                   #循环
            GPIO.output(IN1, False)   # 将IN2设置为1
            GPIO.output(IN2,  True)   # 将IN2设置为1
            GPIO.output(ENA, True)    # 将ENA设置为1,启动A通道电机
        
        input()
        GPIO.cleanup()
    

    运行上面程序时,电机以L298N模块输出的最大电压正转。

    二、控制电机转动并调速

    import RPi.GPIO as GPIO     # 引入GPIO模块
    
    ENA = 13      #定义对应的引脚变量(等一下用)
    IN1 = 19
    IN2 = 26
    hz = 500       #定义频率变量(等一下用)
    speed = 0      #定义占空比变量(等下用)运行时默认的占空比为0
    
    GPIO.setmode(GPIO.BCM)    # 使用BCM编号方式
    GPIO.setup(ENA, GPIO.OUT) # 将ENA对应的GPIO引脚设置为输出模式
    GPIO.setup(IN1, GPIO.OUT)  # 将IN1对应的GPIO引脚设置为输出模式
    GPIO.setup(IN2, GPIO.OUT)  # 将IN2对应的GPIO引脚设置为输出模式
    pwm = GPIO.PWM(ENA, hz)    # 设置向ENA输入PWM脉冲信号,频率为hz并创建PWM对象
    pwm.start(speed)           # 以speed的初始占空比开始向ENA输入PWM脉冲信号
    
    while True:
        speed = int(input("Please input motor speed (1-100): "))   #程序运行时通过键盘输入占空比改变电机转速
        pwm.ChangeDutyCycle(speed)  # 改变PWM占空比
        GPIO.output(IN1, GPIO.LOW)    # 将IN1设置为0
        GPIO.output(IN2, GPIO.HIGH)    # 将IN2设置为1 ,电机正转
      
    input()
    GPIO.cleanup()
    

    当程序运行时,电机不转动,当输入在0~100数值的占空比后电机转动,输入数值越大L298N模块输出的最大电压越大,当输入数值100时电机以L298N模块输出的最大电压正转,当输入数值0时,L298N模块输出电压为0v,电机不转动,运行操作如下图所示。
    在这里插入图片描述
    三、控制电机正转、反转和停止

    import RPi.GPIO as GPIO    # 引入GPIO模块
    
    ENA = 13       #定义对应的引脚变量(等一下用)
    IN1 = 19
    IN2 = 26
    
    GPIO.setmode(GPIO.BCM)       # 使用BCM编号方式
    GPIO.setup(ENA, GPIO.OUT)    # 将连接ENA的GPIO引脚设置为输出模式
    GPIO.setup(IN1, GPIO.OUT)     # 将连接IN1的GPIO引脚设置为输出模式
    GPIO.setup(IN2, GPIO.OUT)     # 将连接IN2的GPIO引脚设置为输出模式
    
    a = int(input("zheng zhuan 0 ,fan zhuan 1,  ting 2 : "))  #程序运行时通过键盘输入0、1、2分别控制电机正转、反转和停止
    while True:
        if a == 0:   #如果键盘输入的数值为0,则电机正转
            while 1:
                GPIO.output(IN1, GPIO.LOW)
                GPIO.output(IN2, GPIO.HIGH)
                GPIO.output(ENA, GPIO.HIGH)
                a = int(input("zheng zhuan 0 ,fan zhuan 1,  ting 2 : "))
                if (a == 1 or a == 2):  
                    break
    
        if a == 1:    #如果键盘输入的数值为1,则电机反转
            while 1:
                GPIO.output(IN1, GPIO.HIGH)
                GPIO.output(IN2, GPIO.LOW)
                GPIO.output(ENA, GPIO.HIGH)
                a = int(input("zheng zhuan 0 ,fan zhuan 1,  ting 2 : "))
                if (a == 0 or a == 2):
                    break
    
        if a == 2:      #如果键盘输入的数值为2,则电机停止转动
            while 1:
                GPIO.output(IN1, GPIO.LOW)
                GPIO.output(IN2, GPIO.LOW)
                GPIO.output(ENA, GPIO.LOW)
                a = int(input("zheng zhuan 0 ,fan zhuan 1,  ting 2 : "))
                if (a == 0 or a == 1):
                    break
    input()
    GPIO.cleanup()
    

    当程序运行时,如果键盘输入的数值为0,则电机正转。 如果键盘输入的数值为1,则电机反转。如果键盘输入的数值为2,则电机停止转动,运行参照如下图所示。

    在这里插入图片描述
    四、控制电机正转、反转和停止并现在速度的控制

    import RPi.GPIO as GPIO    # 引入GPIO模块
    
    ENA = 13    #定义对应的引脚变量(等一下用)
    IN1 = 19
    IN2 = 26
    hz = 500     #定义频率变量(等一下用)
    speed = 0    #定义占空比变量(等下用)运行时默认的占空比为0
    
    GPIO.setmode(GPIO.BCM)    # 使用BCM编号方式
    GPIO.setup(ENA, GPIO.OUT)  # 将连接ENA的GPIO引脚设置为输出模式
    GPIO.setup(IN1, GPIO.OUT)   # 将连接IN1的GPIO引脚设置为输出模式
    GPIO.setup(IN2, GPIO.OUT)   # 将连接IN2的GPIO引脚设置为输出模式
    pwm = GPIO.PWM(ENA, hz)   # 设置向ENA输入PWM脉冲信号,频率为hz并创建PWM对象
    pwm.start(speed)         # 以speed的初始占空比开始向ENA输入PWM脉冲信号
    
    a = int(input("Positive : 0 , Reversal:1,  Stop: 2, speed:3   :")) #键盘输入0、1、2、3可控制电机正、反、停和改变速度。
    speed = int(input("Please input the motor speed (0-100): "))     #键盘输入电机开始运行的速度
    while True:
        if a == 0:     #如果键盘输入的数值为0,则电机正转
            while 1:
                if a == 3:   #如果键盘输入的数值为3,输入数值0~100可改变占空比来改变电机转速
                    speed = int(input("Please input the motor speed (0-100): "))
                GPIO.output(IN1, GPIO.LOW)
                GPIO.output(IN2, GPIO.HIGH)
                pwm.ChangeDutyCycle(speed)   # 改变PWM占空比
                a = int(input("Positive : 0 , Reversal:1,  Stop: 2, speed: 3  :"))
                if (a == 1 or a == 2):
                    break
    
        if a == 1:      #如果键盘输入的数值为1,则电机反转
            while 1:
                if a == 3:
                    speed = int(input("Please input the motor speed (0-100): "))
                GPIO.output(IN1, GPIO.HIGH)
                GPIO.output(IN2, GPIO.LOW)
                pwm.ChangeDutyCycle(speed)
                a = int(input("Positive : 0 , Reversal:1,  Stop: 2, speed: 3  :"))
                if (a == 0 or a == 2):
                    break
    
        if a == 2:      #如果键盘输入的数值为2,则电机停止转动
            while 1:
                 if a == 3:
                    speed = int(input("Please input the motor speed (0-100): "))
                 GPIO.output(IN1, GPIO.LOW)
                 GPIO.output(IN2, GPIO.LOW)
                 GPIO.output(ENA, GPIO.LOW)
                 a = int(input("Positive : 0 , Reversal:1,  Stop: 2, speed: 3  :"))
                 if (a == 0 or a == 1):
                     break            
    input()
    GPIO.cleanup()
    

    当程序运行时,如果键盘输入的数值为0,则电机正转。 如果键盘输入的数值为1,则电机反转。如果键盘输入的数值为2,则电机停止转动。如果键盘输入的数值为3,可以输入数值0~100可改变占空比来改变电机转速,输入数值越大L298N模块输出的最大电压越大,当输入数值100时电机以L298N模块输出的最大电压正转,当输入数值0时,L298N模块输出电压为0v,电机不转动,运行操作如下图所示。
    在这里插入图片描述

    展开全文
  • 实物图: 硬件接入:vcc接5v到12v...A-1A输入高电平,A-1B输入低电平,电机正转 反之则电机反转 代码: #include <wiringPi.h> #include <stdio.h> #include <pthread.h> #define IN1 2 #define ...

    实物图:
    在这里插入图片描述
    硬件接入:vcc接5v到12v,gnd接负极,A-1A,A-1B,B-1A,B-2A,可以分别接到GPIO口
    A-1A输入高电平,A-1B输入低电平,电机正转
    反之则电机反转

    代码:
    #include <wiringPi.h>
    #include <stdio.h>
    #include <pthread.h>
    #define IN1 2
    #define IN2 3
    #define IN3 4
    #define IN4 5

    void ultraInit(void) {
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    }

    void setStep(int a,int b,int c,int d){ //写入电平
    digitalWrite(IN1, a);
    digitalWrite(IN2, b);
    digitalWrite(IN3, c);
    digitalWrite(IN4, d);

    }

    void stop() { setStep(0, 0, 0, 0); }

    int main(void) {
    if (wiringPiSetup() == -1) {
    printf(“setup wiringPi failed !”);
    return 1;
    }
    ultraInit();
    while (1) {
    setStep(1,0,1,0);//前进
    setStep(0,1,0,1,)//后退
    setStep(1,0,0,0)//左转
    setStep(1,0,0,0)//右转
    delay(2000);
    stop();
    delay(2000); // 2s
    }
    return 0;
    }

    展开全文
  • 关于树莓派控制电机--Python

    万次阅读 2017-08-16 22:59:32
    一个月前开始玩树莓派3,由于树莓派是基于linux系统,用Python语言来控制。所以入门Python语言,当然最爽的就是驱动电机,根据自己的想法来控制。不得不说,Python语言控制很有优势,代码简单而且没有很多繁琐的逻辑...
  • 树莓派 - L298N模块 驱动直流电机

    千次阅读 2018-03-18 16:45:06
    单片机或树莓派一般使用 L298n 模块来驱动电机 。L298N的实物图如下。 [img]http://dl2.iteye.com/upload/attachment/0129/1777/c59d5e4a-32e0-3e73-9829-a37ccccb5ad3.jpg[/img] 注意的地方: 1. 5v电源可以...
  • 树莓派3B 硬件PWM的实现控制,呼吸灯和直流电机速度控制
  • 树莓派pwm控制无刷电机

    千次阅读 2017-04-26 01:19:17
    树莓派3 *1 无刷电调30A *1 无刷电机A2212 1400kv *1 7.4V电源 *1 5V电源 *1 连接线材若干简单连接图如下: 代码:import RPi.GPIO as gpio import time, sys#我用的第12个引脚 pin = 12 gpio.setmode(gpio....
  • 树莓派和电机 ... 提到了 L298N 搜索 树莓派 L298N,得到 ... 似乎L298N是控制直流电机的,ULN2003是控制步进电机的 搜索 步进电机和直流电机,得到 https://zhidao.baidu.com...
  • #机械臂2--树莓派Python 步进电机驱动TB6600 控制步进电机步进电机驱动和步进电机的连线一、端口说明(1)、信号输入端(2)、电机绕组连接(3)、电源电压连接(4)、输入端接线说明(5)、连接完成后如图所示: ...
  • 零基础玩转树莓派(一)

    千次阅读 2018-09-17 19:01:55
    零基础玩转树莓派 本教程主要针对零基础小白用户,通过教程学习可以最终做出一个树莓派远程控制小车,并在此过程中学习涉及到的相关知识,还望各位多多指导交流。 主要内容: 树莓派环境搭建 树莓派GPIO...
  • 学习树莓派3B GPIO输入模式即按键控制LED亮灭。
  • 利用树莓派打造一款避障小车(转-学习)

    万次阅读 多人点赞 2018-06-26 11:33:33
    但是内心却非常的强大,视频,音频等功能都是有的,现在树莓派3版本有1G内存,1.2GHZ频率,拥有操作系统的树莓派预留了40个可以驱动各种传感器和驱动器的I/O接口,所以我们使用树莓派作为机器人的控制器,...
  • 树莓派智能小车开发详解

    千次阅读 多人点赞 2019-09-21 18:48:35
    因此我想写这篇文章,希望你能花费更少的时间和金钱,拥有底层的可移置代码、更高端的控制理念,得到一个可持续研发的智能小车方案。 智能小车真的很重要,它不仅是能够把代码与实践连接起来的简单实例,而且在即将...
  • 上一篇介绍了树莓派控制直流电机,现在就可以做一个小车,通过远程来控制。 一、硬件连接 找有个小车底盘,将上一篇中用到的所有东西固定到小车底盘上,搭建一个小车,并将所有线路连接好。 二、L298控制 小车需要...
  • (12)树莓派B+ GPIO控制四驱车

    千次阅读 2015-05-21 11:44:21
    吐槽一下:本人还是个小白,CSDN文章分类不知道选哪个 如果你手上的材料是五...很多人因为在购置树莓派外围设备时,没有考虑清楚,随随便便就买了电机和驱动板,导致无法正常驱动电机,譬如我买的是带4个直流电机的四
  • 树莓派系统镜像烧录

    千次阅读 2016-01-14 11:40:35
    树莓派系统镜像烧录到Micro-SD卡中 发表于2015 年 12 月 14 日 准备工作: 1.一张2G以上的SD卡,最好是高速卡,推荐Class4以上的卡,因为卡得速度直接影响树莓派的运行速度。 2.下载树莓派...
  • 树莓派GPIO进阶-驱动电机

    千次阅读 2019-06-05 16:19:45
    树莓派GPIO进阶-驱动双普通直流电机 树莓派GPIO进阶-驱动步进电机 文章来自公众号:技术Pi
  • 第8章 树莓派控制伺服电机(舵机)

    千次阅读 2019-07-03 14:42:17
      伺服电机主要适用于那些需要角度不断变化并可以保持的控制系统,我们常见的的机械臂...使用树莓派控制伺服电机的实践。   本章我们将继续使用第5章搭建的多功能实验平台。此外,还需要一个伺服电机...
  • 树莓派 Raspberry Pi 基于 wiringPi库 舵机控制

    千次阅读 热门讨论 2018-06-23 18:36:41
      舵机是伺服电机的一种,在日常的开发中经常会用到。在此调用wiringPi库来控制舵机,如果没有安装wiringPi库的朋友可以看另外一篇博客wiringPi安装教程。 舵机介绍   舵机一般体积比较小,扭矩虽然不是大,...
1 2 3 4 5 ... 12
收藏数 232
精华内容 92
关键字:

树莓派控制直流电机