OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2668|回复: 5

控制步进电机方向

[复制链接]

9

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-3-26
在线时间
12 小时
发表于 2017-7-11 18:52:05 | 显示全部楼层 |阅读模式
1金钱
通过一个驱动器来控制步进电机,但是我想要电机反转时,DIR=~DIR;  和 DIR=!DIR; 都不行,必须赋值0 或 1
请问这是为什么?LED闪烁,不也是IO口取反吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2017-2-26
在线时间
14 小时
发表于 2017-7-11 20:22:29 | 显示全部楼层
那你看过DIR的宏定义吗?LED是宏定义了地址,然后再通过置输入或输出的0或1来控制灯亮,我不知道这个DIR是怎么样的。
回复

使用道具 举报

7

主题

72

帖子

0

精华

高级会员

Rank: 4

积分
620
金钱
620
注册时间
2016-10-20
在线时间
74 小时
发表于 2017-7-11 20:26:50 | 显示全部楼层
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电机驱动板(绿板)上面的四个指示灯来看。
回复

使用道具 举报

9

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-3-26
在线时间
12 小时
 楼主| 发表于 2017-7-13 11:34:57 | 显示全部楼层
mingyuegx 发表于 2017-7-11 20:22
那你看过DIR的宏定义吗?LED是宏定义了地址,然后再通过置输入或输出的0或1来控制灯亮,我不知道这个DIR是 ...

#define DIR PAout(2)      我是这样定义的
回复

使用道具 举报

12

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2017-2-21
在线时间
49 小时
发表于 2017-7-13 14:28:52 | 显示全部楼层
~DIR是按位取反,应该不行。!DIR照理应该可以吧,LED就是这样的
回复

使用道具 举报

9

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-3-26
在线时间
12 小时
 楼主| 发表于 2017-7-21 17:21:38 | 显示全部楼层
我是路人甲 发表于 2017-7-13 14:28
~DIR是按位取反,应该不行。!DIR照理应该可以吧,LED就是这样的

两个都不行。。。。我用if来判断,进而直接赋值成与之前值相反的逻辑都不行。。。。
不知道那里出了问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-23 03:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表