掌握MCU软件设计准则 实现直流马达控制精准度提升
凭借软件算法 无刷直流马达变速控制性能大增
无刷直流马达提供一些传统有刷换向DC马达所没有的优点。电子和传感器有效的替代电刷角色,提供更长的寿命,减少维护操作,并且没有电刷噪声。正确整流的无刷直流马达的扭矩-速度特性完全相同于如图1所示的DC马达,因此,无刷直流马达展现出与DC马达相同的满足需求的质量,非常适用于变速控制。这个范例为使用霍尔效应传感器控制马达换向的无刷直流马达,提供简单的开放回路控制,无刷直流马达的速度使用简单的电位器控制。在这种方式下的无刷直流马达控制的特点,类似于经典DC马达控制范例。
这个范例的硬件实现如图6所示。马达由六个功率晶体管驱动,构成三相桥式结构。下部的晶体管Q1-3是N通道功率MOSFET;上部的三个晶体管是P通道功率MOSFET。这样就简化闸极驱动器管理,此外,互补闸极驱动器的使用使得在预设状态下,功率晶体管处于关闭状态。

图6 无刷DC马达驱动
霍尔效应传感器有开集电极输出,需要上拉电阻。检查马达规格确保霍尔效应传感器是适合配置的,开集电极输出通常是3V兼容的,然而,霍尔效应传感器也需要一个偏置电源,通常须要超过3V。在大多数系统中,霍尔效应传感器能够关闭马达电源电压,或者闸极驱动器电源电压。
使用断点调变软件可能会将马达和MOSFET置于不良状态。当MCU遇到一个断点时,引脚被及时的有效冻结,而且可以留下PWM输出处于启动状态。这里推荐的流程是在进行单步调变或者使用断点之前,一直断开马达电源连接。BLDC马达在跨越绕组时,将会满电压失速。BLDC马达失速电流仅仅与绕组的内阻相关,这很可能损坏功率MOSFET。
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()函数中获得的索引。
对于霍尔效应模式或者整流模式来说,没有统一的标准。请参阅你所使用之特定马达制造商所提供的数据手册,依据制造商的资料手册仔细查核两种模式。同时,也请检查霍尔效应模式和整流模式之间的通信,必要时请改变两种模式之间的位移。
评论