1、直流电机简介
2、设计中的三个关注点
3、H桥电路
4、驱动芯片选择时考虑的问题
5、L298芯片及驱动模块
6、电机正反转程序
7、双电机差速转向的原理
8、利用差速实现小原原地打转程序
1、直流电机简介
直流电机是智能小车及机器人制作必不可少的组成部分,它主要作用是为系统提供必须的驱动力,用以实现其各种运动。目前市面的直流电机主要分为普通电机和带动齿轮传动机构的直流减速电机。如图1和图2所示。
图1 日本马步奇高速电机RS380 图2 N20减速直流电机
对于不太追求速度的场合应优先选用减速直流电机,如足球机器和灭火机器人等追求功能而对速度要求不高的场合,如图3,此车的传动比通常为几十到几百左右。一般对同一型号的减速电机,厂家都会提供多种传动比的产品提供给用户,应根据需要加以选择。
而对于普通直流电机,由于转速比较高,具体应用时应加齿轮传动机构,当然也可以直接选择减速直流电机,但如果对于一些速度要求比较高的应用,如飞思卡尔智能车车模,由于该比赛属于竞速赛,对速度要求比较高,市面上一般很难找到合适的减速电机,此时就需要自己设计减速机构,如图4为飞思卡尔的电机和减速机构图,此传动机构传动比为1:10左右,使得小车在空载的情况下可达到上千转。
无论是普通直流电机还是减速电机,其电机部分目前基本都是无刷直流电机,关于什么叫无电机以及内部结构如何,这里我们不去深究,下面重点介绍一下直流电机在实际使用过程在硬件的设计及软件的编写中应当关注的三个方面,这里的前提是你已经根据需要选择好了合适传动比的电机。
2、设计中的三个关注点
1) 如何增大驱动
2) 如何实现换向
3) 如何实现调速
对于第一个问题,主要原因是电机属于大功率的器件,而单片机的I/O口所提供的电流往往十万有限,所以必须外加驱动电路,比如说由三极管组成放大电路。
对于第二个问题,直流电机的方向改变需要改变电机的极性,即正负反接,但目前大多数机器人制作中使用的是直流无刷电机,由于没有电刷,而供电电源通常又为单电源,所以需要设计一个电子开关以实现换向功能。
对于第三个问题,机器人是一个需适应不同环境的智能体,其运动速度需要不断的改变,此时就需要想法设计相应电路以实现调速度。
上面的三个问题是电机控制中必须要考虑的问题,可以通过硬件的方法实现,也可以通过软件的方法实现,当然也可以采取硬软结合的方法解决。目前比较通用的方法是,设计H桥电路和利用单片机产生PWM波信号。
H桥电路是用硬件的方法设计一个电路,它可以解决前面两个问题。而第三个问题速度的调节则是通过软件的方法,利用单片机I/O口生产PWM波信号加以实现。
这一节我们主要介绍H桥电路,后面的章节我们会专门介绍到PWM调速问题。
3、H桥电路
电机做好后后引出两个极,如图5所示,给两个极能电就能够实现其转动,而改变其电源极性刚可以实现换向。
前面我们说过必须要解决驱动力不足和换向问题,设计一般会采用两种方法,一是设计由分离元件组成的驱动电路实现,另一种方法则是采用专用的驱动芯片加以实现。由于专用的驱动芯片由于结构简单、价格便宜、可靠性高等特点,因而被广泛的应用实现电机的驱动。电机的驱动芯片很多如L298N、BST7970、MC33886等,这里我们介绍智能机器人中比较常用的LM298N驱动模块,BST7970、MC33886一般在电机功率比较大的场合适用。在介绍LM298N驱动模块之前,我们先介绍一下H桥电路,需要说明的是时,在下面的电路由于内部采用了三极管,三极管本身起到放大的作用,即增大了驱动电流,所以在下面的讲解中我们主要侧重讲解如何实现换向功能。
H桥电路可以用如图6来表示其原理:
从图中可以看出,其形状类似于字母“H”,作为负载的直流电机像“桥”一样架在上面,所以称为“H桥驱动”,4个开关所在的位置就称为“桥臂”。
从图中可以看出,假设开关A、D接通,电机正向转动,而开关B、C接通时,直流电机将反向转动,从而实现了电机的正反控制。当然实际应用中我们还可以得到其它两种状态:
1)刹车,即将A、C或B、D接通,则电机惯性转动产生的电动势将被短路,形成阻碍运动的感应电流,开成“刹车”作用。
2)惰行,4个开关全部断开,则电机惯性所产生的电动势将无法开成电路,从而也就不会产生阻碍运动的感应电流,电机将惯性转动较长时间。
以上电路只是说明的原理,实际电路中我们通常将来四个开关换成三极管。如图7所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向。由于H桥电路可以很方便的实现电机的正反转的驱动因而得到了广泛应用。
要使电机运转,必须使对角线上的一对三极管导通。例如,如图图8所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定的方向转动。
图9所示为另一对三极管Q2和Q3导通的情况,电流从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动。
这里需要注意的是,电机一般会引出两个极,但并无正负之分,所谓的正反转也只是我们人为定义,具体要看实际的应用和安装情况。
驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要,如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极,此时电路中除了三极管外没有其它任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。
图10所示就是基于这种考虑的改进电路,它在基本的H桥电路的基础上增加了4个与门和2个非门。4个与门同一个使能导通信号相接,这样,用这一个信号就能控制整个电路的开关。而2个非门通过提供一种方向输入,可以保证任何时候在H桥的同侧都只有一个三极管导通。
采用以上方法,电机的运转只需要三个信号控制,如图11:两个方向信号和一个使能信号。如果DIR-L信号为0,DIR-R信号为1,并且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电机,如图6 所示;如果DIR-L信号变为1,而DIR-R信号变为0。那么Q2和Q3将导通,电流则反向流过电机。
4、驱动芯片选择时考虑的问题
H桥电路虽然有着许多的优点,但是在实际的制作过程中,由于元件较多,电路和搭建也较为麻烦,增加了硬件设计的复杂度。所绝大多数制作中通常直接选用专用的驱动芯片。目前市面上专用的驱动芯片很多,如上面提到的L298N、BST7970、MC33886等,但到底我们应该选用哪咱芯片呢,当然每种芯片有自己的优势,我们应该根据设计需要从价格和性能上综合考虑才行,这里谈三个方面。
1)驱动效率的转化
所谓驱动效率高,就是要将输入的能量尽量多的输出给负载,而驱动电路本身最好不消耗或少消耗能量,具体到H桥上,也就是4个桥臂在导通时最好没有压降,越小越好。从电路上看,这主要取决于“开关”上的压降,其消耗为流过的电流乘以压降,电流大小主要取决于负载电机的需要,所以对于设计来说重点应考虑尽量减小开关上的电阻从而提高效率,而在选用驱动芯片时应当考虑所选用的芯片压降是否满足电机驱动力的需要,像参加过飞思卡尔智能车的朋友应该清楚,一般很少有人选择L298N芯片的,究其原因就是298N的自身压降太大造成功率消耗太大而不满足电机驱动需要造成的。
2)能够通过的驱动电流
每个芯片都有自身承受的最大电流,在设计时应保证电机的工作电流不会造成芯片的烧毁,像智能车制作过程中,电机的电流可以达到4-5A,而L298最大承受的电流不能超过2A,所以这也是一般不采用298N作为驱动芯片的另一个原因。
3)芯片的价格
对于器件的价格,一般在业余的制作基本不会考虑太多,但真正在产品的设计中,价格却是除了性能外必须考虑的另一个关键因素,像刚刚上面提到了L298N由于自身压降太大,所承受的电流太少,所以不满足智能车电机的需要,所以有的朋友会说,298N芯片不好,不能说不好,要知道从价格上7970是298的3倍之多,像做一般速度比较低的机器人,298芯片完全能够满足要求。
综上所述,在选择驱动芯片应从价格、驱动电流及压降等方面给合考虑。
5、L298芯片及驱动模块
L298N内部的组成其就是上面讲的H桥驱动电路,所以工作原理我以上介绍的H桥相同,这里我们不在叙述,在使用时重点要了解其引脚的功能和主要的性能参数。引脚图如图12所示。
L298N是ST公司生产的一种高电压,大电流的电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V,输出电流大,瞬间峰值可达3A,持续工作电流为2A;额定功率为25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电机和步进电机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个用控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机和四相步进电机,也可以两台直流电机。L298N模块的驱动电路图如图13所示。
对于以上电路图有以下几点说明:
1)电路图中有两个电流,一路为L298工作需要的5V电源VCC,一路为驱动电机用的电池电源VSS。
2)1脚和15脚有的电路在中间串接了大功率的电阻,可以不加
3)八个续流二极管是为了消除电机转动时的尖峰电压保护电机而设计,简化电路可以不加。
4)6脚和11脚为两路电机通道的使能开关,高电平使能所以可以直接接高电平,也可以交由单片机控制。
5)由于工作时L298的功率较大,可以适当加装散热片。
L298模块的的外形图如图14所示:
6、电机正反转程序
下面写一个程序让小车上一个电机正转。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM1=P2^0;//接IN1 控制正转
sbit PWM2=P2^1;//接IN2 控制反转
void main()
{
while(1)
{
PWM1=1;
PWM2=0;
}
}
下面写一个程序让小车上两个个电机正转,实现小车的前行。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM1=P2^0;//接IN1 控制正转
sbit PWM2=P2^1;//接IN2 控制反转
sbit PWM3=P2^2;//接IN1 控制正转
sbit PWM4=P2^3;//接IN2 控制反转
sbit PWM5=P2^4;//接IN1 控制正转
sbit PWM6=P2^5;//接IN2 控制反转
sbit PWM7=P2^6;//接IN1 控制正转
sbit PWM8=P2^7;//接IN2 控制反转
void main()
{
while(1)
{
PWM1=1;
PWM2=0;
PWM3=1;
PWM4=0;
PWM5=1;
PWM6=0;
PWM7=1;
PWM8=0;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=500;y>0;y--);
}
7、双电机差速转向的原理
ZN-1A智能小车有两种转向的方式,差速转向和舵机转向。由于差速转向目前市面上的资料和相关程序比较多,所以本教程绝大部分程序采用后轮驱动,前轮舵机实现转向的控制方式。这里简要介绍一下差速转向的原理及方法,并给出一个简单的程序,更复杂的程序请大家参考相关的资料,如可以利用ZN-1A智能小车实现小车的直立运动,即两轮直立前行,目前世界上比较风行的两轮直代步车就是利用这种形式实现,不过要要做两轮直立时涉及到平衡的问题,需对加速度计和陀螺仪的知道有所了解,有兴趣 朋友可以利用本小车实现直立的功能,这里不多作介绍。
所谓的差速,是指左右两车轮的速度差,假如左边车轮比右边的快,则小车会偏向右。同时,左的的车轮转速比右的慢,那么小车会向左边转动。目前主要有以下两种方式。
(1)小车向左转,可是是左轮停止,左轮继续转动,这样可实现左转,这种方式实现小角度的转弯,在角度不大时可采用此种方式。
(2)小车向左转,可以是左轮反转,右轮正转,这样可以实现大角度的左转,甚至可以进行原地打转。
同理可推出小车如何向右转向。
下面给出一个利用后轮电机差事运动实现小车原地打转的程序。
8、利用差速实现小原原地打转程序