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