BLDC是Brushless DC motor的缩写,指的是无刷直流电机。相对有刷电机,BLDC以重量轻,体积小,加速表现好,噪音低,寿命长等优点得到越来越广泛的使用。近年AVR, Cypress, Microchip 等各大单片机厂家也纷纷推出了它们的BLDC方案。
本文主要就Atmel公司的AVR mega48/88在BLDC上的应用展开讨论,特别在电动车控制上的应用。本文适合对单片机编程和BLDC都有一定了解的读者。
BLDC控制的重点是带死区PWM产生,Hall换相处理,电流控制,功率开关管的保护等等,其他如堵转处理,刹车等相对容易。
1. 带死区的PWM的产生
http://bbs.21ic.com/upfiles/img/20078/200784144027179.jpg
BLDC又称三相六步直流电机,速度是依靠PWM的占空比调节的,同时有EABS和同步续流等功能,需要6路PWM的信号,而且是要带死区的PWM信号。
如何使用AVR mega48/88产生带死区的6路PWM波形呢?方法一, 使用某一个定时器如timer0产生一路PWM,再用6个与门扩展成6路来PWM波形。但这样会增加硬件成本,产生带死区的PWM比较麻烦。方法二, 三个定时器都作为产生PWM使用。虽然AVR mega48/88能有6路PWM,但是它占用全部3个定时/计时器的。幸运的是PWM模式有一个叫相位修正PWM模式(Phase Correct PWM Mode Phase correct PWM top=FFh),我们可以通过这方法产生带死区的PWM波形。相位修正PWM模式能产生一个关于BOTTOM 对称的波形,
(BOTTOM:相位修正模式中是计数器复地从bottom=00h到top=FFh,然后又从top 倒计数到bottom=00h,如此往复,寄存器TCNTn=00h时候,就是BOTTOM。此时还可以产生TOVn溢出中断,下面会用到。)在一般的比较输出模式下,当计时器往TOP计数时若TCNTn与OCRnx匹配,OCnx将清零为低电平;而在计时器往BOTTOM计数时TCNTn与OCRnx匹配,OCnx将置位为高电平。PWM占空比通过输出比较寄存器A-OCRnA和输出比较寄存器B-OCRnB设置,同时OCRnB与OCRnA的差值可以作为死区时间,一般设置为1us;AB两路相位相反输出OCnA output: Inverted PWM,OCnB output: Non-Inverted PWM。三个计时/计数器都同样设置,就可以产生3对带死区的PWM波形。
设计时考虑不增加硬件成本的可以解决的,使用硬件解决,这样可以减轻软件的开销;如果设计需要增加硬件成本,软件可以处理就由软件解决,因为成本也是设计中考虑的重要因数,所以建议使用方法二。
一般PWM周期设置为 64us,就是频率15.625K Hz。PWM 频率可由下式公式获得:F=fclk/(N*510) 变量N 表示预分频因子 (1、 8、 64、256 或1024)。
2. 电子换相
电机可分为有Hall位置传感器和无Hall位置传感器两种。有Hall适合启动力矩大的场合;无Hall的可以通过感应电动势判断电机转动位置,适合启动力矩要求不高,如风扇驱动等场合,也有通过一定算法应用在无刷电动车控制器中。
http://bbs.21ic.com/upfiles/img/20078/200784144357830.jpg
下面我们只针对有Hall的BLDC马达讨论。位置传感是用三个Hall元件组成,马达转动时候可以输出6中状态,所以BLDC是六步换相的(120度和60度区别只是其中一个Hall正反置换而已)。6种Hall信号对应6种换相输出,它们的组合成表称为换相表。我们可以使用Interrupt on any change on pins(引脚电平变化中断)读取Hall值和处理驱动输出,同时要做一定的鉴相处理。mega48有指令速度快的优点,可以在5us响应Hall中断信号。Atmel一个应用实例说,引脚电平变化中断使用50个CPU周期,在8MHz的系统中,最快的换相处理(理论值)达到1600k RPM (8MHz/(50 cycles * 6 commutation states) * 60 sec/min)。这仅限于不做任何其他处理的时候,实际上换相还需要做输出驱动和鉴相等处理处理,但是一般电动车的BLDC转速不及这个值得千分之一,所以mega48对换相响应游刃有余,也适合应用在高速电机中。
在驱动中可以使用3种方式关闭对应输出 1. DDRX=0,把IO口输出高阻状态,端口电平由外部决定。2. 通过寄存器TCCRnX把输出模式设置为正常的端口操作,不与OC0A 相连接,再通过PORTX设置相应的电平。 3. OCRnX=0xFF,则输出保持为高电平。反向PWM 模式则正好相反。上面三种方式各有优劣,根据具体需要选择。
-
-
常青树 发表于 2008/10/28 13:20:13
3. ADC采样
ADC是BLDC控制的核心之一,限流控制,过流保护,电压侦测,其它模拟量的检测等都需要ADC的转换。其中电流的侦测最为关键,怎样从一个PWM的波形上测量出准确的电流呢?最好能在PWM的Duty ON的中间读取电流值。上面说了相位修正模式的PWM一个关于BUTTOM 对称的波形,所以我们利用在T/C 溢出中断,此刻触发ADC采样,保证每次都在峰值点采样。
http://bbs.21ic.com/upfiles/img/20078/200784144435615.jpg
PWM周期是64us,所以ADC速度要足够的快,必须在64us以内完成一次ADC转换。假设AVRmage48采用8MHz系统时钟,分频系数最小2,4M/13=308KHz 采样一次时间仅为3us。实际上这样会影响采用的精度,需要更多的能耗。我们使用8分频就足够了,可以在24us完成一次ADC转换。
要注意各对PWM是由不同的定时器产生的,它们是不同步的。为了在每个相位我们都能够准确地采样,可以使用两种办法:一,打开三个溢出中断TOVn,设立全局标志,当相应的PWM打开时候使用相应的定时中断TOVn触发采样;二,利用计数寄存器TCNT。我们把特定的初始值写入计数寄存器TCNT使各路PWM波形同步,这样只需要开通一路TOVn中断就保证每次都能在PWM Duty ON的中央采样。
这样采集到的是峰值电流,而平均电流就通过电流有效值≈电流即时值*PWM占空比计算得到,这只是近似值,有效值的算法相对复杂一些。
ADC通道切换时候需要注意的是,最好丢弃上次采样值两次的AD值,并不是datasheet说的一次。
4. 换相补偿
因为电机是一个感性负载,对电流是由一种惯性的响应。如何保证电流平稳,在每次换相后能快速达到换相前的水平呢?我们需要在换相后一段时间增大PWM占空比,使电流迅速增大,称作换相补偿。要使补偿恰到好处,这个过程中需要快速实时的电流侦察,换相中断马上进入换相补偿状态增大PWM占空比,此刻ADC不要切换到其他通道使用,一直检测电流值,当电流达到换相前的水平马上恢复正常的PWM占空比。实际上由于我们侦测到电流有所延迟,要稍为提早恢复正常的PWM占空比输出。
5.BOD熔丝位
作为一个正式的系统或产品,当系统基本功能调试完成后,一旦进行现场测试阶段,请注意马上改写熔丝位的配置,启用AVR的电源检测(BOD)功能。因为上下桥不能同时导通,否者马上烧毁功率管,所以我们一定要防止掉电IO口输出错乱,在5V的系统中设置掉电电压为4.3V。
6.功率管的保护
首先,开机对功率管的检测,目的是防止某一个功率管短路,连带烧毁其他功率。峰值电流的控制,峰值电流不应该超过功率的最大承受电流的70%,一旦超过马上减少PWM输出,形成一个闭环控制系统。同时还要做好过流保护和过压保护等等。
关于自动相位识别和无Hall的BLDC控制以后会讨论到。对本文由任何问题欢迎大家讨论。Email: inman#sina.com QQ: 76078044
参考:
《电动车无刷电机控制器软件设计要点》谢渊斌
我们的AVRBBS论坛 http://www.ouravr.com/
《Sensor-based control of three phase Brushless DC motor》Atmel Corporation
《Sensorless control of 3-phase brushless DC motors》Atmel Corporation
引用 常青树 2008/10/28 13:20:13 发表于2楼的内容