① 我有一51單片機控制步進電機調速程序,轉速太慢,22轉/分鍾,提到100轉/分鍾怎麼編程
脈沖間隔只靠delay(Y)來控制,把Y的值變為原來的1/5即可。
② 如何用單片機控制步進電機步數
如何用單片機控制步進電機
步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
一、步進電機常識
常見的步進電機分三種:永磁式(PM),反應式(VR)和混合式(HB),永磁式步進一般為兩相,轉矩和體積較小,步進角一般為7.5度或15度;反應式步進一般為三相,可實現大轉矩輸出,步進角一般為1.5度,但雜訊和振動都很大。在歐美等發達國家80年代已被淘汰;混合式步進是指混合了永磁式和反應式的優點。它又分為兩相和五相:兩相步進角一般為1.8度而五相步進角一般為0.72度。這種步進電機的應用最為廣泛。
二、永磁式步進電機的控制
下面以電子愛好者業余製作中常用的永磁式步進電機為例,來介紹如何用單片機控制步進電機。圖1是35BY型永磁步進電機的外形圖,圖2是該電機的接線圖,從圖中可以看出,電機共有四組線圈,四組線圈的一個端點連在一起引出,這樣一共有5根引出線。要使用步進電機轉動,只要輪流給各引出端通電即可。將COM端標識為C,只要AC、C、BC、C,輪流加電就能驅動步進電機運轉,加電的方式可以有多種,如果將COM端接正電源,那麼只要用開關元件(如三極體),將A、B、輪流接地。列出了該電機的一些典型參數:表135BY48S03型步機電機參數型號步距角相數電壓電流電阻最大靜轉距定位轉距轉動慣量35BY48S03 7.5 4 12 0.26 47 180 65 2.5 有了這些參數,不難設計出控制電路,因其工作電壓為12V,最大電流為0.26A,因此用一塊開路輸出達林頓驅動器(ULN2003)來作為驅動,通過P1.4~P1.7來控制各線圈的接通與切斷。開機時,P1.4~P1.7均為高電平,依次將P1.4~P1.7切換為低電平即可驅動步進電機運行,注意在切換之前將前一個輸出引腳變為高電平。如果要改變電機的轉動速度只要改變兩次接通之間的時間,而要改變電機的轉動方向,只要改變各線圈接通的順序。
③ 51單片機可以直接驅動步進電機么
51單片機不能直接驅動步進電機,因為單片機的輸出的是數字信號,不是驅動電流,所以需要外加驅動,舵機是可以通過單片機直接控制的PWM控制。
51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中
④ 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控制步進電機啟動的三極體,電路圖就那麼簡單!