使用stm32f103c8t6最小系统板控制步进电机正反转函数: //此函数来自某位大佬写的,不是我写的。就是传入方向和角度来控制它正反转以及旋转角度。然后我写了一个主函数,获取矩阵键盘的键值,设置默认楼层为1楼,当按键按下,比较按下的楼层与默认楼层的大小,大于就是正转,小于反转,此时默认楼层变为当前按下的楼层,等待下次按键输入,在进行比较。之后烧录代码的时候,发现步进电机会一直转动,不会停下来,按下按键是,可以到达相应角度,但之后又继续超正方向转动,求大佬讲解一下为什么会这样,小白一个 ,求大佬不吝赐教。大哭!!!!
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);
}
}
烧录之后,发现步进电机一直旋转,按下按键后,它可以旋转规定的角度,但是旋转完成后,它继续往正方向旋转。哪位大佬帮我解释一下为什么会这样,感激不尽
|