有关DC电机控制的软件设计原则
品慧电子讯:诸如玩具、复印机、工厂自动化、机器人技术、汽车系统、航空航天技术等应用多是使用300W以下的电机来控制的。其中类似步进电机、DC电机以及无刷电机等小功率电机设备是应用最广泛的。电机产量与功率大小是成反比的关系。小功率电机设备的需求量要远远超过大功率电机设备。基于电机控制的DSP设计主要应用于大型离线式电机,离线电机运行在110-480VAC和1/4-100HP,常见的离线电机主要有AC电机和无刷电机。文中详细介绍了使用C8051F3xx MCU控制电机的软件设计实例,从实例中可以分析出电机控制系统具有更高的复杂度,并且还要求额外特性。这些软件应用实例恰好能够为电机驱动系统的开发做好铺垫。
1、带有软反转能力的DC电机
这个用于DC电机的软件示例基于第二个示例,提供软反转能力。为了安全的反转DC电机,我们需要判断电机是否还处于运转中。确定电机是否仍然处于旋转状态的简单而有效方法是测量跨接在电机端子上的电压差。ADC能够被配置去测量模拟多路选择器中的任意两个输入引脚上的差分电压。可编程的窗口检测器也可以用于判断差分电压是否属于预设极限。在这个示例软件中,如果差分电机电压在100ms内保持在满量程的3%以下,那么电机开始反转。带有电压感应功能的DC电机驱动的硬件实现类似于在电机端子上分别添加两个电阻分压器,如图1所示。
图1:带有电压感应功能的DC电机驱动
主循环已经被改进用来检测电机是否停止。detectStop()函数首先配置ADC去测量差分电压。ADC和窗口检测器都适用于查询模式。如果ADC值在预设窗口范围内,那么计数器增加。使用实现10ms延迟的定时器T0设置采样时间。任何在窗口之外的采样值将重置计时器。退出while循环之前,它将使用10个连续的采样值。返回到主循环之前,detectStop()函数将重新配置ADC去测量速度电位器。
2、带反转能力的DC电机
永磁DC电动机通常被用于需要反转电机方向的应用中。为了反转旋转方向,需要反转电机上电压的极性。这需要使用H桥。如图3所示,H桥有4个晶体管。当在正方向驱动电机时,Q4打开,PWM信号应用于晶体管Q1。在反方向上驱动电机,Q3打开,PWM信号应用于晶体管Q2。在这个示例中,下部的晶体管被用于PWM速度控制,上部的晶体管被用于转向。使用这种拓扑结构,可以在两个方向上提供变速控制。
图2:DC电机全桥电路在图2中,N沟道功率MOSFET被用于低压侧晶体管,P沟道功率MOSFET被用于高压侧晶体管。对于驱动20V以下的DC电机来说,利用互补功率MOSFET是非常符合成本效益的。如图2所示,低压侧门驱动器带有反相器,而高压侧门驱动器没有反相器。门驱动器极性被选择以确保当端口引脚在弱上拉使能的复位配置模式下,功率晶体管处于关闭状态。该示例软件构建在基本示例代码上。主循环现在包括一个if语句检查反转开关SW1的状态。当反转按键被按下时,PWM禁止,同时所有P0输出禁止。当按键释放后,电机将反转方向。除了增加额外的推挽式输出引脚配置之外,示例软件中的初始化函数类似于示例1。调用reverse()函数反转电机方向。标志位Fwd用于保存电机状态。Fwd位被切换用于判断哪些输出需要激活。
反转电机还存在一个潜在的问题。当反转开关SW1被按下时,电机可能由于电机惯性而继续旋转一些时间。当电机正在转动时,它将产生与电机速度成比例关系的反向电动势。如果电机停止旋转之前反向按键被释放,电机反向电动势将通过上部晶体管而短路,如下所述。参考图3,假设开始时Q4处于打开状态,电机正在正方向上旋转。假设电机正在运行,并且反向电动势大约为6V。现在反转开关被按下,所有4个晶体管被关闭。电机右侧将比左侧高约6V。然后开关释放,打开Q3。电机左侧被上拉到电源电压,电机的反向电动势通过Q4的内部二极管而短路。最终的结果是,电机停止,在电机机械惯性中储存的所有能量被注入Q4。反转过程中很容易损坏上部晶体管。在一些具有较大摩擦力负载的应用中,一个固定延迟时间可以确保电机有足够时间停止。而在其他应用中,电机可能需要花费几秒钟才完全停止。这个问题的通用解决方案,如图3所示。
图3:DC电机反转危害12下一页>
- 第一页:带有反转能力的DC电机的软件设计;
- 第二页:DC电机控制以及BLOD电机的软件设计
3、DC电机控制DC电机在小功率电机中是最常见和最便宜的。在本文中,术语“DC电机”特指有刷换向永磁DC电机。DC电机的特性使得它成为变速系统中使用的最简单电机。DC电机的转矩—速度特性如图4所示。DC电机的非负载速度与电机电源电压成线性关系。驱动稳定扭矩负载、线性负载或指数负载的DC电机的电压—速度特性也是连续的、正斜率的和可预测的。因此,在大多数情况下使用开环控制是可行的。
图4:DC电机特性简单地改变
通过电机的电压,任何人都能够控制电机的速度。PWM能够用于改变电机供电电压。加载到电机的平均电压与PWM占空比成正比例关系(这里忽略电机自感和不连续运行导致的次要影响)。使用F3xx MCU提供简单的DC电机速度控制的一个简单的例子。在这个示例中使用ADC读取电位器的位置信息,并且使用PCA 8位PWM模式输出对应的PWM信号。硬件配置如图5所示。
图5:DC电机驱动电路
4、无刷DC电机控制
无刷DC(BLDC)电机拥有一些传统有刷换向DC电机所没有的优势。电子和传感器有效地替代了电刷的角色,提供更长的寿命,减少维护操作,并且没有电刷噪声。正确整流的BLDC电机的扭矩—速度特性完全相同于如图1所示的DC电机。因此,无刷DC电机展现出与DC电机相同的满足需求的品质,非常适用于变速控制。这个示例为使用霍尔效应传感器控制电机换向的BLDC提供简单的开环控制。BLDC电机的速度使用简单的电位器控制。在这种方式下的BLDC电机控制的特点类似于经典DC电机控制示例。这个示例的硬件实现如图6所示。由于BLDC电机需要额外的输出,因此推荐C8051F330这个MCU。如果应用需要更多的存储资源,C8051F336也是不错的选择,因为它有较大的16kB代码存储空间,并且代码兼容C8051F330。电机由6个功率晶体管驱动,构成三相桥式结构。下部的晶体管Q1-3是N沟道功率MOSFET。上部的3个晶体管是P沟道功率MOSFET。这样就简化了门驱动器管理。此外,互补门驱动器的使用使得在默认状态下功率晶体管处于关闭状态。
图6:无刷电机自动控制
霍尔效应传感器有开集电极输出,需要上拉电阻。检查电机规格确保霍尔效应传感器是适合配置的。开集电极输出通常是3V兼容的。然而,霍尔效应传感器也需要一个偏置电源,通常需要超过3V。在大多数系统中,霍尔效应传感器能够关闭电机电源电压或者门驱动器电源电压。使用断点调试软件可能会将电机和MOSFET置于不良状态。当MCU遇到一个断点时,引脚被及时有效地冻结,而且可以留下PWM输出处于激活状态。这里推荐的流程是在进行单步调试或者使用断点之前,一直断开电机电源连接。BLDC电机在跨越绕组时将会满电压失速。BLDC电机失速电流仅仅与绕组的内阻相关。这很可能损坏功率MOSFET。
5、BLOD电机的软件设计
BLDC电机示例软件包含许多新的元素,如下所述。PORT_Init()函数对交叉开关器和输出引脚分配进行设置。额外的控制引脚为3相控制而设置为推挽式输出,为读取霍尔传感器而设置为输入。可编程计数器阵列时基采用160ns,启动计数器。然而,模块0模式SFR没有初始化为8位PWM。在霍尔效应位置被确定之前,没有电机驱动被启动。main()函数首先初始化相关资源,设置start标志位。主循环首先使用hallPosition()函数检测霍尔效应传感器的位置。如果start标志位被设置或者霍尔位置已经改变,电机通过调用commutate()函数进行换向。接下来,速度输入被读取,速度设置被写入PWM输出。hallPosition()函数在错误状态时返回0。这发生在霍尔效应输入全为高或全为低时。如果错误发生了,主循环通过调用coast()函数使所有输出无效。起始位也在错误条件发生时置位,从而迫使换向发生在下一个合法的霍尔位置读数时。readHalls()函数在霍尔效应输入端口引脚上读取并且去除霍尔效应编码抖动。该函数等待三个连续的相同的读数。当霍尔编码正在改变时,这种方式可以降低错误读数的可能性。hallPosition()首先通过上面描述的readHalls()函数读取霍尔效应编码。霍尔编码模式被储存在常量数组hallPattern[]中。为了匹配霍尔效应编码,一个带有后递减的单行for循环被用于寻找对应的索引。hallPosition()函数如果发现一个匹配的模式,则返回1-6中的一个值。如果没有发现匹配,hallPosition()函数返回0值。commutate()函数用来在启动时初始化输出,当霍尔位置改变时改变输出状态,并且在检测到霍尔错误后重新启动电机。commutate()函数首先禁止PWM和上部的晶体管。然后,它才使用从hallPosition()函数中获得的索引。
结语:
相对来说,整流模式以及霍尔效应模式没有统一标准,用户只需要浏览电机制造商提供的数据手册就可以核查这两种模式,同时也可以适当的改变霍尔效应模式与整流模式的位移和通信。