搜索
bottom↓
回复: 9

求助,无刷直流电机波形异常问题

[复制链接]

出0入0汤圆

发表于 2014-3-28 09:49:05 | 显示全部楼层 |阅读模式
我用的电机是6对极,额定转速为6200转。
程序是用AD采集过零点,采回来之后滤波,计算,捕捉到过零点马上换向,相当于提前换向了。
为什么在低速时波形都不对称的?在差不多到额定转速时反电动势才正常。而且电机运行没力,一捏就停了。

本帖子中包含更多资源

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

x

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2014-3-28 10:11:44 | 显示全部楼层
我的滤波函数,每次PWM采集一次AD值


  1.     unsigned char filter_table[8]={0,1,1,2,1,2,2,3};


  2.     tableA[Tab_Cnt] = ADRES00;//将AD值存到TABLE中
  3.    tableB[Tab_Cnt] = ADRES01;
  4.     tableC[Tab_Cnt] = ADRES02;
  5.     tableM[Tab_Cnt] = ADRES03;
  6.     V_Cnt++;
  7.     Tab_Cnt++;
  8.     if(Tab_Cnt>=5){
  9.         Tab_Cnt = 0;
  10.     }
  11.     if(V_Cnt>=5)
  12.     {
  13.         Voltage_A = (tableA[0]+tableA[1]+tableA[2]+tableA[3]+tableA[4])/5;//取平均值
  14.         Voltage_B = (tableB[0]+tableB[1]+tableB[2]+tableB[3]+tableB[4])/5;
  15.         Voltage_C = (tableC[0]+tableC[1]+tableC[2]+tableC[3]+tableC[4])/5;
  16.         Voltage_M = (tableM[0]+tableM[1]+tableM[2]+tableM[3]+tableM[4])/5;

  17.        
  18.         if(Voltage_A>=Voltage_M ){//如果大于中点则某位为1否则为0
  19.             filter_phase_A = (filter_phase_A<<1)|0x01;
  20.         }else{
  21.             filter_phase_A = (filter_phase_A<<1);
  22.         }

  23.         if(Voltage_B>=Voltage_M ){
  24.             filter_phase_B = (filter_phase_B<<1)|0x01;
  25.         }else{
  26.             filter_phase_B = (filter_phase_B<<1);
  27.         }

  28.         if(Voltage_C>=Voltage_M ){
  29.             filter_phase_C = (filter_phase_C<<1)|0x01;
  30.         }else{
  31.             filter_phase_C = (filter_phase_C<<1);
  32.         }

  33.         //判断过零否
  34.         //由滤波数filter_phase_A的高三位的1/0的个数与第三位1/0的个数比较得出
  35.         filter_cnt++;
  36.         if(filter_cnt>=6){

  37.             tmp_filter = filter_phase_A;
  38.             num_low = filter_table[tmp_filter&0x07];
  39.             num_high = filter_table[(tmp_filter>>3)&0x07];
  40.             if((num_high<=1)&&(num_low>=2)){//A相上升过零点
  41.                 if(control_flags.dir==CW){//正反转标志
  42.                     tmp_sector = 0;
  43.                 }else{
  44.                     tmp_sector = 1;
  45.                 }
  46.             }else if((num_high>=2)&&(num_low<=1)){//A相下降过零点
  47.                 if(control_flags.dir==CW){
  48.                     tmp_sector = 3;
  49.                 }else{
  50.                     tmp_sector = 4;
  51.                 }
  52.             }

  53.             tmp_filter = filter_phase_B;
  54.             num_low = filter_table[tmp_filter&0x07];
  55.             num_high = filter_table[(tmp_filter>>3)&0x07];
  56.             if((num_high<=1)&&(num_low>=2)){//B相上升过零点
  57.                 if(control_flags.dir==CW){
  58.                     tmp_sector = 2;
  59.                 }else{
  60.                     tmp_sector = 3;
  61.                 }
  62.             }else if((num_high>=2)&&(num_low<=1)){//B相下降过零点
  63.                 if(control_flags.dir==CW){
  64.                     tmp_sector = 5;
  65.                 }else{
  66.                     tmp_sector = 0;
  67.                 }
  68.             }

  69.             tmp_filter = filter_phase_C;
  70.             num_low = filter_table[tmp_filter&0x07];
  71.             num_high = filter_table[(tmp_filter>>3)&0x07];
  72.             if((num_high<=1)&&(num_low>=2)){//C相上升过零点
  73.                 if(control_flags.dir==CW){
  74.                     tmp_sector = 4;
  75.                 }else{
  76.                     tmp_sector = 5;
  77.                 }
  78.             }else if((num_high>=2)&&(num_low<=1)){//C相下降过零点
  79.                 if(control_flags.dir==CW){
  80.                     tmp_sector = 1;
  81.                 }else{
  82.                     tmp_sector = 2;
  83.                 }
  84.             }
  85.         }
  86.     }
复制代码

出0入0汤圆

 楼主| 发表于 2014-3-28 10:19:49 | 显示全部楼层
自己顶下

出0入0汤圆

 楼主| 发表于 2014-3-28 20:08:51 | 显示全部楼层
坐等大神

出0入22汤圆

发表于 2014-3-28 21:31:02 | 显示全部楼层
低速时 如果电机不好,波形这样也可以理解。
但是听你的描述,你忘了一个问题,

假设在某个过零点,因为某个干扰,导致你很长一段时间没有监测到过零事件(相对电周期)。这个时候你没有采取强制换相,那么在过零点后的一段时间内,你的电机是在产生阻力。这就是你电机没力的原因。也是一捏就停的原因。

过零事件必须要求在某段相对时间内出现。否则就必须采取措施。

出0入0汤圆

 楼主| 发表于 2014-3-28 21:44:50 | 显示全部楼层
lixin91985 发表于 2014-3-28 21:31
低速时 如果电机不好,波形这样也可以理解。
但是听你的描述,你忘了一个问题,

假设 一切都正常的情况下, 直接换向就是超前30度 , 转矩肯定没有延时30度换向那么大 , 但不会导致电机没力的情况出现 , 是么

出0入0汤圆

 楼主| 发表于 2014-3-28 21:52:02 | 显示全部楼层
lixin91985 发表于 2014-3-28 21:31
低速时 如果电机不好,波形这样也可以理解。
但是听你的描述,你忘了一个问题,

谢谢你的回答。 实验去

出0入22汤圆

发表于 2014-3-28 21:54:52 | 显示全部楼层
AXB 发表于 2014-3-28 21:44
假设 一切都正常的情况下, 直接换向就是超前30度 , 转矩肯定没有延时30度换向那么大 , 但不会导致电机 ...

多米若骨牌效应啊 。

出0入0汤圆

 楼主| 发表于 2014-4-9 14:16:10 | 显示全部楼层
说下这次做无刷的总结:
1、波形不对称是因为没有延时30°换相。
2、高速时捏停是因为捏的过程中造成消磁时间加大,等待消磁时间不足,造成吧消磁事件检测成过零事件了。
3、换相过后等待一段时间再去检测过零点是为了避免消磁的影响,这一段时间究竟取多久为合适呢,建议是30°时间的0.6倍。
4、对比于之前用hall传感器所做的无刷电机,虽然启动较慢,但运行效果差别不大。
5、一些资料所说的快速启动法,还没有尝试。

本帖子中包含更多资源

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

x

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-26 01:31

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

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