"); //-->
一、 直流电机驱动电路的设计目标
在直流电机驱动电路的设计中,主要考虑一下几点:
二、 三极管-电阻作栅极驱动
1.输入与电平转换部分:
输入信号线由DATA引入,1脚是地线,其余是信号线。注意1脚对地连接了一个2K欧的电阻。当驱动板与单片机分别供电时,这个电阻可以提供信号电流回流的通路。当驱动板与单片机共用一组电源时,这个电阻可以防止大电流沿着连线流入单片机主板的地线造成干扰。或者说,相当于把驱动板的地线与单片机的地线隔开,实现“一点接地”。
高速运放KF347(也可以用TL084)的作用是比较器,把输入逻辑信号同来自指示灯和一个二极管的2.7V基准电压比较,转换成接近功率电源电压幅度的方波信号。KF347的输入电压范围不能接近负电源电压,否则会出错。因此在运放输入端增加了防止电压范围溢出的二极管。输入端的两个电阻一个用来限流,一个用来在输入悬空时把输入端拉到低电平。
不能用LM339或其他任何开路输出的比较器代替运放,因为开路输出的高电平状态输出阻抗在1千欧以上,压降较大,后面一级的三极管将无法截止。
2.栅极驱动部分:
后面三极管和电阻,稳压管组成的电路进一步放大信号,驱动场效应管的栅极并利用场效应管本身的栅极电容(大约1000pF)进行延时,防止H桥上下两臂的场效应管同时导通(“共态导通”)造成电源短路。
当运放输出端为低电平(约为1V至2V,不能完全达到零)时,下面的三极管截止,场效应管导通。上面的三极管导通,场效应管截止,输出为高电平。当运放输出端为高电平(约为VCC-(1V至2V),不能完全达到VCC)时,下面的三极管导通,场效应管截止。上面的三极管截止,场效应管导通,输出为低电平。
上面的分析是静态的,下面讨论开关转换的动态过程:三极管导通电阻远小于2千欧,因此三极管由截止转换到导通时场效应管栅极电容上的电荷可以迅速释放,场效应管迅速截止。但是三极管由导通转换到截止时场效应管栅极通过2千欧电阻充电却需要一定的时间。相应的,场效应管由导通转换到截止的速度要比由截止转换到导通的速度快。假如两个三极管的开关动作是同时发生的,这个电路可以让上下两臂的场效应管先断后通,消除共态导通现象。
实际上,运放输出电压变化需要一定的时间,这段时间内运放输出电压处于正负电源电压之间的中间值。这时两个三极管同时导通,场效应管就同时截止了。所以实际的电路比这种理想情况还要安全一些。
场效应管栅极的12V稳压二极管用于防止场效应管栅极过压击穿。一般的场效应管栅极的耐压是18V或20V,直接加上24V电压将会击穿,因此这个稳压二极管不能用普通的二极管代替,但是可以用2千欧的电阻代替,同样能得到12V的分压。
3.场效应管输出部分:
大功率场效应管内部在源极和漏极之间反向并联有二极管,接成H桥使用时,相当于输出端已经并联了消除电压尖峰用的四个二极管,因此这里就没有外接二极管。输出端并联一个小电容(out1和out2之间)对降低电机产生的尖峰电压有一定的好处,但是在使用PWM时有产生尖峰电流的副作用,因此容量不宜过大。在使用小功率电机时这个电容可以略去。如果加这个电容的话,一定要用高耐压的,普通的瓷片电容可能会出现击穿短路的故障。
输出端并联的由电阻和发光二极管,电容组成的电路指示电机的转动方向.
4.性能指标:
电源电压15~30 V,最大持续输出电流5A/每个电机,短时间(10秒)可以达到10A,PWM频率最高可以用到30KHz(一般用1到10KHz)。电路板包含4个逻辑上独立的,输出端两两接成H桥的功率放大单元,可以直接用单片机控制。实现电机的双向转动和调速。
5.布线:
大电流线路要尽量的短粗,并且尽量避免经过过孔,一定要经过过孔的话要把过孔做大一些(>1mm)并且在焊盘上做一圈小的过孔,在焊接时用焊锡填满,否则可能会烧断。另外,如果使用了稳压管,场效应管源极对电源和地的导线要尽可能的短粗,否则在大电流时,这段导线上的压降可能会经过正偏的稳压管和导通的三极管将其烧毁。在一开始的设计中,NMOS管的源极于地之间曾经接入一个0.15欧的电阻用来检测电流,这个电阻就成了不断烧毁板子的罪魁祸首。当然如果把稳压管换成电阻就不存在这个问题了。
在2004年的Robocon比赛中,我们主要采用了这个电路用以电机驱动。
三、 低压驱动电路的简易栅极驱动
一般功率场效应管的最高栅源电压为20V左右,所以在24V应用中要保证栅源电压不能超过20V,增加了电路的复杂程度。但在12V或更低电压的应用中,电路就可以大大简化。
左图就是一个12V驱动桥的一边,上面电路的三极管部分被两个二极管和两个电阻代替。(注意,跟上图逻辑是反的)由于场效应管栅极电容的存在,通过R3,R4向栅极电容充电使场效应管延缓导通;而通过二极管直接将栅极电容放电使场效应管立即截止,从而避免了共态导通。
这个电路要求在IN端输入的是边缘陡峭的方波脉冲,因此控制信号从单片机或者其他开路输出的设备接入后,要经过施密特触发器(比如555)或者推挽输出的高速比较器才能接到IN端。如果输入边缘过缓,二极管延时电路也就失去了作用。
R3,R4的选取与IN信号边沿升降速度有关,信号边缘越陡峭,R3,R4可以选的越小,开关速度也就可以做的越快。Robocon比赛使用的升压电路(原理相似)中,IN前用的是555。
四、 边沿延时驱动电路
在前级逻辑电路里,有意地对控制PMOS的下降沿和控制NMOS的上升沿进行延时,再整形成方波,也可以避免场效应管的共态导通。另外,这样做可以使后级的栅极驱动电路简化,可以是低阻推挽驱动栅极,不必考虑栅极电容,可以较好的适应不同的场效应管。2003年Robocon比赛采用的就是这种驱动电路。下图是两种边沿的延时电路:
下图是对应的NMOS,PMOS栅极驱动电路:
这个栅极驱动电路由两级三极管组成:前级提供驱动场效应管栅极所需的正确电压,后级是一级射极跟随器,降低输出阻抗,消除栅极电容的影响。为了保证不共态导通,输入的边沿要比较陡,上述先延时再整形的电路就可以做到。
五、 其它几种驱动电路
1. 继电器+半导体功率器件的想法
继电器有着电流大,工作稳定的优点,可以大大简化驱动电路的设计。在需要实现调速的电机驱动电路中,也可以充分利用继电器。有一个方案就是利用继电器来控制电流方向来改变电机转向,而用单个的特大电流场效应管(比如IRF3205,一般只有N型特大电流的管子)来实现PWM调速,如下右图所示。这样是实现特别大电流驱动的一个方法。换向的继电器要使用双刀双掷型的,接线如下左图,线圈接线如下中图:
2. 几种驱动芯片
1) L298 参考http://www.21icsearch.com/searchpdf/st/L298N.pdf
2) A3952 参考http://www.allegromicro.com/datafile/archive/3952.pdf
3) A3940 参考http://www.allegromicro.com/datafile/3940.pdf
4) L6203 参考http://www.21icsearch.com/searchpdf/st/L6203.pdf
六、 PWM调速的实现
1. 使用定时器的算法
//butcher补充一下吧
//算法原理
//编程实现要点
//优缺点
2. 使用循环移位的算法
产生PWM信号可以由定时器来完成,但是由于51内部只提供了两个定时器,因此如果要向三个或更多的直流电机输出不同占空比的信号要反复设置定时器,实现较为复杂,我们采用一种比较简单的方法不仅可以实现对更多的直流电机提供不同的占空比输入信号,而且只占用一个定时器资源。这种方法可以简单表述如下:
在内存的某段空间内存放各个直流电机所需的输入信号占空比信息,如果占空比为1则保存0FFH(11111111B);占空比为0.5则保存0F0H(11110000B)或任何2进制数中包括4个0和4个1。即
占空比=1的个数/8
具体选取什么样的二进制数要看输出频率的要求。若要对此直流电机输出PWM信号,只要每个时间片移位一次取出其中固定的一位(可以用位寻址或进位标志C实现)送到电机端口上即可。另外,移位算法是一种对以前结果依赖的算法,所以最好定期检查或重置被移位的数,防止移错导致一直错下去。
这种算法的优点是独立进程,可以实现对多个电机的控制,缺点是占用资源较大,PWM频率较低。
3. 模拟电路PWM的实现
上图为一个使用游戏手柄或者航模摇杆上的线性电位器(或线性霍尔元件)控制两个底盘驱动电机的PWM生成电路。J1是手柄的插座,123和456分别是x,y两个方向的电位器。U1B提供半电源电压,U1A是电压跟随。x,y分量经过合成成为控制左右轮两个电机转速的电压信号。在使用中,让L=(x+1)y/(x+1.4),R=(x-1)y/(x-0.6),经过试验有不错的效果(数字只是单位,不是电压值)。经过U1C和U1D组成的施密特振荡器把电压转换为相应的PWM信号,用来控制功率驱动电路。以U1D为例,R1,R2组成有回差的施密特电路,上下门限受输入电压影响,C1和R3组成延时回路,如此形成振荡的脉宽受输入电压控制。Q1,Q2是三极管,组成反相器,提供差分的控制信号。具体振荡过程参见对555振荡器的分析。
七、 步进电机驱动
1. 小功率4相步进电机的驱动
下面是一种驱动电路框图:
达林顿管阵列ULN2803分别从锁存器取出第0,2,4,6位和1,3,5,7位去驱动两个步进电机.四相步进电机的通电顺序可以有几种:A,B,C,D(4相4拍);AB,BC,CD,DA(4相双4拍);A,AB,B,BC,C,CD,D,DA(4相8拍).为了兼顾稳定性,转矩和功耗,一般采用4相8拍方式.所有这些方式都可以通过循环移位实现(也要有定期监控),为了使4相8拍容易实现,锁存器与驱动部分采用了交叉连接.
步进电机工作在四相八拍模式(即正转的输入信号为1000→1100→0100→0110→0010→0011→0001→1001→1000),对应每个步进电机要有四个信号输入端,理论上向端口输出信号可以控制两个步进电机的工作。寄存器循环移位奇偶位分别作两个步进电机的驱动端的做法,其思想如下:
LOOP: MOV A,#1110000B ;在A寄存器中置入11100000
RR A ;右移位
AJMP LOOP ;循环右移位
这样在寄存器A中存储的值会有如下循环11100000→01110000→00111000→00011100→00001110→00000111→10000011→11000001→11100000,其奇数位有如下循环1000→1100→0100→0110→0010→0011→0001→1001→1000,其偶数位有如下循环1100→0100→0110→0010→0011→0001→1001→1000→1100.将A输出到P0端口,则奇数位和偶数位正是我们所需要的步进电机输入信号。
而事实上每个电机的动作是不同的,为此我们在RAM中为每个电机开辟一个byte的状态字节用以循环移位.在每一个电机周期里,根据需要对每个电机的byte进行移位,并用ANL指令将两个电机的状态合成到一个字节里输出此时的A同时可以控制两个电机了
步进电机的速度由驱动脉冲的频率决定,移位的周期不同,电机的速度也就不同了.前面提到的电机周期,应该取各种可能的周期的最大公约数.换句话说,一旦电机周期取定,每个电机移位的周期应该是它的倍数.在程序中,对每个电机的相应时刻设定相应的分频比值,同时用一个变量进行加一计数:每到一个电机周期若计数变量<分频比值,则计数变量加1;若相等,则移位,计数变量清零.这样就实现了分频调速,可以让多个电机同时以不同的速度运转.
另外,也可以采用传统的查表方式进行驱动,程序稍长,但也比较稳定,这种方法非常适合三相步进电机。
UCN5804B/LB是Allegro公司生产的4相步进电机驱动专用芯片,它集成了控制逻辑,脉冲分配和功率推动,通过几个管脚的电平来设定转动方式,方向,通过改变外时钟频率来改变转动速度,这给完成复杂的动作和测试步进电机参数带来了极大的方便.
2. 步进电机的智能驱动方案
步进电机有可以精确控制的优点,但是功耗大,效率低,力矩小。如果选用大功率步进电机,为了降低功耗,可以采取PWM恒流控制的方法。基本思路是,用带反馈的高频PWM根据输出功率的要求对每相恒流驱动,总体电流顺序又符合转动顺序。需要力矩小的时候应及时减小电流,以降低功耗。该方案实现的电路,可以采用独立的单片机或CPLD加场效应管驱动电路以及电流采样反馈电路。
八、 附录:几种IRF场效应管的参数
型号
|
极性
|
电压(V)
|
电流(A)
|
导通电阻(Ohm)
|
IRF540N
|
N
|
100
|
33
|
0.040
|
IRF9540
|
P
|
-100
|
-19
|
0.200
|
IRF840
|
N
|
500
|
8
|
0.850
|
IRF3205
|
N
|
55
|
110
|
0.008
|
IRF530N
|
N
|
100
|
17
|
0.090
|
IRF9530
|
P
|
-100
|
-12
|
0.300
|
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。