|
給你一段簡單的程序代碼,控制步進電機的,不過你要好好看看程序的編寫,以適應(yīng)你的硬件(主要是連線),你可以在實現(xiàn)這個的基礎(chǔ)上實現(xiàn)你所說的目標(biāo),個人覺得你參考這個程序然后自己實現(xiàn)你所說的功能比較好:
- #include <reg52.h>
- unsigned char code F_Rotation[4]={0x08,0x10,0x20,0x40};//正轉(zhuǎn)表格
- unsigned char code B_Rotation[4]={0x40,0x20,0x10,0x08};//反轉(zhuǎn)表格
- void Delay(unsigned int i)//延時
- {
- while(--i);
- }
- main()
- {
- unsigned char i;
- while(1)
- {
- for(i=0;i<4;i++) //4相
- {
- P1=F_Rotation[i]; //輸出對應(yīng)的相 可以自行換成反轉(zhuǎn)表格
- Delay(500); //改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速
- }
- }
- }
復(fù)制代碼
我編了一個程序 ,讓單片機發(fā)100個脈沖,之后電機就停止轉(zhuǎn)動。但是把單片機、驅(qū)動器、電機連起來,運行的時候,步進電機一直轉(zhuǎn),沒有出現(xiàn)預(yù)期的停止。我的驅(qū)動器的脈沖負接 P1^2,驅(qū)動器的脈沖正接+5V。- #include<reg52.h>
- #include <intrins.h>
- #define VALUE 40
- sbit sp = P1^2;
- unsigned int a;
- void delay(unsigned int i)
- {
- char j;
- for(i; i > 0; i--)
- for(j = 200; j > 0; j--);
- }
- void main()
- While(1)
- {
- a=0;
- while(1)
- { sp=0;
- delay(10);
- sp=1;
- delay(10);
- a++;
- if(a==100)
- {
- sp=0
- break;
-
- }
- }
- }
復(fù)制代碼
電路圖: 程序; - #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code s[]={ 0x88,0x22,0x44,0x11 };
- void delay(uint z)
- { uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void main()
- { int i;
- while(1)
- { for(i=0;i<4;i++)
- { P2=s[i];
- delay(200);
- }
- }
- }
-
-
-
-
- #include<reg51.h>
- sbit k1=P1^1; //啟動
- sbit k2=P1^0; //正反轉(zhuǎn)
- sbit k3=P1^2; //加速
- sbit k4=P1^3; //減速
- unsigned int x=50000;
- unsigned char i=0;
- unsigned char code table[6]={0x01,0x03,0x02,0x06,0x04,0x05};//單雙六拍
- void motor();
- void main()
- {
- TMOD=0x01;
- TH0=-x>>8; //
- TL0=-x%256; //
- TCON=0x10;
- IE=0x82;
- while(1);
- }
- void time_0 () interrupt 1
- {
- EA=0;TR0=0;
- motor();
- if(x<65000&&x>36000) //上下限
- {if(!k3) x=x-2000; //加速
- else if(!k4) x=x+2000;} //減速
- TH0=-x>>8;TL0=-x%256;
- TR0=1;EA=1;
- }
- void motor()
- {
- if(!k1)
- { if(!k2) //正反轉(zhuǎn)
- {i+=1;
- if(i>5) i=0;}
- else
- {i-=1;
- if(i>5) i=5;}
- P2=table;
- }
- else P2=0;
- }
復(fù)制代碼
51單片機控制的4相步進電機的C語言程序 - #include <AT89X51.H>
- unsigned char code table[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0x00};
- unsigned char temp,temp_old;
- unsigned char key;
- unsigned char i,j,k,m,s;
- void delay(int i)
- {
- for(m=i;m>0;m--)
- for(j=250;j>0;j--)
- for(k=10;k>0;k--);
- }
- void saomiao()
- {
- P3=0xff;
- P3_4=0;
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- for(i=50;i>0;i--)
- for(j=200;j>0;j--);
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- switch(temp)
- {
- case 0x0e:
- key=1;
- break;
- case 0x0d:
- key=2;
- break;
- case 0x0b:
- key=3;
- break;
- case 0x07:
- key=4;
- break;
- }
- temp=P3;
- temp=temp&0x0f;
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- }
- }
- }
- P3=0xff;
- P3_5=0;
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- for(i=50;i>0;i--)
- for(j=200;j>0;j--);
- temp=P3;
- temp=temp&0x0f;
- if(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- switch(temp)
- {
- case 0x0d:
- key=5;
- break;
- case 0x0b:
- key=6;
- break;
- case 0x07:
- key=7;
- break;
- }
- temp=P3;
- temp=temp&0x0f;
- while(temp!=0x0f)
- {
- temp=P3;
- temp=temp&0x0f;
- }
-
- }
- }
- }
- void main(void)
- {
- while(1)
- {
- saomiao();
- if(key==1)
- { P1=0;
- P2=0;
- saomiao();
- }
- if(key==2)
- {
- temp_old=key;
- for(s=0;s<8;s++)
- { P2=table[s];
- P1_4=0;
- delay(13);
- saomiao();
- if(key!=temp_old)
- {
- P1_4=1;
- break;
- }
- }
- }
- if(key==3)
- {
- temp_old=key;
- for(s=0;s<8;s++)
- { P2=table[s];
- P1_5=0;
- delay(5);
- saomiao();
- if(key!=temp_old)
- {
- P1_5=1;
- break;
- }
- }
- }
- if(key==4)
- {
- temp_old=key;
- for(s=0;s<8;s++)
- { P2=table[s];
- P1_6=0;
- delay(20);
- saomiao();
- if(key!=temp_old)
- {
- P1_6=1;
- break;
- }
-
- }
- }
- if(key==5)
- {
- temp_old=key;
- for(s=9;s<17;s++)
- { P2=table[s];
- P1_7=0;
- delay(13);
- saomiao();
- if(key!=temp_old)
- {
- P1_7=1;
- break;
- }
- }
- }
- if(key==6)
- {
- temp_old=key;
- for(s=9;s<17;s++)
- { P2=table[s];
- P1_5=0;
- delay(5);
- saomiao();
- if(key!=temp_old)
- {
- P1_5=1;
- break;
- }
- }
- }
- if(key==7)
- {
- temp_old=key;
- for(s=9;s<17;s++)
- { P2=table[s];
- P1_6=0;
- delay(20);
- saomiao();
- if(key!=temp_old)
- {
- P1_6=1;
- break;
- }
- }
- }
- }
- }
復(fù)制代碼
 |
-
-
步進電機驅(qū)動程序.docx
2018-1-8 19:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
333.66 KB, 下載次數(shù): 48, 下載積分: 黑幣 -5
步進電機驅(qū)動程序(51)
|