Wddz 发表于 2024-11-15 15:06:05

求指点 步进电机 问题

本帖最后由 DebugLab 于 2024-11-15 15:48 编辑

用 AI8G1K08-20P,ULN2003A ,驱动 28BYJ-48歨进电机的电路是不是有问题,上电没反应,断开P30就可以正常上电。
但是上电后启动M3步进电机时,电机一直在振动,要帮它扭一扭转轴才能转起来,
我在KEIL里手动仿真,发现在第一次循环到 case 3 结束之后会异常 跳转到扫描按键的中断里面去,之后就能正常循环
if (ucKeySec == 1)
    {
      switch(num2)
            {
                  case 0:M3A = 1;M3B = 0;M3C = 0;M3D = 0;break;
                  case 1:M3A = 1;M3B = 1;M3C = 0;M3D = 0;break;
                  case 2:M3A = 0;M3B = 1;M3C = 0;M3D = 0;break;
                  case 3:M3A = 0;M3B = 1;M3C = 1;M3D = 0;break;
                  case 4:M3A = 0;M3B = 0;M3C = 1;M3D = 0;break;
                  case 5:M3A = 0;M3B = 0;M3C = 1;M3D = 1;break;
                  case 6:M3A = 0;M3B = 0;M3C = 0;M3D = 1;break;
                  case 7:M3A = 1;M3B = 0;M3C = 0;M3D = 1;break;
            }
            delay1m(3);
      num2++;
            if(num2 == 8)num2 = 0;
    }

    if (Ir2_time == 1)
    {
      ucKeySec = 0;
      sec_flag = 1;
      if (sec_cnt == 3)
      {
            static int cyc1 = 1529;
            sec_cnt = 0;
            sec_flag = 0;
            while (cyc1--)   
            {
            switch(num1)
               {
                     case 0:M2A = 1;M2B = 0;M2C = 0;M2D = 0;break;
                     case 1:M2A = 1;M2B = 1;M2C = 0;M2D = 0;break;
                     case 2:M2A = 0;M2B = 1;M2C = 0;M2D = 0;break;
                     case 3:M2A = 0;M2B = 1;M2C = 1;M2D = 0;break;    //这里,在弟一次运行到这行结束后会跳转到按键扫描中断里,第2次及以后就可正常循环到 case 4
                     case 4:M2A = 0;M2B = 0;M2C = 1;M2D = 0;break;
                     case 5:M2A = 0;M2B = 0;M2C = 1;M2D = 1;break;
                     case 6:M2A = 0;M2B = 0;M2C = 0;M2D = 1;break;
                     case 7:M2A = 1;M2B = 0;M2C = 0;M2D = 1;break;
                }
                delay1m(3);
                //num1++;
                if(++num1 == 8)num1 = 0;
            }
            Ir2_time = 0;
            ucKeySec = 1;
      }
    }
}

void TM0_Isr() interrupt 1
{
    TF0 = 0;/*清除中断标志*/
    TR0 = 0;/*关中断*/
    /*扫描按键*/
    Key_Scan();
    TL0 = 0xCD; //设置定时初值
    TH0 = 0xD4; //设置定时初值
    TR0 = 1; /*开中断*/
}
截图202411151348026273.jpg (97.55 KB, 下载次数: 0)


截图202411151348026273.jpg

DebugLab 发表于 2024-11-15 15:53:07

检查P31、P32状态,是不是都为0,是不是进入了软件模拟USB下载状态
步进电机速度过快是无法启动的,只会振动
定时器中断可以打断主程序,是正常的
页: [1]
查看完整版本: 求指点 步进电机 问题