[技术支持] HC89F0541无刷电机驱动问题

[复制链接]
344|2
 楼主 | 2019-1-14 23:30 | 显示全部楼层 |阅读模式
目前正在使用HC89F0541设计无刷电机驱动板,6路PWM+3路外部中断,当电机转速大概为4400r/m左右和到4600r/m左右的时候,外部中断有点不正常,目前是在外部中断函数中对LED不停取反,当转速到达这两个值左右时,灯闪烁不正常,计算的转速也不正常,不知道是不是电机干扰的问题,4000r/m以下没有问题;期间,通过降低osc频率,使用内部外部晶振都一样,单独使用一个板子模拟hall信号输入,通过电位器调节输入的hall(外部中断信号)频率,计算的转速可达2万多转/分钟都没有问题,LED等闪烁正常,用示波器测量的,pwm输出信号貌似也是没有问题的;但是已使用电机测试,就不正常;有没有大神遇到过类似情况,下面是中断函数代码:


  1. void INT2_7_Rpt() interrupt INT2_7_VECTOR
  2. {
  3. //    LED2_BLINK();
  4.     if(PINTF0&0xE0)//3个引脚有任一个变化
  5.     {
  6.         PINTF0 &=~ 0xE0;//清除INT7,6,5中断标志位
  7.         
  8.         /* 根据当前hall值换相 */
  9.         BLDC_ChangePhase(1,HallValue);//默认正转
  10.         
  11.         T3CON &= ~0x04;//TR3=0,停止T3定时器
  12.         Hall_TimeSum += (u32)((((u32)TH3 << 8) | TL3) + ((u32)Timer3_OverFlow_Cnt<<16));//读取计数值
  13.         TH3 = 0;//复位计数器
  14.         TL3 = 0;
  15.         T3CON |= 0x04;//TR3=1,打开T3定时器
  16.         Hall_Cnt++;
  17.         if(Hall_Cnt==24)
  18.         {
  19.             Hall_IntervalTime = Hall_TimeSum/24;
  20.             Hall_TimeSum=0;
  21.             Hall_Cnt=0;            
  22.         }
  23.         Timer3_OverFlow_Cnt=0;//清除溢出计数
  24.         Motor_StallingFlag=FALSE;//清除堵转标志
  25.         
  26.         LED2_BLINK();
  27.     }
  28. }
复制代码
| 2019-1-25 18:33 | 显示全部楼层
如果加一个去抖会不会好点呢
| 2019-3-5 12:34 | 显示全部楼层
你好,不知道你的电机是几对级,如果你的极对数比较大的话,你hall的中断频率会比较高,我看到你是24次hall中断,计算一下速度。这个除法不好,计算时间比较厂,你用移位的方式计算时间,还有就是你的hall中断优先级是不是最高!
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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