A. 用C51單片機,編寫脈沖控制步進電機的驅動器
是什麼步進電機啊,有沒有驅動器,如果有的話,就直接給脈沖就好了。
B. 步進電機的驅動電路與51單片機的連接電路圖
51單片機的引腳隨處都可以查到,P0、P1、P2隨便選擇一個作為脈沖發送口,在程序開始前定義好就可,驅動器一般都會分配脈沖,看你用的是哪一種,有的驅動器有電流可調檔,也就是相電流細分。
後來隨著Flash rom技術的發展,8004單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。
很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
(2)51單片機驅動20步進電機擴展閱讀:
使用方法:
1.將模擬器插入需模擬的用戶板的CPU插座中,模擬器由用戶板供電;
2.將模擬器的串列電纜和PC機接好,打開用戶板電源;
3.通過KeilC 的IDE開發模擬環境UV2 下載用戶程序進行模擬、調試。
硬體說明:
1、使用用戶板的晶振:模擬器晶振旁有兩組跳線用來切換內部晶振和用戶板晶振,當兩個短路塊位於模擬器晶振一側時,默認使用模擬板上的晶振(11.0592MHz), 當兩個短路塊位於電容一側時,使用用戶板的晶振。
2、為便於調試帶看門狗的用戶板,模擬器的復位端未與用戶板復位端相連;故模擬器的復位按鈕只復位模擬器,不復位用戶板;若要復位用戶板,請使用用戶板復位按鈕。
C. 51單片機是怎樣驅動步進電機
你好!!
如果你的步進電機高過 5 v,那你步進電機和單片機必須採用雙電源分開供電;
步進電機,有專用的驅動晶元,你可以根據需要選擇;
單片機和步進電機之間,因為工作電壓不同,建議採用光耦做隔離控制!
D. 51單片機控制步進電機正反轉原理
單片機控制步進電機正反轉原理,五一單片機的控制步進電機的正反轉是是根據你的需要空控制
E. 跪求 51單片機控制步進電機
//兩相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)//兩個參數代表步進量和轉速
{
//步進節拍A-AD-D-DB-B-BC-C-CA
while(1){
if(!Speed)//判斷步進量走完沒?以下都是,每走一步,判斷一次
break;
lc=1;
la=0; //a
mDelay(road);
if(!Speed--)
break;
ld=0; //ad
mDelay(road);
if(!Speed--)
break;
la=1; //d
mDelay(road);
if(!Speed--)
break;
lb=0; //db
mDelay(road);
if(!Speed--)
break;
ld=1; //b
mDelay(road);
if(!Speed--)
break;
lc=0; //bc
mDelay(road);
if(!Speed--)
break;
lb=1; //c
mDelay(road);
if(!Speed--)
break;
la=0; //ca
mDelay(road);
Speed--;
}
P3=P3|0x0f;//將四個腳輸出置高
}
void mDelay(unsigned int DelayTime) //延時函數
{
unsigned char j=0;
while(DelayTime--){
for(j=0;j<10;j++){}
}
}
unsigned char key()//鍵盤掃描是否有鍵按下,這里只掃描一列四個鍵,其它不用
{
uchar KeyV;
P0=0xfe;
KeyV=P0;
if(KeyV==0xfe)//只掃描一列
return(0);
mDelay(100);
KeyV=P0;
if(KeyV==0xfe)
return(0);
else
return(KeyV);
}
請將p2口改為p0口
F. 51單片機控制步進電機
這個簡單,讓我來教樓主怎麼玩
首先我說下思路:
我們採用P1口來採集ADC0832的8位數據,用P0.0口控制步進電機動作,利用T0的時間中斷來採集P1口的ADC0832數據並做出比較後設置步進電機啟動標志位start=1;並設置他的運行頻率,當然,樓主沒說怎麼比較,我這就只是寫了個簡單的例子,一通百通,希望對你有幫助
下面是程序:
#include <reg51.h> //選用晶振11.0592MHz
unsigned int m=0,n=0; //設置循環的周期
unsigned char start=0,t0temp=0;
sbit Y0=P0^0; //控制步進電機的管腳
delay()
{
unsigned char i,j;
for(i=m;i>0;i--)
for(j=n;i>0;j--);
}
main()
{
//自檢測T0時間設置
ET0=1;
TMOD|=0x01;
TH0=0XFC; //1ms中斷掃描
TL0=0X66;
IT0=1; //下降沿觸發
TR0=0; //關閉掃描
/***********************初始化完畢***********************/
//****************I/O口程序
while(1)
{
while(start)
{
delay();
Y0=~Y0;
}
}
}
void counter1(void) interrupt 1 //T0計時器中斷
{
if(t0temp%4)t0temp++; //4ms時間才採集一次P0口的數據
else
{
t0temp++;
//這里就寫你怎麼做對比的程序,我舉個例子
if(P1>150)
{start=1;n=1000;m=0;} //入錯採用12M晶振,那這時候控制步進電機的輸出周期就是1ms一次,也就是1000HZ
else {start=0;n=0;m=0;}
}
}
//PS:我在輸出頻率中用了兩個全局變數m,n可以延遲很長時間,樓主可以根據需要選用,一般16位的,選用一個就可以了,另一個放棄
OK,至於電路圖,我軟體沒有ADC0832的封裝,不然就發給你了,但想來樓主完全就沒必要擔心,ADC0832的8位數據接到P1口,P0.0控制步進電機啟動的三極體,電路圖就那麼簡單!
G. 51單片機控制步進電機
用單片機同時是不可能的,當然,時間間隔小到可以接受,跑幾個任務,那也可以視為同時。要實現真正意義上的同時,用FPGA/CPLD是可以完成的。
話說回來,也許你的同時並不是說一定嚴格地同時工作,只是說一個單片機去控制四個步進電機,那就好辦多了。
一個步進電機,比如4相5線那種,4個IO口可控制一個,四個步進電機就要16個,驅動晶元用ULN2003即可。
當然,如果你的IO口不允許使用這么多,那也可以通過串轉並的方法,擴展IO口,比如用74HC595,三根IO口控制它,它可以級聯,三根線可以控制很多片。一片為8位,兩片就為16位,3片為24位 …… 只要加些三極體驅動那三根控制線,三個IO口可控制一串級聯的74HC595,得到的擴展IO口,那是相當多的。我用三個IO口控制過5片74HC595,三個IO口一下子就擴展成了40個IO口!!!