hande5 发表于 2024-11-11 12:39:14

学习了

海底的龙 发表于 2024-11-14 08:19:08

梁工 发表于 2024-11-11 11:08
是的,直接发脉冲和方向信号即可。

谢谢梁工了{:tongue:}

Wddz 发表于 2024-11-15 14:02:45

用 STC8G1K08-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; /*开中断*/
}

giveyou 发表于 2024-12-5 09:58:34

对应的驱动图是手册上的吗

Wddz 发表于 2024-12-6 08:16:46

giveyou 发表于 2024-12-5 09:58
对应的驱动图是手册上的吗


你指哪一个,2003A吗?我把P30,P31割断了,飞线到别的脚上,循环改了,现在电机可以正常动了

vvvvvv 发表于 2024-12-13 16:46:06

<p>梁工你好,第一次接触步进电机,用了这个demo打了板子,然后接了一个手里的步进电机,参数如下图,还没有发指令进行驱动,芯片就慢慢发热,直至烫手。从直流源上获取的信息是,板子上电,整版电流0.03A,接上电机后电流到达了0.2A。不明白电流明明没有达到上限,却会发热。<br />
<img src="data/attachment/forum/202412/13/164509tuxxswyxyznzwc4u.jpg" alt="e3242ea179568def51de5084439614e6.jpg" title="e3242ea179568def51de5084439614e6.jpg" /></p>

梁工 发表于 2024-12-13 17:44:06

vvvvvv 发表于 2024-12-13 16:46
梁工你好,第一次接触步进电机,用了这个demo打了板子,然后接了一个手里的步进电机,参数如下图,还没有发 ...

芯片发热功率 = 电流*压降,你测一下压降。

vvvvvv 发表于 2024-12-16 13:48:42

梁工 发表于 2024-12-13 17:44
芯片发热功率 = 电流*压降,你测一下压降。

恩,确实压降太大了,占空比输出拉低点,发热就好些了

18680356131 发表于 2025-1-4 22:56:55

梁工,您好。我使用{两相步进电机-细分驱动-STC8H-高级PWMB输出}这个例子驱动步进电机,电机能转但发热很严重,程序就是用的你的源程序,没有改动过。用配套的驱动器就不会发热,这和驱动电路有关系吗?能否帮忙看一下,谢谢。

梁工 发表于 2025-1-4 23:08:25

18680356131 发表于 2025-1-4 22:56
梁工,您好。我使用{两相步进电机-细分驱动-STC8H-高级PWMB输出}这个例子驱动步进电机,电机能转但发热很 ...

发热严重说明电流很大。我的例子只是简单的电压驱动,而专用驱动器是用电流来驱动,所以你要用低点的电压,比如12V,试下。
页: 7 8 9 10 11 12 13 14 15 16 [17] 18 19 20 21 22
查看完整版本: 51开源,步进电机驱动 程序, 直接驱动, 或驱动步进电机驱动器 一共8个程序