欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 關于STM32單片機矩陣鍵盤+步進電機模擬電梯運行的問題求助 [打印本頁]

作者: cidiy-biu    時間: 2021-8-10 09:35
標題: 關于STM32單片機矩陣鍵盤+步進電機模擬電梯運行的問題求助
使用stm32f103c8t6最小系統(tǒng)板控制步進電機正反轉函數:  //此函數來自某位大佬寫的,不是我寫的。就是傳入方向和角度來控制它正反轉以及旋轉角度。然后我寫了一個主函數,獲取矩陣鍵盤的鍵值,設置默認樓層為1樓,當按鍵按下,比較按下的樓層與默認樓層的大小,大于就是正轉,小于反轉,此時默認樓層變?yōu)楫斍鞍聪碌臉菍,等待下次按鍵輸入,在進行比較。之后燒錄代碼的時候,發(fā)現(xiàn)步進電機會一直轉動,不會停下來,按下按鍵是,可以到達相應角度,但之后又繼續(xù)超正方向轉動,求大佬講解一下為什么會這樣,小白一個,求大佬不吝賜教。大哭。。!
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位搶占優(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("電機正轉")                       
                   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);               
    }
      
}


燒錄之后,發(fā)現(xiàn)步進電機一直旋轉,按下按鍵后,它可以旋轉規(guī)定的角度,但是旋轉完成后,它繼續(xù)往正方向旋轉。哪位大佬幫我解釋一下為什么會這樣,感激不盡

作者: 姜Sir    時間: 2021-8-10 17:00
也是一樣,原理都懂,就是轉不起來
作者: zhb2004xp    時間: 2021-8-10 17:33
應該是while(1)內循環(huán)邏輯問題,最后為什么“beg = dir;  //默認樓層為當前按鍵按下的樓層”,dir只是判斷正反轉的變量,應該是“beg = des;  //默認樓層為當前按鍵按下的樓層”吧。
作者: zhb2004xp    時間: 2021-8-10 17:48
調用別人的程序最好先驗證程序是否在你的硬件環(huán)境能夠正常運行,設置不同的鍵值,分別驗證調用程序能否正常正反轉和停止;再使用printf輸出打印驗證你的while(1)運行輸出參數是否正確,最后再加入調用的動作函數;有些問題需要自己進行判斷和查找bug
作者: lkc8210    時間: 2021-8-10 17:51
                    beg = dir;  //默認樓層為當前按鍵按下的樓層
???
dir 不是方向嗎?
應該是beg = des;  //默認樓層為當前按鍵按下的樓層
作者: Coolguyisme    時間: 2021-10-8 15:55
你有矩陣鍵盤的程序嗎?





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1