wenking99 发表于 2013-6-15 14:47:36

5线4相步进电机用2003直接驱动,怎么细分?

用的是小型,24BYJ48A型减速步进电机,减速比为1:64,步进角为5.625/64度。如果转一圈需要360/5.625*64=4096个脉冲。
电路图如下:

通电方式采用4相八拍:A-AB-B-BC-C-CD-D-DA.为什么我走64步,才半圈?
看到别人做的,走了128步才半半圈,是不是用了细分:
驱动程序如下,没有做细分的。

BYTE code reveral = {0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
BYTE code forward = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正时钟旋转相序表

//frequency:调节步进电机速度,n调节步进电机步数
void motor_forward( Byte frequency, Byte n )//正向
{
        BYTE i,j;
       
        for(j=0;j<n;j++)               //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
        {
                for(i=0;i<8;i++)
                {
                        OUT_A = (bit) (foreword & 0x08);
                        OUT_B = (bit) (foreword & 0x04);
                        OUT_C = (bit) (foreword & 0x02);
                        OUT_D = (bit) (foreword & 0x01);

                        Delay_1ms(frequency);   //调节转速
                }
        }
       
        OUT_A = 0;                        //切断所有通电
        OUT_B = 0;
        OUT_C = 0;
        OUT_D = 0;       
}

//frequency:调节步进电机速度,n调节步进电机步数
void motor_reveral( Byte frequency, Byte n )//反向
{
        BYTE i,j;
       
        for(j=0;j<n;j++)
        {
                for(i=0;i<8;i++)//旋转45度
                {
                        OUT_A = (bit) (reveral & 0x08);
                        OUT_B = (bit) (reveral & 0x04);
                        OUT_C = (bit) (reveral & 0x02);
                        OUT_D = (bit) (reveral & 0x01);

                        Delay_1ms(frequency);   //调节转速
                }
        }
       
        OUT_A = 0;                        //切断所有通电
        OUT_B = 0;
        OUT_C = 0;
        OUT_D = 0;       
}

我用按键测试步进,.为什么我走64步,才半圈?
看到别人做的,走了128步才半半圈,是不是用了细分?

如果用PWM来细分,该怎么做?请教大家。

wenking99 发表于 2013-6-15 15:33:49

没人关注,自己顶一下,求解答。

NJ8888 发表于 2013-6-15 15:41:27

驱动应当是各个管脚同时输出,你应当用个中间变量先把四个输出准备好,一次性更替

i_kkyu 发表于 2013-6-15 19:58:37

估计是4相4拍吧? 别人的是8拍 ?

wenking99 发表于 2013-6-15 22:08:17

OUT_A = (bit) (foreword & 0x08);
OUT_B = (bit) (foreword & 0x04);
OUT_C = (bit) (foreword & 0x02);
OUT_D = (bit) (foreword & 0x01);

我这里是同时输出吧?

BYTE code reveral = {0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
BYTE code forward = {0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正时钟旋转相序表
这里不是四相八拍?

wenking99 发表于 2013-6-17 08:47:31

没人关注

wenking99 发表于 2013-6-19 09:03:12

这个4相8拍的步进电机,每步转5.625度,为什么可以做到每步2.812度?也就是128步,转一圈。有没有人知道怎么做啊?

10xjzheng 发表于 2013-8-16 23:31:02

wenking99 发表于 2013-6-19 09:03 static/image/common/back.gif
这个4相8拍的步进电机,每步转5.625度,为什么可以做到每步2.812度?也就是128步,转一圈。有没有人知道怎 ...

大哥,有问题想请假你!

ice_fire_love 发表于 2014-4-23 10:16:25

我也在想这个问题,不过貌似人家的电路不是这样的。据说是把控制电流变为小台阶往上加。我也不是很明白。也没人关注。
页: [1]
查看完整版本: 5线4相步进电机用2003直接驱动,怎么细分?