常见的两种有刷电机驱动方案
半桥驱动:EG2104
EG2104 是一款高性价比的带SD功能的 MOS 管、IGBT 管栅极驱动专用芯片,内部集成了逻辑信号输入处
理电路、死区时控制电路、电平位移电路、脉冲滤波电路及输出驱动电路,专用于无刷电机控制器、电源
DC-DC 中的驱动电路。
EG2104 高端的工作电压可达 600V,低端 Vcc 的电源电压范围宽 2.8V~20V,静态功耗小于 1uA。该芯
片输入通道 IN 内建了一个 200K 下拉电阻,SD内建了一个 200K 下拉电阻,在输入悬空时使上、下功率 MOS
管处于关闭状态,输出电流能力 IO+/- 2/2.5A,采用 SOP8 封装。
那,什么是半桥驱动?以及,为什么要用半桥驱动?
-
一般MCU的IO的负载能力较低,通常维持在几十mA,这样的负载能力很差,对于一些大功率设备,甚至完全无法驱动,尤其像电机这种大功率设备,因此我们需要MOS进行驱动。自行搭建的H桥驱动电路一般都包括两个部分:半桥/全桥驱动芯片和MOS管。自行搭建的H桥驱动所能通过的电流几乎由MOS管的导通漏极电流所决定。因此,选择适当的MOS管,即可设计出驱动大电流电机的H桥驱动电路。
-
所谓半桥驱动芯片,便是一块驱动芯片只能用于控制H桥一侧的2个MOS管(1个高端MOS和1个低端MOS,在前述推荐的博客中有介绍)。因此采用半桥驱动芯片时,需要两块该芯片才能控制一个完整的H桥。
-
相应的,全桥驱动芯片便是可以直接控制4个MOS管的导通与截止,一块该芯片便能完成一个完整H桥的控制。
-
-
MOS导通条件
-
自举电路:
此部分是理解该芯片的难点,需要进行重点讲解。从上面的典型电路图和最初的设计原理图中均可发现:该芯片在Vcc和VB脚之间接了一个二极管,在VB和VS之间接了一个电容。这便构成了一个自举电路。
作用:在高端和低端MOS管中提到过,由于负载(电机)相对于高端和低端的位置不同,而MOS的开启条件为Vgs>Vth,这便会导致想要高端MOS导通,则其栅极对地所需的电压较大。
补充说明:因为低端MOS源极接地,想要导通只需要令其栅极电压大于开启电压Vth。而高端MOS源极接到负载,如果高端MOS导通,那么其源极电压将上升到H桥驱动电压,此时如果栅极对地电压不变,那么Vgs可能小于Vth,又关断。因此想要使高端MOS导通,必须想办法使其Vgs始终大于或一段时间内大于Vth(即栅极电压保持大于电源电压+Vth)。
半桥驱动内部图:
假定Vcc=12V,VM=7.4V,MOS管的开启电压Vth=6V(不用LR7843的2.3V,原因后续说明)。
(1)第一阶段:首先给IN和SD对应的控制信号,使HO和LO通过左侧的内部控制电路(使上下两对互补的PMOS和NMOS对应导通),分别输出低电平和高电平。此时,外部H桥的高端MOS截止,低端MOS导通,电机电流顺着②线流通。同时VCC通过自举二极管(①线)对自举电容充电,使电容两端的压差为Vcc=12V。
(2)第二阶段:此阶段由芯片内部自动产生,即死区控制阶段(在H桥中介绍过,不能使上下两个MOS同时导通,否则VM直接通到GND,短路烧毁)。HO和LO输出均为低电平,高低端MOS截止,之前加在低端MOS栅极上的电压通过①线放电。
(3)第三阶段:通过IN和SD使左侧的内部MOS管如图所示导通。由于电容上的电压不能突变,此时自举电容上的电压(12V)便可以加到高端MOS的栅极和源极上,使得高端MOS也可以在一定时间内保持导通。此时高端MOS的源极对地电压≈VM=7.4V,栅极对地电压≈VM+Vcc=19.4V,电容两端电压=12V,因此高端MOS可以正常导通。
(此时,自举二极管两端的压差=VM,因此在选择二极管时,需要保证二极管的反向耐压值大于VM。) 注意:因为此时电容在持续放电,压差会逐渐减小。最后,电容正极 对地电压(即高端MOS栅极对地电压)会降到Vcc,那么高端MOS的栅源电压便≈Vcc-VM=12V-7.6V=4.4V < Vth=6V,高端MOS仍然会关断。
补充总结: ★因此想要使高端MOS连续导通,必须令自举电容不断充放电,即循环工作在上述的三个阶段(高低端MOS处于轮流导通的状态,控制信号输入PWM即可),才能保证高端MOS导通。自举二极管主要是用来当电容放电时,防止回流到VCC,损坏电路。
★但是,在对上面的驱动板进行实际测试时会发现,不需要令其高低端MOS轮流导通也可以正常工作,这是因为即使自举电容放电结束,即高端MOS的栅源电压下降到4.4V仍然大于LR7843的Vth=2.3V。 那么在上述驱动板中,自举电路就没有作用了吗?当然不是,由于MOS管的特性,自举电路在增加栅源电压的同时,还可令MOS管的导通电阻减小,从而减少发热损耗,因此仍然建议采用轮流导通的方式,用自举电容产生的大压差使MOS管导通工作。
真值表:
SD控制驱动芯片的启动,输出为0时上下MOS均关闭;输出为1时,通过改变两路IN的逻辑实现电机正反转,不过通常使用PWM进行驱动,改变占空比进行调速。
★1.自举二极管一般选用肖特基二极管。 在自举电容选择时,其耐压值需大于Vcc并留有一定余量(如上述驱动板中为16V的钽电容)。而自举电容的容值选择需要一定的计算。具体可自行查找或参看此链接:自举电容的选择。此驱动板中选用1uF的钽电容,经测试运行稳定。一般来说,PWM的输入频率越大(即电容充放电频率),电容所需容值越小。
★2.H桥MOS管栅极串联的电阻主要用于限流和抑制振荡。为了加快MOS管的关断还可以在栅源之间并联一个10K电阻或在栅极串联电阻上反向并联一个二极管。这部分内容网上可找到较多介绍。 ————————————————
原文链接:【大电流H桥电机驱动电路的设计与解析(包括自举电路的讲解,以IR2104+LR7843为例)】-CSDN博客
1、PH/EN
先上经典用图:
这是一种最常见的控制方法,需要用两路信号来控制一路H桥电路:IO和PWM
其中IO高低控制电机转向,对应的是PH;
PWM控制电机调速,对应的是EN。
这里选择的是DRV8701E作为例子,下图是真值表。
说明:The DRV8701E is controlled using a PH/EN interface. The following logic table (Table 1) gives the full H-bridge state when driving a single brushed DC motor. Note that Table 1 does not take into account the current control built into the DRV8701E. Positive current is defined in the direction of xOUT1 → xOUT2.
在上图中,nSLEEP控制芯片是否进入睡眠模式,内部下拉,默认进行低功耗休眠。如图:
EN和PH则对应的是PWM和IO控制信号输入,SH1和SH2连接负载。如图:
那么,我们就可以通过EN(IO)来控制低端MOS导通,通过PH(PWM)控制高端MOS的导通。
关于半桥驱动的原理在这里不做过多讲解。
关于芯片各个接口的具体细节仔细查看芯片手册,介绍很详细。
补充一点DRV8701E自举电路的方案:A charge pump is integrated to supply a high-side NMOS gate drive voltage of VHGS. The charge pump requiresa capacitor between the VM and VCP pins. Additionally a low-ESR ceramic capacitor is required between pinsCPH and CPL. When VM is below 12 V, this charge pump behaves as a doubler and generates VCP = 2 × VM –1.5 V if unloaded. Above VM = 12 V, the charge pump regulates VCP such that VCP = VM + 9.5 V.
优缺点:
EN/PH控制电机的优点:
-
简单性:EN/PH控制电机的实现相对简单,通常只需要一个驱动器芯片和一个控制信号来控制电机的启停和运行方向。
-
低电磁干扰:EN/PH控制电机产生的电磁干扰相对较小,对其他电子设备的干扰较少。
EN/PH控制电机的缺点:
-
速度调节限制:EN/PH控制电机的速度调节范围相对较小,无法实现精确的速度调节。
-
系统效率:EN/PH控制电机在低速和部分负载工况下的效率较低,可能导致能量浪费。
2、PWM模式
当我看到这个模式的时候,第一时间想到的是STM32高级定时器的应用:互补输出+死区控制。
那么,让我们来回顾以下TIM1,高级定时器。
这个是TIM的功能引脚:
-
TIM1_CH1N 与 TIM1_CH1 :两个是成对输出的,也就是说,CH1N可以和CH1一同输出PWM波,并且极性可以相同,也可以相反;
-
TIM1_ETR是外部触发输入管脚;(比如51的一些串口可以采用定时器作为时钟源);
-
TIM1_BKIN是故障信号,输入有效信号后,用来关闭TIM1的输出,也就是完成了刹车;
那么,为什么只有通道123有互补输出啊?
当然是因为无刷电机需要3路PWM驱动。
知识点1:时钟源
内部时钟(基本定时器,通用定时器时钟源来自PCLK1,但高级定时器的时钟源来自PCLK2(72M))
知识点2:时基
组成:
-
16bit预分频PSC
-
16bit计数器CNT
-
8bit重复计数器RCR(高级定时器独有)
-
16bit自动重装载寄存器ARR
知识点3:输入捕获
作用:对输入信号的上升沿/下降沿/双边沿进行捕获,测量输入信号的脉宽,和测量PWM的频率,占空比 原理:当捕捉到信号的跳变沿时,将CNT的值所存到捕获寄存器CCR中,然后把两次的值相减,就可以得到脉宽或者频率。 若脉宽时长超过你定时的时长,那么就溢出,此时我们就需要作额外的处理
PWM输入的情况下,只有CH1,CH2可以同时测量周期和占空比,因为只有TI1FP1,TI2FP2可以触发从模式控制器。选谁作从模式控制器的触发测量的就是周期,剩下的一个寄存器就测量占空比。但是单纯测量PWM的一个周期或占空比,可用四路。
知识点4:初始化代码
-
IO初始化
1、浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 2、带上拉输入GPIO_IPU——IO内部上拉电阻输入 3、带下拉输入GPIO_IPD—— IO内部下拉电阻输入 4、模拟输入GPIO_AIN ——应用ADC模拟输入,或者低功耗下省电 5、开漏输出GPIO_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。 当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为 低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 6、推挽输出GPIO_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的 7、复用功能的推挽输出GPIO_AF_PP ——片内外设功能(I2C的SCL,SDA) 8、复用功能的开漏输出GPIO_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS) 输出PWM需用复用推挽输出(GPIO_AF_PP)
-
时基初始化
typedef struct { uint16_t TIM_Prescaler; //预分频器 uint16_t TIM_CounterMode; //定时器的计数方式 uint16_t TIM_Period; //定时器的周期 uint16_t TIM_ClockDivision; //时钟分频因子 uint8_t TIM_RepetitionCounter; //配置重复计数器,仅高级定时器需要 } TIM_TimeBaseInitTypeDef; 定时器的计数方式 向上计数(基本定时器仅有这一种)、向下计数、中心对齐计数 DIR=0,向上计数 DIR=1,向下计数 配置中心对齐需CMS和DIR寄存器配合使用
-
输出比较结构体
typedef struct { uint16_t TIM_OCMode; //比较输出模式选择 uint16_t TIM_OutputState; //比较输出使能 uint16_t TIM_OutputNState; //比较互补输出使能 uint16_t TIM_Pulse; //脉冲宽度 uint16_t TIM_OCPolarity; //输出极性 uint16_t TIM_OCNPolarity; //互补输出极性 uint16_t TIM_OCIdleState; //空闲状态下比较输出状态 uint16_t TIM_OCNIdleState; //空闲状态下比较互补输出状态 } TIM_OCInitTypeDef; 1.比较输出模式选择,总共有八种,常用的为 PWM1/PWM2。它设定CCMRx 寄存器 OCxM[2:0]位的值。 2.比较输出使能,决定最终的输出比较信号 OCx 是否通过外部引脚输出。它设定 TIMx_CCER 寄存器 CCxE/CCxNE 位的值。 3.TIM_OutputNState:比较互补输出使能,决定 OCx 的互补信号 OCxN 是否通过外部引脚输出。它设定 CCER 寄存器 CCxNE 位的值。 4.比较输出脉冲宽度,实际设定比较寄存器 CCR 的值,决定脉冲宽度。可设置范围为 0 至 65535。设置脉冲即可设置占空比 5.比较输出极性,可选 OCx 为高电平有效或低电平有效。它决定着定时器通道有效电平。它设定 CCER 寄存器的 CCxP 位的值。可设置占空比由高电平决定 6.比较互补输出极性,可选 OCxN 为高电平有效或低电平有效。它设定 TIMx_CCER 寄存器的 CCxNP 位的值。 7.空闲状态时通道输出电平设置,可选输出 1 或输出 0,即在空闲状态(BDTR_MOE 位为 0)时,经过死区时间后定时器通道输出高电平或低电平。它设定CR2 寄存器的 OISx 位的值 8.空闲状态时互补通道输出电平设置,可选输出 1 或输出 0,即在空闲状态(BDTR_MOE 位为 0)时,经过死区时间后定时器互补通道输出高电平或低电平,设定值必须与 TIM_OCIdleState 相反。它设定是 CR2 寄存器的 OISxN 位的值。
-
刹车和死区结构体初始化
static void AdvancedTIM_BDTR_Init() { TIM_BDTRInitTypeDef TIM_BDTRInitStructure; TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Enable;//空闲模式下的关闭状态选择 TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Enable;//运行模式下的关闭状态选择 TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_1;//锁存配置 TIM_BDTRInitStructure.TIM_DeadTime=11;//死区时间 TIM_BDTRInitStructure.TIM_Break=TIM_Break_Enable;//断路输入使能控制 TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;//断路输入极性 TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;//自动输出极性 TIM_BDTRConfig(Advanced_TIM,&TIM_BDTRInitStructure); } 死区时间的计算可以看看其他博客,讲解的也是非常详细的,对此不再赘述 这个结构体,你只需关心 TIM_BDTRInitStructure.TIM_DeadTime=11 即可
互补输出(不带死区):
互补输出(带死区输出):
———————————————— 原文链接:STM32学习笔记(4) 高级定时器-两路互补的PWM输出(带死区和刹车控制)_高级定时器互补输出-CSDN博客
死区:
因为开关元器件的tdon和tdoff严格意义并不是相同的。
所以在驱动开关元器件门极的时候需要增加一段延时,确保另一个开关管完全关断之后再去打开这个开关元器件,通常存在两种情况;
-
上半桥关断后,延迟一段时间再打开下半桥;
-
下半桥关断后,延迟一段时间再打开上半桥;
这样就不会同时导通,从而避免功率元件烧毁;死区时间控制在通常的单片机所配备的PWM中都有这样的功能,下面会进一步介绍。
相对于PWM来说,死区时间是在PWM输出的这个时间,上下管都不会有输出,当然会使波形输出中断,死区时间一般只占百分之几的周期。但是当PWM波本身占空比小时,空出的部分要比死区还大,所以死区会影响输出的纹波,但应该不是起到决定性作用的。
另外如果死区设置过小,但是仍然出现上下管同时导通,因为导通时间较短,电流较小,不足以烧毁,此时会导致开关元器件发热严重,所以选择合适的死区时间尤为重要;
现在介绍完了TIM1高级定时器的功能,那么,我们可以用来干什么,以及,为什么说高级定时器专门用来做电机驱动。
PWM驱动电机
还是先上经典用图,不过这一次我们不采用DRV8701P芯片,而是换一个栅极驱动芯片:HIP4082。
它同样也是一款全桥的栅极驱动芯片,效果和上面的DRV8701E一样,但是,驱动方式不一样,他是采用互补PWM驱动。下图是真值表
这个真值表,其实做了简化,把A端B端的输入输出都写到了一块,尤其在输入端用非门的形式表示,对新手极为不友好。
这个才是是实际的驱动逻辑,也是因为采用互补的形式,使得上下桥臂不会同时导通。那么,现在的问题是,我们如何进行互补输出。
就我想到的有三种方案:
-
高级定时器互补输出;
-
两路PWM输出配置反向(不建议);
-
一路PWM输入,加入其中一路加入反向电路;
这样,我们就可以完成了互补输出,确保上下MOS不会导通。那么,再回到去前面:为什么要互补?互补,真的好用吗?互补怎么进行翻转以及。。。调速?
-
互补PWM控制电机:占空比大于50%正转加速,小于50%反转减速;
-
双路PWM控制电机:一路PWM输出0%,另一路PWM调节变速;另一路PWM输出0%,则换向。
两种方式的优缺点:
互补PWM驱动电机的优点:
-
高效性:互补PWM驱动电机可以通过调节PWM信号的占空比来控制电机的速度,从而提高电机的效率。它可以使电机在不同速度范围内以全功率或近全功率工作,减少能量浪费。
-
精确控制:互补PWM驱动电机可以通过改变PWM信号的频率和占空比来精确控制电机的速度和方向,具有高分辨率和灵活性。
-
可靠性:互补PWM驱动电机的互补信号使得电机的驱动更加稳定和可靠,减小电机的震动和噪声,并提高系统的响应速度和动态性能。
互补PWM驱动电机的缺点:
-
电磁干扰:互补PWM驱动电机会产生较大的电磁干扰,可能对其他电子设备造成干扰。
-
复杂性:互补PWM驱动电机的实现相对复杂,需要正确设计和配置互补PWM信号,以及保证互补驱动器的正常工作。
双路PWM控制电机的优点:
-
简单性:双路PWM控制电机的实现相对简单,只需要两个PWM信号来控制电机的速度和方向。
-
精确控制:双路PWM控制电机可以通过调节两个PWM信号的频率和占空比来实现对电机速度和方向的精确控制。
双路PWM控制电机的缺点:
-
效率限制:双路PWM控制电机在低速和部分负载工况下的效率可能较低,导致能量浪费。
-
控制复杂性:双路PWM控制电机需要同时控制两个PWM信号的频率和占空比,并确保它们之间的相位差正确,对控制算法和硬件设计的要求较高。
需要根据具体的应用需求和系统要求来选择适合的电机驱动和控制方法。互补PWM驱动电机适用于对效率和精确控制要求较高的应用,而双路PWM控制电机则适用于相对简单的速度和方向控制场景。
以上控制均涉及调速、换向,不涉及特殊情况。更多信息获取关注相关芯片手册。