|
/*************************************************************************************
* 標(biāo)題: 步進(jìn)電機(jī)試驗(yàn)一(雙極性步進(jìn)電機(jī))
*
* 通過本例程了解步進(jìn)馬達(dá)使用及驅(qū)動(dòng)程序編寫
*; 單相四拍通電驅(qū)動(dòng)時(shí)序:
*; 正轉(zhuǎn): A/ B A B/
* 反轉(zhuǎn): 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);
/***************************************
函數(shù)功能:產(chǎn)生單相四拍脈沖控制步進(jìn)機(jī)
**************************************/
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);
}
/*******************延時(shí)函數(shù)****************************/
void delay(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 120; i++);
}
void main()
{
while(1)
{
Go(); //步進(jìn)電機(jī)運(yùn)行
}
}
|
|