使用stm32f103c8t6最小系統(tǒng)板控制步進電機正反轉(zhuǎn)函數(shù): //此函數(shù)來自某位大佬寫的,不是我寫的。就是傳入方向和角度來控制它正反轉(zhuǎn)以及旋轉(zhuǎn)角度。然后我寫了一個主函數(shù),獲取矩陣鍵盤的鍵值,設置默認樓層為1樓,當按鍵按下,比較按下的樓層與默認樓層的大小,大于就是正轉(zhuǎn),小于反轉(zhuǎn),此時默認樓層變?yōu)楫斍鞍聪碌臉菍樱却麓伟存I輸入,在進行比較。之后燒錄代碼的時候,發(fā)現(xiàn)步進電機會一直轉(zhuǎn)動,不會停下來,按下按鍵是,可以到達相應角度,但之后又繼續(xù)超正方向轉(zhuǎn)動,求大佬講解一下為什么會這樣,小白一個 ,求大佬不吝賜教。大哭!!!!
void Motor_Ctrl_Direction_Angle(int direction, int angle)
{
u16 j;
if(direction == 1)
{
for(j=0;j<64*angle/45;j++)
{
MotoRccw();//正轉(zhuǎn)
}
MotorStop();//停止
}
else
{
for(j=0;j<64*angle/45;j++)
{
MotoRcw();//反轉(zhuǎn)
}
MotorStop();//停止
}
}
寫了一個主函數(shù):
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
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("電機正轉(zhuǎn)")
ang = (des - beg)*45; //電機旋轉(zhuǎn)角度
}
else if(des == beg){
//print("無需移動");
continue;
}
else{
dir = 0;
//printf("電機反轉(zhuǎn)")
ang = (beg - des)*45; //電機旋轉(zhuǎn)角度
}
beg = dir; //默認樓層為當前按鍵按下的樓層
Motor_Ctrl_Direction_Angle(dir,ang); // 啟動電機
// printf("當前樓層為:%d",beg);
}
}
燒錄之后,發(fā)現(xiàn)步進電機一直旋轉(zhuǎn),按下按鍵后,它可以旋轉(zhuǎn)規(guī)定的角度,但是旋轉(zhuǎn)完成后,它繼續(xù)往正方向旋轉(zhuǎn)。哪位大佬幫我解釋一下為什么會這樣,感激不盡
|