《電子工程師項目教學與訓練》課件第3章_第1頁
《電子工程師項目教學與訓練》課件第3章_第2頁
《電子工程師項目教學與訓練》課件第3章_第3頁
《電子工程師項目教學與訓練》課件第3章_第4頁
《電子工程師項目教學與訓練》課件第3章_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第3章步進電機驅(qū)動器設計

3.1引言3.2步進電機驅(qū)動器設計任務書3.3設計方案3.4硬件電路設計3.5軟件設計3.6程序清單3.1引言步進電機是把電脈沖信號轉(zhuǎn)換為機械位移信號的執(zhí)行元件,其在控制領域內(nèi)的應用十分廣泛。由于步進電機可以通過控制脈沖來精確控制電機轉(zhuǎn)過的角度,具有較高的運行精度,可以實現(xiàn)開環(huán)控制,因而在構成控制系統(tǒng)時實現(xiàn)較簡單。步進電機要實現(xiàn)運行控制必須通過相應的驅(qū)動器來實現(xiàn),步進電機種類繁多,驅(qū)動器的種類也多種多樣。近年來兩相混合式步進電機因其結構簡單、控制方便而得到了廣泛的應用,本章將針對兩相混合式步進電機驅(qū)動器的研究、設計和制作進行介紹。3.2步進電機驅(qū)動器設計任務書

1.設計任務設計并制作兩相混合式步進電機驅(qū)動器,要求該驅(qū)動器能夠接收外部控制信號以實現(xiàn)電機的運行控制功能,主要包括步進驅(qū)動功能、方向控制功能、脫機運行功能及限流保護功能等。

2.設計要求

1)驅(qū)動器控制端子設置驅(qū)動器設置4個控制輸入信號端子,分別為CLK、DIR、FREE和GND,各個信號的含義為:CLK信號為步進電機的驅(qū)動控制脈沖信號,驅(qū)動器每接收到一個脈沖就運行一步;DIR為電機運行方向控制信號,DIR=0代表一個運行方向,DIR=1代表另一個運行方向;FREE信號為脫機運行信號,如果FREE信號為高電平,則步進電機上電后即鎖定,當有CLK脈沖信號時電機運行,如果FREE信號為低電平,則步進電機上電后處于松開狀態(tài),此時方便手動調(diào)節(jié)電機所驅(qū)動的目標設備位置,并且驅(qū)動器不對CLK信號做出反應。

2)控制輸入信號的要求輸入信號GND是驅(qū)動器與外接控制器之間的共地信號,其他輸入信號應該符合TTL電平標準。CLK信號脈沖的有效沿為下跳沿,且要求負跳沿后的低電平脈沖寬度大于5μs。

3)方向控制

DIR信號控制方向變化時必須保證電機已經(jīng)停止,并且在下一個CLK脈沖到來之前保持穩(wěn)定。

4)電流保護功能步進電機處于鎖定狀態(tài)時,繞組中的電流較大,電機發(fā)熱嚴重,因此要求驅(qū)動器能夠在電機鎖定時限制電流在要求的范圍之內(nèi),用戶可以根據(jù)所使用的電機設定鎖定狀態(tài)的最高電流上限為0.8A、1.2A、1.6A、2.0A四種情況。

5)驅(qū)動器輸入電源驅(qū)動器要求外加電源,包括邏輯部分電源和繞組供電電源,驅(qū)動器邏輯部分輸入電壓為(1±10%)5V,電機繞組驅(qū)動輸入電壓范圍為12~48V。

6)適用電機驅(qū)動器主要用于驅(qū)動42系列、繞組電流小于2A的各種兩相混合式步進電機。3.3設計方案步進電機驅(qū)動器的設計方案考慮的核心問題是驅(qū)動器功率驅(qū)動電路的設計與實現(xiàn)。對于兩相混合式步進電機而言,需要兩個H橋電路來實現(xiàn)兩相繞組的電流控制:一種方案是采用晶體管或者功率MOS管來實現(xiàn),一個H橋電路需要4個功率管,兩個H橋需要8個功率管,因此采用此種方案驅(qū)動電路的組成較復雜,實現(xiàn)起來電路規(guī)模較大,通常適合于設計較大功率的步進電機驅(qū)動器;另一種設計方案為采用集成驅(qū)動橋電路來實現(xiàn),現(xiàn)在常用的功率橋可大致分為兩大類,一類為內(nèi)部采用功率晶體管結構(達林頓晶體管),另一類為內(nèi)部采用功率MOS管。功率晶體管驅(qū)動橋由于管子工作時管壓降較大,損耗功率較大,發(fā)熱嚴重,效率較低,給電路的散熱設計帶來不便,因此近些年來MOS集成驅(qū)動橋越來越普遍,特別是采用了DMOS工藝的驅(qū)動橋以其優(yōu)良的特性受到設計者的青睞,本次設計就采用了意法公司的DMOS驅(qū)動芯片L6205。步進電機驅(qū)動器主處理器的選擇是設計方案中要考慮的另一個主要問題,應該說步進電機驅(qū)動器的控制任務并不復雜,對處理器的要求也不高,普通的8位單片機都可以完成相應的控制任務,但是考慮到控制器附加資源的多少、開發(fā)手段的方便程度、硬件成本等因素,這里采用了宏晶科技公司的STC12C5410AD單片機。該單片機是高速的51單片機,其指令的執(zhí)行速度比同頻率的普通51單片機快得多,普通51單片機需要12個晶振周期才能完成的一條指令,該STC單片機最快僅需要1個晶振周期就可以完成。根據(jù)設計要求,該驅(qū)動器應該具有電流保護功能,用戶可以根據(jù)自己所使用的電機來設定電機鎖定時繞組中的最高電流,為此必須在設計方案中考慮電機繞組電流的檢測問題。這里采用的方案為:采用檢流電阻采樣繞組電流,該電流經(jīng)過整理放大由STC12C5410AD進行轉(zhuǎn)換,再利用PWM調(diào)制的方法保證電機鎖定時繞組中的電流不會超過最高限定值。圖3-1是該設計方案的原理框圖。圖3-1步進電機驅(qū)動器原理框圖3.4硬件電路設計兩相混合式步進電機驅(qū)動器的硬件電路組成并不復雜,這里分兩部分進行介紹。3.4.1主處理器及其外圍電路設計此次設計中主處理器選擇了STC12C5410AD,該單片機指令與MCS-51系列單片機相兼容,但其指令執(zhí)行速度卻遠遠高于MCS-51單片機。STC12C5410系列單片機是單時鐘/機器周期(1T)的兼容8051內(nèi)核單片機,是高速/低功耗的新一代8051單片機,具有全新的流水線/精簡指令集結構,且內(nèi)部集成MAX810專用復位電路。該系列單片機不但在指令的執(zhí)行速度上取得優(yōu)勢,其內(nèi)部的附加資源也比傳統(tǒng)的MCS-51豐富了許多,其主要特點如下:

增強型1T流水線/精簡指令集結構8051CPU。

工作電壓:5.5~3.4V(5V單片機)/3.8~2.0V(3V單片機)。

工作頻率范圍:0~35MHz,相當于普通8051的0~420MHz。實際工作頻率可達48MHz。

用戶應用程序空間:12KB/10KB/8KB/6KB/4KB/2KB。

片上集成512BRAM。

通用I/O口(27/23個)可設置成四種模式:準雙向口/弱上拉模式(兼容8051模式)、推挽/強上拉模式、僅為輸入/高阻模式、開漏模式,每個I/O口的驅(qū)動能力均可達到20mA,但整個芯片最大不得超過55mA。

ISP(在系統(tǒng)可編程)/IAP(在應用可編程),無需專用編程器,即可通過串口(P3.0/P3.1)直接下載用戶程序,編程速度較快。

具有E2PROM功能。

具有看門狗及內(nèi)部集成MAX810專用復位電路(當外部晶振頻率低于20MHz時,可省去外部復位電路)。

時鐘源可選外部高精度晶體或外部時鐘信號,還可以使用內(nèi)部RC振蕩器提供系統(tǒng)工作時鐘,用戶在下載用戶程序時,可選擇使用內(nèi)部RC振蕩器或外部晶體振蕩器(常溫下內(nèi)部RC振蕩器的頻率為5.2~6.8MHz)。

具有2個16位定時器/計數(shù)器,PWM(4路)/PCA(可編程計數(shù)器陣列)。

具有2路外部中斷,可設置為下降沿中斷或低電平觸發(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ū)動器CPU及其外圍電路,該系統(tǒng)采用了外部晶振,晶振與單片機的連接與MCS-51單片機完全相同。系統(tǒng)的復位電路采用了普通的按鍵復位電路。PRO接口是用來下載程序的,當程序要下載到單片機內(nèi)部時用下載線連接計算機與該接口,即可很快地完成程序下載固化,無需專用的編程器,開發(fā)方便,節(jié)省成本。在程序下載時,占用單片機的串口為P3.0與P3.1,但是這并不影響串行口的正常使用,程序下載完成后P3.0與P3.1還可以當普通串行口使用,并不對串行口的使用造成影響。圖3-2CPU及其外圍電路

CTL接口是步進電機驅(qū)動器接收外部控制信號的接口,該接口共有四根信號線,分別如下:

CLK:步進脈沖輸入信號。該信號每接收到一個脈沖信號(FREE信號無效),步進電機正轉(zhuǎn)或反轉(zhuǎn)一步。

DIR:電機運行方向控制信號。如DIR=0代表電機正轉(zhuǎn),則DIR=1代表電機反轉(zhuǎn)。當改變電機運行方向時,必須確保電機已經(jīng)停止才能進行,否則如果電機正在運行,突然改變電機運行方向則很可能造成運行的失步。驅(qū)動器在CLK信號的負跳沿采樣DIR信號,因此改變方向時必須保證DIR信號在CLK脈沖的負跳沿之前保持穩(wěn)定。

FREE:電機脫機運行控制信號。驅(qū)動器運行后一直采樣FREE信號,當FREE=1時,驅(qū)動器接收到有效的CLK信號電機即運行,無有效CLK信號則電機停止運行,且保持鎖定狀態(tài);當FREE=0時,驅(qū)動器不接收CLK信號,且電機繞組始終處于開路狀態(tài),電機無鎖定力矩而處于自由狀態(tài)。該控制信號所對應的功能主要是考慮在有些情況下需要人為手動去調(diào)節(jié)設備位置而設置的。

GND:共地信號。很顯然,這里驅(qū)動器與外部的控制器之間是通過直接耦合的方式來傳輸信號的,因此外接的控制信號必須符合5VTTL信號標準,否則可能不能正常工作,須注意外界強信號的隔離,以免造成驅(qū)動器信號接口損壞。圖3-2中的兩只發(fā)光二極管用來指示驅(qū)動器的運行狀態(tài)。

4位的撥碼開關有兩個目的,其一是用來設定步進電機每個繞組在鎖定狀態(tài)下的最大電流,其二是用于驅(qū)動器的自檢。3.4.2功率驅(qū)動電路設計兩相混合式步進電機的驅(qū)動本質(zhì)上就是通過功率驅(qū)動橋來控制流過步進電機繞組的電流,使其按照一定的規(guī)律變化,從而產(chǎn)生驅(qū)動轉(zhuǎn)子轉(zhuǎn)動的力矩使電機轉(zhuǎn)動。由于兩相混合式步進電機繞組中的電流是雙向的,因此一個繞組就需要一個H橋來控制其電壓與電流,兩個繞組就需要兩個H橋來控制,這樣才能實現(xiàn)兩相混合式步進電機的正常驅(qū)動?,F(xiàn)在構成H橋的方法較多,可以采用功率晶體管、功率MOS管等分立器件來實現(xiàn),也可以采用集成的功率驅(qū)動橋來實現(xiàn)。目前集成驅(qū)動橋的方法由于具有電路結構簡單、控制方便等優(yōu)點而得到了廣泛應用,特別是DMOS型的功率驅(qū)動橋,因具有導通電阻小、損耗功率低等優(yōu)點而被廣泛應用于電機控制領域。L6205即為DMOS類型的典型器件,它是專門為電機控制而設計的雙H橋功率驅(qū)動芯片。圖3-3為L6205的內(nèi)部結構。該芯片的內(nèi)部有兩個H橋,ENA、IN1A和IN2A是A橋的輸入控制信號,OUT1A和OUT2A是A橋的輸出。同樣,ENB、IN1B、IN2B、OUT1B、OUT2B組成B橋的輸入和輸出。VSA和VSB為電機繞組提供工作電源,SENSEA和SENSEB用于連接電源的負極,也可以在該引腳連接功率檢流電阻,用于對繞組的電流進行檢測。為了驅(qū)動橋A和橋B的上橋臂功率,MOS管需要較高的控制電壓,L6205的內(nèi)部集成了一個電源泵,在VBOOT和VCP引腳的外部連接必要器件之后就可以構成一個完整的泵電源,從而提供兩個橋的上橋臂控制電壓。圖3-3L6205的內(nèi)部結構

L6205內(nèi)部的控制邏輯接收外部的控制信號,產(chǎn)生直接控制H橋?qū)顟B(tài)的驅(qū)動信號。每一個橋都有一個過流檢測模塊,當繞組中的電流超過過流觸發(fā)電流5.6A時,過流檢測電路輸出控制信號以關閉對應的H橋,H橋關閉時間的長短取決于EN引腳外接定時元件的取值。過熱保護模塊檢測芯片工作時的溫度,當溫度過高時該模塊觸發(fā)控制H橋斷開,保護芯片不至于損壞。表3-1是L6205控制功能真值表。表3-1L6205控制功能真值表圖3-4是由L6205構成的功率驅(qū)動電路。ENA和ENB引腳連接的100kΩ電阻和5.6nF電容用于當過流或者過熱情況發(fā)生時設定H橋關斷的時間為400μs。VCP和VBOOT引腳連接的元件和L6205內(nèi)部的泵電源電路組成完整的泵電源電路。所有的邏輯信號由單片機控制,STEP_M接口用于連接步進電機,連接于SENSEA和SENSEB的檢流電阻用于檢測繞組中的電流。圖3-5為電機繞組電流檢測電路。該電路對由功率檢流電阻檢測出的電流信號進行濾波和放大,產(chǎn)生的輸出信號SA送給單片機進行D/A轉(zhuǎn)換,從而檢測流過繞組中的電流大小。這里要特別說明的一點是,該檢測電路主要適用于當步進電機停止,進入鎖定狀態(tài)時繞組中的電流檢測,并不用于電機運行過程中的電流檢測與控制。兩相繞組分別設置有一個電流檢測電路。圖3-4功率驅(qū)動電路圖3-5繞組電流檢測電路3.5軟件設計3.5.1系統(tǒng)程序結構系統(tǒng)的程序結構如圖3-6所示。系統(tǒng)上電之后先進行必要的初始化操作,然后讀取撥碼開關的狀態(tài),撥碼開關的低兩位用來設置控制器的運行模式,用戶可以在不接外部控制信號的情況下對驅(qū)動器進行測試,可以控制電機正轉(zhuǎn)連續(xù)運行、反轉(zhuǎn)連續(xù)運行及正反轉(zhuǎn)測試運行。如果撥碼開關設置為11B狀態(tài),則電機進入脈沖觸發(fā)運行模式,在進行完必要的初始化準備之后,驅(qū)動器即可以正常接收外部信號,并在驅(qū)動信號的控制下運行。如果電機松脫控制信號FREE=0,則電機的繞阻處于開路狀態(tài),此時CLK端的控制信號不起作用,可以手工轉(zhuǎn)動電機;如果FREE=1,則電機在沒有驅(qū)動信號的情況下處于鎖定狀態(tài),當每次接收到一個CLK信號時,電機根據(jù)DIR信號正轉(zhuǎn)或反轉(zhuǎn)一步。圖3-6程序結構框圖3.5.2子程序及中斷服務程序設計

1.步進電機驅(qū)動函數(shù)兩相混合式步進電機驅(qū)動采用4拍驅(qū)動模式,驅(qū)動的相序關系為:,這里A、B表示電機繞組加正向的驅(qū)動電壓,、則表示繞組中加反向的電壓。如果要控制電機正轉(zhuǎn),按照該相序關系控制繞組的驅(qū)動電壓變化即可;如果要控制電機反轉(zhuǎn),則繞組上的電壓相序應該正好相反。為了實現(xiàn)步進電機的驅(qū)動,這里設計了相應的驅(qū)動子函數(shù)用于相序的控制。該函數(shù)如下:

//步進電機驅(qū)動子函數(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)用時,根據(jù)step變量的值控制電機兩相繞組所加的驅(qū)動電壓的正負,如果電機正轉(zhuǎn),step的值會從0增加到3,增加到3后又會回到0,這樣循環(huán),從而使電機正轉(zhuǎn);如果電機反轉(zhuǎn),則step值的變化規(guī)律與正轉(zhuǎn)正好相反。step變量值的變化是由外部函數(shù)控制的。

2.測試運行程序當設置電機處于測試運行模式時,程序即進入相應的死循環(huán)。電機正/反轉(zhuǎn)運行測試,則程序控制電機繞組的電壓也按照正/反轉(zhuǎn)相序變化,并且一直循環(huán)。正/反轉(zhuǎn)運行測試時程序控制電機正轉(zhuǎn)一圈,然后再反轉(zhuǎn)一圈,一直循環(huán)下去。

3.外中斷INT0服務函數(shù)

INT0中斷接收的是外部驅(qū)動脈沖CLK信號,當CLK信號觸發(fā)INT0中斷時,INT0的中斷服務函數(shù)就置位外部驅(qū)動脈沖標志FLAG,然后中斷返回。在主程序中會不斷檢測FLAG標志,一旦FLAG標志置位并且FREE信號為高電平,則step變量加1(正轉(zhuǎn))或減1(反轉(zhuǎn)),然后調(diào)用電機驅(qū)動子函數(shù)onestep(),電機正轉(zhuǎn)或反轉(zhuǎn)一步。

4.其他函數(shù)

A/D轉(zhuǎn)換操作函數(shù)包括A/D轉(zhuǎn)換的初始化操作函數(shù)及中斷服務函數(shù),這些函數(shù)的作用是檢測繞組中的電流。

PWM操作的目的是調(diào)節(jié)繞組中的電流,在電機鎖定時間超過設定時間時PWM操作將被觸發(fā),通過A/D轉(zhuǎn)換檢測繞組中的電流,把檢測到的電流與設定電流進行比較,調(diào)整PWM寄存器,從而使電機繞組中的電流在設定值范圍之內(nèi)。3.6程序清單

//*************************************

//頭文件:stepm.h

//*************************************

#defineucharunsignedchar

#defineuintunsignedint

sbitPA1=P2^4; /*電機控制端口定義*/

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)先級高位寄存器sbitEPCA_LVD=IE^6; //PCA中斷和LVD(低壓檢測)中斷共享的總中斷控制位sfrCH=0xF9; //PCA計數(shù)器高8位sfrCL=0xE9; //PCA計數(shù)器低8位//;------------------------sfrCCON=0xD8; //PCA控制寄存器sbitCCF0=CCON^0; //PCA模塊0中斷標志,由硬件置位,必須由軟件清0sbitCCF1=CCON^1; //PCA模塊1中斷標志,由硬件置位,必須由軟件清0sbitCCF2=CCON^2; //PCA模塊2中斷標志,由硬件置位,必須由軟件清0sbitCCF3=CCON^3; //PCA模塊3中斷標志,由硬件置位,必須由軟件清0sbitCR=CCON^6; //1:允許PCA計數(shù)器計數(shù),必須由軟件清0sbitCF=CCON^7; //PCA計數(shù)器溢出(CH、CL由FFFFH變?yōu)?000H)標志,//PCA計數(shù)器溢出后由硬件置位,必須由軟件清0//------------------------sfrCMOD=0xD9; //PCA工作模式寄存器/*CMOD.7CIDL:idle狀態(tài)時PCA計數(shù)器是否繼續(xù)計數(shù),0表示繼續(xù)計數(shù),1表示停止計數(shù)。CMOD.2CPS1:PCA計數(shù)器計數(shù)脈沖源選擇位1。CMOD.1CPS0:PCA計數(shù)器計數(shù)脈沖源選擇位0。

CPS1CPS000外部晶體頻率/12。

01外部晶體頻率/2。

10Timer0溢出脈沖,Timer0還可通過AUXR寄存器設置成工作在12T或1T模式。

11從ECI/P3.4腳輸入的外部時鐘。

CMOD.0ECF:PCA計數(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:當匹配情況發(fā)生時,允許CCON中的CCFn置位。TOGn=1:當匹配情況發(fā)生時,CEXn將翻轉(zhuǎn)。PWMn=1:將CEXn設置為PWM輸出。ECCFn=1:允許CCON中的CCFn觸發(fā)中斷。ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn000000000H未啟用任何功能。

x10000x21H16位CEXn上升沿觸發(fā)捕捉功能。

x01000x11H16位CEXn下降沿觸發(fā)捕捉功能。

x11000x31H16位CEXn邊沿(上、下沿)觸發(fā)捕捉功能。

100100x49H16位軟件定時器。

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ù)器T0初始化函數(shù)voidtimer0_init(void){unsignedchara;a=TMOD;a=a|0x02; //定時器0工作方式2TMOD=a;//TH0=0xDF;//TL0=0xDF; //定時時間19.8μs,ft0=50.5kHzTH0=0xF0;TL0=0xF0; //定時時間9.8μs,ft0=100kHzTR0=1;ET0=0;//EA=1;}//定時計數(shù)器T1初始化函數(shù)voidtimer1_init(void){unsignedchara;a=TMOD;a=a|0x10; //定時器1工作方式1TMOD=a;TH1=0xBE;TL1=0xE5; //定時時間10msTR1=1;ET1=1;EA=1;}//定時器1中斷函數(shù)voidtimer1(void)interrupt3using1{TH1=0xBE;TL1=0xE5; //定時時間10msstop_count=stop_count+1;if(stop_count>=10){//啟動電流限制

/*stop_count=100;PA1=0;PA2=0;PB1=0;PB2=0;LED_R=0;LED_G=1;*/CCAPM0=0x42;//設置PCA模塊0工作在PWM方式下

CCAPM3=0x42;//設置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中斷服務函數(shù)voidint0(void)interrupt0using2{Flag=1;stop_count=0x00;//if(FREE==1){ENA=1;ENB=1;}}//ADC電源開啟函數(shù)voidadc_pow_on(void){ADC_CON=ADC_CON|0x80;}//ADC輸入引腳開路設置函數(shù)voidset_adc_pin(void){P1M0=P1M0|0x03; //設置P1.0、P1.1為輸入模式

P1M1=P1M0|0x03;}//設置P1.0為ADC通道函數(shù)voidset_adc_ch0(void){ADC_CON=ADC_CH0;}//設置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; //設置PCA定時器時鐘信號為fosc/12CMOD=0x02; //設置PCA定時器時鐘信號為fosc/2//CMOD=0x04; //設置PCA定時器時鐘信號為1/T0//CMOD=0x00; //設置PCA定時器時鐘信號為P3.4CL=0x00;CH=0x00;pwm=0x80;CCAP0L=0x80;

CCAP0H=0x80;CCAPM0=0x00; //禁止pwm0

//CCAPM0=0x42; //設置PCA模塊0工作在PWM方式下

CCAP3L=0x80;CCAP3H=0x80;CCAPM3=0X00; //禁止pwm3//CCAPM3=0x42; //設置PCA模塊3工作在PWM方式下

//CR=1;}/*//**************************************************//串行口調(diào)試程序//**************************************************//串行口初始化函數(shù)voidrs232_init(void){uchara;

TI=0;RI=0;a=TMOD;a=a|0x20;TMOD=a; //設置T1為波特率發(fā)生器

SCON=0x50; //設置串行口工作于8位模式下,波特率可變

TH1=0xEA; //20MHz晶振,波特率為2400b/s

TL1=0xEA;TR1=1;ES=1;EA=1;}//串行口中斷服務函數(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//步進電機驅(qū)動器程序//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_();}}//步進電機驅(qū)動子函數(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;//電機端口初始化,電機鎖定

ENA=1;ENB=1;onestep();Delay(10000);Delay(10000);status=P2;status=status&0x03;//正轉(zhuǎ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)測試運行模式

if(status==0x01){LED_G=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論