搜索
bottom↓
回复: 37
打印 上一主题 下一主题

研究了很久,BLDC反电势波形始终不对,到底哪里有问题呢

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2016-11-17 00:32:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了无数的帖子,浏览了无数的资料,用6步法驱动,本来以为应该不是啥难事,第一次做了个板子不行,以为硬件有问题,第二次又做了个板子,结果测试出来的ABC三相相电压波形还是跟之前一样,现在点击转起来了,但是始终反电势波形跟介绍的不一样,不知道问题在哪里,能帮我分析一下我的波形为什么会这么

不管怎么看始终看不出反电势过零点,到底哪里有问题呢......

第一个图和第二个图为电机用6步法转起来的时候测试的波形,第三幅图为电机用手堵住不转的时候的波形,可以看出来区别,但是反电势为什么没有过零点呢








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
发表于 2016-11-17 08:27:54 | 只看该作者
本帖最后由 lcw_swust 于 2016-11-17 08:31 编辑

零点不代表0V,而是三个绕组星形接法的公共端,或者类似于三个相的平均值.
探头前加个RC低通会看着效果好一点.你这图看着像欠采样了.
http://www.jdzj.com/diangong/article/2010-7-30/20387-1.htm

出0入0汤圆

3
 楼主| 发表于 2016-11-17 08:36:21 | 只看该作者
但是参考很多资料上面都是这样的波形,在pwm关闭的时候,可以观察到反电势过零点,所以非常迷惑,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入22汤圆

4
发表于 2016-11-17 09:40:10 | 只看该作者
你的换相 顺序错了。

出0入0汤圆

5
发表于 2016-11-17 09:42:32 来自手机 | 只看该作者
用手捏住电机转子,让它带阻力运行,标准波形就出来了

出0入0汤圆

6
发表于 2016-11-17 12:15:20 | 只看该作者
相序估计是错了

出0入0汤圆

7
发表于 2016-11-17 12:15:54 | 只看该作者
本帖最后由 cw628 于 2016-11-17 12:18 编辑

相序错了,仔细梳理下你的sensephase和驱动相位

出0入0汤圆

8
发表于 2016-11-17 13:14:35 来自手机 | 只看该作者
电机的反电势与电机转速成正比,在电机恒定转速时怎么反电势会过零呢?只有当电机转速过零时,才会看到反电势过零现象。所以,lz前两张图观测的都是一定转速下的驱动器输出电压波形 ,怎么看得到过零波形?最令人纳闷的是,第三张图是堵转波形,电机都没转起来(s0=0)当然也看不到反电势了。另外提一句,lz 测驱动器输出电压波形,能观测到反电势么?反电势是电机绕组切割磁力线产生的电势,如何才能观测到?

出0入0汤圆

9
 楼主| 发表于 2016-11-17 15:32:31 | 只看该作者
请教,我的相序是 AB AC BC BA CA CB  
很多资料上面都是这个相序啊,那么正确的应该是怎么样的顺序,贴身

请看一下我的换向部分
//AB AC BC BA CA CB->>>>>
    if (myData.motorInex==0)//AB
    {
        //AB  A占空比 B100%占空比 C全关
            
        TIM1->CCR1=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=0;
        PWM_AH_ON();
        PWM_AL_OFF();
        PWM_BH_OFF();
        PWM_BL_ON();
        PWM_CH_OFF();
        PWM_CL_OFF();
        SEL_C();
    }
    else if(myData.motorInex==1)//AC
    {
        //AC  A占空比 C100%占空比 B全关

        TIM1->CCR1=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=0;
        PWM_AH_ON();
        PWM_AL_OFF();
        PWM_CH_OFF();
        PWM_CL_ON();
        PWM_BH_OFF();
        PWM_BL_OFF();
        SEL_B();
    }
    else if(myData.motorInex==2)//BC
    {
        //BC  B占空比 C100%占空比 A全关
        TIM1->CCR2=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=0;
        PWM_BH_ON();
        PWM_BL_OFF();
        PWM_CH_OFF();
        PWM_CL_ON();
        PWM_AH_OFF();
        PWM_AL_OFF();
        SEL_A();
    }
    else if(myData.motorInex==3)//BA
    {   //BA  B占空比 A100%占空比 C全关

        TIM1->CCR2=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=0;
        PWM_BH_ON();
        PWM_BL_OFF();
        PWM_AH_OFF();
        PWM_AL_ON();
        PWM_CH_OFF();
        PWM_CL_OFF();
        SEL_C();
    }
    else if(myData.motorInex==4)//CA
    {   //CA C占空比 A100%占空比 B全关

        TIM1->CCR3=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=0;
        PWM_CH_ON();
        PWM_CL_OFF();
        PWM_AH_OFF();
        PWM_AL_ON();
        PWM_BH_OFF();
        PWM_BL_OFF();
        SEL_B();
    }
    else if(myData.motorInex==5)//CB
    {   //CB  C占空比 B100%占空比 A全关

        TIM1->CCR3=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=0;
        PWM_CH_ON();
        PWM_CL_OFF();
        PWM_BH_OFF();
        PWM_BL_ON();
        PWM_AH_OFF();
        PWM_AL_OFF();
        SEL_A();
    }
    TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
    if(++myData.motorInex>=6)
    {
        myData.motorInex=0;
    }

出0入0汤圆

10
 楼主| 发表于 2016-11-17 15:34:21 | 只看该作者
wiser803 发表于 2016-11-17 13:14
电机的反电势与电机转速成正比,在电机恒定转速时怎么反电势会过零呢?只有当电机转速过零时,才会看到反电 ...

电机恒定转速的时候看不到反电势过零点么,那么电机闭环运行之后,怎么去正确换向呢..........

出0入0汤圆

11
 楼主| 发表于 2016-11-17 15:35:32 | 只看该作者
//AB AC BC BA CA CB->>>>>
    if (myData.motorInex==0)//AB
    {
        //AB  A占空比 B100%占空比 C全关
            
        TIM1->CCR1=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=0;
        PWM_AH_ON();
        PWM_AL_OFF();
        PWM_BH_OFF();
        PWM_BL_ON();
        PWM_CH_OFF();
        PWM_CL_OFF();
        SEL_C();
    }
    else if(myData.motorInex==1)//AC
    {
        //AC  A占空比 C100%占空比 B全关

        TIM1->CCR1=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=0;
        PWM_AH_ON();
        PWM_AL_OFF();
        PWM_CH_OFF();
        PWM_CL_ON();
        PWM_BH_OFF();
        PWM_BL_OFF();
        SEL_B();
    }
    else if(myData.motorInex==2)//BC
    {
        //BC  B占空比 C100%占空比 A全关
        TIM1->CCR2=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=0;
        PWM_BH_ON();
        PWM_BL_OFF();
        PWM_CH_OFF();
        PWM_CL_ON();
        PWM_AH_OFF();
        PWM_AL_OFF();
        SEL_A();
    }
    else if(myData.motorInex==3)//BA
    {   //BA  B占空比 A100%占空比 C全关

        TIM1->CCR2=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR3=0;
        PWM_BH_ON();
        PWM_BL_OFF();
        PWM_AH_OFF();
        PWM_AL_ON();
        PWM_CH_OFF();
        PWM_CL_OFF();
        SEL_C();
    }
    else if(myData.motorInex==4)//CA
    {   //CA C占空比 A100%占空比 B全关

        TIM1->CCR3=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=0;
        PWM_CH_ON();
        PWM_CL_OFF();
        PWM_AH_OFF();
        PWM_AL_ON();
        PWM_BH_OFF();
        PWM_BL_OFF();
        SEL_B();
    }
    else if(myData.motorInex==5)//CB
    {   //CB  C占空比 B100%占空比 A全关

        TIM1->CCR3=(uint16_t)(((uint32_t)myData.dutyA * (TIM1->ARR )) / 1000+1);
        TIM1->CCR2=(uint16_t)(((uint32_t)1000 * (TIM1->ARR )) / 1000+1);
        TIM1->CCR1=0;
        PWM_CH_ON();
        PWM_CL_OFF();
        PWM_BH_OFF();
        PWM_BL_ON();
        PWM_AH_OFF();
        PWM_AL_OFF();
        SEL_A();
    }
    TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
    if(++myData.motorInex>=6)
    {
        myData.motorInex=0;
    }


住不放SEL_A是模拟开关,用于三选一进入比较器,  其他宏定义大家看名字就可以理解

出50入0汤圆

12
发表于 2016-11-17 15:56:40 | 只看该作者
相序错了会这样的,把电机线或是霍尔线调下顺序吧!

出0入0汤圆

13
 楼主| 发表于 2016-11-17 20:04:01 来自手机 | 只看该作者
无刷直流电机三相有区别吗 不是应该不区分的么

出0入0汤圆

14
发表于 2016-11-17 22:06:20 | 只看该作者
有感还是无感的啊  哪个MCU啊

出0入0汤圆

15
发表于 2016-11-17 22:48:12 | 只看该作者
本帖最后由 cw628 于 2016-11-17 22:50 编辑

用示波器看每个相位的输出驱动是否正确,SENSE是否采的是悬空项,上升下降沿是否正确,细心一些一定能发现问题的,看你的波形离检测到正确的过零点不远了,加油。
这么好的示波器不利用充分对不起呀

出0入0汤圆

16
发表于 2016-11-17 22:48:36 | 只看该作者
wiser803 发表于 2016-11-17 13:14
电机的反电势与电机转速成正比,在电机恒定转速时怎么反电势会过零呢?只有当电机转速过零时,才会看到反电 ...

哥们儿,看3楼

出0入0汤圆

17
 楼主| 发表于 2016-11-18 08:27:13 | 只看该作者
shiang 发表于 2016-11-17 22:06
有感还是无感的啊  哪个MCU啊

无感直流电机啊,用的stm32f030

出0入0汤圆

18
 楼主| 发表于 2016-11-18 08:32:53 | 只看该作者

反电势过零点我也知道是跟虚拟的中点比较,令我不解的是,看资料上面的波形在pwm_on期间,峰值是一样的电平,只是pwm-off那部分会改变,也就是反响电动势

但是我自己的波形却是pwm-on期间,峰值在变化,二pwm-off这部分几乎不变,实在是想不出来哪里有问题了,相序也是按照AB AC BC BA CA CB这样的步骤变化了,能不能提示一下,我驱动的时候哪里不对了


我是用的是上桥臂采用pwm控制,下桥臂直通,比如  AB阶段   AH采用pwm控制 BL采用电平控制,CH和CL浮空,我晚上再创个6项驱动波形上去,能不能帮我分析下,到底哪里有问题

出0入0汤圆

19
发表于 2016-11-18 09:06:30 | 只看该作者
f030有没有互补驱动模式,导通相的高端驱动用,改成这样后会很容易采到过零点,避免续流时的二极管压降淹没感应电动势

出0入0汤圆

20
发表于 2016-11-18 09:13:03 | 只看该作者
有感无感,首先确定转子位置,然后分别按照顺序驱动无刷电机。每个位置有唯一一种驱动方式。如果波形不对,可以试试转动电机到不同的位置。还有你的示波器采集的几个通道啊?

出0入0汤圆

21
 楼主| 发表于 2016-11-18 13:51:25 | 只看该作者
shiang 发表于 2016-11-18 09:13
有感无感,首先确定转子位置,然后分别按照顺序驱动无刷电机。每个位置有唯一一种驱动方式。如果波形不对, ...

谢谢你的回复,我觉得应该不是位置的问题,因为启动阶段,我用5ms间隔发送,电机能够转起来,这个时候应该能采集到波形的,我刚刚下午换了个电机,用老硬盘拆了个硬盘电机来试验,好像可以看到了,晚上在详细测量一次,办公室示波器太差

我在想是不是一开始我用的电机是星型连接的问题,买的是A2212/13T的四轴电机

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

22
 楼主| 发表于 2016-11-18 13:52:16 | 只看该作者
cw628 发表于 2016-11-18 09:06
f030有没有互补驱动模式,导通相的高端驱动用,改成这样后会很容易采到过零点,避免续流时的二极管压降淹没 ...

F030有互补模式的啊,死区也有,我试过的

出0入0汤圆

23
发表于 2016-11-22 09:21:50 | 只看该作者
启动的时候反电动势很小,又是强制换向波形很乱,所以是看不到的,正常转起来之后才有正常波形。

出0入0汤圆

24
发表于 2016-11-23 11:27:23 | 只看该作者
示波器不错啊

出0入0汤圆

25
 楼主| 发表于 2016-11-29 10:32:52 | 只看该作者
小小苹果 发表于 2016-11-22 09:21
启动的时候反电动势很小,又是强制换向波形很乱,所以是看不到的,正常转起来之后才有正常波形。 ...

你说的可能对,但是我有个疑问,如果启动阶段检测不到反电势,那么如何才能正常转起来呢.............
不是需要采集到反电势之后才能根据反电势正确的换相才能正常转起来么

出0入0汤圆

26
发表于 2016-11-29 19:16:14 | 只看该作者
你这个就是反电动势波形,只是现在是开环,换相点不在正常的地方.所以看起来不太像.

出0入0汤圆

27
发表于 2016-12-5 22:50:50 来自手机 | 只看该作者
楼主解决了吗,好像碰到一样的问题

出0入0汤圆

28
发表于 2017-1-12 16:52:11 | 只看该作者
yuntian 发表于 2016-12-5 22:50
楼主解决了吗,好像碰到一样的问题

你的无感BLDC做的怎么样了?

出0入0汤圆

29
 楼主| 发表于 2017-1-12 19:34:53 | 只看该作者
weichao4808335 发表于 2017-1-12 16:52
你的无感BLDC做的怎么样了?

已经转起来了,但是还有些问题,

出0入22汤圆

30
发表于 2017-1-12 20:00:15 | 只看该作者
这问题 这么明显,尽然没几个人发现。

出0入0汤圆

31
发表于 2017-1-12 21:57:37 | 只看该作者
weichao4808335 发表于 2017-1-12 16:52
你的无感BLDC做的怎么样了?


顺利切入闭环了,但是有一个奇怪的问题,进入闭环后,我缓慢提高占空比,当转速达到一定的时候,大概1ms的换相周期时,在B相PWM,C相置高时,A相检测反电势总是会超时,而且6步中只有这一步会出现这个现象,奇怪

出0入0汤圆

32
 楼主| 发表于 2017-1-13 08:29:19 | 只看该作者
我发不了短消息,能不能发我一个消息,我们一起研究,...........你懂的...

出0入0汤圆

33
 楼主| 发表于 2017-1-13 08:30:09 | 只看该作者
weichao4808335 发表于 2017-1-12 16:52
你的无感BLDC做的怎么样了?

我发不了短消息,能不能发我一个消息,我们一起研究,...........你懂的...

出0入0汤圆

34
发表于 2017-2-20 16:13:42 | 只看该作者
yuntian 发表于 2017-1-12 21:57
顺利切入闭环了,但是有一个奇怪的问题,进入闭环后,我缓慢提高占空比,当转速达到一定的时候,大概1ms ...

我也是你这个情况,你的问题解决了吗?

出0入0汤圆

35
发表于 2017-2-20 20:30:58 来自手机 | 只看该作者
先不通电空转看波形确定相序

出0入0汤圆

36
发表于 2017-10-11 13:33:45 | 只看该作者
本帖最后由 yueliangz0123 于 2017-10-11 13:39 编辑

你怎么搞好的??可以说一下么??你看看我的波形~~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

37
发表于 2022-8-30 16:03:49 | 只看该作者
楼主,是这么解决的?  是强拖时的换相时间和占空比不合理的问题吗?   我也遇到一样的问题,XXD_A2212电机。

出0入0汤圆

38
发表于 2022-8-30 16:05:37 | 只看该作者
yueliangz0123 发表于 2017-10-11 13:33
你怎么搞好的??可以说一下么??你看看我的波形~~~
(引用自36楼)

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

本版积分规则

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

GMT+8, 2024-3-29 16:04

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

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