?? 兩相5、6線步進電.c
字號:
//兩相5、6線步進電機,分為四拍和八拍,這里介紹輸出八拍方式:A-AC-C-CB-B-BD-D-DA
//四拍:A-C-B-D,因此在八拍的基礎上減去中間的就可以了,不過步距角要大一倍
#include <reg51.h>
#include <intrins.h>
sbit la=P2^0; //定義兩相電機的四組線,從板上設計來分配,選擇P2口的低四位輸出,相應的輸出也可以反應在LED燈上
//P2。0為A相,P2。1為B相,P2。2為C相,P2。3為D相
sbit lb=P2^1;
sbit lc=P2^2;
sbit ld=P2^3;
#define uchar unsigned char
code unsigned int lhj[]={1,50,100,1,50,80,1,100,50,0,120,40,0,30,80,0,50,100,
1,50,120,0,200,80,1,400,20,1,50,130,0,200,90,0,50,150};
//定義電機動作的參數,每三個數為一組,第一個是方向(1、正轉,0、反轉)
//第二個是步進量,第三個是轉速
unsigned char key();//鍵盤動作,這里的鍵盤掃描只用到四個按鍵有效(板上標的0,4,8,C)
unsigned char right(unsigned int Speed,unsigned int road); //正轉
unsigned char left(unsigned int Speed,unsigned int road); //反轉
void mDelay(unsigned int DelayTime); //延時函數
void main()
{
uchar i=0;
while(1){
if(key()==0xde){//8的按鍵按下
for(i=0;i<34;i+=3){//循環輸出我們定義好的動作數據
if(lhj[i]) //調入數組,先判斷正反轉
right(lhj[i+1],lhj[i+2]); //兩個參數代表步進量和轉速
else
left(lhj[i+1],lhj[i+2]);
if(key()==0xee)//C的按鍵按下
break;
}
}
}
}
unsigned char right(unsigned int Speed,unsigned int road)//兩個參數代表步進量和轉速
{
//步進節拍:A-AC-C-CB-B-BD-D-DA
while(1){
if(!Speed) //判斷步進量走完沒?以下都是,每走一步,判斷一次
break;
ld=1;
la=0; //a
mDelay(road);//這里的延時就可控制轉速
if(!Speed--)
break;
lc=0; //ac
mDelay(road);
if(!Speed--)
break;
la=1; //c
mDelay(road);
if(!Speed--)
break;
lb=0; //cb
mDelay(road);
if(!Speed--)
break;
lc=1; //b
mDelay(road);
if(!Speed--)
break;
ld=0; //bd
mDelay(road);
if(!Speed--)
break;
lb=1; //d
mDelay(road);
if(!Speed--)
break;
la=0; //da
mDelay(road);
Speed--;
}
P3=P3|0x0f;//將四個腳輸出置高
}
unsigned char left(unsigned int Speed,unsigned int road)//兩個參數代表步進量和轉速
{
//步進節拍
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -