最近在搞电机驱动程序,感觉很简单,实际操作却发现里面还有很多猫腻(细节)。
电机在嵌入式设备中非常常见,例如云台的转动,都是靠电机来驱动的。
电机常见分步进电机、直流电机,相对来说步进电机精准度会更高,控制起来也更复杂。直流电机,往往需要接一个反馈,才能比较好的控制电机。
总体来说,电机驱动的目的:
1、电机开关
2、电机转动方向
3、电机转动距离(角度)
4、电机转动速度
把这几项管理好(协调好),就是驱动主要目的。
很多情况下,电机不仅仅是转与不转的关系,还应该有其他要求,因此需要程序或芯片来实现驱动功能。
以下是比较常见的架构:(当然现在驱动芯片很强,可以同时驱动多个电机)
作为程序员而言,其实是关心的,怎么通过MCU “调用” 驱动芯片,实现
开关切换、电机转动方向切换、电机转动速度调节之类的。
还好,本次同时接触了两款不同的驱动芯片,因此可以明确一点:不同驱动芯片驱动方式是不相同的!所以要分析对应的技术手册文档(往往都比较简单,虽然看起来内容很多)!
但不管怎么样,还是存在一些共同特性(后面会记录)。
先看下,其中一款驱动芯片引脚定义:
其实一开始,小白是看不懂的(当然有类似经验就好了)。总的来说,对软件而言,关心的有这几个:VREF1~VREF4、OUTx、Ixx、PHASE1~PHASE4,这几个(后面两组是用来Control input控制输入的,也就是开关)。
再来看看,驱动芯片内部结构:
就好比流程图一样,左边是我们要输入的(通过MCU),右边是控制输出的。逻辑也上很简单。
再来看看另外一款驱动芯片信息的
这款更简单,最多控制两路电机。
与上面那款比起来,共同关注是:VREFx、OUTx,表示的意思也是一样的。
其他常见引脚:
●EN逻辑输入:它是芯片使能输入。低逻辑电平可切断桥A和桥B的所有功率MOSFET。
此引脚还连至过电流和热保护电路的集电极以实现过电流保护。
●CLOCK逻辑输入:它是步进时钟输入。在每个上升沿,状态机前进一步。例如HALFstep模式下,如果输入一个波形,则Step+1
●CW/CCW逻辑输入:它选择了旋转的方向,注意这个不是电流控制方向。高逻辑电平设置的是顺时针方向,低逻辑电平设置的是逆时针方向。这个跟上面CLOCK有关系,要确认好,
就好比,现在要去调整开关(电风扇开关,设置风量大小);这个引脚的意思你要顺时针调,还是逆时针调
●HALF/FULL逻辑输入:它是步进模式选择器。高逻辑电平设置的是半步进模式,低逻辑电平设置的是全步进模式。
●CONTROL逻辑输入:它是衰变模式选择器。高逻辑电平设置的是慢衰变模式,低逻辑电平设置的是快衰变模式。
●VREFA和VREFB模拟输入:它们分别是桥A和桥B的源引脚。(PWM输入)如果此处固定输入,则Iout是固定的,这里
核心内容:
控制开关输出:
第一款芯片,我们来看看手册,
大致意思是通过使能I0,I1,PHASE来控制输出方向状态之类;通过VREF来控制速度。这样不是就简单了嘛。但是需要怎么使能呢?还得看一张表:
圈出来的就是我们需要的。
第二款芯片,我们来看看手册,以Half step为例:
大致的意思:当选择half step(独立使能引脚)模式时,通过给不同数量的CLOCK可以实现不同形式切换。
这张图,看右侧波形,举个例子:
当step=4的时候,Iouta=CW,Ioutb=待机
当step=5的时候,Iouta=CW,Ioutb=CW
….
实际turn | A | B | 实现效果 |
step1 | CCW(0) | CCW(0) | A、B反向输出 |
step2 | -(2) | CCW(0) | A不输出,B反向 |
step3 | CW(1) | CCW(0) | A正向,B反向 |
step4 | CW(1) | -(2) | A正向,B不输出 |
step5 | CW(1) | CW(1) | A正向,B正向 |
step6 | -(2) | CW(1) | A不输出,B正向 |
step7 | CCW(0) | CW(1) | A反向,B正向 |
step8 | CCW(0) | -(2) | A方向,B不输出 |