5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 过零检测 [打印本页]

作者: ququbin    时间: 2007-11-7 01:11
标题: 过零检测
求助,无刷电调的过零检测

我弄了两个月从热天到冬天,反电动势的过零信号就是检测不到.:em25: :em25: :em25: :em25:
用的LM339N,1/2端电压法,电机是9极4磁铁,单片机轮询.MAGE8
eeprom显示端口无变化.
请哪位大侠指点,感激不尽.
15度开始------停PWM---通持续直流--延时---轮询三端口(LM339输出的三相过零信号端口)---有变化写入EEPROM---无变化继续---45度,更高优先的中断---结束检测恢复PWM.
同相2个47K并联,10K接地,反相47K串联,10K接地.
请指点迷津,
ququbin@avl.com.cn
作者: 王清华王清华    时间: 2007-11-7 11:59
呵呵,你慢慢玩吧,想问问你延时是怎么延的?准不准,不准你很难转得起来。
我上学时自己做过一个,可能电路和你的差不多,一样的硬件。但我没有延时,意思就是说有30度的提前角启动,启动没有问题。但当时我做的好简单,就是开机启动旋转。后来没有玩它了。
作者: ququbin    时间: 2007-11-7 19:23
标题: 回复 #2 王清华王清华 的帖子
我的是开环启动,主要是得不到过零信号,大约在10000转失步
延时32微秒是为了避开PWM关闭的影响,便于检测,不要求精度
能指点我吗?过零信号过零信号过零信号
作者: 王清华王清华    时间: 2007-11-8 09:50
你先测试一下LM339的过零检测电路有没有问题。用万用表去测量。如果这个电路搭错了就没有救。 你可以直接步进启动到一个速度后等一段时间,可以用1/2秒来等,最后软件检测过零事件查表输出。 但那个步进速度要调好,要多试。

不知道你是哪一个版的电路图,你发给我。我帮你改一下再发给你。
     原版的电路会造成经常启动不成功。
作者: ququbin    时间: 2007-11-8 23:31
标题: 回复 #4 王清华王清华 的帖子
1.比较器是正确的,我的验证方式如下:
   令定时器T2为1024分频,在很低的速度下运行(好几秒才一步),用机械式万用表测3个输出端口.
  可以看到指针的摆动(很规律,对应为高---断---低---断--高).
2比较器电路我用过三种,虚拟中点,中心抽头(好象叫做相电压法,就是用电机中心线与截止相比较)
现在我用1/2端电压法,我不会做图,就描述一下
两相用47K电阻串联,对地10K分压接比较器负端
截止相两个47K电阻并联(得到47K的1/2),对地10K分压接比较器正端
作者: ququbin    时间: 2007-11-9 00:50
标题: 回复 #5 ququbin 的帖子
用1/2秒等什么?
"软件检测过零事件查表输出"我不明白?
我试过用BMP上图,太难,给你传图在哪?
控制换相的定时器是t1,溢出中断时换相,用初值控速
开环用给定初值,闭环用过零时定时器的值算出初值
硬件驱动用2个PNP(TIP42C)做复合管控制正极(8050导通为开)(其通断由PB3的PWM控制)
3个PNP(TIP42C)做上臂,3个NPN(TIP41C)做下臂
最大电流6A,太热了,烧了我好几个管
现在电流2A,可以运行
作者: ququbin    时间: 2007-11-9 01:57
王清华您好:
    非常感谢您的指导,如果我成功,我会公开我的资料.
我每天都做这东西到深夜,这两天的进展向您汇报
1.在7.5度(换相时间的前1/8---1/4)出现信号,具体数字为26/160,和29/96
换一种说法:初值为0x60,信号在0x7a出现,初值为0xa0,信号在0xbd出现,怎么解释,为什么
2为什么比例不同,
3 为什么不在30度左右出现?
4我用3相6拍驱动,只有AB,BC,CA有信号,其他3状态无信号(是无,不是未测到).
5用3相3拍驱动,用此信号能进入自换相(是自换相吗?我不确定)
现象是:
1转速突然变快,突变不很明显但能看出,然后不再受控制,恒定于中速(约3000)
2调节占空比,有声音的强弱变化,速度看不出变化,偶尔会卡死,发出尖叫
3用手卡死,不能再运转.
我的思考:
1由于占空比的变化-------------,转矩边法化-------------,过零信号的时间变化------------,由此信号算出的换相时间变化----------,转速变化
是这样吗?我是这样做的,行不行?
2给定换相时间---------由信号算出占空比-------以此控制转矩------维持给定的转速.-----这种我基本不懂
作者: ququbin    时间: 2007-11-9 02:31
刚才又进行了实验
将转速升到比较高(约5000),这时减占空比,转速会降到2000-----3000,就不再降
这时加占空比,它也不升高
启动后进入3000,加占空比,它不加速,改变换相时间也不加速
作者: 王清华王清华    时间: 2007-11-9 08:42
你的电话是多少?
作者: ququbin    时间: 2007-11-9 22:35
标题: 回复 #9 王清华王清华 的帖子
023-44573503
作者: 王清华王清华    时间: 2007-11-12 08:54
做的怎么样了啊?转起来了没有?关注中。
作者: ququbin    时间: 2007-11-13 01:30
正在努力.
我当时其实没有真正明白你的意思,后来我看到一篇资料(PIC,微芯公司),才明白你说的是"方法2"
我的错误1:
我的程序是向端口输入低电平,控制加减速,而那资料上要求加速过程自动(匀加速,),我正在改这部分.
错误2:
在检测时改变PWM 会影响扭矩,由此影响滞后,用方法1采集的话,在同一状态,PWM应该恒定(我的理解对吗?)
另外我请教一下:
1.在断电的时候,1/2V=0,比较器怎么工作?
资料上说,方法2是AD取样(不是过零哦),计算换相时间---换相,然后在闭环中用过零.
就是说只采集1次,进入自换相就不用AD,用过零.
2,你教我的方法是断电后等待过零,然后进入自换相是吗?
我参考的是""""""""dsPIC30F 在无传感器BLDC 控制中的应用"""""""""""
这是检测过零的一段:还请指教
ldi r22,0xf0
rcall dey
;*****************
tzb:
cpi r30,0x85              ;ab
breq cxz
cpi r30,0x8a
breq bxz
cpi r30,0x8f
breq axz
cpi r30,0x94
breq cxz
cpi r30,0x99            ;
breq bxz
cpi r30,0x80            ;cb
breq axz
;*********************
axz:
sbic pinc,4
rjmp axf
axz00:
sbis pinc,4
rjmp axz00
rjmp huanh00
axf:
sbic pinc,4
rjmp axf
rjmp huanh00
;============
bxz:
sbic pinc,3
rjmp bxf
bxz00:
sbis pinc,3
rjmp bxz00
rjmp huanh00
bxf:
sbic pinc,3
rjmp bxf
rjmp huanh00
;================
cxz:
sbic pinc,2
rjmp cxf
cxz00:
sbis pinc,2
rjmp cxz00
rjmp huanh00
cxf:
sbic pinc,2
rjmp cxf
rjmp huanh00
huanh00:
ldi r25,0x0b

in r17,tcnt1l
in r16,tcnt1h
lds r18,tfch
lds r19,tfcl
clc
sub r17,r19
sbc r16,r18
clc
rol r17
rol r16
clc
neg r16
neg r17
sts tfch,r16
sts tfcl,r17
rjmp fxd

[ 本帖最后由 ququbin 于 2007-11-13 01:42 编辑 ]
作者: yqyqingyv    时间: 2007-11-14 21:56
啥东西 电调吗
作者: 王清华王清华    时间: 2007-11-15 09:24
采用电流方式时(不知道对应你的方法几?),采用开环步进把电机转子旋转到一个合适速度后停止通电。转子在惯性旋转时,会把三个绕组都感应出电动势的。你的过的过零检测电路一样能工作,整个波形有点类似三相交流电的波形。你找本书来看看这个波形,或者自己画出这个波形,看看是不是一样能找到这个过零点!!
作者: isbit    时间: 2007-11-15 13:09
不错,有空也做个,有电路图
和原理可以参考吗?
  isbit@163.com
谢谢
作者: lijunmail    时间: 2007-11-15 13:46
无刷电调也已经开始做了。。。。大家真是牛人。。。
作者: ququbin    时间: 2007-11-16 00:50
标题: 回复 #14 王清华王清华 的帖子
这次我是真正明白你的理论了.
但你的理论与"dsPIC30F 在无传感器BLDC 控制中的应用"中有出入.
我会按你的理论去实验.
我刚把比较器做好,以前的元件有问题,不准确
;=================================
<<dsPIC30F 在无传感器BLDC 控制中的应用>>:
;===============================
示波器图3(图9)显示了采集方法2。图的中心(11)
显示出电机的开环步进停止点,在该处采用方法2 来检
测位置。此时, BEMF 不再有通电时通常会看到的&frac12;
VDC 偏置。系统检测相电压大于Acquire Threshold 参
数(参数#34)所给定值时的所处的点。可以看到这种
情况发生在B 相上,就在波形中心后(12)。下一个上
升沿出现在C 相(未显示),用来确定方向、速度和位
置。然后系统就会转换到常规闭环无传感器运行。
图 9: 示波器图3: 采集方法2
注意,上升到断电点的波形表明,当相不通电时可看到
的BEMF 波形不会显示任何BEMF 过零点。过零事件
被通电隐藏起来。缺少可检测的过零点会导致采集方法
1 失败,但对于采集方法2 却不存在问题。
要成功使用方法2,必须设置加速参数,让步进过程中
的加速满足下述三个条件。
• 首先,转子的加速度不能高于最高加速度。如果加
速度过快,转子失去同步,则增大Ramp Duration
参数(参数#10),减少Ramp End Speed 参数
(参数#7),或者增加Ramp End Demand 参数
(参数#9)。
• 第二,BEMF 电压幅值对于Ramp End Speed 参数
(参数#7)必须足够大。
• 第三,在加速结束时不应该有非常大的转速振荡。
振荡过大会导致上升沿检测错误并且检测到的位置
不正确。实际位置与检测位置的误差会导致出现触
发脉冲的位置不正确,此时出现的严重错误可能引
起电机停转。
javascript:parent.EY_SetSelected(1)

[ 本帖最后由 ququbin 于 2007-11-16 01:13 编辑 ]
作者: 王清华王清华    时间: 2007-11-16 08:45
努力吧,我们都会为你加油的。记得把自己的进展定期传上来,以便大家交流和学习了。
作者: shuo-xin    时间: 2007-11-16 15:50
各位大虾。有电压过零检测这方面的资料吗?我也有一样的困惑,我现在在开发电调
作者: ququbin    时间: 2007-11-17 02:29
搜索"dsPIC30F 在无传感器BLDC 控制中的应用"

[ 本帖最后由 ququbin 于 2007-11-17 02:30 编辑 ]
作者: 帕机洛蒂    时间: 2007-11-21 13:12
顶,我也准备做
作者: ququbin    时间: 2007-11-23 00:17
我在AVR网站也发了帖,可都没有多少人指点我,郁闷:em20: :em20: :em20: :em20:
过零点位置在每个相序的0.58左右,可是按这个数据算出来不行,为什么?:em12: :em12: :em12: :em12:
检测程序如下,谁来指点,先谢了;
1.在断电状态下进入
2,结束时,得到通电相序,重新通电(,这就是闭环的相序,过零点可见的那种)
3,过零检测在另一子程序进行,
4此子程序称为"首次采集",只进行一次

soucai:
sbrc r25,0          ; 判断标志寄存器R25;--------,有标志,返回
ret
lds r16,tfch
cpi r16,0xb0
brsh soucai00
ret
;************
soucai00:
lds r16,js_l
dec r16
breq soucai000
sts js_l,r16
ret
soucai000:
ldi r16,0x05
sts js_h,r16        ;;软滤波4次
cli    ;检测不到,允许中断
clr r20
out tcnt1h,r20
out tcnt1l,r20
clz                 ;首采
in r16,pinc         ;读端口
;逻辑与,屏蔽其他端口
andi r16,0b00011100                ; 逻辑与,屏蔽其他端口
soucai01:
mov r18,r16
in r17,pinc
andi r17,0b00011100
eor r18,r17           ;逻辑异或,检验是否相同
breq soucai01       ;  相同结果为0,则z=1,r17=r18,无过零
;判断标志*********
rcall jisuq        ;软滤波
sbrs r25,2
rjmp soucai01
;===================
ldi r16,0x05
sts js_h,r16            ;软滤波4次
;*****************
;判断标志*********
sbrc r25,1           ;首次过零,标志0
rjmp soucai03          ;标志1,二次过零
clr r16
out tcnt1h,r16
out tcnt1l,r16
ldi r16,0b10000001    ;1
out tccr1b,r16  ;T1启动
set     
bld r25,1               ;标志写1
;r18和r17进行逻辑与,判断方向
mov r19,r18       ;保存数据
clz
and r18,r17
breq soucai02        ;结果为0,z=1
set
bld r20,5         ;上升沿脉冲,1与1=1,z为0,标志记1,否则为0
soucai02:
in r16,pinc
andi r16,0b00011100      
rjmp soucai01
;*********************
soucai03:
;写标志*********
set
bld r25,0         ;完成首采,写1
clt
bld r25,1
;********
eor r18,r19         ;异或后,R18的234位为0的是下一过零端口
add r18,r20      ;与r20 相加后,r18的5432位决定了相序和方向
;判断
cpi r18,0b00111000 ;ac  0x85
breq ztai01
cpi r18,0b00110100 ;cb  0x99
breq ztai02
cpi r18,0b00101100  ;ba  0x8f
breq ztai03
cpi r18,0b00011000  ;ca  0x94
breq ztai04
cpi r18,0b00010100  ;bc  0x8a
breq ztai05
cpi r18,0b00010100   ;ab  0x80
breq ztai06
;=============
ztai01:
ldi r30,0x85
rjmp soucai04
ztai02:
ldi r30,0x99
rjmp soucai04
ztai03:
ldi r30,0x8f
rjmp soucai04
ztai04:
ldi r30,0x94
rjmp soucai04
ztai05:
ldi r30,0x8a
rjmp soucai04
ztai06:
ldi r30,0x80
rjmp soucai04
soucai04:
rjmp fxd
;************************
jisuq:      
lds r16,js_h
dec r16
breq jisuq00
sts js_h,r16
ret
jisuq00:
set
bld r25,2
ret
在后来的实验中,这段程序被证实是多余的
大家不要被误导
:em19: :em19: :em19: :em19: :em19:

[ 本帖最后由 ququbin 于 2007-12-2 18:01 编辑 ]
作者: ququbin    时间: 2007-11-23 00:19
有软件高手指点我一下吧!
:em14: :em14: :em14: :em14: :em14: :em14: :em14: :em14: :em14: :em14: :em14:
作者: johnfen    时间: 2007-11-23 11:44
楼上的程序没看过,只是觉得0.58这个参数未必是个固定值
我还没做过无刷电调,但感觉如果程序让我写
最重要的选择过零检测的时机
作者: ququbin    时间: 2007-11-23 12:53
很快得到证实,这个值是错的
首采子程序能通过,正确性无法验证,困扰于PWM的干扰,正在努力解决
还请各位给点建议:em14: :em14: :em14: :em14: :em14: :em14:
作者: 王清华王清华    时间: 2007-11-24 10:02
可以关掉PWM,让他启动就100%工作。其它搞好了再搞PWM。
0.58这个值>换算成角度,有三十多度了,提前角成了延时角了。
电机通过自己的闭环转起来了没有?
作者: ququbin    时间: 2007-11-24 20:41
标题: 回复 #26 王清华王清华 的帖子
1.进入"首次采集"子程序
2.得到第一次过零,启动T1,记录方向,端口.等待第二次过零
3.得到第二次过零,读T1,得到换相时间,存入内存,
由一次和二次得到第3次过零的端口,这样就确定了通电相,重新通电.
依次流程运行,电机停转
只变端口,不变时间,电机进入恒速,但查不到过零.
疑问:
每60度出现一次过零,可9极12磁铁的CD电机每次换相只转30度,它的过零在哪?
请王清华不吝赐教:em14: :em14: :em14: :em14: :em14:
作者: 王清华王清华    时间: 2007-11-27 15:12
回LZ,你的“60度”是指的电角度。换相只转“30度”是指的机械角度。
照你说,你这个电机换12次相才转一圈。电机转一圈,走了两个循环。
机械30度,其实是电角度60度。

电机转不起来,说实话,你的软件延时不一定正确,你没有验证的。
作者: ququbin    时间: 2007-11-27 21:23
标题: 回复 #28 王清华王清华 的帖子
你说得对,我按你的办法,已经得到正确数据,只是其中包含一些干扰产生的数据,导致正确数据也不能用.
目前正在解决中.
作者: ququbin    时间: 2007-12-2 17:58
报告大家一个情况
我做的电调可以调速了,占空比50%-90%
以业余水平要求,我的实验成功完成,
接下来的PID调节,那是我无法完成的
再次感谢网友王清华的热心帮助:em14: :em14: :em14: ,好人啊!!!!
也感谢其他网友的关心
谢谢大家!
需要我帮助的朋友,欢迎联系
ququbin@avl.com.cn
作者: 王清华王清华    时间: 2007-12-3 10:14
呵呵,其实都是大家相互学习一下嘛。我也只是差不多两年前做了一个罢工了。都是在别人的基础上面啦。
能帮则帮,帮不到则学!
作者: 红胆    时间: 2007-12-3 10:59
这样的帖子得留个记号
作者: douyj877    时间: 2007-12-28 01:54
1.比较器是正确的,我的验证方式如下:
&nbsp; &nbsp;令定时器T2为1024分频,在很低的速度下运行(好几秒才一步),用机械式万用表测3个输出端口.
&nbsp;&nbsp;可以看到指针的摆动(很规律,对应为高---断---低---断--高).
2比较器电路我用过三种,虚拟中点,中心抽头(好象叫做相电压法,就是用电机中心线与截止相比较)
现在我用1/2端电压法,我不会做图,就描述一下
两相用47K电阻串联,对地10K分压接比较器负端
截止相两个47K电阻并联(得到47K的1/2),对地10K分压接比较器正端
作者: 天涯浪子    时间: 2008-1-24 23:47
标题: 请高手指明从上一次换相到检测到过零的时间与下一次换相的时间的关系!
请高手指明从上一次换相到检测到过零的时间与下一次换相的时间的关系!
作者: ququbin    时间: 2008-1-27 06:32
原帖由 天涯浪子 于 2008-1-24 23:47 发表
请高手指明从上一次换相到检测到过零的时间与下一次换相的时间的关系!

1.我认为是没有关系的
2.有一个唯一的最佳的换相点,用PID控制的目的就是接近这个点,其结果就是精确的步进
3.电调目的是变速,实时响应,较高速时的换相间隔小于400微秒,还要查询过零点,串口通讯,没有多余的时间做PID运算
4我的电调是得到过零就换相,理论上有30度提前,实际上因为比较器延迟,功率管延迟等,实际的换相的在30--60之间变化
5因为换相的的变化,所以两次换相没有关系
6,这种是换相是反馈的相位锁定,调速是开环的PWM
我也只知道这些,欢迎拍砖
作者: 王清华王清华    时间: 2008-1-27 09:39
你第四点是错的.
4我的电调是得到过零就换相,理论上有30度提前,实际上因为比较器延迟,功率管延迟等,实际的换相提前角应该是小于30度.
作者: ququbin    时间: 2008-1-28 04:00
原帖由 王清华王清华 于 2008-1-27 09:39 发表
你第四点是错的.
4我的电调是得到过零就换相,理论上有30度提前,实际上因为比较器延迟,功率管延迟等,实际的换相提前角应该是小于30度.

换相点在30---60
换相提前角在0-30





欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://bbs.5imx.com/) Powered by Discuz! X3.3