Arduino教程-09.控制直流电机(寻迹避障小车)

目录

      • 3.1 电机
      • 3.2 认识晶体管元器件
      • 3.3 控制电机正反转的H桥式电机控制电路
        • 3.3.1 使用专用IC(L298)控制电机
        • 3.3.2 **L298N引脚图及功能**
        • 3.3.3 L298N驱动模块说明
      • 3.4 实验活动
        • 活动一:自动回避障碍物的自走车

转载:L298N电机驱动模块详解

3.1 电机

直流电机内部有磁铁、转子和碳刷等组件组成,将电机的+、-极和电池相连,即可正转或逆转。
电机在运转时,碳刷和整流子之间会产生火花,进而引发干扰,影响到微处理器或无线遥控器的运行。为了消除噪声,通常在碳刷电机的+、-极之间焊接一个0.01~0.1uF的电容。

  1. 步进电机 是一种易于控制旋转角度和转动圈数的电机,常见于需要精确定位的自动控制系统,比如:打印机、光驱等,仅仅接上电源,步进电机是不会转动的,步进电机有四条控制线和两条电源线,微处理器从控制线输入脉冲(即:高、低电位变化),步进电机的转子就会配合脉冲数转动到对应的角度。
    脉冲产生器发出的信号,轮流驱使电机转动一个角度,转动一圈所需要的次数以及每次转动的角度,分别称为“步数”和“步进角”。
    缺点: 体积、重量以及消耗电力都比较大,因此许多需要控制旋转角度的装置,都改用 舵机

  2. 直流电机 又称为“碳刷电机”,因为它通过碳刷将电力传输给转子。碳刷需要清理也会损耗,因此许多电器逐步改用无刷电机,无刷电机的结构以及驱动方式,都和一般碳刷电机不同
    直流电机的技术文件
    从电机的技术文件所列举的转速和扭力参数,可得知该电机是否符合转速和负重的需求;工作电压和消耗电流参数,则关系到电源和控制器的配置。
    表:RF-300电机

最大效率 堵转(STALL)
工作电压 转速 电流 扭力 输出 扭力 电流
1.6~6.5V 1710转/分钟 0.0525A 0.27mN·m 2.8g·cm 0.049W 1.22mN·m 12g·cm 0.18A
表:**FA-130**电机
最大效率 堵转(STALL)
工作电压 转速 电流 扭力 输出 扭力 电流
1.5~3V 6990转/分钟 0.66A 0.59mN·m 6.0g·cm 0.43W 2.55mN·m 26g·cm 2.20A
设计电机的晶体管控制电路时,最重要的两个参数是**工作电压和堵转电流**。堵转代表电机轴心受到外力卡住而停止,此时电机线圈形同短路状态,电机的负荷越重,电流越大,发热量也就增加。

3.2 认识晶体管元器件

晶体管是最基本的驱动接口,微处理器只需要送出微小的信号,即可通过它控制外部装置。它很像水管中的阀门,平时处于关闭状态,但只要稍微施力,就能启动阀门,让大量水流通过。
晶体管有三只引脚,分别叫做B(基极)C(集电极)E(发射极)集电极(Collector) 代表收集电流,发射极(Emitter) 代表射出电流,基极(Base) 相当于控制台。

3.3 控制电机正反转的H桥式电机控制电路

3.3.1 使用专用IC(L298)控制电机

L298内部包含两组H桥式电路,可以驱动并控制电机的正反转,
L298N内部原理图
Arduino教程-09.控制直流电机(寻迹避障小车)_第1张图片

3.3.2 L298N引脚图及功能

Arduino教程-09.控制直流电机(寻迹避障小车)_第2张图片
L298N 有两组电源输入脚,一个用于IC本身(芯片电源,5V),另一个用于电机;有两个使能引脚,用于决定是否供电给电机。L298N 有检测电机是否处于“堵转”状态,原理是:“当电机的负荷增加时,消耗的电流量也跟着增加,因此,从电流的消耗量,可得知电机是否运行平顺。”如果要启用这项功能,必须在“电流监测”脚位连接电阻;若不适用“电流监测”功能,请将电流监测的1和15脚位接地。

3.3.3 L298N驱动模块说明

Arduino教程-09.控制直流电机(寻迹避障小车)_第3张图片

  • +12V:该引脚接的电压是驱动模块所能输出给电机的最大电压,一般 直接接电池。12V是由L298N芯片所能接受最大电压而定,一般介入5~12V电压。在此我们接入的电压为9V电池的电压;
  • GND: 在该项目中GND即为电源的负极,同时要保证Arduino开发板,驱动模块等所有模块的GND连在一起才可以正常工作。在某些复杂的项目中还需要区分数字地和模拟地,在此不做详细介绍。
  • +5V: L298N模块(注意不是L298N芯片)内含稳压电路(将高电压转换为低电压的电路),在模块内部将”+12V”引脚输入的电压转化为可供开发板使用的+5V电压,一般将次输出接入到开发板为开发板供电。

一组电机都有三个控制引脚,使能、输入A和输入B,这三个引脚和电机的运转关系:
L298N逻辑功能表
将IN1~4分别接到arduino上digital的口,初始化后使用digitalWrite就可以实现正反转了,将ENA/ENB(接到arduino上带 ~ 的端子(3 5 6 9 10 11,就是能输出PWM波的端子)初始化后使用analogWrite输出PWM波就可以调速了:

使能A 输入1A 输入1B 电机状态
正转
反转
输入1B 输入1A 快速停止(刹车)
× × 停止(自由滑行)

×:代表任何状态
在需要精确定位的场合,可以将两个输入信号反转,造成“刹车”效果

有些L298N电机控制器,使用另一个IC(型号:74HC14)来简化电机正反转控制,每个输入端只有使能和正反转两个引脚

这种控制器的输入输出关系表

EA/EB(使能) IA/IB(正反转) 电机状态
正转
反转
× ×

3.4 实验活动

活动一:自动回避障碍物的自走车

实验说明: 采用一个L298N控制器以及超声波传感器,制作一个遇到前方有障碍物时,能自动转向的自走车。
实验材料:

物品 数量
超声波传感器 1
L298N电机控制模块 1
电机(请在小电机的电源焊接一个0.1uF(104)电容,避免电机的噪声干扰处理器 2
const byte TrigPin = 13;
const int EchoPin = 12;
const int dangerThresh =580;
cont byte speed = 100;

long distance ;
const byte ENA = 5;
const byte ENB = 6;
const byte IN1 = 10;
const byte IN2 = 9;
const byte IN3 = 8;
const byte IN4 = 7;

byte dir = 0;
void stop() {
	analogWrite(ENA, 0);
	analogWrite(ENB, 0);
}

void forward() {
	analogWrite(ENA, speed);
	digitalWrite(IN1, HIGH);
	dititalWrite(IN2, LOW);
	analogWrite(ENB, speed);
	digitalWrite(IN3, HIGH);
	digitalWrite(IN4, LOW);
}

void backward() {
	analogWrite(ENA, speed);
	digitalWrite(IN2, HIGH);
	dititalWrite(IN1, LOW);
	analogWrite(ENB, speed);
	digitalWrite(IN4, HIGH);
	digitalWrite(IN3, LOW);
}

void turnLeft() {
	analogWrite(ENA, speed);
	digitalWrite(IN2, HIGH);
	dititalWrite(IN1, LOW);
	analogWrite(ENB, speed);
	digitalWrite(IN3, HIGH);
	digitalWrite(IN4, LOW);
}

void turnRight() {
	analogWrite(ENA, speed);
	digitalWrite(IN1, HIGH);
	dititalWrite(IN2, LOW);
	analogWrite(ENB, speed);
	digitalWrite(IN4, HIGH);
	digitalWrite(IN3, LOW);
}
long ping() {
	digitalWrite(TrigPin, HIGH);
	delayMicroseconds(5);
	digitalWrite(TrigPin, LOW);
	return pulseIn(EchoPin, HIGH);
}

void loop() {
	distance = ping();
	if (distance > dangerThresh) {
		if (dir != 0) {
			dir = 0;
			stop();
			delay(500);
		}
		forward();
	} else {
		if (dir != 1) {
			dir = 1;
			stop();
			delay(500);
		}
		turnRight();
	}
	delay(1000);
}

实验结果: 编译与下载程序之后,两个电机将开始正转,若超声波传感器感知到遮挡,两个电机首先暂停0.5秒,接着,A电机将持续正转,B电机则会反转;若前方无障碍物,两个电机首先暂停0.5秒,再一起正转。每次在切换电机状态之前先暂停0.5秒,可以避免电机频繁地正、反转而导致寿命降低。

你可能感兴趣的:(arduino,课程)