




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
四相步進電機全教程——蓋爾@袁〔4、21〕前段時間就有玩過步進電機了,但是后來因為硬盤壞了,資料全沒了,之后想再玩的時間都不知道該怎么弄了,這時候覺得假設當時有留點資料發到網上的話,那現在也就不會那么糾結了,所以,昨晚又再一次拿起那步進電機,再一次玩一下,大概把之前那些東西回想起來了,現在寫一份小教程〔之所以叫全教程,是因為看了這份資料之后,對應地也就大概能用起來,對步進電機也有一個大概的了解了〕,以共大家學習,希望高手拍磚!〔里面有些是直接引用網上的資料,如有原作者看到的話,我在這里跟他說聲謝謝,因為您寫得太好了!〕驅動電路我用的是L298N這款很經典的電機驅動芯片,這芯片可以驅動直流電機,步進電機等,功能相當強大,很好用,雖然貴了點〔下面再介紹一種比擬好的,價格比擬低的驅動電路,也相當好用〕,但是還是用了,畢竟是經典之作嘛!呵呵!電路如下:大家可以看到,上面這電機驅動芯片L298N有四個輸入〔IN1,IN2,IN3,IN4〕和四個輸出〔M1,M2〕,對了,就是對應單片機〔或者其它主控芯片,比方說M3,我用的就是這個〕的輸入控制端,然后這四個控制端通過L298N間接地控制了步進電機〔也就是圖里的M1,M2〕,因為步進電機轉動的時候需要比擬大的電流,單片機IO引腳沒法提供,只有通過這驅動芯片才能夠帶動起來!電路里面還有PWMA和PWMB,這是使能端,用于使能M1和M2是否被輸入控制的,高電平有效!一般我們假設需要控制的話,這個就接單片機的IO引腳上,假設不需要獨立控制的話那直接接高電平就行了!另外,大家可以看到電路里面還有一個5V的輸入,具體這個是做什么的我也不是很清楚,不過照給就是了,沒問題的!好,首先先把這電路焊出來,記得,因為L298N工作的時候電流比擬大,所以要求必需加上一個散熱片,這樣有利于保護電路不會因為過熱而燒了!這里有一個小知識跟大家說一下,焊電路最好是加上一個電源指示燈,這樣的好處多多,可以防止電源接反而完全不知!OK,這個方案介紹完了,下面介紹另一種本錢比擬低的驅動方案!假設手頭上有ULN2003的話,也可以用來當成驅動電路用,我們只要知道驅動電路的作用就是放大那個電流,那任何一種能夠放大電流的方法都可以拿過來用,包括你用三極管都行!下面提供一個三極管的驅動電路!至于ULN2003,具體電路我就不說了!很簡單的,看下芯片的PDF就知道了。對了,這里順便介紹一個找PDF比擬全的網站——ICPDF,當然IC37也很全!步進電機原理按照常理來說,步進電機接線要根據線的顏色來區分接線。但是不同公司生產的步進電機,線的顏色不一樣。特別是國外的步進電機。那么,步進電機接線應該用萬用表打表。步進電機內部構造如下列圖:通過上圖可知,A,~A是聯通的,B和~B是聯通。那么,A和~A是一組a,B和~B是一組b。不管是兩相四相,四相五線,四相六線步進電機。內部構造都是如此。至于究竟是四線,五線,還是六線。就要看A和~A之間,B和B~之間有沒有公共端com抽線。如果a組和b組各自有一個com端,那么該步進電機六線,如果a和b組的公共端連在一起,那么是5線的。所以,要弄清步進電機如何接線,只需把a組和b組分開。用萬用表打。四線:由于四線沒有com公共抽線,所以,a和b組是絕對絕緣的,不連通的。所以,用萬用表測,不連通的是一組。五線:由于五線中,a和b組的公共端是連接在一起的。用萬用表測,當發現有一根線和其他幾根線的電阻是相當的,那么,這根線就是公共com端。對于驅動五線步進電機,公共com端不連接也是可以驅動步進電機的。六線:a和b組的公共抽線com端是不連通的。同樣,用萬用表測電阻,發現其中一根線和其他兩根線阻止是一樣的,那么這根線是com端,另2根線就屬于一組。對于驅動四相六線步進電機,兩根公共com端不接先也可以驅動該步進電機的。通過上面的方法都可以測得不同線對應的接線,當然,也還有一些朋友不知道,那測出AA’和BB’之后,怎么分開哪根是A哪根是A’,哪根是B哪根是B’呢?之前我也有一樣的問題,相信初學步進電機的朋友也一樣,我這里有一看到一個帖,里面介紹了一種方法,不知道好不好用〔我這邊的步進電機就不行〕:拿到步進電機,根據以前看書對四相步進電機的了解,我對它進行了初步的測試,就是將5伏電源的正端接上最邊上兩根褐色〔指的是公共端,不同電機顏色不同〕的線,然后用5伏電源的地線分別和另外四根線〔紅、蘭、白、橙〕〔指的是剩下的控制線,不同電機顏色不同〕依次接觸,發現每接觸一下,步進電機便轉動一個角度,來回五次,電機剛好轉一圈,說明此步進電機的步進角度為360/(4×5)=18度。地線與四線接觸的順序相反,電機的轉向也相反。除了上面這種方法,現在還沒有看到有帖介紹如何區分這四條線的,當然,假設有朋友研究出來還請共享一下!謝謝!如果實在不行,最好是找下別人現有的程序,然后一個一個試!沒方法!驅動方法我們驅動步進電機的話有好幾種方法,個人覺得比擬簡單也比擬常用的還是下面這兩種,有四相四拍運行方式即AB-BC-CD-DA-AB,四相八拍運行方式即A-AB-B-BC-C-CD-D-DA-A.,什么是四相四拍,什么是四相八拍,這些字母代表什么意思,請往下看!上圖是表示剛剛步進電機的內部結構〔手工畫的不好看〕,沒有畫中線抽頭。中間那個表示電機轉子,左邊藍色的表示A線圈,上面紅色的表示B線圈,大家看到上面標志中還有一些是打括號的,表示什么呢?就是說這個接線是一開始講到的A’接線,跟剛剛講到的那個C字母表示的接線其實是同一根線!那現在我就用圖來表示解釋下什么是四相四拍,AB-BC-CD-DA-AB表示的是什么。AB-BC-CD-DA-AB中的出現的字母表示這根線對應加上高電平,其余的都是低電平。具體就是,在AB處于高電平,CD處于低電平,延時一小段時間;然后BC處于高電平,AD處于低電平,再延時一小段時間,如此下去CD高,AB低,延時,DA高,BC低,延時……那究竟為什么要這樣子呢?下面我用圖給大家解釋一下。第一:AB高,CD低,電流那么如下列圖黃色線所示方向流動,產生的磁場使得電機轉子順時針轉動90度,轉過90度之后就停在那里了;第二:BC高,AD低,電流如下列圖所示,同樣道理,電機轉子轉過90度;第三,CD高,AB低,如下列圖:第四,DA高,BC低,如下列圖:如此一循環之后,電機轉子就轉過了一周,如果這樣循環這樣一個動作的話,那電機就會轉起來了!現在大家應該明白了什么是四相四拍了吧!同理,四相八拍也是一樣的道理,這里就不多說了,大家應該明白!上面講述的是順時針轉動,那逆時針轉動的話該怎么弄了,相信明白上面原理的朋友自己都能夠畫出來,我這里就只是簡單地提供一下給大家做參考,時序為DA-CD-BC-AB!軟件局部:知道了硬件原理,軟件方面就簡單好辦了,只要按照上面說的對應地給上高電平低電平的,再來個延時就可以實現了。對于四相四拍的驅動方法,程序形式如下:While(1){IN1=1;IN2=1;IN3=0;IN4=0;Delay();IN1=0;IN2=1;IN3=1;IN4=0;Delay();IN1=0;IN2=0;IN3=1;IN4=1;Delay();IN1=1;IN2=0;IN3=0;IN4=1;Delay();}同樣,反向轉動的也能夠搞定,四相八拍的也一樣道理。那程序是不是就非常之簡單呢?當然不是,程序里面最難的要確定的就是——延時,這個延時的時間把握得好才能夠驅動起來,太長了不行,太短了也不行,那究竟是多少才適宜呢?這里我教大家一個方法,原理很簡單,就是用一個for循環來變換不同的延時時間,通過這樣來確定在哪個延時時間范圍之內比擬適宜,這樣來慢慢試:For(num=0;num<100;num++){For(time=0;time<100;time++) {IN1=1;IN2=1;IN3=0;IN4=0;Delay(num*1000);IN1=0;IN2=1;IN3=1;IN4=0;Delay(num*1000);IN1=0;IN2=0;IN3=1;IN4=1;Delay(num*1000);IN1=1;IN2=0;IN3=0;IN4=1;Delay(num*1000);}}程序里面,num是用來調整每次延時時長的,time是做為每次一個固定時長讓電機轉一定的時間,因為我們不可以讓電機一直變變變,而需要變一下轉幾圈看看合不適宜,就是這樣的道理了,通過這種方法大家可以大概知道電機適時多長時長比擬適宜,在一個適合的延時里電機才能夠轉動,不同的延時電機轉動速度不同。下面提供一些C51的程序代碼〔注:這些是在另一份資料找到的,非本人所寫,在這里感謝原作者的無私〕:C51程序代碼為:代碼一#include<AT89X51.h>staticunsignedintcount;staticunsignedintendcount;voiddelay();voidmain(void)
{
count=0;
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;
EA=1;
//允許CPU中斷
TMOD=0x11;
//設定時器0和1為16位模式1
ET0=1;
//定時器0中斷允許
TH0=0xFC;
TL0=0x18;
//設定時每隔1ms中斷一次
TR0=1;
//開始計數startrun:
P1_3=0;
P1_0=1;
delay();
P1_0=0;
P1_1=1;
delay();
P1_1=0;
P1_2=1;
delay();
P1_2=0;
P1_3=1;
delay();gotostartrun;
}//定時器0中斷處理voidtimeint(void)interrupt1
{
TH0=0xFC;
TL0=0x18;//設定時每隔1ms中斷一次
count++;
}voiddelay()
{
endcount=2;
count=0;do{}while(count<endcount);
}將上面的程序編譯,用ISP下載線下載至單片機運行,步進電機便轉動起來了,初步告捷!不過,上面的程序還只是實現了步進電機的初步控制,速度和方向的控制還不夠靈活,另外,由于沒有利用步進電機內線圈之間的“中間狀態〞,步進電機的步進角度為18度。所以,我將程序代碼改良了一下,如下:代碼二#include<AT89X51.h>staticunsignedintcount;staticintstep_index;voiddelay(unsignedintendcount);voidgorun(bitturn,unsignedintspeedlevel);voidmain(void)
{
count=0;
step_index=0;
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;
EA=1;
//允許CPU中斷
TMOD=0x11;//設定時器0和1為16位模式1
ET0=1;
//定時器0中斷允許
TH0=0xFE;
TL0=0x0C;
//設定時每隔0.5ms中斷一次
TR0=1;
//開始計數do{
gorun(1,60);
}while(1);}//定時器0中斷處理voidtimeint(void)interrupt1
{
TH0=0xFE;
TL0=0x0C;//設定時每隔0.5ms中斷一次
count++;
}voiddelay(unsignedintendcount)
{
count=0;do{}while(count<endcount);
}voidgorun(bitturn,unsignedintspeedlevel)
{switch(step_index)
{case0:
P1_0=1;
P1_1=0;
P1_2=0;
P1_3=0;break;case1:
P1_0=1;
P1_1=1;
P1_2=0;
P1_3=0;break;case2:
P1_0=0;
P1_1=1;
P1_2=0;
P1_3=0;break;case3:
P1_0=0;
P1_1=1;
P1_2=1;
P1_3=0;break;case4:
P1_0=0;
P1_1=0;
P1_2=1;
P1_3=0;break;case5:
P1_0=0;
P1_1=0;
P1_2=1;
P1_3=1;break;case6:
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=1;break;case7:
P1_0=1;
P1_1=0;
P1_2=0;
P1_3=1;
}
delay(speedlevel);if(turn==0)
{
step_index++;if(step_index>7)
step_index=0;
}else
{
step_index--;if(step_index<0)
step_index=7;
}
}改良的代碼能實現速度和方向的控制,而且,通過step_index靜態全局變量能“記住〞步進電機的步進位置,下次調用gorun〔〕函數時那么可直接從上次步進位置繼續轉動,從而實現精確步進;另外,由于利用了步進電機內線圈之間的“中間狀態〞,步進角度減小了一半,只為9度,低速運轉也相對穩定一些了。但是,在代碼二中,步進電機的運轉控制是在主函數中,如果程序還需執行其它任務,那么有可能使步進電機的運轉收到影響,另外還有其它方面的不便,總之不是很完美的控制。所以我又將代碼再次改良:代碼三#include<AT89X51.h>staticunsignedintcount;
//計數staticintstep_index;
//步進索引數,值為0-7staticbitturn;
//步進電機轉動方向staticbitstop_flag;
//步進電機停止標志staticintspeedlevel;//步進電機轉速參數,數值越大速度越慢,最小值為1,速度最快staticintspcount;
//步進電機轉速參數計數voiddelay(unsignedintendcount);
//延時函數,延時為endcount*0.5毫秒voidgorun();
//步進電機控制步進函數voidmain(void)
{
count=0;
step_index=0;
spcount=0;
stop_flag=0;
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;
EA=1;
//允許CPU中斷
TMOD=0x11;//設定時器0和1為16位模式1
ET0=1;
//定時器0中斷允許
TH0=0xFE;
TL0=0x0C;
//設定時每隔0.5ms中斷一次
TR0=1;
//開始計數
turn=0;
speedlevel=2;
delay(10000);
speedlevel=1;do{
speedlevel=2;
delay(10000);
speedlevel=1;
delay(10000);
stop_flag=1;
delay(10000);
stop_flag=0;
}while(1);}//定時器0中斷處理
voidtimeint(void)interrupt1
{
TH0=0xFE;
TL0=0x0C;//設定時每隔0.5ms中斷一次
count++;
spcount--;if(spcount<=0)
{
spcount=speedlevel;
gorun();
}}voiddelay(unsignedintendcount)
{
count=0;do{}while(count<endcount);
}voidgorun()
{if(stop_flag==1)
{
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;return;
}switch(step_index)
{case0://0
P1_0=1;
P1_1=0;
P1_2=0;
P1_3=0;break;case1://0、1
P1_0=1;
P1_1=1;
P1_2=0;
P1_3=0;break;case2://1
P1_0=0;
P1_1=1;
P1_2=0;
P1_3=0;break;case3://1、2
P1_0=0;
P1_1=1;
P1_2=1;
P1_3=0;break;case4:
//2
P1_0=0;
P1_1=0;
P1_2=1;
P1_3=0;break;case5://2、3
P1_0=0;
P1_1=0;
P1_2=1;
P1_3=1;break;case6://3
P1_0=0;
P1_1=0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國家庭美容保健儀器項目創業計劃書
- 中國急救室項目創業計劃書
- 中國克霉唑涂膜項目創業計劃書
- 中國經皮黃疸測定儀項目創業計劃書
- 中國計算機軟件項目創業計劃書
- 中國關系型數據庫項目創業計劃書
- 2025建筑工程施工管理合同協議書范本
- 中國電子止鼾器項目創業計劃書
- 中國AI代碼生成項目創業計劃書
- 吉林飼料項目創業計劃書
- 電力需求的實時監測與調度系統
- 大學畢業論文摘要怎么寫
- 甘肅蘭州歷年中考語文文言文閱讀試題36篇(含答案與翻譯)(截至2024年)
- 古建筑物修復項目申請立項可行性研究報告
- 《中醫養生保健服務(非醫療)技術操作規范-砭術》-公示稿
- 職業學院學生轉專業申請表
- 2025年廣東紅海灣發電有限公司招聘筆試參考題庫含答案解析
- 《烘焙生產SOP標準》課件
- 大學語文知到智慧樹章節測試課后答案2024年秋南昌大學
- 2025第二季度思想匯報范文
- 《大數據技術對社會發展的影響研究》5200字(論文)
評論
0/150
提交評論