以前的博客中介绍过一款分立元器件实现的H桥的博文,现在提供一个更简单的单芯片方案。
驱动电路主要由一款DRV8841芯片组成,它是一个集成的电机驱动解决方案,内置两个功率NMOS H桥,可通过PWM驱动两个直流电机,或者一个步进电机。它还集成了电流感知、调节电路与保护装置,支持过热、过电流与欠压保护,并且自带最大3.75us的死区。电机电压支持8.2V到45V,最大电流为2.5A。
主要的原理图如下
我使用的控制芯片是STM32F405RGT6,引脚连接关系如下
网络标号 | 引脚 | 功能 | 备注 |
---|---|---|---|
MAP | PC6 | 桥A输入1 | MAOP的控制端,内部下拉,与单片机T8C1连接(Timer8的通道1)。 |
MAN | PC7 | 桥A输入2 | MAON的控制端,内部下拉,与单片机T8C2连接。 |
MBP | PC8 | 桥B输入1 | MBOP的控制端,内部下拉,与单片机T8C3连接。 |
MBN | PC9 | 桥B输入2 | MBON的控制端,内部下拉,与单片机T8C4连接。 |
DECAY | PB6 | 衰减模式 | 过流时有用,默认为低电平慢速衰减。 |
nSLEEP | PB8 | 休眠模式输入 | 高电平启用设备,低电平休眠模式,内部下拉。 |
nRESET | PB9 | 复位输入 | 低电平复位,会初始化内部逻辑,关闭H桥输出,内部下拉 |
nFAULT | PB7 | 错误输出 | 发生温度过高、电流过大时输出低电平。 |
MAOP | 电机A | 桥A输出1 | 接电机A一端 |
MAON | 电机A | 桥A输出2 | 接电机A另一端 |
MBOP | 电机B | 桥B输出1 | 接电机B一端 |
MBON | 电机B | 桥B输出2 | 接电机B另一端 |
VCC_MOTOR | 电源 | 电机电源 | 电机驱动板配套24V |
MGND | 模拟地 | 电机接地 | 此地可能有干扰,要做处理 |
下两图说明了如何通过AIN1与AIN2引脚来控制电机的正反转。
因此,如果想让电机全速“正转”(姑且规定电流从AOUT1流入AOUT2时,电机为正转[面向安装孔,顺时针为正]),只需AIN2始终保持低电平,AIN1始终保持高电平;如果希望电机转速可调,则AIN1可以通过脉冲宽度调制,在一个很小的周期内,如果AIN1高电平持续的时间为60%,那么对于电机来说,它感受到的平均电压就是24*0.6=14.4V,转速相比24V当然会慢一些。
在H桥驱动电机的电路中,绝对不可以把同侧桥臂的上下半桥同时打开,否则可能会导致板子烧坏。实际上单片机引脚翻转速度极快,而MOS管与电机切换状态都存在延时,导致从程序命令某半桥关断,到实际关断,有一段时间的延迟。在延迟期间,如果上半桥正在关闭,则下半桥暂时还不能打开,直到上半桥完全关闭,下半桥才能打开。中间等待的这段时间,就是死区时间。死区时间与硬件密切相关,不同电机与不同MOS管的死区时间都不一样
一般情况下,STM32控制电机的项目会用到高级定时器Timer1或Timer8,输出嵌入死区的互补PWM,即定时器输出的PWM已经带有死区功能。但电机驱动板中,由于驱动芯片DRV8841自带了死区功能,所以不必再编写死区的代码。
根据手册,DRV8841带的死区时间(在手册中的说法其实叫做Blanking Time,应该叫做消失时间)为3.75us。实际也可以通过示波器测出,从单片机引脚电平下降,到实际电机P端电压下降,用时约2us。即3.75us的死区时间对于此系统是足够的。