资讯详情

树莓派基础实验34:L298N模块驱动直流电机实验

一、介绍

??直流电机是一种将直流电能转化为机械能的电机。由于其良好的调速性能,广泛应用于电动拖动,用于驱动电风扇、遥控车、电动车窗等各种设备,也非常适合机器人行走机构。

??L298N是ST公司生产的高压大电流电机驱动芯片包含两个H桥高压大电流全桥驱动器,可用于驱动直流电机、步进电机、继电器线圈等感知负载;采用标准逻辑电平信号控制;有两个可控端。该芯片可以驱动两相步进电机或四相步进电机或两个直流电机。

二、组件

★Raspberry Pi 3主板*1

★树莓派电源*1

★L298N模块*1

★DC3V-6V直流减速电机TT马达*1

★微型数字直流电压表头*1(可选)

★18650可充电锂电池*2

★面包板*1(可选)

★40P软排线*1

跳线若干

三、实验原理

L298N模块

(一)、L298N模块

L298N双H桥直流电机驱动模块的引脚可分为电源、控制和输出三类,以下是各种引脚的功能说明。

1.电压引脚

VCC输入:L298N芯片的电源正极,范围可以是5V ~ 35V,如果树莓派需要从模块中取电,其范围为7V~35V。

GND:L298N使用芯片电源时,应使用覆盆子派GND在这里,即两者需要共用,否则电机不会转动。

5V输出:L298N芯片输出的5V电源可以为外部设备供电,但需要VCC输入要达到7V以上。

2.控制类引脚

ENA、ENB:A、B可使用通道的使能端,高电平PWM实现调速,输入不同比例的使能端PWM脉冲信号可以控制电机的速度。使用时,可以接收树莓派GPIO实现用程序控制。

INA、INB、INC、IND:INA、INB控制输入A通道,INC、IND控制输入B通道。

直流电机的控制模式和状态表如下:

3.输出引脚

OUTA、OUTB输出A通道,为直流电机等设备提供电源。

OUTC、OUTD输出B通道,为直流电机等设备提供电源。

直流电机的转向和转速控制实际上是通过设置不同的值来实现的

(二)直流减速电机

在了解直流电机的工作原理之前,先复习一下高中的物理知识: 第一.左手定则

当通电导线处于磁场中时,受到安培力的影响 F (或运动)方向,磁感应强度B方向 以及通电导体棒电流I三个方向之间的关系定律。 简而言之,让磁感线穿过手掌前部,手指方向是电流方向,拇指方向是产生磁力的方向

第二.右手定则

右手定则是产生电势的原理,也是发电机 让磁感线穿过手掌,拇指方向是运动方向,手指方向是电势方向。

1.直流电机的原理

直流电机固定环永磁体,电流通过转子线圈产生安培力,当转子线圈平行于磁场时,继续转动磁场方向会改变,因此转子末端刷与转换器交替接触,线圈电流方向也会改变,洛伦兹力方向不变,因此电机可以保持方向旋转。

2.直流电机的类型

2.1有刷电机 顾名思义,有刷子,主要作用是使中间转子与电源有电气连接,也可以旋转。

为了使两者之间既有接触,又有导电性;并且有旋转,以实现电流的伪装,一般的做法是在碳刷中添加一个弹簧。这样,换向器和碳刷就会有频繁的摩擦。所以碳刷很容易磨损,必须经常更换。磨损的碳渣在电机中形成碳积累,需要经常清洗。

早期电机都是有刷电机,后来为了解决磨损,有了无刷电机。

2.2无刷电机 在无刷电机中,换相工作交给控制器中的控制电路(通常是霍尔传感器编码器是一种更先进的控制器技术。

无刷电机采用电子方向,线圈不移动,磁极旋转。无刷电机,是使用一套电子设备,通过霍尔元件,感知永磁体磁极的位置,根据此感知,使用电子线路,及时切换线圈中电流的方向,以确保磁力的正确方向,驱动电机。消除了刷电机的缺点。

2.3直流减速电机 一般来说,直流电机的转速是每分钟数千转,因此通常需要安装减速器。减速器是一种相对精密的机械部件。使用它的目的是降低速度和增加扭矩。减速后,直流电机的扭矩增大,可控性更强。根据不同的传动等级,可分为单级和多级减速器;根据传动类型可分为

齿轮减速器:体积小,传动扭矩大,但有一定的回程间隙。 蜗杆减速器:具有反向自功能,减速比大,但一般体积大,传动效率低,精度低。 行星减速器:结构紧凑,回程间隙小,精度高,使用寿命长,额定输出扭矩大,但价格略贵。

(3)直流电压表头

用于监测18650电池组电压,及时掌握电池电压状态,便于及时充电。也可用于手机锂电池、镍氢电池组等电池组的电压,以及摩托车、汽车等电池的电压。

1、本电压表接线简单,常用两条线,红接正,黑接负,内有反接保护,接反不烧。

2.常规无外部工作电源,可直接用测量电压工作,测量二线电压范围.4-30V。

3.宽电压工作,红色最低测量电压2.4V,最大安全承压可达400V ,超过40V可能损坏。

4、在测量10V在测量以下电压时,小数点后显示两位;测量10V在上述电压下,小数点后显示一个。

(4)18650电池组

由于电动机需要的电流远远大于树莓派GPIO由于供电能力,必须使用外部电源。选择大容量18650电池是个不错的选择。这是许多充电宝和电动汽车电池组使用的。

同时,使用电机的场景总是移动,因此电池组可能不得不向树莓派供电。以前买套装的时候赠送的18650电池,每次都充满电,只强了10分钟,电压下降很快。这是我选择的一个宝藏SupFire/神火电池,负极添加保护芯片AB5-S,一个39元,充电器还算另一笔钱。然而,效果要好得多。充满电后,串联两个电池的初始8.23V,每天做一个电机实验,还有7个.6V。

四、实验步骤

?? 连接电路。

树莓派(name) T型转接板(BCM) L298N模块
GPIO4 G23 INA
GPIO5 G24 INB
GPIO1 G18 EMA
GND GND GND
L298N模块 电池组 电压表头 马达
VCC
GND - -
OUTC +
OUTD -

这里必须说一下,上面的电路图是使用电子设计自动化软件Fritzing画的,易学好用,但是必须要学习哈,光看是半天搞不懂滴!

特别是元件库里找不到的电子元件,只能自己创建,就需要自己画SVG图(Scalable Vector Graphics,意思为可缩放的矢量图形),这里我用的是Inkscape,一款外国开发的开源矢量图形编辑软件。画图中的一个重要经验是:在Friting里找到并导出类似的元件SVG图,然后在Inkscape里修改,最后又导入Friting里合成。

学会第一次虽慢,但是以后就难不倒你了,而且画得很快!

Fritzing下载地址https://fritzing.org/download/ Inkscape下载地址https://inkscape.org/release/inkscape-1.0/

   基础实验里我只用L298N的B通道控制了一个电机,控制命令也很粗糙,后面我会做智能小车的综合实验,会实现图形界面控制和自动循迹。   当输入r0 ~ r9,速度由0到快;当输入f0 ~ f9,反方向速度由0到快;当输入b时,电机制动。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time

ENB = 18  #使能信号
INC = 23  #信号输入1
IND = 24  #信号输入2

GPIO.setwarnings(False)  #关闭警告信息

def setup(enable_pin,in1_pin,in2_pin):
    '''初始化引脚'''
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(enable_pin, GPIO.OUT)
    GPIO.setup(in1_pin, GPIO.OUT)
    GPIO.setup(in2_pin, GPIO.OUT)
    
def pwm(enable_pin): 
    '''初始化PWM(脉宽调制)'''   
    pwm = GPIO.PWM(enable_pin, 500)
    pwm.start(0)
    return pwm

def changespeed(pwm,speed):
    '''通过改变占空比改变马达转速'''
    pwm.ChangeDutyCycle(speed)
    
def clockwise(in1_pin,in2_pin):
    '''马达顺时针转的信号'''
    GPIO.output(in1_pin, 1)    
    GPIO.output(in2_pin, 0)
 
def counter_clockwise(in1_pin,in2_pin):
    '''马达逆时针转的信号'''
    GPIO.output(in1_pin, 0)
    GPIO.output(in2_pin, 1)
    
def brake(pwm,in1_pin,in2_pin):
    '''马达制动的信号'''
    GPIO.output(in1_pin, 0)
    GPIO.output(in2_pin, 0)
    changespeed(pwm,100) 
    #使能信号为高电平,IN1和IN2都为0或1时马达制动

def loop():
    while True:
        '''通过输入的命令改变马达转动'''
        cmd = input("Command, f/r/b 0..9, E.g. f5 :")
        direction = cmd[0]
        if direction == "f":
            clockwise(INC,IND)
        if direction == "r":
            counter_clockwise(INC,IND)
        if direction == "b": #刹车制动,
            brake(ENB_pwm,INC,IND)
            continue
            
        speed = int(cmd[1]) * 10 #通过输入0~9的数字更改占空比0~90%
        changespeed(ENB_pwm,speed)

def destroy():
    ENB_pwm.stop()
    GPIO.cleanup()                     # Release resource

if __name__ == '__main__':     # Program start from here
    
    try:
        setup(ENB,INC,IND) #初始化引脚
        ENB_pwm=pwm(ENB)   #初始化PWM
        loop()
    except KeyboardInterrupt:  # When 'Ctrl+C' is pressed
        destroy()
    finally:
        destroy()

  实验结果示例:

标签: 传感器碳刷

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台