glyxz1990 发表于 2019-1-14 23:30

HC89F0541无刷电机驱动问题

本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:44 编辑

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


void INT2_7_Rpt() interrupt INT2_7_VECTOR
{
//    LED2_BLINK();
    if(PINTF0&0xE0)//3个引脚有任一个变化
    {
      PINTF0 &=~ 0xE0;//清除INT7,6,5中断标志位
      
      /* 根据当前hall值换相 */
      BLDC_ChangePhase(1,HallValue);//默认正转
      
      T3CON &= ~0x04;//TR3=0,停止T3定时器
      Hall_TimeSum += (u32)((((u32)TH3 << 8) | TL3) + ((u32)Timer3_OverFlow_Cnt<<16));//读取计数值
      TH3 = 0;//复位计数器
      TL3 = 0;
      T3CON |= 0x04;//TR3=1,打开T3定时器
      Hall_Cnt++;
      if(Hall_Cnt==24)
      {
            Hall_IntervalTime = Hall_TimeSum/24;
            Hall_TimeSum=0;
            Hall_Cnt=0;            
      }
      Timer3_OverFlow_Cnt=0;//清除溢出计数
      Motor_StallingFlag=FALSE;//清除堵转标志
      
      LED2_BLINK();
    }
}

观海 发表于 2019-1-25 18:33

如果加一个去抖会不会好点呢

京江自动化 发表于 2019-3-5 12:34

你好,不知道你的电机是几对级,如果你的极对数比较大的话,你hall的中断频率会比较高,我看到你是24次hall中断,计算一下速度。这个除法不好,计算时间比较厂,你用移位的方式计算时间,还有就是你的hall中断优先级是不是最高!
页: [1]
查看完整版本: HC89F0541无刷电机驱动问题