无感方波控制
考虑到技术实现的细节,一般论文对工程应用的直接帮助不大,不如芯片厂商提供的应用笔记和开源项目实用。工程师大都比较务实,需要的是即学即用,至少是有借鉴意义的技术知识和经验。
无感方波控制的参考资料,首推开源项目BLHeli。它起先是基于8位单片机C8051F330的汇编语言程序,最初用于微型直升机定速控制,改善效果非常明显。作为过来人,笔者认为BLHeli是难得的汇编语言编程示范,值得好好学习和吸收。另外,无论是编写汇编程序,还是进行程序分析,有了扎实的汇编语言基础,你会感到有如神助。这里推荐读者先学习王爽老师的《汇编语言》,之后再吃透BLHeli程序,就打下非常好的汇编语言基础,以后一定会受益颇多!只不过,BLHeli后期改用32位单片机STM32F051,更名为BLHeli32之后,代码就不再开源了。虽然功能丰富了许多,但随着无感FOC的流行和单片机的飞速发展,以及功能定制化受到限制,BLHeli32并未能像BLHeli当初那样炙手可热。
无感FOC
无感FOC的参考资料,现在还是比较丰富的,但商业上有诸多限制。
有的厂商提供了完整的程序,但里面是C语言和汇编语言的混合编程,汇编指令是和该厂商专有的DSP引擎绑定的,要达到厂商演示性能,只能使用其特定芯片。
有的厂商提供了全自动的电机控制代码生成器,看似只要输入各种参数,就能自动生成代码,非常省事,但最大的问题是生成的代码几乎不存在可读性,出现底层Bug时很难排查问题,而且所生成的代码也无法满足高性能应用的要求。
有的厂商将优秀的控制算法以硬件的形式固化到了单片机内部,用户无法了解其实现细节,只能在程序中调用其功能,输入参数就可以得到满意的性能,但需要购买这种特定的芯片。
有的厂商给出了全部的C语言代码,但核心算法(如无感FOC的位置估计部分)是以库的形式存在的,或者是将关键的核心参数用另外的程序自动计算后提供给用户,用户无法得知参数计算的具体过程。
还有厂商使用一颗低阶芯片(如8051)完成接口通信和一些相对低速的处理,同时用协处理器硬件执行快速的算法任务,如FOC的各种变换、PI调节、数字滤波、三角函数计算等。
综上来看,各个厂商开放的代码实例和硬件参考,都有着各种各样、有意无意的限制,要么是难懂,要么是不全,要么是硬件非常贵,特别是开发板上的MAXON电机就价值几百块人民币,着实不利于初学者上手。
厂商的应用笔记,笔者强烈推荐Microchip的AN1078应用笔记。大家可以下载早期的代码压缩包,因为早期的代码结构清晰、易于理解。而且,最好配合官方的MCLV控制板学习,使用配套的上位机有利于学习和确认。虽然里面嵌入了DSP引擎的汇编语言,但是查阅指令手册、配合PICKIT3调试器,一步一步理解起来还是非常容易的。这个程序非常经典,而且具备一定的实用价值,务必要吃透。
无感FOC的开源项目,自然首推VESC了,其开发者本杰明(Benjamin Vedder)也给出了参考的算法论文,大家可以看看论文的数学描述是如何转化为代码的。VESC的算法程序的各种“魔改”版本,以及所谓的去开源化自研项目,基本上撑起了视频网站上无感FOC视频秀的半边天。它使用STM32F405作为主控,频率高达168MHz,全部采用硬件浮点运算,配备USB接口的上位机显示,电机参数等可以通过程序自动测量和整定,值得深入学习。其不足之处在于,开发平台使用的操作系统不为大家所熟悉,单片机使用的操作系统也比较特殊,初学者不易理解。它最早是为滑板车直驱开发的,电流可以非常大,而车轮直径小,以大电流强拖确实可以满足要求。但是,用于高压植保机那种大型螺旋桨的快速启动,就会出现来回摆动的问题,必须先将螺旋桨强拖对齐后再行启动。考虑到STM32F405售价相对较高,在算法公开的情况下,很多人都会想到将其算法移植到更加便宜的ARM M3,甚至是M0核单片机上,这就考验工程师的功力了。当然,不用这个算法,也可以在M0核上实现乃至超过VESC的启动算法的效果的。最近,VESC也展示和开源了基于高频注入以及静音型高频注入的算法,效果也相当不错,只是需要测量电机的相电流,而且所需的运放比较贵,以致项目成本较高。
无感控制算法
无感方波控制算法
无感方波控制,说是没有传感器,实际是使用无刷电机线圈作为传感器。方波控制也叫做六步驱动,电机旋转一周要经历6种驱动状态。它的特点是在电机旋转的任何时刻,三个电机端子的一个接电源正极,一个接电源地,一个浮空。这样,在浮空端子上就能检测到电机线圈的反电动势,当永磁体经过线圈时,反电动势会出现由正转负或由负转正的变化。这个时刻就是所谓的“反电动势过零点”,它刚好与线圈对齐,是一个固定的参考位置。基于三个电机端子接电阻网络形成的虚拟中性点,单片机就可以通过比较器对浮空相电压与虚拟中性点电压进行比较,根据比较器的翻转确定过零点,进而根据先前的换相时间推算出下一步换相的时刻。如此,不断检测对应的过零点,并据此换相,就实现了电机的连续运转。
考虑到反电动势与电机转速成正比,当电机静止时,反电动势为零,无法检测过零点。而当电机转速过低时,反电动势太小,信噪比过低,无法准确检测过零点。毕竟有PWM调制的地方,电路噪声都小不了。这就是说,可靠的过零点检测有最低转速要求。
一般来说,无感方波启动算法实质上都是盲启,即启动时根本不知道电机转子的位置,而是直接按默认的换相状态驱动,尝试检测过零点。如果在默认时间内没有检测到对应的过零点,那就按下一个换相状态驱动并检测过零点……直至检测到合适的过零点,电机正常驱动。在此基础上加以改进,也能得到令人满意的启动性能。由此可见,绝大部分论文称“电机静止时反电动势为零,无法检测过零点,所以无法启动”,有人云亦云之嫌,快速启动的实现在于理想条件和现实感知之间的权衡。想要知道一款无感驱动器是不是盲启,可以在保证安全的前提下,以小电流启动电机,用手捏住电机轴或其驱动的桨叶,只要电机连续来回摆动就可以判定为盲启。这样的驱动器无法在静止状态下保持对转子位置的跟踪。电机控制器性能不能仅看空载演示,一定要加负载。大电流锁定后的慢速强拖只能适应小惯量负载或空载,不能算超低速闭环控制,只能算开环强拖,没什么实用价值。电感只有几十微亨的航模电机和几十毫亨电感的工业电机的控制特性大不相同,电感大的电机往往更好控制。
盲启可以满足大部分应用需求,但存在一些限制。例如,某视频网站上让四旋翼飞行器在水中“飞行”的一个非典型应用,可以明显看到,原本在地面启动非常快速、平滑的螺旋桨,在水中的表现却大相径庭,有来回摆动强行定位的表征,就像动物被电击时四肢肌肉绷紧一样。究其原因,就在于这个电机的驱动仍然采用的是盲启算法。对于螺旋桨负载,刚启动时速度低,空气阻力可忽略不计,螺旋桨惯性力矩占主导地位,只要将启动PWM的占空比设为适当的经验值,就可以快速拉动螺旋桨产生足够的反电动势以供检测。期间,检测过零点到连续换相也就几十到几百毫秒的时间,几无感觉,如同有霍尔传感器一样顺畅。但在水中就不一样了,水的密度远大于空气,阻力比惯性力矩还大,只能加大启动PWM的占空比来加速拖动螺旋桨,这样就可以看到传统无感方波启动算法的慢动作。这种水下应用,要时刻保持对转子位置的跟踪,才能提供快速正反转或极低速旋转来调节机器姿态,解决方案是采用高频注入法或加装磁编码器。
无感方波的换相控制,还有一种不使用反电动势信号,而使用磁链信号的方法。这种方法的应用比较少,一般做法是先对浮空相反电动势信号进行积分得到磁链信号,然后比较磁链信号与设定阈值,决定换相时机。两种方法的区别在于,反电动势过零点信号与换相点信号不一致,对零度进角来说有30°偏移,也就是检查到过零点后,要再过30°电角才能换相;而磁链信号与换相点信号是一致的,可以方便地调节换相进角,比使用反电动势过零信号的方法响应更快、更可靠,穿越机的应用便是实证。考虑到电机是电感元件,其电流滞后于电压,为了实现高效控制以及提高输出功率,我们需要提前施加电压,就好像内燃机的点火进角,点火时刻需要根据转速实时调整。这里可以理解为提前换相,而且是所有换相点都相对于过零点一致提前。
无感FOC算法
无感FOC比无感方波更复杂一些,但论其本质也不难。无感FOC控制算法基本上包含三部分,一是坐标系变换,二是电流调节,三是位置估计,其中以位置估计最为关键。
接下来,重点探讨无感FOC的位置估计算法。由无感方波的基本原理可知,在六步驱动中,总有一个电机端子是浮空的,此相半桥臂的功率开关管皆截止,阻抗无限大,所以可以直接采集这个端子的反电动势过零点作为换相依据。但无感FOC的情况完全不同,每一相的上下桥功率开关管都是使用互补PWM驱动的,端子要么为电源电压,要么接地,没有浮空相,因此无法检测过零点信号。
既然无法直接检测,那就只能研究间接方法,由此产生了两类基本的位置估计算法。要提醒读者的是,前述无感方波控制的过零点位置每60°跳跃一次,6次换相总计跳跃360°电角,而无感FOC控制需要的是连续的位置信号!
由反电动势或磁链信号得到位置信息
第一类位置估计算法由反电动势或磁链信号得到位置信息,是主流方法,性能良好,但很难在极低速或静止状态下持续跟踪信号。优秀的设计可以实现速度过零的连续跟踪,在快速反转的情况下也能正常工作,具体策略有三种。
第一种是间接得到反电动势信号,思路是构建一个电机数学模型,与真实的电机一起运行。对于同样的电压输入,理论上真实电机的电流应该和电机模型的电流一致,但实际中必然有所差别,遂用控制器加以补偿。一旦电机模型和真实电机的电流相同,就认为补偿结束,这时就可以对补偿量滤波,得到反电动势。进而,对两相正交坐标系中的两个反电动势信号做反正切运算,解算出连续的位置信号。具体的讨论和实现,参见MicrochipAN1078应用笔记。
第二种也基于反电动势信号,但与第一种不同,它根据电机稳态运行时,平行于磁体方向(d轴方向)的反电动势为0这个事实,通过锁相环控制保持其始终为0。这样就可以通过检测d轴反电动势是否为0来调节给定速度,进而对速度积分,即在每个控制周期对速度值进行累加得到位置信息。这个位置信息又决定了d轴反电动势是否为0,如此构成闭环控制。这是本书所用的策略,后续章节会详细解释。
第三种不使用反电动势信号,而是使用磁链信号。对于磁链信号,共有三种解算方法,第一种方法是对两相正交的磁链信号求反正切,直接得出位置。第二种方法是利用外差法通过锁相环得到位置。基于锁相环的控制一般都比较稳定,位置信号比较平滑,低速特性比较好,适合那种转速不高的应用,如滚筒洗衣机的那种直驱型外转子无刷电机。其最大的问题是,一旦堵转,就会出现失步,不适合高动态响应的应用。第三种方法是直接估算三相静止坐标系中的转子磁链,但考虑到速度变化时很难进行相位误差补偿,用得不多。实际工程应用以前两种方法为主,Infineon公司最初使用的是反正切法,后期改用了锁相环法,性能都不错,但均不支持零速和极低速时的位置估计。
高频注入算法
第二类位置估计算法其实就是高频注入算法,它利用电机的d、q轴电感差异来检测位置,最大的优势是支持零速跟踪位置,结合脉冲定位的方式,可以做到完全无反转、平滑顺畅的快速启动,在M0核、M3核上都可以实现。其缺点是有高频噪声,而且响度还比较大,尽管提高PWM频率、随机抖动占空比、随机改变PWM频率,或者提高采样激励频率,可将噪声频率提高到听域以外,但难免有谐波成分被人耳感知。当然,实施高频注入的前提是,电机制造上保证d、q轴电感存在差异,否则也无能为力。
综合来看,TI公司的FAST估算器性能占优,足以覆盖绝大多数应用,但由于使用磁链信号的位置估计仍然不能在零速和极低速下保持转子位置跟踪,也就是不能估计转子位置,所以要结合高频注入法进行全速域控制。
经过多年的发展,无感控制基本算法已日渐成熟,可能最后的挑战就在于电动自行车、滑板车的表贴式轮毂电机的驱动。这种电机的d、q轴电感差异极小,很难用高频注入算法来解算位置信号,而且基于反电动势的算法根本不适用。这种电机的产量巨大,如果能够实现重载零速启动,无反转、无抖动、平滑顺畅的启动,那将会产生颠覆性影响。