OpenEdv-开源电子网

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

关于矩阵键盘+步进电机的问题求助

[复制链接]

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2021-7-23
在线时间
17 小时
发表于 2021-8-9 16:53:46 | 显示全部楼层 |阅读模式
16金钱
使用stm32f103c8t6最小系统板控制步进电机正反转函数:
void Motor_Ctrl_Direction_Angle(int direction, int angle)
{
        u16 j;
        if(direction == 1)
        {
                for(j=0;j<64*angle/45;j++)
                {
                        MotoRccw();//正转
                }
                 MotorStop();//停止
  }
        else
        {
                for(j=0;j<64*angle/45;j++)
                {
                        MotoRcw();//反转
                }
                 MotorStop();//停止
        }
}

写了一个主函数:
int main(void)
{
         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
         uart_init(9600);            
   Key_Init();  //矩阵键盘初始化
   Moto_Init();//步进电机初始化       
   delay_init();
   int beg = 1; //设置默认楼层为1
   int des ;
   int dir;
   int ang;       
        while(1)
        {
                des = Key_Scan();   //获取按下矩阵键盘的键值               
    if (des > beg){
                         dir = 1;  
       //print("电机正转")                       
                   ang = (des - beg)*45;  //电机旋转角度
                }
                else if(des == beg){
                         //print("无需移动");
                   continue;
                       
                }
                else{
                    dir = 0;
                          //printf("电机反转")  
                          ang = (beg - des)*45;  //电机旋转角度
                }
                    beg = dir;  //默认楼层为当前按键按下的楼层
        Motor_Ctrl_Direction_Angle(dir,ang);  // 启动电机
        // printf("当前楼层为:%d",beg);               
    }
       
}


烧录之后,发现步进电机一直旋转,按下按键后,它可以旋转规定的角度,但是旋转完成后,它继续往正方向旋转,到达相应楼层后不会自动停下来,哪位大佬帮我解释一下为什么会这样,感激不尽



key_motor.rar

4.78 MB, 下载次数: 7

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

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-9 18:56:03 | 显示全部楼层
因为你的程序没有对 dir 进行后续的处理
回复

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2021-7-23
在线时间
17 小时
 楼主| 发表于 2021-8-9 19:54:07 | 显示全部楼层
zzk111 发表于 2021-8-9 18:56
因为你的程序没有对 dir 进行后续的处理

怎样处理啊
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-8-10 11:41:30 | 显示全部楼层

加一个标志位,记录每次与矩阵键盘输入楼层的差值,每改变一层,差值也-1,等差值为0,dir标志位赋值0
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 10:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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