搜索
bottom↓
回复: 19

我来转篇文章---AVR mega48/88在BLDC上的应用

[复制链接]

出0入0汤圆

发表于 2008-8-19 08:31:10 | 显示全部楼层 |阅读模式
文章来源于
http://bbs.21ic.com/club/bbs/bbsview.asp?essenceid=9572


AVR mega48/88在BLDC上的应用
赵振锋 2008-06 深圳
BLDC是Brushless DC motor的缩写,指的是无刷直流电机。相对有刷电机,BLDC以重量轻,体积小,加速表现好,噪音低,寿命长等优点得到越来越广泛的使用。近年AVR, Cypress, Microchip 等各大片机厂家也纷纷推出了它们的BLDC方案。
本文主要就Atmel公司的AVR mega48/88在BLDC上的应用展开讨论,特别在电动车控制上的应用。本文适合对单片机编程和BLDC都有一定了解的读者。
BLDC控制的重点是带死区PWM产生,Hall换相处理,电流控制,功率开关管的保护等等,其他如堵转处理,刹车等相对容易。
1.         带死区的PWM的产生

(原文件名:211.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的可以通过感应电动势判断电机转动位置,适合启动力矩要求不高,如风扇驱动等场合,也有通过一定算法应用在无刷电动车控制器中。


(原文件名:212.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 模式则正好相反。上面三种方式各有优劣,根据具体需要选择。
3. ADC采样
ADC是BLDC控制的核心之一,限流控制,过流保护,电压侦测,其它模拟量的检测等都需要ADC的转换。其中电流的侦测最为关键,怎样从一个PWM的波形上测量出准确的电流呢?最好能在PWM的Duty ON的中间读取电流值。上面说了相位修正模式的PWM一个关于BUTTOM 对称的波形,所以我们利用在T/C 溢出中断,此刻触发ADC采样,保证每次都在峰值点采样。

(原文件名:213.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

出0入0汤圆

 楼主| 发表于 2008-8-19 15:02:43 | 显示全部楼层
没有人看吗?我感觉作者这篇文章讲的很好的。

出0入0汤圆

发表于 2008-8-19 15:42:50 | 显示全部楼层
大侠啊.不好意思. 我班门弄斧了

水分很多.虚假的也很多

无刷电刷.驱动 PMW发生.根本不要自带死区.120度导通方式;有自然死区
引用:///1.  带死区的PWM的产生


再一个思路也在哄外行.

/////////////
如有得罪请见谅.

出0入0汤圆

发表于 2009-11-19 12:43:23 | 显示全部楼层
记号。

出0入0汤圆

发表于 2009-12-8 20:29:04 | 显示全部楼层
很好,支持楼主

出0入0汤圆

发表于 2009-12-9 10:12:46 | 显示全部楼层
ATMEL官方网站有这种应用的介绍,各位可以去下载来参考
AVR447: Sinusoidal driving of three-phase permanent magnet motor using ATmega48/88/168

另外,我本人用M88做成功 三相交流电机变频驱动控制器,所以可以做一下旁证

出0入0汤圆

发表于 2010-4-15 17:41:02 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-4-15 19:36:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-15 13:04:34 | 显示全部楼层
回复【5楼】hzn1948
-----------------------------------------------------------------------

五楼 ,这么厉害,我只用过tms 2812 dsp做成了变频 50hz 转400hz。想跟你学习一下 m88做电机变频方案的事情。请多指教

出0入0汤圆

发表于 2010-5-16 20:13:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-16 21:18:11 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-6-24 20:32:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-24 21:05:52 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-11-1 20:31:12 | 显示全部楼层
回复【2楼】baplmqj 菜菜
大侠啊.不好意思. 我班门弄斧了
水分很多.虚假的也很多
无刷电刷.驱动 pmw发生.根本不要自带死区.120度导通方式;有自然死区
引用:///1.  带死区的pwm的产生  
再一个思路也在哄外行.
/////////////
如有得罪请见谅.
-----------------------------------------------------------------------

哈哈,120度 确实不需要死区

出0入0汤圆

发表于 2011-11-1 23:05:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-6 19:33:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-8-28 19:04:38 | 显示全部楼层
非常感谢!正急用!

出0入0汤圆

发表于 2012-9-5 10:14:39 | 显示全部楼层
mark,学习了

出0入0汤圆

发表于 2015-12-24 00:08:26 | 显示全部楼层
下载不了

出0入0汤圆

发表于 2015-12-24 11:08:30 | 显示全部楼层
mark一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 07:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表