控制步进电机方向

2019-08-16 21:40发布

通过一个驱动器来控制步进电机,但是我想要电机反转时,DIR=~DIR;  和 DIR=!DIR; 都不行,必须赋值0 或 1
请问这是为什么?LED闪烁,不也是IO口取反吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
创世神
2019-08-17 02:22
void xu1(u8 a1,u8 b1,u8 c1,u8 d1)
{
        A1(a1);B1(b1);C1(c1);D1(d1);
}
void xu2(u8 a2,u8 b2,u8 c2,u8 d2)
{
        A2(a2);B2(b2);C2(c2);D2(d2);
void forward(u16 tt)//7.2度
{
        xu1(1,0,0,0);
        xu2(1,0,0,0);
        delay_us(tt*100);
        xu1(0,1,0,0);
        xu2(0,1,0,0);
        delay_us(tt*100);
        xu1(0,0,1,0);
        xu2(0,0,1,0);               
        delay_us(tt*100);
        xu1(0,0,0,1);
        xu2(0,0,0,1);       
        delay_us(tt*100);       
}
void backwards(u16 tt)
{
        xu1(0,0,0,1);
        xu2(0,0,0,1);
        delay_us(tt*100);
        xu1(0,0,1,0);
        xu2(0,0,1,0);
        delay_us(tt*100);
        xu1(0,1,0,0);
        xu2(0,1,0,0);               
        delay_us(tt*100);
        xu1(1,0,0,0);
        xu2(1,0,0,0);       
        delay_us(tt*100);       
}

void turn_left(u16 tt)   
{
        xu1(0,0,0,0);
        xu2(1,0,0,0);
        delay_us(tt*100);
        xu2(0,1,0,0);
        delay_us(tt*100);
        xu2(0,0,1,0);               
        delay_us(tt*100);
        xu2(0,0,0,1);       
        delay_us(tt*100);       
}
void turn_left_2(u16 tt)
{
        xu1(0,0,0,1);
        xu2(0,0,0,0);
        delay_us(tt*100);
        xu1(0,0,1,0);
        delay_us(tt*100);
        xu1(0,1,0,0);
        delay_us(tt*100);
        xu1(1,0,0,0);
        delay_us(tt*100);       
}
void turn_right(u16 tt)
{
       
        xu1(1,0,0,0);
        xu2(0,0,0,0);
        delay_us(tt*100);
        xu1(0,1,0,0);
        delay_us(tt*100);
        xu1(0,0,1,0);
        delay_us(tt*100);
        xu1(0,0,0,1);
        delay_us(tt*100);       
}
void turn_right_2(u16 tt)
{
        xu1(0,0,0,0);
        xu2(0,0,0,1);
        delay_us(tt*100);
        xu2(0,0,1,0);
        delay_us(tt*100);
        xu2(0,1,0,0);               
        delay_us(tt*100);
        xu2(1,0,0,0);       
        delay_us(tt*100);       
}

/*变量n为旋转角度参数,需根据实际情况调节*/
void turn_left_15(u16 tt)    //左转15度
{
        u8 n;
        for(n=0;n<4;n++)
        {
                xu1(0,0,0,1);
                xu2(1,0,0,0);               
          delay_us(tt*100);               
                xu1(0,0,1,0);
                xu2(0,1,0,0);                       
          delay_us(tt*100);               
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);               
        }
}
void turn_right_15(u16 tt)    //右转15度   目的:使物块放置的更靠中心些
{
        u8 n;
        for(n=0;n<3;n++)   
        {
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(0,0,1,0);
                xu2(0,1,0,0);
          delay_us(tt*100);
                xu1(0,0,0,1);
                xu2(1,0,0,0);       
          delay_us(tt*100);
        }
}
void turn_left_45(u16 tt)    //左转45度
{
        u8 n;
        for(n=0;n<12;n++)
        {
                xu1(0,0,0,1);
                xu2(1,0,0,0);               
          delay_us(tt*100);               
                xu1(0,0,1,0);
                xu2(0,1,0,0);                       
          delay_us(tt*100);               
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);               
        }
}
void turn_right_45(u16 tt)    //左转45度
{
        u8 n;
        for(n=0;n<12;n++)   
        {
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(0,0,1,0);
                xu2(0,1,0,0);
          delay_us(tt*100);
                xu1(0,0,0,1);
                xu2(1,0,0,0);       
          delay_us(tt*100);
        }
}
void turn_left_90(u16 tt)    //左转转90度
{
        u8 n;
        for(n=0;n<29;n++)
        {
                xu1(0,0,0,1);
                xu2(1,0,0,0);               
          delay_us(tt*100);               
                xu1(0,0,1,0);
                xu2(0,1,0,0);                       
          delay_us(tt*100);               
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);       
        }
}
void turn_right_90(u16 tt)    //右转90度
{
        u8 n;
        for(n=0;n<29;n++)
        {
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(0,0,1,0);
                xu2(0,1,0,0);
          delay_us(tt*100);
                xu1(0,0,0,1);
                xu2(1,0,0,0);       
          delay_us(tt*100);
        }
}
void turn_left_135(u16 tt)   //左转135度
{
        u8 n;
        for(n=0;n<41;n++)
        {
                xu1(0,0,0,1);
                xu2(1,0,0,0);               
          delay_us(tt*100);               
                xu1(0,0,1,0);
                xu2(0,1,0,0);                       
          delay_us(tt*100);               
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);               
        }

}
void turn_right_135(u16 tt)   //右转135度
{
        u8 n;
        for(n=0;n<42;n++)
        {
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(0,0,1,0);
                xu2(0,1,0,0);
          delay_us(tt*100);
                xu1(0,0,0,1);
                xu2(1,0,0,0);       
          delay_us(tt*100);
        }

}
void turn_left_180(u16 tt)    //左转180度
{
        u8 n;
        for(n=0;n<56;n++)
        {
                xu1(0,0,0,1);
                xu2(1,0,0,0);               
          delay_us(tt*100);               
                xu1(0,0,1,0);
                xu2(0,1,0,0);                       
          delay_us(tt*100);               
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);       
        }
}


void turn_right_180(u16 tt)    //右转180度
{
        u8 n;
        for(n=0;n<56;n++)
        {
                xu1(1,0,0,0);
                xu2(0,0,0,1);       
          delay_us(tt*100);
                xu1(0,1,0,0);
                xu2(0,0,1,0);       
          delay_us(tt*100);
                xu1(0,0,1,0);
                xu2(0,1,0,0);
          delay_us(tt*100);
                xu1(0,0,0,1);
                xu2(1,0,0,0);       
          delay_us(tt*100);
        }
}
void stop(void)
{
        xu1(0,0,0,0);
        xu2(0,0,0,0);

这是小车的左右两个步进电机的控制程序,(仅供参考),,,要想更直观的观察A  B  C  D四个相的0  1变化  可通过L298N电机驱动板(绿板)上面的四个指示灯来看。

一周热门 更多>