版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章步進(jìn)電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
3.1引言3.2步進(jìn)電機(jī)驅(qū)動(dòng)器設(shè)計(jì)任務(wù)書(shū)3.3設(shè)計(jì)方案3.4硬件電路設(shè)計(jì)3.5軟件設(shè)計(jì)3.6程序清單3.1引言步進(jìn)電機(jī)是把電脈沖信號(hào)轉(zhuǎn)換為機(jī)械位移信號(hào)的執(zhí)行元件,其在控制領(lǐng)域內(nèi)的應(yīng)用十分廣泛。由于步進(jìn)電機(jī)可以通過(guò)控制脈沖來(lái)精確控制電機(jī)轉(zhuǎn)過(guò)的角度,具有較高的運(yùn)行精度,可以實(shí)現(xiàn)開(kāi)環(huán)控制,因而在構(gòu)成控制系統(tǒng)時(shí)實(shí)現(xiàn)較簡(jiǎn)單。步進(jìn)電機(jī)要實(shí)現(xiàn)運(yùn)行控制必須通過(guò)相應(yīng)的驅(qū)動(dòng)器來(lái)實(shí)現(xiàn),步進(jìn)電機(jī)種類(lèi)繁多,驅(qū)動(dòng)器的種類(lèi)也多種多樣。近年來(lái)兩相混合式步進(jìn)電機(jī)因其結(jié)構(gòu)簡(jiǎn)單、控制方便而得到了廣泛的應(yīng)用,本章將針對(duì)兩相混合式步進(jìn)電機(jī)驅(qū)動(dòng)器的研究、設(shè)計(jì)和制作進(jìn)行介紹。3.2步進(jìn)電機(jī)驅(qū)動(dòng)器設(shè)計(jì)任務(wù)書(shū)
1.設(shè)計(jì)任務(wù)設(shè)計(jì)并制作兩相混合式步進(jìn)電機(jī)驅(qū)動(dòng)器,要求該驅(qū)動(dòng)器能夠接收外部控制信號(hào)以實(shí)現(xiàn)電機(jī)的運(yùn)行控制功能,主要包括步進(jìn)驅(qū)動(dòng)功能、方向控制功能、脫機(jī)運(yùn)行功能及限流保護(hù)功能等。
2.設(shè)計(jì)要求
1)驅(qū)動(dòng)器控制端子設(shè)置驅(qū)動(dòng)器設(shè)置4個(gè)控制輸入信號(hào)端子,分別為CLK、DIR、FREE和GND,各個(gè)信號(hào)的含義為:CLK信號(hào)為步進(jìn)電機(jī)的驅(qū)動(dòng)控制脈沖信號(hào),驅(qū)動(dòng)器每接收到一個(gè)脈沖就運(yùn)行一步;DIR為電機(jī)運(yùn)行方向控制信號(hào),DIR=0代表一個(gè)運(yùn)行方向,DIR=1代表另一個(gè)運(yùn)行方向;FREE信號(hào)為脫機(jī)運(yùn)行信號(hào),如果FREE信號(hào)為高電平,則步進(jìn)電機(jī)上電后即鎖定,當(dāng)有CLK脈沖信號(hào)時(shí)電機(jī)運(yùn)行,如果FREE信號(hào)為低電平,則步進(jìn)電機(jī)上電后處于松開(kāi)狀態(tài),此時(shí)方便手動(dòng)調(diào)節(jié)電機(jī)所驅(qū)動(dòng)的目標(biāo)設(shè)備位置,并且驅(qū)動(dòng)器不對(duì)CLK信號(hào)做出反應(yīng)。
2)控制輸入信號(hào)的要求輸入信號(hào)GND是驅(qū)動(dòng)器與外接控制器之間的共地信號(hào),其他輸入信號(hào)應(yīng)該符合TTL電平標(biāo)準(zhǔn)。CLK信號(hào)脈沖的有效沿為下跳沿,且要求負(fù)跳沿后的低電平脈沖寬度大于5μs。
3)方向控制
DIR信號(hào)控制方向變化時(shí)必須保證電機(jī)已經(jīng)停止,并且在下一個(gè)CLK脈沖到來(lái)之前保持穩(wěn)定。
4)電流保護(hù)功能步進(jìn)電機(jī)處于鎖定狀態(tài)時(shí),繞組中的電流較大,電機(jī)發(fā)熱嚴(yán)重,因此要求驅(qū)動(dòng)器能夠在電機(jī)鎖定時(shí)限制電流在要求的范圍之內(nèi),用戶可以根據(jù)所使用的電機(jī)設(shè)定鎖定狀態(tài)的最高電流上限為0.8A、1.2A、1.6A、2.0A四種情況。
5)驅(qū)動(dòng)器輸入電源驅(qū)動(dòng)器要求外加電源,包括邏輯部分電源和繞組供電電源,驅(qū)動(dòng)器邏輯部分輸入電壓為(1±10%)5V,電機(jī)繞組驅(qū)動(dòng)輸入電壓范圍為12~48V。
6)適用電機(jī)驅(qū)動(dòng)器主要用于驅(qū)動(dòng)42系列、繞組電流小于2A的各種兩相混合式步進(jìn)電機(jī)。3.3設(shè)計(jì)方案步進(jìn)電機(jī)驅(qū)動(dòng)器的設(shè)計(jì)方案考慮的核心問(wèn)題是驅(qū)動(dòng)器功率驅(qū)動(dòng)電路的設(shè)計(jì)與實(shí)現(xiàn)。對(duì)于兩相混合式步進(jìn)電機(jī)而言,需要兩個(gè)H橋電路來(lái)實(shí)現(xiàn)兩相繞組的電流控制:一種方案是采用晶體管或者功率MOS管來(lái)實(shí)現(xiàn),一個(gè)H橋電路需要4個(gè)功率管,兩個(gè)H橋需要8個(gè)功率管,因此采用此種方案驅(qū)動(dòng)電路的組成較復(fù)雜,實(shí)現(xiàn)起來(lái)電路規(guī)模較大,通常適合于設(shè)計(jì)較大功率的步進(jìn)電機(jī)驅(qū)動(dòng)器;另一種設(shè)計(jì)方案為采用集成驅(qū)動(dòng)橋電路來(lái)實(shí)現(xiàn),現(xiàn)在常用的功率橋可大致分為兩大類(lèi),一類(lèi)為內(nèi)部采用功率晶體管結(jié)構(gòu)(達(dá)林頓晶體管),另一類(lèi)為內(nèi)部采用功率MOS管。功率晶體管驅(qū)動(dòng)橋由于管子工作時(shí)管壓降較大,損耗功率較大,發(fā)熱嚴(yán)重,效率較低,給電路的散熱設(shè)計(jì)帶來(lái)不便,因此近些年來(lái)MOS集成驅(qū)動(dòng)橋越來(lái)越普遍,特別是采用了DMOS工藝的驅(qū)動(dòng)橋以其優(yōu)良的特性受到設(shè)計(jì)者的青睞,本次設(shè)計(jì)就采用了意法公司的DMOS驅(qū)動(dòng)芯片L6205。步進(jìn)電機(jī)驅(qū)動(dòng)器主處理器的選擇是設(shè)計(jì)方案中要考慮的另一個(gè)主要問(wèn)題,應(yīng)該說(shuō)步進(jìn)電機(jī)驅(qū)動(dòng)器的控制任務(wù)并不復(fù)雜,對(duì)處理器的要求也不高,普通的8位單片機(jī)都可以完成相應(yīng)的控制任務(wù),但是考慮到控制器附加資源的多少、開(kāi)發(fā)手段的方便程度、硬件成本等因素,這里采用了宏晶科技公司的STC12C5410AD單片機(jī)。該單片機(jī)是高速的51單片機(jī),其指令的執(zhí)行速度比同頻率的普通51單片機(jī)快得多,普通51單片機(jī)需要12個(gè)晶振周期才能完成的一條指令,該STC單片機(jī)最快僅需要1個(gè)晶振周期就可以完成。根據(jù)設(shè)計(jì)要求,該驅(qū)動(dòng)器應(yīng)該具有電流保護(hù)功能,用戶可以根據(jù)自己所使用的電機(jī)來(lái)設(shè)定電機(jī)鎖定時(shí)繞組中的最高電流,為此必須在設(shè)計(jì)方案中考慮電機(jī)繞組電流的檢測(cè)問(wèn)題。這里采用的方案為:采用檢流電阻采樣繞組電流,該電流經(jīng)過(guò)整理放大由STC12C5410AD進(jìn)行轉(zhuǎn)換,再利用PWM調(diào)制的方法保證電機(jī)鎖定時(shí)繞組中的電流不會(huì)超過(guò)最高限定值。圖3-1是該設(shè)計(jì)方案的原理框圖。圖3-1步進(jìn)電機(jī)驅(qū)動(dòng)器原理框圖3.4硬件電路設(shè)計(jì)兩相混合式步進(jìn)電機(jī)驅(qū)動(dòng)器的硬件電路組成并不復(fù)雜,這里分兩部分進(jìn)行介紹。3.4.1主處理器及其外圍電路設(shè)計(jì)此次設(shè)計(jì)中主處理器選擇了STC12C5410AD,該單片機(jī)指令與MCS-51系列單片機(jī)相兼容,但其指令執(zhí)行速度卻遠(yuǎn)遠(yuǎn)高于MCS-51單片機(jī)。STC12C5410系列單片機(jī)是單時(shí)鐘/機(jī)器周期(1T)的兼容8051內(nèi)核單片機(jī),是高速/低功耗的新一代8051單片機(jī),具有全新的流水線/精簡(jiǎn)指令集結(jié)構(gòu),且內(nèi)部集成MAX810專(zhuān)用復(fù)位電路。該系列單片機(jī)不但在指令的執(zhí)行速度上取得優(yōu)勢(shì),其內(nèi)部的附加資源也比傳統(tǒng)的MCS-51豐富了許多,其主要特點(diǎn)如下:
增強(qiáng)型1T流水線/精簡(jiǎn)指令集結(jié)構(gòu)8051CPU。
工作電壓:5.5~3.4V(5V單片機(jī))/3.8~2.0V(3V單片機(jī))。
工作頻率范圍:0~35MHz,相當(dāng)于普通8051的0~420MHz。實(shí)際工作頻率可達(dá)48MHz。
用戶應(yīng)用程序空間:12KB/10KB/8KB/6KB/4KB/2KB。
片上集成512BRAM。
通用I/O口(27/23個(gè))可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉模式(兼容8051模式)、推挽/強(qiáng)上拉模式、僅為輸入/高阻模式、開(kāi)漏模式,每個(gè)I/O口的驅(qū)動(dòng)能力均可達(dá)到20mA,但整個(gè)芯片最大不得超過(guò)55mA。
ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無(wú)需專(zhuān)用編程器,即可通過(guò)串口(P3.0/P3.1)直接下載用戶程序,編程速度較快。
具有E2PROM功能。
具有看門(mén)狗及內(nèi)部集成MAX810專(zhuān)用復(fù)位電路(當(dāng)外部晶振頻率低于20MHz時(shí),可省去外部復(fù)位電路)。
時(shí)鐘源可選外部高精度晶體或外部時(shí)鐘信號(hào),還可以使用內(nèi)部RC振蕩器提供系統(tǒng)工作時(shí)鐘,用戶在下載用戶程序時(shí),可選擇使用內(nèi)部RC振蕩器或外部晶體振蕩器(常溫下內(nèi)部RC振蕩器的頻率為5.2~6.8MHz)。
具有2個(gè)16位定時(shí)器/計(jì)數(shù)器,PWM(4路)/PCA(可編程計(jì)數(shù)器陣列)。
具有2路外部中斷,可設(shè)置為下降沿中斷或低電平觸發(fā)中斷,PowerDown模式可由外部中斷低電平觸發(fā)中斷方式喚醒。
具有共8路10位精度ADC。
通用異步串行口(UART)、SPI同步通信口、主模式/從模式。
工作溫度范圍:0~75℃/-40~+85℃。
封裝:PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20。圖3-2是驅(qū)動(dòng)器CPU及其外圍電路,該系統(tǒng)采用了外部晶振,晶振與單片機(jī)的連接與MCS-51單片機(jī)完全相同。系統(tǒng)的復(fù)位電路采用了普通的按鍵復(fù)位電路。PRO接口是用來(lái)下載程序的,當(dāng)程序要下載到單片機(jī)內(nèi)部時(shí)用下載線連接計(jì)算機(jī)與該接口,即可很快地完成程序下載固化,無(wú)需專(zhuān)用的編程器,開(kāi)發(fā)方便,節(jié)省成本。在程序下載時(shí),占用單片機(jī)的串口為P3.0與P3.1,但是這并不影響串行口的正常使用,程序下載完成后P3.0與P3.1還可以當(dāng)普通串行口使用,并不對(duì)串行口的使用造成影響。圖3-2CPU及其外圍電路
CTL接口是步進(jìn)電機(jī)驅(qū)動(dòng)器接收外部控制信號(hào)的接口,該接口共有四根信號(hào)線,分別如下:
CLK:步進(jìn)脈沖輸入信號(hào)。該信號(hào)每接收到一個(gè)脈沖信號(hào)(FREE信號(hào)無(wú)效),步進(jìn)電機(jī)正轉(zhuǎn)或反轉(zhuǎn)一步。
DIR:電機(jī)運(yùn)行方向控制信號(hào)。如DIR=0代表電機(jī)正轉(zhuǎn),則DIR=1代表電機(jī)反轉(zhuǎn)。當(dāng)改變電機(jī)運(yùn)行方向時(shí),必須確保電機(jī)已經(jīng)停止才能進(jìn)行,否則如果電機(jī)正在運(yùn)行,突然改變電機(jī)運(yùn)行方向則很可能造成運(yùn)行的失步。驅(qū)動(dòng)器在CLK信號(hào)的負(fù)跳沿采樣DIR信號(hào),因此改變方向時(shí)必須保證DIR信號(hào)在CLK脈沖的負(fù)跳沿之前保持穩(wěn)定。
FREE:電機(jī)脫機(jī)運(yùn)行控制信號(hào)。驅(qū)動(dòng)器運(yùn)行后一直采樣FREE信號(hào),當(dāng)FREE=1時(shí),驅(qū)動(dòng)器接收到有效的CLK信號(hào)電機(jī)即運(yùn)行,無(wú)有效CLK信號(hào)則電機(jī)停止運(yùn)行,且保持鎖定狀態(tài);當(dāng)FREE=0時(shí),驅(qū)動(dòng)器不接收CLK信號(hào),且電機(jī)繞組始終處于開(kāi)路狀態(tài),電機(jī)無(wú)鎖定力矩而處于自由狀態(tài)。該控制信號(hào)所對(duì)應(yīng)的功能主要是考慮在有些情況下需要人為手動(dòng)去調(diào)節(jié)設(shè)備位置而設(shè)置的。
GND:共地信號(hào)。很顯然,這里驅(qū)動(dòng)器與外部的控制器之間是通過(guò)直接耦合的方式來(lái)傳輸信號(hào)的,因此外接的控制信號(hào)必須符合5VTTL信號(hào)標(biāo)準(zhǔn),否則可能不能正常工作,須注意外界強(qiáng)信號(hào)的隔離,以免造成驅(qū)動(dòng)器信號(hào)接口損壞。圖3-2中的兩只發(fā)光二極管用來(lái)指示驅(qū)動(dòng)器的運(yùn)行狀態(tài)。
4位的撥碼開(kāi)關(guān)有兩個(gè)目的,其一是用來(lái)設(shè)定步進(jìn)電機(jī)每個(gè)繞組在鎖定狀態(tài)下的最大電流,其二是用于驅(qū)動(dòng)器的自檢。3.4.2功率驅(qū)動(dòng)電路設(shè)計(jì)兩相混合式步進(jìn)電機(jī)的驅(qū)動(dòng)本質(zhì)上就是通過(guò)功率驅(qū)動(dòng)橋來(lái)控制流過(guò)步進(jìn)電機(jī)繞組的電流,使其按照一定的規(guī)律變化,從而產(chǎn)生驅(qū)動(dòng)轉(zhuǎn)子轉(zhuǎn)動(dòng)的力矩使電機(jī)轉(zhuǎn)動(dòng)。由于兩相混合式步進(jìn)電機(jī)繞組中的電流是雙向的,因此一個(gè)繞組就需要一個(gè)H橋來(lái)控制其電壓與電流,兩個(gè)繞組就需要兩個(gè)H橋來(lái)控制,這樣才能實(shí)現(xiàn)兩相混合式步進(jìn)電機(jī)的正常驅(qū)動(dòng)?,F(xiàn)在構(gòu)成H橋的方法較多,可以采用功率晶體管、功率MOS管等分立器件來(lái)實(shí)現(xiàn),也可以采用集成的功率驅(qū)動(dòng)橋來(lái)實(shí)現(xiàn)。目前集成驅(qū)動(dòng)橋的方法由于具有電路結(jié)構(gòu)簡(jiǎn)單、控制方便等優(yōu)點(diǎn)而得到了廣泛應(yīng)用,特別是DMOS型的功率驅(qū)動(dòng)橋,因具有導(dǎo)通電阻小、損耗功率低等優(yōu)點(diǎn)而被廣泛應(yīng)用于電機(jī)控制領(lǐng)域。L6205即為DMOS類(lèi)型的典型器件,它是專(zhuān)門(mén)為電機(jī)控制而設(shè)計(jì)的雙H橋功率驅(qū)動(dòng)芯片。圖3-3為L(zhǎng)6205的內(nèi)部結(jié)構(gòu)。該芯片的內(nèi)部有兩個(gè)H橋,ENA、IN1A和IN2A是A橋的輸入控制信號(hào),OUT1A和OUT2A是A橋的輸出。同樣,ENB、IN1B、IN2B、OUT1B、OUT2B組成B橋的輸入和輸出。VSA和VSB為電機(jī)繞組提供工作電源,SENSEA和SENSEB用于連接電源的負(fù)極,也可以在該引腳連接功率檢流電阻,用于對(duì)繞組的電流進(jìn)行檢測(cè)。為了驅(qū)動(dòng)橋A和橋B的上橋臂功率,MOS管需要較高的控制電壓,L6205的內(nèi)部集成了一個(gè)電源泵,在VBOOT和VCP引腳的外部連接必要器件之后就可以構(gòu)成一個(gè)完整的泵電源,從而提供兩個(gè)橋的上橋臂控制電壓。圖3-3L6205的內(nèi)部結(jié)構(gòu)
L6205內(nèi)部的控制邏輯接收外部的控制信號(hào),產(chǎn)生直接控制H橋?qū)顟B(tài)的驅(qū)動(dòng)信號(hào)。每一個(gè)橋都有一個(gè)過(guò)流檢測(cè)模塊,當(dāng)繞組中的電流超過(guò)過(guò)流觸發(fā)電流5.6A時(shí),過(guò)流檢測(cè)電路輸出控制信號(hào)以關(guān)閉對(duì)應(yīng)的H橋,H橋關(guān)閉時(shí)間的長(zhǎng)短取決于EN引腳外接定時(shí)元件的取值。過(guò)熱保護(hù)模塊檢測(cè)芯片工作時(shí)的溫度,當(dāng)溫度過(guò)高時(shí)該模塊觸發(fā)控制H橋斷開(kāi),保護(hù)芯片不至于損壞。表3-1是L6205控制功能真值表。表3-1L6205控制功能真值表圖3-4是由L6205構(gòu)成的功率驅(qū)動(dòng)電路。ENA和ENB引腳連接的100kΩ電阻和5.6nF電容用于當(dāng)過(guò)流或者過(guò)熱情況發(fā)生時(shí)設(shè)定H橋關(guān)斷的時(shí)間為400μs。VCP和VBOOT引腳連接的元件和L6205內(nèi)部的泵電源電路組成完整的泵電源電路。所有的邏輯信號(hào)由單片機(jī)控制,STEP_M接口用于連接步進(jìn)電機(jī),連接于SENSEA和SENSEB的檢流電阻用于檢測(cè)繞組中的電流。圖3-5為電機(jī)繞組電流檢測(cè)電路。該電路對(duì)由功率檢流電阻檢測(cè)出的電流信號(hào)進(jìn)行濾波和放大,產(chǎn)生的輸出信號(hào)SA送給單片機(jī)進(jìn)行D/A轉(zhuǎn)換,從而檢測(cè)流過(guò)繞組中的電流大小。這里要特別說(shuō)明的一點(diǎn)是,該檢測(cè)電路主要適用于當(dāng)步進(jìn)電機(jī)停止,進(jìn)入鎖定狀態(tài)時(shí)繞組中的電流檢測(cè),并不用于電機(jī)運(yùn)行過(guò)程中的電流檢測(cè)與控制。兩相繞組分別設(shè)置有一個(gè)電流檢測(cè)電路。圖3-4功率驅(qū)動(dòng)電路圖3-5繞組電流檢測(cè)電路3.5軟件設(shè)計(jì)3.5.1系統(tǒng)程序結(jié)構(gòu)系統(tǒng)的程序結(jié)構(gòu)如圖3-6所示。系統(tǒng)上電之后先進(jìn)行必要的初始化操作,然后讀取撥碼開(kāi)關(guān)的狀態(tài),撥碼開(kāi)關(guān)的低兩位用來(lái)設(shè)置控制器的運(yùn)行模式,用戶可以在不接外部控制信號(hào)的情況下對(duì)驅(qū)動(dòng)器進(jìn)行測(cè)試,可以控制電機(jī)正轉(zhuǎn)連續(xù)運(yùn)行、反轉(zhuǎn)連續(xù)運(yùn)行及正反轉(zhuǎn)測(cè)試運(yùn)行。如果撥碼開(kāi)關(guān)設(shè)置為11B狀態(tài),則電機(jī)進(jìn)入脈沖觸發(fā)運(yùn)行模式,在進(jìn)行完必要的初始化準(zhǔn)備之后,驅(qū)動(dòng)器即可以正常接收外部信號(hào),并在驅(qū)動(dòng)信號(hào)的控制下運(yùn)行。如果電機(jī)松脫控制信號(hào)FREE=0,則電機(jī)的繞阻處于開(kāi)路狀態(tài),此時(shí)CLK端的控制信號(hào)不起作用,可以手工轉(zhuǎn)動(dòng)電機(jī);如果FREE=1,則電機(jī)在沒(méi)有驅(qū)動(dòng)信號(hào)的情況下處于鎖定狀態(tài),當(dāng)每次接收到一個(gè)CLK信號(hào)時(shí),電機(jī)根據(jù)DIR信號(hào)正轉(zhuǎn)或反轉(zhuǎn)一步。圖3-6程序結(jié)構(gòu)框圖3.5.2子程序及中斷服務(wù)程序設(shè)計(jì)
1.步進(jìn)電機(jī)驅(qū)動(dòng)函數(shù)兩相混合式步進(jìn)電機(jī)驅(qū)動(dòng)采用4拍驅(qū)動(dòng)模式,驅(qū)動(dòng)的相序關(guān)系為:,這里A、B表示電機(jī)繞組加正向的驅(qū)動(dòng)電壓,、則表示繞組中加反向的電壓。如果要控制電機(jī)正轉(zhuǎn),按照該相序關(guān)系控制繞組的驅(qū)動(dòng)電壓變化即可;如果要控制電機(jī)反轉(zhuǎn),則繞組上的電壓相序應(yīng)該正好相反。為了實(shí)現(xiàn)步進(jìn)電機(jī)的驅(qū)動(dòng),這里設(shè)計(jì)了相應(yīng)的驅(qū)動(dòng)子函數(shù)用于相序的控制。該函數(shù)如下:
//步進(jìn)電機(jī)驅(qū)動(dòng)子函數(shù)
voidonestep(void)
{
switch(step)
{
case0:{PA1=0;PA2=1;PB1=0;PB2=1;}break;
case1:{PA1=0;PA2=1;PB1=1;PB2=0;}break;
case2:{PA1=1;PA2=0;PB1=1;PB2=0;}break;
case3:{PA1=1;PA2=0;PB1=0;PB2=1;}break;
default:;
}
}該函數(shù)每次被調(diào)用時(shí),根據(jù)step變量的值控制電機(jī)兩相繞組所加的驅(qū)動(dòng)電壓的正負(fù),如果電機(jī)正轉(zhuǎn),step的值會(huì)從0增加到3,增加到3后又會(huì)回到0,這樣循環(huán),從而使電機(jī)正轉(zhuǎn);如果電機(jī)反轉(zhuǎn),則step值的變化規(guī)律與正轉(zhuǎn)正好相反。step變量值的變化是由外部函數(shù)控制的。
2.測(cè)試運(yùn)行程序當(dāng)設(shè)置電機(jī)處于測(cè)試運(yùn)行模式時(shí),程序即進(jìn)入相應(yīng)的死循環(huán)。電機(jī)正/反轉(zhuǎn)運(yùn)行測(cè)試,則程序控制電機(jī)繞組的電壓也按照正/反轉(zhuǎn)相序變化,并且一直循環(huán)。正/反轉(zhuǎn)運(yùn)行測(cè)試時(shí)程序控制電機(jī)正轉(zhuǎn)一圈,然后再反轉(zhuǎn)一圈,一直循環(huán)下去。
3.外中斷INT0服務(wù)函數(shù)
INT0中斷接收的是外部驅(qū)動(dòng)脈沖CLK信號(hào),當(dāng)CLK信號(hào)觸發(fā)INT0中斷時(shí),INT0的中斷服務(wù)函數(shù)就置位外部驅(qū)動(dòng)脈沖標(biāo)志FLAG,然后中斷返回。在主程序中會(huì)不斷檢測(cè)FLAG標(biāo)志,一旦FLAG標(biāo)志置位并且FREE信號(hào)為高電平,則step變量加1(正轉(zhuǎn))或減1(反轉(zhuǎn)),然后調(diào)用電機(jī)驅(qū)動(dòng)子函數(shù)onestep(),電機(jī)正轉(zhuǎn)或反轉(zhuǎn)一步。
4.其他函數(shù)
A/D轉(zhuǎn)換操作函數(shù)包括A/D轉(zhuǎn)換的初始化操作函數(shù)及中斷服務(wù)函數(shù),這些函數(shù)的作用是檢測(cè)繞組中的電流。
PWM操作的目的是調(diào)節(jié)繞組中的電流,在電機(jī)鎖定時(shí)間超過(guò)設(shè)定時(shí)間時(shí)PWM操作將被觸發(fā),通過(guò)A/D轉(zhuǎn)換檢測(cè)繞組中的電流,把檢測(cè)到的電流與設(shè)定電流進(jìn)行比較,調(diào)整PWM寄存器,從而使電機(jī)繞組中的電流在設(shè)定值范圍之內(nèi)。3.6程序清單
//*************************************
//頭文件:stepm.h
//*************************************
#defineucharunsignedchar
#defineuintunsignedint
sbitPA1=P2^4; /*電機(jī)控制端口定義*/
sbitPA2=P2^5;
sbitPB1=P2^6;
sbitPB2=P2^7;
sbitENA=P3^7;
sbitENB=P3^5;
sbitST1=P2^0; /*狀態(tài)端口定義*/sbitST2=P2^1;sbitST3=P1^2;sbitST4=P1^3;/*外部控制端口定義*/sbitCLK=P3^2;sbitDIR=P3^3;sbitFREE=P3^4;/*AD端口定義*/sbitSA=P1^0;sbitSB=P1^1;/*指示燈定義*/sbitLED_R=P1^7;sbitLED_G=P1^6;sbitEADC=0xAD;sfrCLK_DIV =0xC7;sfrP2M0 =0x95;sfrP2M1 =0x96;sfrP1M0 =0x91;sfrP1M1 =0x92;sfrADC_CON =0xC5;sfrADC_DATA =0xC6;sfrAUXR =0x8E;//mydefinition/*sfrCCON =0xD8;sfrCMOD =0xD9;sfrCCAPM0 =0xDA;sfrCCAPM1 =0xDB;sfrCCAPM2 =0xDC;sfrCCAPM3 =0xDD;sfrCCAPM4 =0xDE;sfrCL =0xE9;sfrCCAP0L =0xEA;sfrCCAP1L =0xEB;sfrCCAP2L =0xEC;sfrCCAP3L =0xED;sfrCCAP4L =0xEE;sfrCH =0xF9;sfrCCAP0H =0xFA;sfrCCAP1H =0xFB;sfrCCAP2H =0xFC;sfrCCAP3H =0xFD;sfrCCAP4H =0xFE;*/sfrIPH=0xB7; //中斷優(yōu)先級(jí)高位寄存器sbitEPCA_LVD=IE^6; //PCA中斷和LVD(低壓檢測(cè))中斷共享的總中斷控制位sfrCH=0xF9; //PCA計(jì)數(shù)器高8位sfrCL=0xE9; //PCA計(jì)數(shù)器低8位//;------------------------sfrCCON=0xD8; //PCA控制寄存器sbitCCF0=CCON^0; //PCA模塊0中斷標(biāo)志,由硬件置位,必須由軟件清0sbitCCF1=CCON^1; //PCA模塊1中斷標(biāo)志,由硬件置位,必須由軟件清0sbitCCF2=CCON^2; //PCA模塊2中斷標(biāo)志,由硬件置位,必須由軟件清0sbitCCF3=CCON^3; //PCA模塊3中斷標(biāo)志,由硬件置位,必須由軟件清0sbitCR=CCON^6; //1:允許PCA計(jì)數(shù)器計(jì)數(shù),必須由軟件清0sbitCF=CCON^7; //PCA計(jì)數(shù)器溢出(CH、CL由FFFFH變?yōu)?000H)標(biāo)志,//PCA計(jì)數(shù)器溢出后由硬件置位,必須由軟件清0//------------------------sfrCMOD=0xD9; //PCA工作模式寄存器/*CMOD.7CIDL:idle狀態(tài)時(shí)PCA計(jì)數(shù)器是否繼續(xù)計(jì)數(shù),0表示繼續(xù)計(jì)數(shù),1表示停止計(jì)數(shù)。CMOD.2CPS1:PCA計(jì)數(shù)器計(jì)數(shù)脈沖源選擇位1。CMOD.1CPS0:PCA計(jì)數(shù)器計(jì)數(shù)脈沖源選擇位0。
CPS1CPS000外部晶體頻率/12。
01外部晶體頻率/2。
10Timer0溢出脈沖,Timer0還可通過(guò)AUXR寄存器設(shè)置成工作在12T或1T模式。
11從ECI/P3.4腳輸入的外部時(shí)鐘。
CMOD.0ECF:PCA計(jì)數(shù)器溢出中斷允許位,1表示允許CF(CCON.7)產(chǎn)生中斷*///------------------------sfrCCAP0H=0xFA;//PCA模塊0的捕捉/比較寄存器高8位sfrCCAP1H=0xFB;//PCA模塊1的捕捉/比較寄存器高8位sfrCCAP2H=0xFC;//PCA模塊2的捕捉/比較寄存器高8位sfrCCAP3H=0xFD;//PCA模塊3的捕捉/比較寄存器高8位sfrCCAP0L=0xEA;//PCA模塊0的捕捉/比較寄存器低8位sfrCCAP1L=0xEB;//PCA模塊1的捕捉/比較寄存器低8位sfrCCAP2L=0xEC;//PCA模塊2的捕捉/比較寄存器低8位sfrCCAP3L=0xED;//PCA模塊3的捕捉/比較寄存器低8位//------------------------sfrPCA_PWM0=0xF2;//PCA模塊0PWM寄存器sfrPCA_PWM1=0xF3;//PCA模塊1PWM寄存器sfrPCA_PWM2=0xF4;//PCA模塊2PWM寄存器sfrPCA_PWM3=0xF5;//PCA模塊3PWM寄存器/*PCA_PWMn:76543210------EPCnHEPCnLB7~B2:保留。B1(EPCnH):在PWM模式下,與CCAPnH組成9位數(shù)。B0(EPCnL):在PWM模式下,與CCAPnL組成9位數(shù)*///------------------------sfrCCAPM0=0xDA;//PCA模塊0的工作模式寄存器sfrCCAPM1=0xDB;//PCA模塊1的工作模式寄存器sfrCCAPM2=0xDC;//PCA模塊2的工作模式寄存器sfrCCAPM3=0xDD;//PCA模塊3的工作模式寄存器sfrCCAPM4=0xDE;//PCA模塊4的工作模式寄存器sfrCCAPM5=0xDF;//PCA模塊5的工作模式寄存器/*CCAPMn:76543210-ECOMnCAPPnCAPNnMATnTOGnPWMnECCFnECOMn=1:允許比較功能。CAPPn=1:允許上升沿觸發(fā)捕捉功能。CAPNn=1:允許下降沿觸發(fā)捕捉功能。MATn=1:當(dāng)匹配情況發(fā)生時(shí),允許CCON中的CCFn置位。TOGn=1:當(dāng)匹配情況發(fā)生時(shí),CEXn將翻轉(zhuǎn)。PWMn=1:將CEXn設(shè)置為PWM輸出。ECCFn=1:允許CCON中的CCFn觸發(fā)中斷。ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn000000000H未啟用任何功能。
x10000x21H16位CEXn上升沿觸發(fā)捕捉功能。
x01000x11H16位CEXn下降沿觸發(fā)捕捉功能。
x11000x31H16位CEXn邊沿(上、下沿)觸發(fā)捕捉功能。
100100x49H16位軟件定時(shí)器。
100110x4DH16位高速脈沖輸出。
100001042H8位PWM*///------------------------------------------------------------------------------#defineON0#defineOFF1#defineADC_CH00xE0;#defineADC_CH10xE1;#defineADC_CH20xE2;#defineADC_CH30xE3;#defineADC_CH40xE4;#defineADC_CH50xE5;#defineADC_CH60xE6;#defineADC_CH70xE7;#definecurent_max10x10;#definecurent_max20x30;#definecurent_max30x50;#definecurent_max40x70;bitFlag,Direction;bitcurent_limit;ucharstep,adc_value,curent_set;uintadc_av;ucharstop_count,pwm;//*************************************//子程序定義文件:stepm_sub.h//*************************************//定時(shí)計(jì)數(shù)器T0初始化函數(shù)voidtimer0_init(void){unsignedchara;a=TMOD;a=a|0x02; //定時(shí)器0工作方式2TMOD=a;//TH0=0xDF;//TL0=0xDF; //定時(shí)時(shí)間19.8μs,ft0=50.5kHzTH0=0xF0;TL0=0xF0; //定時(shí)時(shí)間9.8μs,ft0=100kHzTR0=1;ET0=0;//EA=1;}//定時(shí)計(jì)數(shù)器T1初始化函數(shù)voidtimer1_init(void){unsignedchara;a=TMOD;a=a|0x10; //定時(shí)器1工作方式1TMOD=a;TH1=0xBE;TL1=0xE5; //定時(shí)時(shí)間10msTR1=1;ET1=1;EA=1;}//定時(shí)器1中斷函數(shù)voidtimer1(void)interrupt3using1{TH1=0xBE;TL1=0xE5; //定時(shí)時(shí)間10msstop_count=stop_count+1;if(stop_count>=10){//啟動(dòng)電流限制
/*stop_count=100;PA1=0;PA2=0;PB1=0;PB2=0;LED_R=0;LED_G=1;*/CCAPM0=0x42;//設(shè)置PCA模塊0工作在PWM方式下
CCAPM3=0x42;//設(shè)置PCA模塊3工作在PWM方式下
CR=1;stop_count=10;curent_limit=1;LED_R=0;LED_G=1;}if(stop_count<10){//停止電流限制
/*LED_R=1;LED_G=1;*/CR=0;CCAPM0=0x00;CCAPM3=0x00;ENA=1;ENB=1;curent_limit=0;LED_R=1;LED_G=0;}}//INT0初始化函數(shù)voidint0_init(void){IT0=1;PX0=1;EX0=1;EA=1;}//INT0中斷服務(wù)函數(shù)voidint0(void)interrupt0using2{Flag=1;stop_count=0x00;//if(FREE==1){ENA=1;ENB=1;}}//ADC電源開(kāi)啟函數(shù)voidadc_pow_on(void){ADC_CON=ADC_CON|0x80;}//ADC輸入引腳開(kāi)路設(shè)置函數(shù)voidset_adc_pin(void){P1M0=P1M0|0x03; //設(shè)置P1.0、P1.1為輸入模式
P1M1=P1M0|0x03;}//設(shè)置P1.0為ADC通道函數(shù)voidset_adc_ch0(void){ADC_CON=ADC_CH0;}//設(shè)置P1.1為ADC通道函數(shù)voidset_adc_ch1(void){ADC_CON=ADC_CH1;}//voidadc_start(void){ADC_DATA=0x00;ADC_CON=ADC_CON|0x08;}voidadc_int_init(void){IP=0x00;IPH=0x00;AUXR=0x10;
EADC=1;EA=1;}voidadc_int(void)interrupt5using3{ADC_CON=ADC_CON&0xe7;adc_value=ADC_DATA;
ADC_CON=ADC_CH0;
ADC_DATA=0x00;ADC_CON=ADC_CON|0x08;
if(curent_limit==1){if(adc_value>=curent_set){pwm=pwm+1;if(pwm>0xf7)pwm=0xf7;CCAP0L=pwm;CCAP0H=pwm;CCAP3L=pwm;CCAP3H=pwm;}}else{pwm=0x80;}}//*************PWM部分函數(shù)子程序****************//pwm初始化子程序voidpwm_init(void){//CMOD=0x00; //設(shè)置PCA定時(shí)器時(shí)鐘信號(hào)為fosc/12CMOD=0x02; //設(shè)置PCA定時(shí)器時(shí)鐘信號(hào)為fosc/2//CMOD=0x04; //設(shè)置PCA定時(shí)器時(shí)鐘信號(hào)為1/T0//CMOD=0x00; //設(shè)置PCA定時(shí)器時(shí)鐘信號(hào)為P3.4CL=0x00;CH=0x00;pwm=0x80;CCAP0L=0x80;
CCAP0H=0x80;CCAPM0=0x00; //禁止pwm0
//CCAPM0=0x42; //設(shè)置PCA模塊0工作在PWM方式下
CCAP3L=0x80;CCAP3H=0x80;CCAPM3=0X00; //禁止pwm3//CCAPM3=0x42; //設(shè)置PCA模塊3工作在PWM方式下
//CR=1;}/*//**************************************************//串行口調(diào)試程序//**************************************************//串行口初始化函數(shù)voidrs232_init(void){uchara;
TI=0;RI=0;a=TMOD;a=a|0x20;TMOD=a; //設(shè)置T1為波特率發(fā)生器
SCON=0x50; //設(shè)置串行口工作于8位模式下,波特率可變
TH1=0xEA; //20MHz晶振,波特率為2400b/s
TL1=0xEA;TR1=1;ES=1;EA=1;}//串行口中斷服務(wù)函數(shù)voidrs232_int(void)interrupt4using3{if(RI==1){RI=0;}if(TI==1)
{TI=0;//ADC_CON=ADC_CH0;//ADC_DATA=0x00;//ADC_CON=ADC_CON|0x08;SBUF=(uchar)adc_av;//SBUF=0x55;}}*///*************************************//主程序文件:file.c//步進(jìn)電機(jī)驅(qū)動(dòng)器程序//hadaqu2009-03-07//*************************************#include"reg51.h"#include"intrins.h"#include"stepm.h"#include"stepm_sub.h"voidDelay(unsignedintn){unsignedinti;for(i=0;i<n;i++)
{_nop_();
_nop_();
_nop_();
_nop_();}}//步進(jìn)電機(jī)驅(qū)動(dòng)子函數(shù)voidonestep(void){switch(step){case0:{PA1=0;PA2=1;PB1=0;PB2=1;}break;case1:{PA1=0;PA2=1;PB1=1;PB2=0;}break;case2:{PA1=1;PA2=0;PB1=1;PB2=0;}break;case3:{PA1=1;PA2=0;PB1=0;PB2=1;}break;default:;}}//主函數(shù)voidmain(){unsignedchark,status;unsignedintcount;CLK_DIV=0x00;P2M0=0x0;P2M1=0x40; //P2口高4位推挽輸出,低4位作為一般I/O口//上電指示,閃燈一次
LED_R=0;LED_G=0;for(k=0;k<10;k++){Delay(10000);}LED_R=1;LED_G=1;//電機(jī)端口初始化,電機(jī)鎖定
ENA=1;ENB=1;onestep();Delay(10000);Delay(10000);status=P2;status=status&0x03;//正轉(zhuǎn)測(cè)試運(yùn)行模式if(status==0x00){
LED_R=0; //正轉(zhuǎn)紅燈亮
do{
step=step+1;if(step==0x04)step=0x00;onestep();
Delay(1000);
}while(1);}//反轉(zhuǎn)測(cè)試運(yùn)行模式
if(status==0x01){LED_G=0;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 西華師范大學(xué)《商務(wù)文案設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 西安理工大學(xué)《跨文化商務(wù)交際導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年高鐵站區(qū)建筑勞務(wù)清包合同
- 2024版條碼設(shè)備維護(hù)保養(yǎng)協(xié)議版
- 2024房地產(chǎn)買(mǎi)賣(mài)合同(含裝修及配套設(shè)施)
- 二零二五年度跨境電商代理運(yùn)輸服務(wù)協(xié)議
- 2024版禁牧管理員合同
- 2024版二人合作創(chuàng)業(yè)開(kāi)店協(xié)議要覽版B版
- 二零二五年度能源行業(yè)核心技術(shù)人員保密及競(jìng)業(yè)限制合同2篇
- 二零二五版國(guó)有企業(yè)法人借款合同合規(guī)審查要點(diǎn)3篇
- 火災(zāi)應(yīng)急處理課件
- 創(chuàng)新者的逆襲3:新質(zhì)生產(chǎn)力的十八堂案例課-記錄
- 2024年河南省公務(wù)員考試《行測(cè)》真題及答案解析
- 2022-2024北京初三二模英語(yǔ)匯編:話題作文
- 人教版八年級(jí)英語(yǔ)上冊(cè)Unit1-10完形填空閱讀理解專(zhuān)項(xiàng)訓(xùn)練
- 2024年湖北省武漢市中考英語(yǔ)真題(含解析)
- GB/T 44561-2024石油天然氣工業(yè)常規(guī)陸上接收站液化天然氣裝卸臂的設(shè)計(jì)與測(cè)試
- 《城市綠地設(shè)計(jì)規(guī)范》2016-20210810154931
- 網(wǎng)球場(chǎng)經(jīng)營(yíng)方案
- 2024年公司保密工作制度(四篇)
- 重慶市康德卷2025屆高一數(shù)學(xué)第一學(xué)期期末聯(lián)考試題含解析
評(píng)論
0/150
提交評(píng)論