標題: 51單片機按鍵控制步進電機先順時針轉(zhuǎn)動90度,定住2S,再逆時針轉(zhuǎn)90度 [打印本頁]

作者: 234534    時間: 2018-2-11 11:19
標題: 51單片機按鍵控制步進電機先順時針轉(zhuǎn)動90度,定住2S,再逆時針轉(zhuǎn)90度
想通過按一個按鍵,使步進電機先順時針轉(zhuǎn)動90度,在定住2S,再逆時針轉(zhuǎn)動90度。代碼方面應(yīng)該怎么編?

作者: TAOjiadashao    時間: 2018-2-11 14:00
你說的應(yīng)該是舵機吧,應(yīng)該叫伺服電機吧?
作者: angmall    時間: 2018-2-11 14:25
  1. /*-----------------------------------------------
  2.   名稱:步進電機
  3.   內(nèi)容:本程序用于測試4相步進電機常規(guī)驅(qū)動
  4.         使用1-2相勵磁
  5.         1-2相激勵功率增倍,步進角度減半,抖動減少
  6.         順序如下 a-ab-b-bc-c-cd-d-da   又稱4相8拍
  7. ------------------------------------------------*/

  8. #include <reg52.h>



  9. sbit A1=P1^0; //定義步進電機連接端口
  10. sbit B1=P1^1;
  11. sbit C1=P1^2;
  12. sbit D1=P1^3;


  13. #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
  14. #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
  15. #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
  16. #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  17. #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
  18. #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
  19. #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
  20. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  21. #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電

  22. unsigned char Speed;
  23. bit Flag;
  24. /*------------------------------------------------
  25. uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  26. unsigned char 是定義無符號字符變量,其值的范圍是
  27. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  28. 長度如下 T=tx2+5 uS
  29. ------------------------------------------------*/
  30. void DelayUs2x(unsigned char t)
  31. {   
  32.   while(--t);
  33. }
  34. /*------------------------------------------------
  35. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  36. unsigned char 是定義無符號字符變量,其值的范圍是
  37. 0~255 這里使用晶振12M,精確延時請使用匯編
  38. ------------------------------------------------*/
  39. void DelayMs(unsigned char t)
  40. {
  41.   
  42.   while(t--)
  43.   {
  44.     //大致延時1mS
  45.     DelayUs2x(245);
  46.     DelayUs2x(245);
  47.   }
  48. }
  49. /*------------------------------------------------
  50.                     主函數(shù)
  51. ------------------------------------------------*/
  52. main()
  53. {
  54.   unsigned int i=512;//旋轉(zhuǎn)一周時間

  55.   EA=1;          //全局中斷開
  56.   EX0=1;         //外部中斷0開
  57.   IT0=1;         //1表示邊沿觸發(fā)

  58.   Speed=10;
  59.   while(1){
  60.     Coil_OFF
  61.     while((i--)&&Flag)  //正向
  62.     {  Coil_A1      
  63.       DelayMs(Speed);
  64.       Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  65.       DelayMs(Speed);         //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,
  66.       //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
  67.       Coil_B1      
  68.       DelayMs(Speed);
  69.       Coil_BC1
  70.       DelayMs(Speed);
  71.       Coil_C1      
  72.       DelayMs(Speed);
  73.       Coil_CD1
  74.       DelayMs(Speed);
  75.       Coil_D1      
  76.       DelayMs(Speed);
  77.       Coil_DA1
  78.       DelayMs(Speed);
  79.     }
  80.     Coil_OFF
  81.     i=512;
  82.     while((i--)&&(!Flag))//反向
  83.     {  
  84.       Coil_A1      
  85.       DelayMs(Speed);
  86.       Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  87.       DelayMs(Speed);         //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速 ,
  88.       //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
  89.       Coil_D1      
  90.       DelayMs(Speed);
  91.       Coil_CD1
  92.       DelayMs(Speed);
  93.       Coil_C1      
  94.       DelayMs(Speed);
  95.       Coil_BC1
  96.       DelayMs(Speed);
  97.       Coil_B1      
  98.       DelayMs(Speed);
  99.       Coil_AB1
  100.       DelayMs(Speed);
  101.     }
  102.   }
  103. }

  104. /*------------------------------------------------
  105.                 外部中斷程序
  106. ------------------------------------------------*/
  107. void ISR_INT0(void) interrupt 0
  108. {

  109.   if(!INT0)
  110.   {
  111.     DelayMs(10);//在此處可以添加去抖動程序,防止按鍵抖動造成錯誤
  112.     if(!INT0)
  113.     //while(!INT1);//等待按鍵釋放
  114.     {
  115.       Flag=!Flag;   
  116.     }
  117.   }
  118. }
復(fù)制代碼





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