lijieamd 发表于 2010-2-14 22:34:01

[原创]DIY电调的细节以及算法讨论

说起自制电调,真是一段痛苦又快乐的经历.大半年以前,在EDN上看到一个利用视觉暂留原理做的一个硬盘时钟,记得作者说了一句话:要是能把硬盘电机弄慢点就好了,不过貌似做电

机驱动比做这个时钟本身还要麻烦....
当时我也粗略的做了一个硬盘钟,也是感觉太快了,做颜色渐变的时候单片机有点繁忙,所以决定做一个电机驱动,那个时候我还真不知道无刷电机是个什么东西,GOOGLE了一会后发现

,确实比做时钟本身还麻烦..从那时起开始疯狂的搜资料,搜着搜着搜到四轴论坛来了,发现挺有意思的,也想弄一个玩,还是先从电调开始把.一开始也没怎么弄明白,反正人云亦云,

过零检测,换相....于是乎搭了个很简陋的电路,调试了一两天,总算是转起来了,但是我自己还是觉得挺窝囊的,都没弄清楚,转了又能怎么样呢,过零检测是否准确?换相是否准确?环

路是否稳定?启动是否小功率?低速是否能运行?.......问题太多了,连反电势的求差网络都是搬的别人的,自己还没计算清楚呢,这么下去不行,于是开始第二轮,下了十来个应用笔记

,包括ST,MICROCHIP,TI,SILABS,FREESCALE,SUNPLUS以及几个专利文献,决定先通读再说.....读了大概半年(我脑子运行慢,还爱玩...),中途也重新做了几个改版的电调,一直到现在

这个,算是能满足我个人的要求了,但肯定有很多人对电调的某一方面有自己独特的看法,因此我在这里抛个砖,希望有玉砸来

话说无图无真相,肯定有兄弟在想,这个楼主尽说废话,都不知道是不是做出东西来了,所以还是先上个图,也不至于让大家直接ALT+F4了.
用单面感光板自己腐蚀的,由于是单面板,元件也比较多,所以反面跳线很恐怖,就不展示了
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533889.jpg
(原文件名:电调照片.jpg)

先说反电势检测策略的问题
在两相通电的时候,这两相的端电压都在电源轨(VCC和GND)上,看不到反电势,因此要知道反电势就要看悬浮相的电压.而悬浮相的电压就是悬浮端与中性点的差分量.由于采用了PWM

调制,因此中性点是变化的,但我们很容易的想到用差分放大(比较器或者运放),正端接悬浮端,负端接中性点,这样无论中性点怎么跑,差分量是不会变的,但其实并不是这样的,来看

下面的分析
我们可以将中性点的状态分为三个
第一个,PWM ON态,这个时候中性点被偏置于VCC/2(为方便讨论,忽略了一些东西,比如场管上的压降,反电势,相电阻不平衡...)
第二个,续流态,根据PWM调制方式的不同(包括高边PWM,低边PWM,双边PWM,同步整流),中性点是多种多样的,我在
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3869081&bbs_page_no=1&bbs_id=1025 这个帖子中有详细说明
第三个,PWM OFF态,也就是续流到0电流之后的状态,这个时候的中性点也是和PWM调制方式有关的,可以自行画图分析

通过上述分析,我们发现,在某些调制方式下的反电势共模信号被电源轨给斩了,在这些被斩的地方,不能想当然的认为差分信号是不变的,在实际中,比较器的输出也确实是很惨不忍睹的,相信自制电调的各位也很清楚

解决这个问题现在有两个方法
第一种,用低通滤波滤除,因为上述那些被斩的事件都是和PWM同频率的,因此构建一个截至频率大于反电势频率而小于PWM频率的低通滤波可以有效滤除.但是有很明显的缺点,低通滤波的传递是有相位移动的,反电势的相移会造成换相的不准确,这个相移的大小和RC时间常数以及反电势频率相关,因此通过提高PWM频率,进而可以提高截止频率点,使得RC时间常数可以减小,这样在反电势频率点的相移可以相应减少,当然,还可以根据时时计算来补偿这个相移.

第二种,采用同步PWM检测,上面也说过了,那些"被斩事件"都是和PWM一个频率的,因此可以选择只在一个PWM周期的某一个点进行检测,这样就直接避开了干扰,这种方法的优点是准确度高,但是检测准确度和PWM频率成正比,打个比方,假设一个换相周期(60度电角度)有10个周期的PWM,本来过零点应该在第5个PWM周期内,由于某些原因产生的+-1误差会使检测到的过零点在第4或者第6个PWM周期,也就是产生了60*1/10即+-6度电角度的误差,而如果PWM频率提高10倍,那么就是+-0.6电角度的误差
我本人采用的是第二种方法,我也相信大多数同志都喜欢第二种

再来说说PWM调制方式的问题
在低频率的PWM的时候,栅极驱动问题不大,但是随着PWM频率的提高,无论是高边PWM还是低边PWM,有PWM的那一边的栅极驱动一定要可靠
在用全NMOS,又是自举升压的情况下就得用低边PWM,不过随着占空比的提高,自举电容充电时间渐渐变短,自举电压下降
我个人更倾向于独立升压,在我的电调中也是采用的独立的电容倍压电路.

再来说说软件上的问题
在说算法之前,我们先说说换相过程中的几个特殊事件,以高边PWM为例,如图
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533890.JPG
(原文件名:消磁过零换相.JPG)

第一个,消磁事件,每一次换相之后,悬浮相在一段时间内是续流状态,打个比方,从UV通电换相成UW通电,则在换相后,V相会先续流,而我们检测反电势正是要看V相,而这个消磁事件会造成一个过零事件假象,因此需要十分注意
第二个,过零事件,这个事件发生在两次换相的中间点,也就是换相后30度电角度
第三个,换相事件,这就不说了

要让电机稳定运行,我们要做的事情就是在过零事件后,再过30电角度就换相,并在消磁事件之后再监视过零事件
电机在运行时的转速是由PWM占空比和电机负载量决定的,我们并不知道转速应该是多少,因此要采用一个自调整的内环PID算法
假设在稳态时,设上一次检测到过零事件(A)到这一次换相之间的时间为last_t_degree30,在下一次过零事件(B)时我们可以得到时间t_degree30
假设现在我们就在B事件的时间点上,我们可以得到近两次degree30的误差,由这次误差和上次误差可以得到误差微分ERRd,由一定的时间间隔对误差积分可以得到ERRi,分别增益之后

得出下一次degree30.如图
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533891.JPG
(原文件名:环路.JPG)
在调试中,我发现I项作用不大,D项对于电机启动非常有帮助
在这种算法下,即使不需要独立的启动策略也可以快速的锁入闭环

最后说说启动的问题
上面所说的直接启动的方式需要比较大的PWM占空比,比如大于40%,虽然启动迅速,但是启动瞬间电流和力矩都太大,对电机和浆不太好,但是低PWM又很容易启动失败
现在来说说我的低PWM占空比启动策略(小于10%)
先假设转子处于运动中,于是有了微弱的反电势,在某一个转子位置的时候三相反电势与中性点的关系是唯一的,假设大于中性点就是1,小于中性点就是0,那么U,V,W的对应关系就如图中一样.
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533892.JPG
(原文件名:启动.JPG)
现在的问题是,一开始转子是静止的,也就是不存在反电势,也不存在图中所谓的对应关系表,但是我们可以先给六步中的任意一步通以极低占空比的PWM,并且在每一个PWM都检测三相反电势,并对应图中的状态表切换,那么一开始假设通UV相,有以下几种可能性

第一种,当前转子正在UV的力矩向量上,那么转子不会移动,也不会有任何反电势产生,因此在每一个PWM周期检测到的三相反电势都没有意义,处于一个稳态,转子锁死
第二种,当前转子正在UV的力矩之前,那么转子会向UV力矩移动,并且在某一个PWM周期我们可以检测到已经进入UW力矩的前方,这是加速态
第三种,当前转子正在UV的力矩之后,那么转子会向UV-WV力矩方向移动,并且在某一个PWM周期我们可以检测到已经进入WV力矩的后方,这是反转态
现在我们的任务就是在每个PWM周期检测并且判断处于哪种状态,如果锁死,则切换下一步通电,如果反转,则强制保持当前通电直到锁死,然后切换到下一步通电
一定要将反转扼杀于60电角度以内,扼杀于摇篮中!

在我的实际调试中,在12V电源时,仅仅用5%的PWM可以在0.6秒进入闭环,这是启动到锁入闭环的波形
可以看到前面几个周期是采用的5%PWM启动策略,换相超前反电势30度电角度,速度达到以后进入自由旋转,检测30度电角度时间,然后进入闭环
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533893.jpg
(原文件名:启动到闭环.jpg)

这是正常运行50%PWM时候的波形
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533894.jpg
(原文件名:50%PWM波形.jpg)

这就是我暂时想到的一些东西,有不对的或者不同意的我们一起讨论,希望有更多的人参与进来

pitolan 发表于 2010-2-14 22:46:13

【楼主位】 lijieamd
[原创] 性的东西都要顶一下!

wajlh 发表于 2010-2-14 23:01:10

make

haolxy 发表于 2010-2-15 09:28:04

好贴

leixianfeng 发表于 2010-2-15 12:37:43

好文,学习了。

fm007 发表于 2010-2-15 12:38:35

好贴留名!
学习了~

bijibenbenq 发表于 2010-2-15 20:54:07

实践得真知

yan_jian 发表于 2010-2-15 21:36:12

厉害!mark

bigworms 发表于 2010-2-15 21:47:13

mark

sunhot 发表于 2010-2-15 22:23:14

Mark!

hawkinsky 发表于 2010-2-15 23:36:51

厉害!

lijieamd 发表于 2010-2-18 20:37:04

希望DIY电调的各位能发表自己的一些看法,这样大家都可以取长补短,得到进步

joni 发表于 2010-2-18 22:43:26

mark

armok 发表于 2010-2-18 22:49:30

cool !

mshicom 发表于 2010-2-18 23:33:38

mark

sctwp 发表于 2010-2-19 08:43:40

有没有多测试呢?这么快的启动有没有烧过电调,第一次启动时不要用快速启动,等正常工作后,再进入快速启动。LZ的波形很漂亮啊,这么干净,是怎么做到的。

lijieamd 发表于 2010-2-19 11:28:54

回复【15楼】sctwp 可梦
-----------------------------------------------------------------------

就是因为考虑到大功率启动(大占空比)对电调和电机,浆都不太好,所以才有了我写的那种小功率启动,启动时只有5%的PWM,启动电流非常小,不过仍然保持了启动的快速,稳定.
关于仁兄说的烧电调,我认为只要半桥不同时导通,是不可能烧的

附上一个启动流程图,详细内容见0楼
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_534276.JPG
(原文件名:启动策略.JPG)

sctwp 发表于 2010-2-19 22:09:24

启动处理好了以后,还要处理电源,比如你如何确保在我快速推动油门时仍能保持供电及你的升压电路的稳定,如果这个没有搞好,肯定是

烧电调。

yangyh75 发表于 2010-2-20 10:15:32

好东西,顶顶

beer 发表于 2010-2-20 11:32:59

mark..

ds444 发表于 2010-2-21 02:36:55

楼主留QQ

huqingpp 发表于 2010-2-21 20:32:51

mark

lijieamd 发表于 2010-2-23 12:56:56

回复【17楼】sctwp 可梦
-----------------------------------------------------------------------

由于是电池供电,还有一个大的电源滤波电容,因此快速的油门(即PWM占空比)变化不会对电源造成影响.升压电路也是完全独立的震荡电路,油门变化也不会对其造成影响,
实际上在快速的油门变化时,更加重要的是电调换相闭环对于变化的响应能力,PID环的P,D项有着重大的作用

实际测试中,我采用的是I2C接口,用了一个单片机作为MASTER,并接了一个电位器模拟油门控制,将控制量发送到电调(SLAVE)

fm007 发表于 2010-2-26 12:28:19

又看了一遍楼主的帖子,不知可否和楼主QQ详细交流一下?

fm007 发表于 2010-2-26 12:34:27

想问一下怎么实现在PWM的某个沿状态检测反电动势?

astudent 发表于 2010-2-26 12:55:05

支持原创

lijieamd 发表于 2010-2-26 14:16:38

我的资料里面有QQ,请加

xfcxf 发表于 2010-3-1 14:44:58

lijieamd写的很精彩!有个疑问,为了避免消磁事件,是不是连续检测两次过零呢?第一次认为是消磁事件,第二次认识是感生电动势过零呢?还是用延时等待消磁事件的结束?

lijieamd 发表于 2010-3-1 22:12:32

回复【27楼】xfcxf
-----------------------------------------------------------------------

实际上随着电机运行状态的不同,消磁时间是不一样的,因此想获得稳定的性能,消磁事件一定要处理好
在电机启动时,电机转子并没有完全锁定在旋转力矩向量上,因此消磁时间会更长,而随着运行稳定,消磁时间会变短
因此可以在启动时,每次换相采取延时一段固定较长时间的方法来避开消磁事件,而在电机稳定后,这个延时时间可以通过当前换相时间得来,比如1/10的60度电角度时间,取决于电机的特性

huangning 发表于 2010-3-5 17:14:22

好贴

hy317 发表于 2010-3-5 17:24:33

mark

ly4328887 发表于 2010-3-11 00:37:01

学习学习,感谢楼主分享

fugeone 发表于 2010-3-11 08:26:36

不错,值得学习

sz_ehome 发表于 2010-3-11 08:38:34

mark

Clinging 发表于 2010-3-11 08:39:45

很好的学习资料,谢谢楼主

highnose 发表于 2010-3-11 10:33:39

理论,好哇,一直想知道

feng200808 发表于 2010-3-15 18:20:40

学习一下,谢了

liguanmao 发表于 2010-3-19 20:05:32

顶下

lijieamd 发表于 2010-3-22 08:35:50

放眼望去,都是MARK
还是希望能有兄弟发表自己的看法

loongsuns 发表于 2010-3-22 09:01:13

不懂mark,以备用到的时候再来看

13590955160 发表于 2010-3-24 21:55:47

分析的太好了

boy364100 发表于 2010-3-24 22:23:10

Mark~~~

DIDADI 发表于 2010-3-28 22:08:17

mark

xslff 发表于 2010-4-10 18:13:46

入门无刷电机后,总有点找不到北的感觉,但看到这篇文章,让我顿感开朗!
原来无刷电机是这样入门的啊!

qhshilin 发表于 2010-4-24 23:49:38

mark!

fkepdcjgd 发表于 2010-4-27 11:57:48

无刷的电调真不好做,我做了几个月了,效果还不太理想,想在这里淘点金,哈哈,QQ:575251203

zllzfw 发表于 2010-5-2 21:32:42

十分感谢楼主分享经验啊!!!!

timegate 发表于 2010-5-7 13:43:54

原创的都要收藏!

BLDC2010 发表于 2010-7-2 15:08:49

mark

cjr82123 发表于 2010-7-3 17:12:48

MARK

xzhtom 发表于 2010-7-3 20:40:43

终于找到组织了,真是个好网站,得向5irc和5imx的模友们介绍下

showgu 发表于 2010-7-27 21:30:38

感谢楼主的发帖,也感谢楼主对于我的指导.我的反电势检测是用比较器,没有用过零,先观察了带霍尔的电机的运行情况,发现反电势过零高低电平不是1:1,当然高电平中有pwm波成分。是否是前面的取样电阻选择不合适。

jhzhao2004 发表于 2010-7-31 13:33:55

mark

BLDC2010 发表于 2010-8-27 14:17:47

mark

yl604922959 发表于 2010-8-27 15:02:09

不错啊

chenguozi 发表于 2010-8-27 22:46:18

mark

skystalker 发表于 2010-8-28 00:14:13

关注电调

zyw19987 发表于 2010-8-28 10:22:14

玩无刷电机这是个不错的网站http://bbs.5imx.com/bbs/viewthread.php?tid=295634&extra=page%3D3

gasont 发表于 2010-8-30 09:45:20

楼主太N了,太崇拜了

dpedison 发表于 2010-9-15 10:20:34

回复【楼主位】lijieamd
-----------------------------------------------------------------------
你好~, 启动问题,希望能得到你的帮助。
         我现在的电机启动是开环的,加速拖动一定时间进入闭环,检测过零点交给比较中断实现ppm调速。
这种开环启动不稳定,如果时间到了,进入闭环未查到过零点,就会进入重启阶段, 我想在启动时检测过零反电势,但是启动时的波形干扰很大,可不可以指点一二.
你说的在每个通电周期都检测三相反电势,和检测换向时间,我在启动时检测的过零点,感觉很多都是干扰,并不是真实的反电势,请问你是怎么检测的呢??

谢谢!
http://cache.amobbs.com/bbs_upload782111/files_33/ourdev_583121L0KYXE.jpg
(原文件名:电路.jpg)

dasuantou 发表于 2010-9-15 12:42:24

楼上朋友可以看看www.infineon.com网站,上面有很好的启动方法介绍的。

dpedison 发表于 2010-9-15 14:08:08

回复【60楼】dasuantou
-----------------------------------------------------------------------

你好能具体点么,朋友能不能给我发点, 谢谢了,
   287139097@qq.com

feng200808 发表于 2010-9-28 14:58:53

进来学习学习了

zhuhanliang 发表于 2010-10-5 11:01:52

mark

clz0502 发表于 2010-10-14 13:02:11

不错,要是更系统化就好了。

yulongkui 发表于 2010-10-15 16:48:25

实践出真知,做工程的态度

freeeeedom 发表于 2010-10-16 21:10:06

回复【楼主位】lijieamd
-----------------------------------------------------------------------

    我的四轴刚开始,发现大学四年学的知识刚够打基础(数模电、电路、51、电机控制),avr、电调、加速度计、陀螺仪都是新的,内容太丰富了.....不知道半年能做出来不,压力很大...
    也从电调入手,向楼主学习了,有问题了向你请教哈。

clqfly 发表于 2010-11-8 13:28:02

强贴留名

xhdzwzj 发表于 2010-11-20 17:14:41

好东西 学习

lxw2087290 发表于 2010-11-21 17:13:53

MARK

zyw19987 发表于 2010-11-22 10:52:08

电调大餐

jerryhuang26 发表于 2010-11-23 20:20:55

lijieamd你好
我有几个疑问:
1、对于德国开源代码中,有个测速函数,这个函数是否可靠?
2、你做的速度环,电机的实际转速由什么得到的?是外部传感器还是程序代码函数?
3、无刷无感直流电机,如果要做速度环控制,那是不是在外部就要加霍尔传感器?

jerryhuang26 发表于 2010-11-23 20:22:29

能否加QQ一起讨论 279246327谢谢

fm007 发表于 2010-11-26 21:26:40

回复【72楼】jerryhuang26
lijieamd你好
我有几个疑问:
1、对于德国开源代码中,有个测速函数,这个函数是否可靠?
2、你做的速度环,电机的实际转速由什么得到的?是外部传感器还是程序代码函数?
3、无刷无感直流电机,如果要做速度环控制,那是不是在外部就要加霍尔传感器?
-----------------------------------------------------------------------

弄清楚一个问题,一切好说!
无刷电机的换向时间是由电机转子位置决定的!

lijieamd 发表于 2010-11-27 08:25:09

回复【72楼】jerryhuang26
-----------------------------------------------------------------------

1.转速是不需要另外测量的,只要知道电机磁极对数,相数,换相时间 这三个值就可以计算出了,当然,前提是运转良好,无失步
2.我没有做速度环,仅仅是做了换相环(换相时间),不需要知道转速
3.在能检测到BEMF,并且运转良好的情况下,通过计算得到转速就可以做速度环

jerryhuang2010 发表于 2010-11-27 10:20:00

回复【75楼】lijieamd
-----------------------------------------------------------------------

你好,我是上面的jerryhuang26,不知道为什么这个号不能登录,是不是还在审核当中?只有再申请个号回复
1、对于XXD2212 1000KV的电机,它有7对磁极,只要在单位时间内测得换相次数,将这个次数除以42就能得到实际转速,不知道是不是我这样理解?而这个测得的速度也应该只能用于不带负载的情况下,因为带了负载后可能会产生失步。
2、你这样做的换相环,是不是为了使换相更为精确?具体就是说过零点后尽量精确30电角度延迟后换相。而仅仅对于换相次数来说,强制换相与延迟换相,基本都是一样,那么做换相环的目的是什么呢?
3、如果电机是带负载运行,就可能出现失步现象,那用换相次数来计算转速就可能不准确,那是不是就应该用传感器呢?

lijieamd 发表于 2010-11-27 15:31:46

1.是的,比如相邻两次换相时间间隔是t(60度电角度),那么转速就是60/(t*6*7) 单位RPM

2.你所说的“强制换相”应该是指的是过零事件后立即换相吧?这应该称为“提前换相”,提前换相的主要原因有两个:
(1)BEMF检测有滞后,如果还是按照正常的30度电角度再换相,可能就已经晚了
(2)随着电机转速的提高,BEMF增大,相电流滞后时间变长,转矩脉动增大,整体表现就是转矩减小,无力,因此要适当提前,保证转矩,但提前是有限度的

再来说说真正的“强制换相”
无论是有负载还是没有,失步是绝对不允许的,因为一次失步就会使运转开环
但再好的BEMF检测策略也总有失误的时候(比如过长的消磁时间,电机的轻微意外碰撞..),因此需要一个方法让这一次失步不至于造成严重的后果,尽快将运转拉入闭环,这也就是设计换相环的初衷
试想一下:由于一次BEMF检测失误,丢掉了一次换相,而之前的换相是一直平稳,正常的,因此这一次换相时间应该和之前相同(短时间内),通过之前的换相可以计算一个“期望换相时间”,如果超过了“期望换相时间”一定的数值,我们就认为丢掉了一次BEMF,因此需要强制换相

gmcg 发表于 2010-11-27 23:42:48

学习了,不错!!

fkepdcjgd 发表于 2010-12-4 21:25:02

但再好的BEMF检测策略也总有失误的时候(比如过长的消磁时间,电机的轻微意外碰撞..)


我也来砍一下,楼上的这个说法,我不满意呀,我做的电调只要转起来了,就没有见它有失步过,这是决不可能的,除非是搞法不专业哟。。。。再想想哟。。。。睡了

fkepdcjgd 发表于 2010-12-4 21:26:20

现在我都不搞电调了,搞捷联惯导了,要是有人有兴趣,一起讨论一下下。。。

yangzhi 发表于 2010-12-4 23:05:00

好贴要留名!

lijieamd 发表于 2010-12-5 00:27:43

回复【79楼】fkepdcjgd
-----------------------------------------------------------------------

随便捏两下就失步了

mengxiangkeji 发表于 2010-12-5 19:06:27

经典收藏啦

nbm_qyh 发表于 2010-12-5 20:43:16

mark

librae8226 发表于 2010-12-6 17:17:28

学习~!

lwu_2008 发表于 2010-12-6 21:45:34

mark

Delong_z 发表于 2010-12-7 15:57:37

无刷电调讨论

hnxtqzh 发表于 2010-12-8 21:22:46

好东西,顶顶

denglu 发表于 2010-12-9 12:20:34

mark

geniusjia 发表于 2010-12-16 15:51:34

mark

xianting77 发表于 2010-12-16 16:50:54

看过一遍 留下脚印/

BINGSHUIHUO 发表于 2010-12-24 02:41:50

谢谢分享!!

bnbaai 发表于 2011-1-31 16:15:03

mark

whyjld 发表于 2011-2-2 00:28:33

学习,感谢楼主

polar 发表于 2011-2-2 04:48:36

学习 马克一下

zhizheyuren 发表于 2011-2-10 22:43:02

太好了

dzgcsqyj 发表于 2011-2-18 10:06:44

回复【楼主位】lijieamd
-----------------------------------------------------------------------

你好,大哥你能不能上传你的原理图,和程序啊 。感谢,我的QQ383981288@qq.com

gadfly00 发表于 2011-2-18 22:58:46

楼主了不起,我正在学习,好好研究后再请教!
赞!

Mec.Rover 发表于 2011-2-20 21:15:41

电调的极品贴

dreamyou 发表于 2011-2-20 23:05:26

支持
MARK
页: [1] 2 3 4
查看完整版本: [原创]DIY电调的细节以及算法讨论