Arduino控制直流电机

认识直流电机

直流电机内部有磁铁、转子和碳刷等组件组成,将电机的+、-极和电池相连,即可正转或逆转。
电机在运转时,碳刷和整流子之间会产生火花,进而引发干扰,影响到微处理器或无线遥控器的运行。为了消除噪声,通常在碳刷电机的+、-极之间焊接一个0.01~0.1uF的电容。
步进电机 是一种易于控制旋转角度和转动圈数的电机,常见于需要精确定位的自动控制系统,比如:打印机、光驱等,仅仅接上电源,步进电机是不会转动的,步进电机有四条控制线和两条电源线,微处理器从控制线输入脉冲(即:高、低电位变化),步进电机的转子就会配合脉冲数转动到对应的角度。
脉冲产生器发出的信号,轮流驱使电机转动一个角度,转动一圈所需要的次数以及每次转动的角度,分别称为“步数”和“步进角”。

缺点: 体积、重量以及消耗电力都比较大,因此许多需要控制旋转角度的装置,都改用 舵机

直流电机 又称为“碳刷电机”,因为它通过碳刷将电力传输给转子。碳刷需要清理也会损耗,因此许多电器逐步改用无刷电机,无刷电机的结构以及驱动方式,都和一般碳刷电机不同
直流电机的技术文件
从电机的技术文件所列举的转速和扭力参数,可得知该电机是否符合转速和负重的需求;工作电压和消耗电流参数,则关系到电源和控制器的配置。
表: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
设计电机的晶体管控制电路时,最重要的两个参数是**工作电压和堵转电流**。堵转代表电机轴心受到外力卡住而停止,此时电机线圈形同短路状态,电机的负荷越重,电流越大,发热量也就增加。

认识晶体管元器件

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

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

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

L298内部包含两组H桥式电路,可以驱动并控制电机的正反转,
L298N内部原理图
L298N内部原理图
L298N引脚图及功能
L298N引脚图
L298N 有两组电源输入脚,一个用于IC本身(芯片电源,5V),另一个用于电机;有两个使能引脚,用于决定是否供电给电机。L298N 有检测电机是否处于“堵转”状态,原理是:“当电机的负荷增加时,消耗的电流量也跟着增加,因此,从电流的消耗量,可得知电机是否运行平顺。”如果要启用这项功能,必须在“电流监测”脚位连接电阻;若不适用“电流监测”功能,请将电流监测的1和15脚位接地。
一组电机都有三个控制引脚,使能、输入A和输入B,这三个引脚和电机的运转关系:
L298N逻辑功能表

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

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

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

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

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

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

实验说明: 采用一个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秒,可以避免电机频繁地正、反转而导致寿命降低。

猜你喜欢

转载自blog.csdn.net/acktomas/article/details/83926837