wuliaodew 发表于 2013-2-16 09:10

求助,电机错相,反电动势检测

本帖最后由 wuliaodew 于 2013-2-16 09:15 编辑

   第一天上班,就要搞这个电机问题,纠结啊,去年搞了好久没搞定,不知道怎么弄了。

   在做无传感器BLDC的驱动,驱动程序在驱动12V电机的时候能全开,电流能达到19~20A,
速度在4000左右rmp,没出错;而当其驱动24v电机的时候,全开还没到达最大就出现错相,
全开电流在10A左右,转速5000多rmp,试着改了不少地方都没效果。现在不知道怎么去做了,
请教下大家这是不是还是反电动势检测的问题,如果是得怎么改呢,现在半路出家改别人的程序,
虽然程序看懂了,也改了不少,不过这程序我也不知道具体效果好不好用。
   
    下面的图是相电压和程序检测到过零输出的脉冲,发现续流产生的高电平会变长,不知道续流产生
的高电平会不会影响反电动势的检测,使得出现错相。

    正常的图:
   


    错相之后出现的图:
   

hitbuyi 发表于 2013-2-16 17:45

很明显是过零点信号有问题,你测量一下过零点信号翻转的时间和图1中悬空部分1/2*Udc对应的时刻是不是差不多重合或者是差太多,如果差太多,说明过零点信号有问题。


你能不能详细解释一下第一个图和第二个图各个信号的意思,我觉得你的第一个图看起来是端电压,而不是你说的相电压,高高低低的代表PMW信号,方波是不是过零点信号? 还有你的过零点检测是用什么方法?能不能把电路贴上来?要不没法分析。

yunqian09 发表于 2013-2-16 20:21

跟楼上大侠学习、、、、

wuliaodew 发表于 2013-2-17 08:37

hitbuyi 发表于 2013-2-16 17:45 static/image/common/back.gif
很明显是过零点信号有问题,你测量一下过零点信号翻转的时间和图1中悬空部分1/2*Udc对应的时刻是不是差不多 ...

哦,其实蓝色的是相线上的信号,黄色翻转代表程序检测到的一次过零信号,
现在发现问题是每次当程序速度到一定程度时过零检测就会出错,而且是每次
都会出现,那么就是过零这边的问题,不过改了不少发现都没效果,有没有什么
专门讲过零检测的资料,估计得从新写过零检测的算法


这是我们检测过零信号的分压网络,其他比较是芯片内部的

wuliaodew 发表于 2013-2-17 09:18

hitbuyi 发表于 2013-2-16 17:45 static/image/common/back.gif
很明显是过零点信号有问题,你测量一下过零点信号翻转的时间和图1中悬空部分1/2*Udc对应的时刻是不是差不多 ...

刚才测试发现是肯定是过零点的检测问题了
这段是之前的:ucPhaseComValue = GetPhaseComUVWStatus(); // get new state
       
    do
    {
            Delay1us(3);
                ucPhaseComValue = GetPhaseComUVWStatus(); // get new state
               
            if(ucPhaseComValue ==ucPhaseComValue)
            {
                    cntbuf++;
                    if(cntbuf > 3)
                    {
                            return ucPhaseComValue;
                    }
            }
            else//我想如果出错肯定在这个点,出现噪声之后导致过零检测效果时间较长
            {
                        cntbuf = 0;
            }
           
            ucPhaseComValue = ucPhaseComValue;
    }while(1);修改后的,效果稍微好点,不过中间还是有部分地方电流会跳变上去,暂时没错相,
且这段程序还是有BUG的:   unsigned char cntbuf = 0;
    unsigned char ucPhaseComValue;
       
        ucPhaseComValue = GetPhaseComUVWStatus(); // get new state
       
    do
    {
            Delay1us(3);
                ucPhaseComValue = GetPhaseComUVWStatus(); // get new state
               
            if(ucPhaseComValue ==ucPhaseComValue)
            {
                    cntbuf++;
                    if(cntbuf > 3)
                    {
                            cntbuf = 0;
                            return ucPhaseComValue;
                    }
            }
           
            ucPhaseComValue = ucPhaseComValue;
    }while(1);不知道还有什么好的方式来检测确认过零点

hitbuyi 发表于 2013-2-17 17:29

关键是你的过零点检测是怎么做的,是用硬件方式如比较器,还是用软件方式,BLDC SENSORLESS的关键点就在这里了。按照你的描述,在12V时,电流20V也没事,那么24时,电流10A就错,说明问题不是由大电流引起的,是电压升高引起了错误的过零信号,如果硬件没法改,那你只能从软件方面着手了。第一可以看一下是不是在零点附近多次触发,这种情况比较常见,如果是在零点附近多次触发,你想办法滤去不必要的触发,只用一次触发,第二可以看在其它非零点的地方是不是也有错误的触发,如果有,你可以考虑一下如何禁止在这些地方进行零点检测,只能在零点附件进行过零检测。

hitbuyi 发表于 2013-2-17 17:33

你的硬件图只是重构虚拟中点那部分,并看不出怎么进进零点检测啊,我猜你是用比较器的方式

wuliaodew 发表于 2013-2-18 13:41

hitbuyi 发表于 2013-2-17 17:33 static/image/common/back.gif
你的硬件图只是重构虚拟中点那部分,并看不出怎么进进零点检测啊,我猜你是用比较器的方式

是通过比较器得到的状态来判断过零的,现在修改过零检测的算法后,加速能稳定上去(不带载下),
不过高速连续转的情况下会出现错相

相上在高速的时候不再是梯形,变成方波了,这个是什么原因?谢谢

hitbuyi 发表于 2013-2-18 13:53

wuliaodew 发表于 2013-2-18 13:41 static/image/common/back.gif
是通过比较器得到的状态来判断过零的,现在修改过零检测的算法后,加速能稳定上去(不带载下),
不过高 ...

高速时电流大, 大电流引起续流时间长(表现就是你看端电压时,左边一上凸一大块,右边下陷一大块),引起比较器错误翻转, 这是比较器做过零点检测的容易出的毛病之一),这个问题在本论坛讨论过,你查一下相关的贴子.解决方法主要有
1, 改善硬件,这个难度大,并且不现实
2, 在软件算法上下功能,滤掉不必要的翻转信号,包括不同的PWM调制方法等.

wuliaodew 发表于 2013-2-18 14:29

hitbuyi 发表于 2013-2-18 13:53 static/image/common/back.gif
高速时电流大, 大电流引起续流时间长(表现就是你看端电压时,左边一上凸一大块,右边下陷一大块),引起比较器 ...

谢谢,我去找找

wuliaodew 发表于 2013-2-19 11:39

hitbuyi 发表于 2013-2-18 13:53 static/image/common/back.gif
高速时电流大, 大电流引起续流时间长(表现就是你看端电压时,左边一上凸一大块,右边下陷一大块),引起比较器 ...

你好,我发现梯形图的每区间时间不一样,这个大致有哪方面的问题

hitbuyi 发表于 2013-2-19 12:25

wuliaodew 发表于 2013-2-19 11:39 static/image/common/back.gif
你好,我发现梯形图的每区间时间不一样,这个大致有哪方面的问题

本质上还是过零点的问题,因为过零点时间决定了你开通MOSFET的时间, 在理想情况下,梯形的时间间隔对应的就是呆在各个扇区的时间,可以代表速度的大小.

wuliaodew 发表于 2013-2-19 13:40

hitbuyi 发表于 2013-2-19 12:25 static/image/common/back.gif
本质上还是过零点的问题,因为过零点时间决定了你开通MOSFET的时间, 在理想情况下,梯形的时间间隔对应的就 ...

关键我发现每个梯形图都很规则,上升部分比较长中间区间短点后面区间最短,如果是过零检测误差,应该不会这么规则吧

wuliaodew 发表于 2013-2-19 15:00

hitbuyi 发表于 2013-2-18 13:53 static/image/common/back.gif
高速时电流大, 大电流引起续流时间长(表现就是你看端电压时,左边一上凸一大块,右边下陷一大块),引起比较器 ...

没找到你说的那个帖子,能不能给个链接,或者给些关键字搜下

hitbuyi 发表于 2013-2-19 17:43

本帖最后由 hitbuyi 于 2013-2-19 17:49 编辑

wuliaodew 发表于 2013-2-19 13:40 static/image/common/back.gif
关键我发现每个梯形图都很规则,上升部分比较长中间区间短点后面区间最短,如果是过零检测误差,应该不会 ...


理想情况下,在梯形波的平顶部分进行PWM调,即PWM波和梯形波的平顶部分是对齐的,在对歪的情况,就会发现从示波器上看到的波形是歪的。原因有3个

1, 过零点正确,但你延时不是30电角度,提前开通PWM即在梯形左边的上升边开通,或者滞后开通PWM即在平顶部分开通
2, 零点检测不正确,由于干扰等因素影响,导致你的零点检测和实际零点不一致

3,转速波动,特别在加速或减速时明显。因为一般的控制方法是过零点延时30度电角然后进行换向,这30电角度,通过情况是是用软件来做,并且在转子转过30度电角度时这个过程中,你采用的是上一次软件算得的速度来确定30度这个电角度值,当前的瞬时速度不可能获得,如果在30度电角度过程中,转速不是匀速而是有变化,那么肯定会带来误差,这个误差就是转子的在实际速度和你上一个周期的估计速度之间的误差,这也会影响梯形波的形状,严重的情况下会失步。

hitbuyi 发表于 2013-2-19 17:46

wuliaodew 发表于 2013-2-19 15:00 static/image/common/back.gif
没找到你说的那个帖子,能不能给个链接,或者给些关键字搜下

http://bbs.simol.cn/forum.php?mod=viewthread&tid=107003
页: [1]
查看完整版本: 求助,电机错相,反电动势检测