微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 工业电子 > 高级电机控制中的软件设计原则

高级电机控制中的软件设计原则

时间:08-22 来源:互联网 点击:

  • 带反转能力的DC电机

    永磁DC电动机通常被用于需要反转电机方向的应用中。为了反转旋转方向,需要反转电机上电压的极性。这需要使用H桥。如图3所示,H桥有4个晶体管。当在正方向驱动电机时,Q4打开,PWM信号应用于晶体管Q1。在反方向上驱动电机,Q3打开,PWM信号应用于晶体管Q2。在这个示例中,下部的晶体管被用于PWM速度控制,上部的晶体管被用于转向。使用这种拓扑结构,可以在两个方向上提供变速控制。


    图3-DC电机全桥电路

    在图3中,N沟道功率MOSFET被用于低压侧晶体管,P沟道功率MOSFET被用于高压侧晶体管。对于驱动20V以下的DC电机来说,利用互补功率MOSFET是非常符合成本效益的。如图3所示,低压侧门驱动器带有反相器,而高压侧门驱动器没有反相器。门驱动器极性被选择以确保当端口引脚在弱上拉使能的复位配置模式下,功率晶体管处于关闭状态。

    该示例软件构建在基本示例代码上。主循环现在包括一个if语句检查反转开关SW1的状态。当反转按键被按下时,PWM禁止,同时所有P0输出禁止。当按键释放后,电机将反转方向。

    除了增加额外的推挽式输出引脚配置之外,示例软件中的初始化函数类似于示例1。

    调用reverse()函数反转电机方向。标志位Fwd用于保存电机状态。Fwd位被切换用于判断哪些输出需要激活。

    反转电机还存在一个潜在的问题。当反转开关SW1被按下时,电机可能由于电机惯性而继续旋转一些时间。当电机正在转动时,它将产生与电机速度成比例关系的反向电动势。如果电机停止旋转之前反向按键被释放,电机反向电动势将通过上部晶体管而短路,如下所述。

    参考图4,假设开始时Q4处于打开状态,电机正在正方向上旋转。假设电机正在运行,并且反向电动势大约为6V。现在反转开关被按下,所有4个晶体管被关闭。电机右侧将比左侧高约6V。然后开关释放,打开Q3。电机左侧被上拉到电源电压,电机的反向电动势通过Q4的内部二极管而短路。

    最终的结果是,电机停止,在电机机械惯性中储存的所有能量被注入Q4。反转过程中很容易损坏上部晶体管。在一些具有较大摩擦力负载的应用中,一个固定延迟时间可以确保电机有足够时间停止。而在其他应用中,电机可能需要花费几秒钟才完全停止。这个问题的通用解决方案,如图4所示。


    图4–DC电机反转危害


    带有软反转能力的DC电机


    这个用于DC电机的软件示例基于第二个示例,提供软反转能力。为了安全的反转DC电机,我们需要判断电机是否还处于运转中。

    确定电机是否仍然处于旋转状态的简单而有效方法是测量跨接在电机端子上的电压差。ADC能够被配置去测量模拟多路选择器中的任意两个输入引脚上的差分电压。可编程的窗口检测器也可以用于判断差分电压是否属于预设极限。在这个示例软件中,如果差分电机电压在100ms内保持在满量程的3%以下,那么电机开始反转。

    带有电压感应功能的DC电机驱动的硬件实现类似于在电机端子上分别添加两个电阻分压器,如图5所示。


    图5–带有电压感应能力的DC电机驱动

    主循环已经被改进用来检测电机是否停止。detectStop()函数首先配置ADC去测量差分电压。ADC和窗口检测器都适用于查询模式。如果ADC值在预设窗口范围内,那么计数器增加。使用实现10ms延迟的定时器T0设置采样时间。任何在窗口之外的采样值将重置计时器。退出while循环之前,它将使用10个连续的采样值。返回到主循环之前,detectStop()函数将重新配置ADC去测量速度电位器。

    无刷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–无刷DC电机驱动

    霍尔效应传感器有开集电极输出,需要上拉电阻。检查电机规格确保霍尔效应传感器是适合配置的。开集电极输出通常是3V兼容的。然而,霍尔效应传感器也需要一个偏置电源,通常需要超过3V。在大多数系统中,霍尔效应传感器能够关闭电机电源电压或者门驱动器电源电压。

    使用断点调试软件可能会将电机和MOSFET置于不良状态。当MCU遇到一个断点时,引脚被及时有效地冻结,而且可以留下PWM输出处于激活状态。这里推荐的流程是在进行单步调试或者使用断点之前,一直断开电机电源连接。BLDC电机在跨越绕组时将会满电压失速。BLDC电机失速电流仅仅与绕组的内阻相关。这很可能损坏功率MOSFET。

    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()函数中获得的索引。

    对于霍尔效应模式或者整流模式来说没有统一的标准。用户需要浏览你所使用的特定电机的制造商所提供的数据手册。依据制造商的数据手册仔细核查两种模式。也要检查霍尔效应模式和整流模式之间的通信。必要时需要改变两种模式之间的位移。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top