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来细分,该怎么做?请教大家。 没人关注,自己顶一下,求解答。 驱动应当是各个管脚同时输出,你应当用个中间变量先把四个输出准备好,一次性更替 估计是4相4拍吧? 别人的是8拍 ? 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}; //正时钟旋转相序表
这里不是四相八拍? 没人关注 这个4相8拍的步进电机,每步转5.625度,为什么可以做到每步2.812度?也就是128步,转一圈。有没有人知道怎么做啊? wenking99 发表于 2013-6-19 09:03 static/image/common/back.gif
这个4相8拍的步进电机,每步转5.625度,为什么可以做到每步2.812度?也就是128步,转一圈。有没有人知道怎 ...
大哥,有问题想请假你! 我也在想这个问题,不过貌似人家的电路不是这样的。据说是把控制电流变为小台阶往上加。我也不是很明白。也没人关注。
页:
[1]