⑴ 如何使用單片機精確控制步進電機
如何用單片機控制步進電機
步進電機是機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到准確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。
一、步進電機常識
常見的步進電機分三種:永磁式(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 單片機控制六線4 相步進電機系統, 由單片機產生驅動脈沖信號, 控制步進電機以一定的轉速向某一方向產生一定的轉動角度。同時能夠利用單片機實現電機的正、反轉及速度控制,並能在數碼管上顯示出相應的速度。
本文中給出了該系統設計的硬體電路,軟體設計,人機交互等。並對各個功能模塊進行了詳細的說明。主要內容包括以下幾個方面:
單片機控制步進電機的一般原理。
電機驅動及控制的實現。
控制系統整體設計以及模塊劃分說明。
原理圖。
代碼。
關鍵詞:單片機;步進電機;系統;驅動
Abstract
Many Instrial control equipment have a highly requirement in displacement and angle with control accuracy, the most motor can't carry out .but the step motor can carry out the displacement and angle that you enactmented in accuracy. This design mainly used SCM to control step motor system.The step motor is formed six lines and four phasic.Through SCM generate the drive pulse signal.Control stepper motor through a certain speed in a direction to get a certain degree of rotation angle.
At the same time, It can use SCM to realization of the motor is , reverse and speed control. and showed the speed in the digital tube.
In this paper, given the design of the system hardware circuit,software design, human-computer interaction and so on.and it given the details description of each functional mole.the main contents include the following:
(1) The general principles of signal_chip controlling step motor.
(2) The realization of motor driving and controlling
(3) Control system overall design and description mole division
(4) Schematic Diagram
(5) Code
Key Words:SCM; stepper motor; system; drive
目錄
引言 4
1 單片機控制步進電機的一般原理 4
1.1 步進電機 4
1.1.1 步進電機介紹 4
1.1.2 步進電機分類 5
1.1.3 技術指標 5
1.1.4 步進電機工作原理 5
1.2 單片機 7
2 步進電機驅動實現 8
2.1簡介 8
2.2驅動選擇 8
3 系統硬體設計 9
3. 1 單片機控制電機 9
3.2 鍵盤 9
3.3 顯示部分 10
程序流程圖 11
總結 12
致 謝 13
參考文獻 13
附錄 13
C代碼 13
引言
目前,在工業控制生產以及儀器上應用十分廣泛。通常都要對一些機械部件平移和轉動,對移動的位移和角度控制要求較高,一般的電機很難實現對位置和角度的精確控制,在一些智能化要求較高的場合,用模擬晶元控制器及信號發生器來控制有一定局限性。而用單片機控制步進電機可以改善性能,步進電機能實現精確的角度和轉數,具有良好的步進特性,最適合數字控制。在工控設備中得到了廣泛的應用。而單片機具有晶元體積小,兼容性強,低電壓地,低功耗等特點,使單片機成為驅動步進電機的最佳空盒子單元。所以單片機控制步進電機系統控制精度高,運行穩定,得以廣泛運用。
1 單片機控制步進電機的一般原理
1.1 步進電機
1.1.1 步進電機介紹
步進電機是將電脈沖信號轉變為角位移或線位移的開環控制元件。在非超載的情況下,電機的轉速、停止的位置只取決於脈沖信號的頻率和脈沖數,而不受負載變化的影響,即給電機加一個脈沖信號,電機則轉過一個步距角。這一線性關系的存在,加上步進電機只有周期性的誤差而無累積誤差等特點。使得在速度、位置等控制領域用步進電機來控制變的非常的簡單。雖然步進電機已被廣泛地應用,但步進電機並不能象普通的直流電機、交流電機在常規下使用。它必須由雙環形脈沖信號、功率驅動電路等組成控制系統方可使用。因此用好步進電機卻非易事,它涉及到機械、電機、電子及計算機等許多專業知識。
1.1.2 步進電機分類
永磁式(PM)。一般為二相,轉矩和體積都很小,步距角一般為7.5或15°
反應式(VR)。一般為三相,實現大轉矩輸出,步距角為1.5°。
混合式(HB)。兼具永磁式和反應式的優點,分二相和五相,二相步距角為1.8°五相步距角為0.72°。
1.1.3 技術指標
靜態指標
相數
步距角
拍數
定位轉矩
保持轉矩
步進電機動態指標
步距角精度
失步
失調角
最大空載啟動頻率
最大空載運行頻率
運行頻距特性
電機共振點
1.1.4 步進電機工作原理
分析(步進電機展開圖)
以反應式步進電機為例,其典型結構圖如圖1所示。這是一個四相步進電機,當相控制繞組接通脈沖電流時,在磁拉力作用下使相的定、轉子對齊,相鄰的B 相和D 相的定、轉子小齒錯開。若換成B 相通電,則磁拉力使B 相定、轉子小齒對齊(轉過) ,而與B 相相鄰的C 相和A 相的定、轉子小齒又錯開,即步進電機轉過一個步距角。若按A →B →C →D →A ⋯規律循環順序通電,則步進電機按一定方向轉動。若改變通電順序為A →D →C →B →A ,則電機反向轉動。這種控制方式稱為四相單四拍。若按AB →BC →CD →DA →AB或A →AB →B →BC →C →CD →D →DA →A 順序通電則稱為四相雙拍或四相單、雙八拍。無論採用哪種控制方式,在一個通電循環內,步進電機的轉角恆為一個齒距角。所以,可以通過改步進電機通電循環次序來改變轉動方向,可以通過改變通電頻率來改變其角頻率。運用單片機的輸出功能,通過編程實現輸出四個信號分別給步進電機的四相A、B、C、D ,並通過輸出時信號的循環次序,來設定步進電機的轉動方向及輸出信號的頻率以便設定步進電機的轉動頻率。
圖1 反應式步進電機結構圖
實現原理
採用單片機產生A、B、C、D 的四相信號,當採用單片機進行控制時,需要在單片機和步進電機中間設隔離電路以使強弱電分離。由於步進電機的驅動電流相對較大,可增設放大電路來提供步進電機的工作電流。系統電路由五部分組成,即單片機、隔離、放大、電源及步進電機。
1.2 單片機
功能特性描述
AT89S52是一種低功耗、高性能CMOS8位微控制器,
具有8K 在系統可編程Flash 存儲器。使用Atmel 公
司高密度非易失性存儲器技術製造,與工業80C51
產品指令和引腳完全兼容。片上Flash允許程序存儲
器在系統可編程,亦適於常規編程器。在單晶元上,
擁有靈巧的8 位CPU 和在系統可編程Flash,使得
AT89S52為眾多嵌入式控制應用系統提供高靈活、超
有效的解決方案。AT89S52具有以下標准功能:8k字
節Flash,256位元組RAM,32 位I/O 口線,看門狗定時
器,2 個數據指針,三個16 位定時器/計數器,一個6
向量2級中斷結構,全雙工串列口,片內晶振及時鍾電
路。另外,AT89S52 可降至0Hz 靜態邏輯操作,支持
2種軟體可選擇節電模式。空閑模式下,CPU停止工作,
允許RAM、定時器/計數器、串口、中斷繼續工作。掉
電保護方式下,RAM內容被保存,振盪器被凍結,單
片機一切工作停止,直到下一個中斷或硬體復位為止。
2 步進電機驅動實現
2.1簡介
步進電機在單單僅給予電壓時,電機是不會動作的,必須由脈沖產生器提供位置(脈波數)、速度的脈沖信號指令,以及驅動器驅動電流流過電機內部線圈、依順序切換激磁相序的方式才能夠讓電機運 轉。所以欲使步進電機動作的必要系統組成有:
(1)脈沖產生器:給予角度(位置移動量)、動作速度及運轉方向之脈沖信號的電機驅動指令。
(2)步進驅動器:依控制器所投入的脈沖信號指令,提供電流來驅動步進電機動作。
(3)步進電機:提供轉矩動力輸出來帶動負載。所以步進電機系統構成簡單,不需要速度感應器、位置感測器, 即能依照脈沖產生器所輸入的脈沖來做到速度及位置的控制。
2.2驅動選擇
步進電機可以選用專用的電機驅動模塊,也可以自己構建驅動電路。一般有以下幾種選擇:
專用驅動模塊,如L298,FT5754等,這類驅動介面簡單,這類可以驅動步進電機,直流電機等。
達林頓驅動器ULN2803,這個晶元可以一次驅動八線步進電機。
自己構建,通過三極體,74als04,等系列元件構成。但這樣系統可靠性會降低,會另外給系統帶來誤差。
3 系統硬體設計
1 單片機控制電機
如圖3
說明:
這個部分為單片機控制步進電機部分,80s52單片機通過達林頓驅動器ULN2803來驅動步進電機,80s52的P1.0-P1.4發送控制信號給驅動器,然後驅動器的四根線把信號傳遞給電機,使電機實現正反轉等。電機部分接12V直流電源。
3.2 鍵盤
如圖4
說明:
本系統中採用了四個按鍵,分別與80s52的四個引腳相連,分別為LCDEN,RS,WR,RD;分別實現的功能是電機加速,減速,正反轉。鍵盤一旦按下則表示向單片機發送了有效信號,單片機就相應的進行調節。對於鍵盤的鍵按下的時候分為幾個步驟,當鍵盤按下的時候,接通電路,鍵盤掃描檢測低電平,但檢測到低電平之後不能夠判斷鍵是否被按下,因為抖動可能引起這個變化,所有大概延時5~10ms之後再進行檢測。如果再次檢測到低電平之後說明鍵被按下。這個過程就是所說的消除抖動。
3.3 顯示部分
如圖5
說明:
對於顯示部分,因為這個系統只是顯示轉速,所以採用了LED共陽極數碼管。
並且用了74HC573鎖存器,74HC573鎖存器輸出電流大,介面電路簡單。本系統採用了兩個74HC573鎖存器,分別為段選和位選。段選為數碼管的顯示數字,位選為選中相應的數碼管。
程序流程圖
總結
通過本次的課程論文,讓我真實的感受到一個完整的系統設計過程。這次的的論文從開始的整體布局,排版,到內容中的系統設計直到最後完成。每個流程下來,都帶給了我很多的新東西,特別在設計完系統之後做硬體部分中,先是用protel99se畫圖,好多圖在庫中找不到,找不到就自己畫,然後封裝,封裝的時候還要用游標卡紙對買來的元件進行精確的測量,然後才能在封裝的過程中保證精度。最後做完圖之後還要布線,布線完成後再發到廠家去做。事實上這個過程我用買好的空板做的,因為元件不多。所以就買了相應的元件直接再PCB板上焊接好的。在焊接的過程中也會感受到很多東西,因為很多需要注意的。不過這個過程多多嘗試就會有進步的。焊接完後就是代碼調試階段。最後就完成了這個小型系統的設計。
致 謝
在此,感謝我的老師以及周圍的同學。本次的論文得益於同學們的幫助。最後還要感謝我的父母,是他們一直在背後支持著我。
謹以此文獻給他們!
參考文獻
[1] 張永楓,王靜霞,楊宏利. 單片機應用實訓教程. 西安電子科技大學出版社,2005.
[2] 郭天祥. 51單片機C語言教程. 電子工業出版社 2008
附錄
C代碼
單片機控制步進電機
實現功能:
定時器中斷:定時時間設置為30秒,首先給的初值每次中斷為5ms,經過20次中斷為1秒,半分鍾三十秒則要中斷600次,所有到達六百次後就把計數n中的值讀取到數碼管中顯示出來。
鍵盤檢測:進行速度控制的時候按下相應的鍵則會對應的進行速度調節。
數碼管顯示:
驅動部分:
#include <reg52.h>
#define uchar unsigned char
sbit la=P2^6;
sbit wela=P2^7;
sbit jia_key=P3^6;
sbit jian_key=P3^7;
sbit zf_key=P3^5;
sbit stop_key=P3^4;
bit flag=0;
uchar num1,n;
uchar num=0,show_num=2,maichong=4,table_begin=0;
uchar code table1[]={0x01,0x02,0x04,0x08,0x08,0x02,0x01};
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
// 延時部分
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=110;k>0;k--);
}
// 顯示部分
void display()
{
la=0;
P0=table[show_num];
la=1;
la=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[0];
la=1;
la=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
}
// 鍵盤檢測部分
void key()
{
if(jia_key==0)
{
delay(5);
if(jia_key==0)
{
num++;
if(num==4)
num=3;
while(jia_key==0)
}
}
if(jian_key==0)
{
delay(5);
if(jian_key==0)
{
if(num!=0)
num--;
else
num==0;
while(jian_key==0);
}
}
if(zf_key==0)
{
delay(5);
if(zf_key==0)
{
flag=~flag;
while(zf_key==0);
}
}
if(stop_key==0)
{
delay(4);
if(stop_key==0)
{
show_num=0;
maichong=0;
}
while(stop_key==0)
}
}
// 鍵盤檢測結果
void dispose()
{
switch(num)
{
case 0:
maichong=5;
break;
case 1:
maichong=4;
break;
case 2:
maichong=3;
break;
case 3:
maichong=2;
break;
}
if(flag==0)
{
table_begin=0;
}
else
table_begin=4;
}
// 數碼管驅動部分
void qudong()
{
uchar i,j;
for(j=0+table_begin;j<4+table_begin;j++)
{
P1=table[j];
for(i=0;i<maichong;i++)
{
dispaly();
}
}
}
// 主函數部分
void main()
{
while(1)
{ init();
key();
dispose();
qudong();
n++;
}
}
// 定時器中斷初始化
void init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1; // 開總中斷
ET0=1;// 開定時器0中斷
TR0=1;// 啟動定時器0
}
// 定時器中斷調用
void T0_time() intterrupt 1 // T0中斷
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==600)
{
show_num=n;
num1=0;
n=0;
}
}
⑶ 單片機控制步進電機問題
如果相序沒有錯的話,應該是驅動頻率太高或太低了,超過了電機的允許的驅動頻率。
一般步進電機,驅動頻率在30pps-100pps之間,具體可以看你自己的步進電機資料。
---------------------
你先要確定程序沒有問題。最好通過示波器直接看步進電機驅動引腳上的電壓時序是不是符合你的預期。
其次,判斷步進電機是否正常除了看它是否轉動之外還要看是否提供正常的轉動力矩。在某些特別的驅動頻率下電機也有可能轉動,但是輸出力矩不正常,帶動不了實際負載。
如果正常輸出情況下,你說的邏輯是正常的:定時短了,應該快才對。否則原因肯定是你實際輸入到步進電機的時序與預期不符。
⑷ 如何通過單片機遙控步進電機和調速
單片機本身沒有遙控功能,可以擴展外部硬體的方式來實現功能,看你需要的是那一種遙控方式,可以擴展紅外線,無線射頻,WIFI,GPRS,等,然後這些模塊是可以通過串口或是IIC的方式和單片機連接,寫一段接收程序,就可以改變步進電機的速度快慢了,
⑸ 如何用單片機驅動馬達
一、第一步是將電機連接到HC6800em3單板注意使用P1端的電纜排列單片機連接到電機控制晶元的輸入端(4Pin埠),以確保P1.0-P1.3正常。
⑹ 如何使用單片機控制步進電機
先看步進電機控制電機轉動原理,把時序搞清楚,單片機控制驅動按照時序置管腳就OK
1、本程序用於測試4相步進電機常規驅動
2、需要用跳帽或者杜邦線把信號輸出端和對應的步進電機信號輸入端連接起來
3、速度不可以調節的過快,不然就沒有力矩轉動了
4、按s4(設置成獨立按鍵模式)可以控制正反轉
------------------------------------------------*/
#include <reg52.h>
bit Flag;//定義正反轉標志位
unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正轉表格
unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反轉表格
/******************************************************************/
/* 延時函數 */
/******************************************************************/
void Delay(unsigned int i)//延時
{
while(--i);
}
/******************************************************************/
/* 主函數 */
/******************************************************************/
main()
{
unsigned char i;
EX1=1; //外部中斷0開
IT1=1; //邊沿觸發
EA=1; //全局中斷開
while(!Flag)
{
P0=0x71;//顯示 F 標示正轉
for(i=0;i<4;i++) //4相
{
P1=F_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
while(Flag)
{
P0=0x7C;//顯示 b 標示反轉
for(i=0;i<4;i++) //4相
{
P1=B_Rotation[i]; //輸出對應的相
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
}
/******************************************************************/
/* 中斷入口函數 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
Delay(300);
Flag=!Flag; //s3按下觸發一次,標志位取反
}
⑺ 哥,步進電機驅動器怎麼用單片機控制啊
步進電機驅動器一般接受的控制信號為:
1、cw+ccw,即正轉脈沖加反轉脈沖
2、pulse+dir,即脈沖加方向
一般驅動器都可以兼容兩種方式,即通過DIP開關選擇採用哪種方式。
如此,你用單片機控制起來就很方便了,用兩個IO口發控制信號就OK了,哪種方式都可以,脈沖的頻率大小決定電機的速度快慢。
當然,你也要注意驅動器需要信號的電壓大小,如果是5V,直接IO相連就行,如果需要12V,那麼需要加個光耦就行了。
⑻ 單片機控制步進電機的原理
步進電機控制原理
步進電機是數字控制電機,它將脈沖信號轉變成角位移,即給一個脈沖信號,步進電機就轉動一個角度,因此非常適合於單片機控制。步進電機可分為反應式步進電機(簡稱VR)、永磁式步進電機(簡稱PM)和混合式步進電機(簡稱HB)。
步進電機區別於其他控制電機的最大特點是,它是通過輸入脈沖信號來進行控制的,即電機的總轉動角度由輸入脈沖數決定,而電機的轉速由脈沖信號頻率決定。
步進電機的驅動電路根據控制信號工作,控制信號由單片機產生。其基本原理作用如下:
(1)控制換相順序
通電換相這一過程稱為脈沖分配。例如:三相步進電機的三拍工作方式,其各相通電順序為A-B-C-D,通電控制脈沖必須嚴格按照這一順序分別控制A,B,C,D相的通斷。
(2)控制步進電機的轉向
如果給定工作方式正序換相通電,步進電機正轉,如果按反序通電換相,則電機就反轉。
(3)控制步進電機的速度
如果給步進電機發一個控制脈沖,它就轉一步,再發一個脈沖,它會再轉一步。兩個脈沖的間隔越短,步進電機就轉得越快。調整單片機發出的脈沖頻率,就可以對步進電機進行調速。
步進電機是一種可以把脈沖激勵的變化轉換成精確轉子位置增量運動的執行機構,它可將脈沖信號變成電機相應角位移的機械量,從而通過控制脈沖的個數來控制電機轉動的時間,並通過改變脈沖的頻率控制電機運轉的速度。