標(biāo)題: 51單片機(jī)四線雙極性+五線四相步進(jìn)電機(jī)案例程序(細(xì)分+半步八拍方式+雙四拍+單四拍) [打印本頁]

作者: aaa12345678    時間: 2018-11-11 21:28
標(biāo)題: 51單片機(jī)四線雙極性+五線四相步進(jìn)電機(jī)案例程序(細(xì)分+半步八拍方式+雙四拍+單四拍)
1、現(xiàn)發(fā)布只配有4線雙極性步進(jìn)電機(jī)

2、四線雙極性步進(jìn)電機(jī)與五線四相步進(jìn)電機(jī)程序不通用

3、五線四相步進(jìn)電機(jī)若只是震動,可適當(dāng)增大延時即可



電路原理圖如下:


細(xì)分單片機(jī)源程序如下:
  1. /*************************************************************************************
  2. *  標(biāo)題:  步進(jìn)電機(jī)試驗四(采用2細(xì)分)                                                                                         *
  3. *                                                                                                                                                                          *
  4. *    通過本例程了解步進(jìn)馬達(dá)使用及驅(qū)動程序編寫                                                                                 *
  5. *;   單相四拍通電驅(qū)動時序:                                                          *
  6. *;   正轉(zhuǎn): A/  B  A  B/                                                                                                                         *
  7. *    反轉(zhuǎn): B/  A  B  A/                                                                                              *
  8. *                                                                                                                                                                     *
  9. *    UDN2916電流控制真值表:                                                                                                                 *
  10. *          I0    I1        輸出電流                                                                                                                 *
  11. *          L            L                  最大                                                                                                                         *
  12. *          H                L                  最大*2/3                                                                                                                 *
  13. *          L                H                  最大*1/3                                                                                                                 *
  14. *     H     H         0                                                                     *
  15. *   請學(xué)員一定要消化掉本例程                                                                    *
  16. *   注意:J14短路冒需斷開                                                                                    *
  17. **************************************************************************************/  
  18. #include "reg52.h"

  19. #define speed 38
  20. //Motor
  21. sbit PH1 = P1^0;          //定義管腳
  22. sbit PH2 = P1^1;
  23. sbit I01 = P1^2;
  24. sbit I11 = P1^3;
  25. sbit I02 = P1^4;
  26. sbit I12 = P1^5;
  27.                                     
  28. unsigned char TableA[] = { 0XF7,0XFB,0XF3};         //A線圈細(xì)分表
  29. unsigned char TableB[] = { 0XeF,0XdF,0XcF};         //B線圈細(xì)分表

  30. void delay(int time);

  31. /***************************************
  32. 函數(shù)功能:產(chǎn)生單相四拍脈沖控制步進(jìn)機(jī) 2細(xì)分
  33. **************************************/
  34. void Go()
  35. {        char i ,temp;
  36.      //A
  37.     PH1 = 0;  //PH1為0 則A線圈為反向電流
  38.         for(i = 0; i<3; i++)
  39.         {  temp = P1;
  40.            P1 = TableA[i];
  41.            P1 = P1&temp;
  42.            delay(1);
  43.          }
  44.         

  45.         PH2 = 0;  //PH2為0 則B線圈為反向電流
  46.         I02 = 1;
  47.         I12 = 1;   //輸出0

  48.         delay(speed);
  49.         //0
  50.         PH1 = 0;  //PH1為0 則A線圈為反向電流
  51.     I01 = 1;  //輸出0
  52.         I11 = 1;
  53.         

  54.         PH2 = 1;  //PH2為1 則B線圈為正電流
  55.         for(i = 0; i<3; i++)
  56.         {  temp = P1;
  57.            P1 = TableB[i];
  58.            P1 = P1&temp;
  59.            delay(1);
  60.          }

  61.         delay(speed);
  62.         //B
  63.         PH1 = 1;   //PH1為1 則A線圈為正向電流
  64.         for(i = 0; i<3; i++)
  65.         {  temp = P1;
  66.            P1 = TableA[i];
  67.            P1 = P1&temp;
  68.            delay(1);
  69.          }

  70.         PH2 = 1;  //PH2為1 則B線圈為正向電流
  71.         I02 = 1;  //輸出0
  72.         I12 = 1;
  73.                    ////
  74.         delay(speed);
  75.         //0
  76.         PH1 = 1;   //PH1為1 則A線圈為正向電流
  77.         I01 = 1;
  78.         I11 = 1;
  79.         

  80.         PH2 = 0;   //PH2為0 則B線圈為反向電流
  81.         for(i = 0; i<3; i++)
  82.         {  temp = P1;
  83.            P1 = TableB[i];
  84.            P1 = P1&temp;
  85.            delay(1);
  86.          }
  87.         delay(speed);
  88.                

  89.         
  90. }
  91. /*******************延時函數(shù)****************************/
  92. void delay(int time)
  93. {
  94.   int i,j;
  95.   
  96.   for(j=0; j <= time; j++)
  97.    for(i =0 ; i <= 120; i++);
  98. }


  99. void main()
  100. {

  101.   while(1)
  102.   {
  103.    
  104.     Go();  //步進(jìn)電機(jī)運行
  105.         
  106.   }

  107. }
復(fù)制代碼
  1. /*************************************************************************************
  2. *  標(biāo)題:  步進(jìn)電機(jī)試驗二(雙四拍方式)                                                                                                                         *
  3. *                                                                                                                                                                          *
  4. *    通過本例程了解步進(jìn)馬達(dá)使用及驅(qū)動程序編寫                                                                                 *
  5. *;   雙四拍工作方式:                                                                    *
  6. *;   正轉(zhuǎn):A/B   AB   AB/  A/B/                                                                                       *
  7. *         反轉(zhuǎn):A/B/  AB/  AB   A/B
  8. *   
  9. *    UDN2916電流控制真值表:
  10. *         I0    I1       輸出電流
  11. *          L            L                  最大
  12. *          H                L                  最大*2/3
  13. *          L                H                  最大*1/3
  14. *     H     H         0                                                                     *
  15. *  請學(xué)員一定要消化掉本例程                                                                    *
  16.    J14短路冒需斷開                                                                                                   *
  17. **************************************************************************************/  
  18. #include "reg52.h"

  19. #define speed 2
  20. //Motor
  21. sbit PH1 = P1^0;          //定義管腳
  22. sbit PH2 = P1^1;
  23. sbit I01 = P1^2;
  24. sbit I11 = P1^3;
  25. sbit I02 = P1^4;
  26. sbit I12 = P1^5;



  27. void delay(int time);

  28. /***************************************
  29. 函數(shù)功能:產(chǎn)生脈沖控制步進(jìn)機(jī)
  30. 正轉(zhuǎn):A/B   AB   AB/  A/B/
  31. I0 I1 為低電平時,均以最大電流輸出
  32. **************************************/
  33. void Go()
  34. {         //A
  35.     PH1 = 0;  //PH1為0 則A線圈為反向電流
  36.     I01 = 0;
  37.         I11 = 0;
  38.         

  39.         PH2 = 1;   //PH2為1 則B線圈為正向電流
  40.         I02 = 0;
  41.         I12 = 0;

  42.         delay(speed);
  43.         //0
  44.         PH1 = 1;  //PH1為1 則A線圈為正向電流
  45.     I01 = 0;
  46.         I11 = 0;
  47.         

  48.         PH2 = 1;
  49.         I02 = 0;
  50.         I12 = 0;

  51.         delay(speed);
  52.         //B
  53.         PH1 = 1;  //PH1為1 則A線圈為正向電流
  54.     I01 = 0;
  55.         I11 = 0;
  56.         

  57.         PH2 = 0;   //PH2為0 則B線圈為反向電流
  58.         I02 = 0;
  59.         I12 = 0;
  60.                    ////
  61.         delay(speed);
  62.         //0
  63.         PH1 = 0;
  64.         I01 = 0;
  65.         I11 = 0;
  66.         

  67.         PH2 = 0;  
  68.         I02 = 0;
  69.         I12 = 0;
  70.             
  71.         delay(speed);
  72.         
  73.         
  74. }
  75. /*******************延時函數(shù)****************************/
  76. void delay(int time)
  77. {
  78.   int i,j;
  79.   
  80.   for(j=0; j <= time; j++)
  81.    for(i =0 ; i <= 120; i++);
  82. }

  83. void main()
  84. {

  85.   while(1)
  86.   {
  87.    
  88.     Go();  //步進(jìn)電機(jī)運行
  89.         
  90.   }

  91. }
復(fù)制代碼


所有資料51hei提供下載:
51單片機(jī)步進(jìn)馬達(dá)案例.rar (3.78 MB, 下載次數(shù): 118)




作者: admin    時間: 2018-11-15 17:02
好資料,51黑有你更精彩!!!
作者: ar_fa    時間: 2019-12-13 08:58
資料很好,收下了。謝謝




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