標題: 求大神幫我寫一個程序,很簡單的控制步進電機的程序 [打印本頁]

作者: txh19881022    時間: 2017-5-17 14:17
標題: 求大神幫我寫一個程序,很簡單的控制步進電機的程序
就是用的這種86步進電機和驅動器,接線也是按照圖上接的,共地,PUL+接p1.0,DIR+接p1.1,要求上電后延時一段時間電機以一個速度旋轉數圈后,延時一段時間,再以另一個速度反向旋轉數圈,然后循環(huán)以上動作,程序最好帶上詳細注釋,我想通過修改參數達到我要的具體控制,因為自己沒有學過單片機,現(xiàn)在工作需要,所以特來求助,希望前輩們幫幫忙,非常感謝!

我自己是學機械的,這兩天也在開始學習單片機,但是路還很長
再次懇求大神幫幫忙,謝謝大家。

Screenshot_2017-05-17-10-38-35.jpg (38.44 KB, 下載次數: 107)

Screenshot_2017-05-17-10-38-35.jpg

作者: 小潤龍    時間: 2017-5-17 17:50
/*************************************************************************************
*  標題:  步進電機試驗一(雙極性步進電機)                                                                                         
*                                                                                                                                                                          
*    通過本例程了解步進馬達使用及驅動程序編寫                                                                                 
*;   單相四拍通電驅動時序:                                                         
*;   正轉: A/  B  A  B/
*    反轉: B/  A  B  A/                                                                                              
*   
*    UDN2916電流控制真值表:
*          I0    I1        輸出電流
*          L            L                  最大
*          H                L                  最大*2/3
*          L                H                  最大*1/3
*     H     H         0                                                                                       *                                                                           
**************************************************************************************/  
#include "reg52.h"

#define speed 2
//Motor
sbit PH1 = P1^0;          //定義管腳
sbit PH2 = P1^1;
sbit I01 = P1^2;
sbit I11 = P1^3;
sbit I02 = P1^4;
sbit I12 = P1^5;



void delay(int time);

/***************************************
函數功能:產生單相四拍脈沖控制步進機
**************************************/
void Go()
{         //A
    PH1 = 0;  //PH1為0 則A線圈為反向電流
    I01 = 0;
        I11 = 0;   //以最大電流輸出
       

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

        delay(speed);
        //0
        PH1 = 0;  //PH1為0 則A線圈為反向電流
    I01 = 1;  //輸出0
        I11 = 1;
       

        PH2 = 1;  //PH2為1 則B線圈為正電流
        I02 = 0;  //以最大電流輸出
        I12 = 0;

        delay(speed);
        //B
        PH1 = 1;   //PH1為1 則A線圈為正向電流
    I01 = 0;   //以最大電流輸出
        I11 = 0;
       

        PH2 = 1;  //PH2為1 則B線圈為正向電流
        I02 = 1;  //輸出0
        I12 = 1;
                   ////
        delay(speed);
        //0
        PH1 = 1;   //PH1為1 則A線圈為正向電流
        I01 = 1;
        I11 = 1;
       

        PH2 = 0;   //PH2為0 則B線圈為反向電流
        I02 = 0;
        I12 = 0;

        delay(speed);


       
}
/*******************延時函數****************************/
void delay(int time)
{
  int i,j;

  for(j=0; j <= time; j++)
   for(i =0 ; i <= 120; i++);
}


void main()
{

  while(1)
  {

    Go();  //步進電機運行
       
  }

}


作者: txh19881022    時間: 2017-5-17 21:21
小潤龍 發(fā)表于 2017-5-17 17:50
/*************************************************************************************
*  標題:  步 ...

據我現(xiàn)在了解的是控制我的86電機是不需要控制ABCD線圈的吧,只需要兩路,一路脈沖,一路方向,這個程序好像不是吧




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