本系列连载将介绍电力电子相关的基础知识和各种小知识。本系列涉及到的内容很广泛,涵盖从基础知识到应用部分的丰富内容,希望能够帮到那些“至今不好意思问别人,但又拿不准自己是否已经理解了”的人。
在要开始电子制作时,有些人可能会想尝试制作一些电动的作品,比如“想试着制作一个机器人”或“想尝试制作一个可以动的装置”。这些作品中,多会用到电机,通过齿轮减缓电机的转速使车轮转动或使连杆机构动起来,可以实现丰富的运动。
在电子小知识系列的第2篇中,将为您介绍用来驱动电机的“电机驱动器”。这次,我们将以“通过Arduino控制电机”为目标,来了解电机驱动器IC的使用方法。
1. 什么是电机驱动器?
顾名思义,“电机驱动器”是用来驱动电机的。如果只是将干电池与电机相连接,电机只会根据干电池的电压全速向一个方向旋转,而如果能恰当地使用电机驱动器,则可以根据需求灵活控制电机,比如可以让它正转、反转,还可以设置为自己想要的转速。
视频 使电机正转和反转的场景
https://www.youtube.com/embed/3cFut5gckQM
※此链接为Youtube视频
2. 通过H桥电路控制电机的正反转
首先我们来了解一下电机的正反转机制及其原理。
使电机仅正向旋转的电路配置如图2.1所示。
图2.1 电机正转电路
在该电路中,要使电机反转,您必须手动重新将电池和电机反向接线。当然,考虑到需要将电机安装在机器人或设备中时,这种手动接线的麻烦事是不现实的。
对此,有一种称为“H桥”式的电路配置方法,可以实现电机的正转和反转。如图2.2所示,H桥是通过在VCC和GND方向上将共四个开关连接到电机的两个引脚构建而成的。
图2.2 H桥的基本结构
使电机正转时,如图2.3所示,只有左上和右下的开关ON;使电机反转时,只有右上和左下开关ON,这样通过开关的ON/OFF组合,就可以简单地实现电机的正转和反转。另外,需要注意的是,使左侧的两个开关同时(或右侧的两个开关同时)ON时,会使VCC和GND短路,所以在开关组合时要留心。
图2.3 通过H桥控制电机的正反转
3. 什么是电机驱动器IC?
“电机驱动器IC”是在MOS晶体管中集成了构成电机驱动电路所需的H桥、控制电路及保护电路等的IC。在创建支持几十安培级的大电流电机驱动器时,可以通过将分立元器件组合在一起来构建电路,如果只是几安培级的电机驱动器,那么使用电机驱动器 IC将可以实现电路的小型化和基于保护电路的过流保护。
这次,我们将使用电机驱动器IC“BD6231F”来控制普通模型用的直流电机。
图3.1 电机驱动器IC“BD6231F”
4. 查看技术规格书
首先,将开关与电机驱动器连接,并尝试使电机正转和反转。接下来,我们将在电机驱动器IC“BD6231F”周围连接电子元器件和布线,关于电源电压和连接方法,我们可以一边参考电机驱动器IC的技术规格书一边探讨。可以通过在网上搜索产品型号,或参考产品销售页面上介绍的技术规格书。
图4.1 技术规格书摘录
有关我们要使用的电机驱动器IC“BD6231F”的信息,通过查看技术规格书中写有“BD6231F”的部分即可。在其他部分列出了同系列的不同型号,因此查看时需要注意型号无误。
“BD6231F”是采用了SOP8封装(8引脚1.27mm间距表面贴装IC)的产品。图4.2是从技术规格书中摘取出来的框图、引脚排列图和引脚说明。在引脚说明中,您可以看到每个引脚的作用。
图4.2 BD6231F的框图、引脚排列图和引脚说明
如图4.3所示,推荐的电源电压范围是6V~32V,所以这次我们将6V连接至电源(VCC和GND)。
图4.3 BD6231F的推荐电压
另外,BD6231F存在“工作模式”,工作模式因输入至电机驱动器的控制输入引脚(FIN、RIN、VREF)的信号种类而异。
图4.4 工作模式
5. 尝试使用电机驱动器IC
由于本次使用的IC是间距为1.27mm的表面贴装型封装,因此无法将其直接插入面包板中使用。那么首先需要将IC和排针焊接到DIP转接板上。
图5.1 安装在DIP转接板上的器件
【所用器件】
在电路板上安装IC时,需要注意IC的方向和引脚编号。此次使用的DIP转接板上用丝网印刷(白字)的方式印制了引脚编号,这些引脚号按照图5.2所示的含义进行匹配。
图5.2 IC引脚编号的含义
我对焊接过程进行了定点拍摄,如果您是第一次尝试焊接表面贴装型器件,可以参考我拍摄的视频。
视频 焊接过程(4倍速)
https://www.youtube.com/embed/Yc7MJQJWcdo
※此链接为Youtube视频
焊接完成后,成为图5.3中的照片所示的样子。
图5.3 安装在DIP转接板上的IC和排针
6. 尝试用开关控制电机驱动器IC
首先,我们用开关启动电机驱动器IC,尝试使电机正转和反转。应该是按下SW1使电机正转,按下SW2使电机反转。为了降低电机的再生电流引起的噪声,C1使用了多层陶瓷电容器(0.1μF),C2使用电解电容器(100μF)。
图6.1 BD6231外围电路(通过开关进行控制)
在该电路中,VREF引脚是与VCC连接的,FIN和RIN为ON或OFF(H或L)输入,因此工作模式是Mode (b)的正转模式或Mode (c)的反转模式。
图6.2 正转模式和反转模式
下面,我们来尝试一下让电机正转和反转。
视频 通过开关正转和反转
https://www.youtube.com/embed/B3fBFYhCtws
※此链接为Youtube视频
这样,我们通过开关对电机驱动器IC进行控制输入,使电机成功地实现了正转和反转。
7. 尝试用Arduino控制电机驱动器IC
现在,我们尝试用Arduino来控制电机驱动器IC。前面我们通过开关实现了对电机驱动器的控制输入,只要将这个开关替换为Arduino端口就可以了。另外,Arduino由USB数据线供电。
图7.1 BD6231外围电路(通过Arduino进行控制)
由于VREF与VCC相连接,输入至FIN和RIN的信号是PWM信号或L信号,因此该电路的工作模式Mode (e)和(f)的PWM控制模式A。
图7.2 PWM控制模式A
我创建的Arduino程序如下(test_BD6231.ino)。我使用analogWrite函数使引脚10和引脚11输出PWM信号,使引脚10输出正转时的PWM信号,使引脚11输出反转时的PWM信号。
最终,这个程序将执行“最大输出为30%、缓慢改变电机的正反转速度”的工作。
const int pinFin = 10; const int pinRin = 11; int theta = 0; void setup() { } void loop() { int speedMotor = 30 * sin(theta * PI / 180); //在-30到+30之间绘制正弦曲线 driveMotor(speedMotor); //电机控制 delay(20); theta = (theta + 1) % 360; //对theta进行计数并取余数 } //控制电机的函数 参数:speed(通过-100~100指定速度) void driveMotor(int speed) { int output = constrain(abs(speed * 255 / 100), 0, 255); if (speed > 0) { analogWrite(pinFin, output); analogWrite(pinRin, 0); } else if (speed < 0) { analogWrite(pinFin, 0); analogWrite(pinRin, output); } else { analogWrite(pinFin, 0); analogWrite(pinRin, 0); } }
当我们尝试用这个程序来运行电机时,您是否注意到,电机的加速度比使用开关进行正反转时更加缓慢,最大转速也变慢了?
视频 Arduino的控制
https://www.youtube.com/embed/u1tP46o9r2o
※此链接为Youtube视频
通过使用电机驱动器IC,将可以使用Arduino这样的微控制器来控制电机,因此,能够比用手按开关更精细地控制电机的转速。
利用这种应用可以实现各种工作模式,比如当传感器反应时自动启动设备,或者使电机根据操纵杆的倾斜度执行不同转速的旋转。由电机驱动的装置和机器人,其工作模式是通过这些机制相组合而创建的,因此您可以根据自己的想法创建出各种有趣的作品!
8. 总结
此次我们了解了电机驱动器基础——H桥的相关知识,并实际使用电机驱动器IC来让电机旋转。电机驱动器IC不仅可以让电机旋转,还内置有可以防止过电流和过热的保护电路,因此能够安全地控制电机。在电子制作过程中,涉及到电机控制时,经常会发生由于电机过载而导致的过电流和过热等问题,所以,让我们使用内置保护功能的电机驱动器IC享受安全的电子制作吧!