使用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);
}
}
燒錄之后,發現步進電機一直旋轉,按下按鍵后,它可以旋轉規定的角度,但是旋轉完成后,它繼續往正方向旋轉。哪位大佬幫我解釋一下為什么會這樣,感激不盡
|