目錄 緒 論………………………………………………………………………… 2
第1章 參數計算與設備選型………………………………………………3
1.1 控制芯片 ……………………………………………………………3
1.2 測速發電機………………………………………………………… 4
1.3 模數轉化器件——ADC0809……………………………………… 6
第2章 系統設計…………………………………………………………… 9
2.1 系統方框圖 ………………………………………………………… 9
2.2 硬件設計………………………………………………………… 10
2.2.1 直流測速發電機……………………………………………… 10
2.2.2 ADC0809與單片機連接…………………………………… 10
2.2.3 數碼管……………………………………………………………11
2.2.4 綜合接線圖………………………………………………………11
2.3 軟件設計 ……………………………………………………… 12
2.3.1 程序設計思路說明………………………………………………12
2.3.2 總程序控制流程圖………………………………………………13
2.3.3 ADC0809工作流程圖及程序……………………………………14
2.3.4 顯示部分工作流程圖及程序………………………………… 15
第3章 結論 ……………………………………………………………18
參考文獻…………………………………………………………………… 19
緒論
在現代工業自動化高度發展的時期,幾乎所有的工業設備都離不開電機,形形色色的電機在不同領域發揮著很重要的作用。與之而來的問題是,如何更好地控制電機,對于不同的場合,對電機的控制要求是不同的,但大部分都會涉及到直流電機的轉速測量,從而利用轉速來實施對直流電機的控制。 直流電機轉速作為直流電機的一項重要技術指標,在各個應用場合都有重要的研究價值,例如在發動機,電動機,機床主軸等旋轉設備的試驗運轉和控制中,常需要分時或連續測量,顯示其轉速及瞬時速度等,轉速是其他大部分技術參數的計算來源,因此,準確測量直流電動機的轉速具有重要的研究意義和理論價值。 目前,對直流電動機的速度檢測方法很多,從整體上可分為模擬檢測和數字檢測方法。 模擬檢測:即利用測速電機作為發電機,通過檢測反電勢E的大小和極性可得到轉速N和電機轉向,采用這種方法直接可以得到轉速N和輸出電壓的特性曲線,直觀,但也有很多不足,比如在高速和低速情況下實際輸出偏離理想特性。 數字檢測技術:即通過分析數字信號產生的一系列脈沖間接獲取電機轉速。如光電旋轉編碼器是將檢測圓盤劃分為等距的三個同心圓,最外環和次外環分別用等距的黑白條紋分開,且最外環和次外環的縫隙位置相位差為90度,用于判斷電機的轉速,最內環只有一個黑條紋,用作定位脈沖或者是復位脈沖,利用光電編碼器輸出的脈沖可以計算轉速,具體的又可分為M法,T法和M\T法。 此外,市場上已經有了技術成熟的電機測速裝置,如利用霍爾元件設計制作的直流電機測速儀等,憑借其精度高,穩定性好等優勢占有重要的一席之地。 而本次微機控制原理課程設計的任務是直流電機速度的測量與顯示。主要要求是通過測速直流發電機作為傳感器,檢測直流電機的轉速,并輸出與轉速相關的電壓,通過ADC0809芯片將測速發電機輸出電壓轉換成電壓的數字信號。控制芯片采用AT89C51將采集轉換后的數字信號進行處理,得到轉速,并通過四位數碼管予以顯示。整體上能夠完成從轉速檢測到數據處理到顯示的一整套功能。
第一章 參數計算與設備選型
1.1 控制芯片 本課題中控制芯片的作用主要是與ADC0809相連接,采集模數轉換后得到的8位二進制碼,經過公式計算后得到電壓值,同時連接四位數碼管進行顯示。綜合考慮,選用AT89C51即滿足要求。 一.簡介 AT89C51是一種帶4K字節FLASH存儲器的低電壓、高性能CMOS 8位微處理器。單片機的可擦除只讀存儲器可以反復擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器。AT89C單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。 二. AT89C51引腳圖如下: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8085.tmp.png
圖1-1 AT89C51引腳圖
三.主要特性 ·與MCS-51 兼容 ·4K字節可編程FLASH存儲器 ·壽命:1000寫/擦循環 ·數據保留時間:10年 ·全靜態工作:0Hz-24MHz ·三級程序存儲器鎖定 ·128×8位內部RAM ·32可編程I/O線 ·兩個16位定時器/計數器 ·5個中斷源 ·可編程串行通道 ·低功耗的閑置和掉電模式 ·片內振蕩器和時鐘電路 1.2 測速直流發電機 一.簡介 直流測速發電機是一種測速元件,它把轉速信號轉換成直流電壓信號輸出。直流測速發電機廣泛地應用于自動控制、測量技術和計算機技術等裝置中。對直流測速發電機的主要要求是:(1)輸出電壓要嚴格地與轉速成正比,并且不受溫度等外界條件變化的影響;(2)在一定的轉速下,輸出電壓要盡可能的大;(3)不靈敏區要小。 二.分類 直流測速發電機可分為勵磁式和永磁式兩種。勵磁式由勵磁繞組接成他勵,永磁式采用矯頑力高的磁鋼制成磁極。由于永磁式不需另加勵磁電源,也不因勵磁繞組溫度變化而影響輸出電壓,故應用較廣。 三.輸出特性 根據已經學過的直流發電機的工作原理知,電刷兩端的感應電勢: Ea=CeΦn=Ken (2-1) 由上可知:1.電刷兩端的感應電勢與電機的轉速成正比;2.直流發電機能夠把轉速信號換成電勢信號,從而用來測速。 他勵測速發電機接線圖如下: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8086.tmp.png
圖1-2 他勵測速發電機接線圖
在上圖正方向得: Ua=Ea-IaRa (2-2) Ia=Ua/RL (2-3) 負載時測速發電機的輸出電壓為: (2-4)
本課題選用55CY61系列他勵測速發電機,主要參數如下:
根據負載時測速發電機的輸出電壓公式知,直流測速發電機的輸出電壓與轉速成正比,即Ua=Cn。采用55CY61時,最大轉速2000r/min時最大輸出電壓為40v,因此C=50. 由于ADC0809要求輸入模擬電壓信號在0~5v之間,因此需要有滑動變阻器進行電壓范圍調整,調整后輸入到ADC0809的電壓值縮小倍數為K=8。例如,當檢測到電壓值為U=1V時,對應的轉速為: n =U*K*C=1*8*50=400r/min 再將運算后的n值用數碼管顯示出來即可。
1.3 模數轉化器件——ADC0809 一.簡介 ADC0809是美國國家半導體公司生產的CMOS工藝8通道,8位逐次逼近式A/D模數轉換器。其內部有一個8通道多路開關,它可以根據地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。是目前國內應用最廣泛的8位通用A/D芯片。 二.引腳圖 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8096.tmp.png 圖1-3 ADC0809引腳圖 ADC0809各腳功能如下: D7-D0:8位數字量輸出引腳。
IN0-IN7:8位模擬量輸入引腳。
VCC:+5V工作電壓。
GND:地。
VREF(+):參考電壓正端。
VREF(-):參考電壓負端。
START:A/D轉換啟動信號輸入端。
ALE:地址鎖存允許信號輸入端。
(以上兩種信號用于啟動A/D轉換) .
EOC:轉換結束信號輸出引腳,開始轉換時為低電平,當轉換結束時為高電平。
OE:輸出允許控制端,用以打開三態數據輸出鎖存器。
CLK:時鐘信號輸入端(一般為500KHz)。
A、B、C:地址輸入線。
三.主要特性 1)8路輸入通道,8位A/D轉換器,即分辨率為8位。 2)具有轉換起?刂贫恕 3)轉換時間為100μs(時鐘為640kHz時),130μs(時鐘為500kHz時) 4)單個+5V電源供電 5)模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準。 6)工作溫度范圍為-40~+85攝氏度 7)低功耗,約15mW。
四.分辨率 ADC的分辨率是指使輸出數字量變化一個相鄰數碼所需輸入模擬電壓的變化量。常用二進制的位數表示。A/D轉換器的位數決定著信號采集的精度和分辨率。8為A/D轉換器的精度為: 1/28=0.39% 因此,輸入為0~5v時,分辨率為: 5/(28-1)=0.0196V 五.工作時序 圖4所示是ADC0809的工作時序圖。從該時序圖可以看出,地址鎖存信號ALE在上升沿將三位通道地址鎖存,相應通道的模擬量經過多路模擬開關送到A/D轉換器。啟動信號START上升沿復位內部電路,START的下降沿啟動轉換,此時轉換結束信號EOC呈低電平狀態,由于逐位逼近需要一定過程,所以,在此期間,模擬輸入量應維持不變,比較器要一次次比較,直到轉換結束,此時變為高電平。若CPU發出輸出允許信號OE(輸出允許為高電平),則可讀出數據。另外,ADC0809具有較高的轉換速度和精度,同時受溫度影響也較小。 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8097.tmp.png 圖1-4 ADC0809的工作時序圖
六.A/D轉換器的其他技術指標 1.量化誤差 ADC把模擬量變為數字量,用數字量近似表示模擬量,這個過程稱為量化。量化誤差是ADC的有限位數對模擬量進行量化而引起的誤差。實際上,要準確表示模擬量,ADC的位數需很大甚至無窮大。一個分辨率有限的ADC的階梯狀轉換特性曲線與具有無限分辨率的ADC轉換特性曲線(直線)之間的最大偏差即是量化誤差。 2.偏移誤差 偏移誤差是指輸入信號為零時,輸出信號不為零的值,所以有時又稱為零值誤差。假定ADC沒有非線性誤差,則其轉換特性曲線各階梯中點的連線必定是直線,這條直線與橫軸相交點所對應的輸入電壓值就是偏移誤差。 3.滿刻度誤差 滿刻度誤差又稱為增益誤差。ADC的滿刻度誤差是指滿刻度輸出數碼所對應的實際輸入電壓與理想輸入電壓之差。 4.線性度 線性度有時又稱為非線性度,它是指轉換器實際的轉換特性與理想直線的最大偏差。 5.絕對精度 在一個轉換器中,任何數碼所對應的實際模擬量輸入與理論模擬輸入之差的最大值,稱為絕對精度。對于ADC而言,可以在每一個階梯的水平中點進行測量,它包括了所有的誤差。 6.轉換速率 ADC的轉換速率是能夠重復進行數據轉換的速度,即每秒轉換的次數。而完成一次A/D轉換所需的時間(包括穩定時間),則是轉換速率的倒數。
第2章 系統設計
2.1 系統方框圖
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80A8.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80A9.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AA.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AB.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AC.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AD.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80AE.tmp.png
圖2-1 系統方框圖
2.2 硬件設計 2.2.1 直流測速發電機
本課題選用55CY61系列他勵測速發電機,由于ADC0809對輸入模擬量信號要求電壓在0~5V范圍內,而測速直流發電機的輸出電壓普遍在幾十伏,因此需要利用滑動變阻器使滿額時電壓值為5V。接線如圖: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80BF.tmp.png 圖2-2 發電機接線圖 圖中,RV1起到了電壓范圍調整的作用,R1與C1構成了RC濾波電路,可有效濾除測速直流發電機輸出中的雜波。R2主要是限流電阻。
2.2.2 ADC0809與單片機連接 ADC0809與51單片機之間的連接主要有兩部分,一是地址部分,0809的A,B,C三個引腳決定IN0~IN7的選通,即地址問題, 因系統中只用了IN0通道,因此將A,B,C接地,即000選定IN0;二是D0~D7的數據端口,接51單片機的P0口的八位;其次,由于ADC0809在進行A/D轉換時需要有CLK信號,而此時的ADC0809的CLK是接在AT89C51單片機的P3.7端口上,也就是要求從P3.7輸出CLK信號供ADC0809使用。因此產生CLK信號的方法就得用軟件來產生了。其他控制引腳,EOC接P2.0口,OE接P2.1口,START接P2.2口。 綜上所述,接線方式如下圖所示: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80CF.tmp.png 圖2-3 ADC0809與單片機接線圖 2.2.3 數碼管 選用四位共陽數碼管對轉速值進行顯示。數碼管的位選端接P3口的低四位,段選端接P1口。此外,段選端應連接330Ω的上拉電阻,本處使用排阻,位選端應用PNP型三極管作為數碼管的驅動。 2.2.4 電源模塊 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80D0.tmp.jpg 圖2-4 電源模塊電路圖
2.2.4 綜合接線圖 將上述模塊綜合,銜接后,得到如下系統接線圖: file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80E1.tmp.jpg
圖2-5 系統接線圖
2.3 軟件設計 2.3.1 程序設計思路說明 針對與轉速對應的電壓值的測量,嚴格按照ADC0809要求的時序圖設定相關控制端口的狀態,讀入轉換后的數據,數學運算處理成轉速后用數碼管顯示,數碼管采用動態掃描法顯示,在中斷中完成動態掃描。
2.3.2 總程序控制流程圖 file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80E2.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80E3.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F3.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F4.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F5.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F6.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F7.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F8.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80F9.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps80FA.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810B.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810C.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810D.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810E.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps810F.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8110.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8111.tmp.png 圖2-6 總程序控制流程圖
2.3.3 ADC0809工作流程圖及程序 啟動ADC0809對模擬量輸入信號進行轉換,通過判斷EOC(P2.0引腳)來確定轉換是否完成,若EOC為0,則繼續等待;若EOC為1,則把OE置位,讀入數據。 流程圖如下:
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8112.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8123.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8124.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8125.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8126.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8127.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8128.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8129.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps812A.tmp.png
N file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps812B.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813B.tmp.png Y file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813C.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813D.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813E.tmp.png
圖2-7 ADC0809工作流程圖
該部分程序如下:
sbit EOC=P2^0; sbit OE=P2^1; sbit ST=p2^2; sbit CLK=P3^7;
uchar dat;
void main()
{ ST=0; ST=1; ST=0; while(EOC==0); OE=1; dat=P0; OE=0;
TMOD=0X11; TH1=(65536-2)/256; TL1=(65536-2)%256; TR1=1; ET1=1; EA=1; }
void timer1(void) interrupt 3 { CLK~=CLK; }
2.3.4 顯示部分工作流程圖及程序 四位數碼管的顯示采用中斷法控制,動態掃描,定義變量jishu輪流掃描四位,在disp_busf數組中存放轉速的四位,在定時/計數器T0中,每次進入中斷時顯示以為,當時間足夠小時能達到人眼的停留效應,完成動態顯示。 工作流程圖如下:
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps813F.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8140.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8141.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8142.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8153.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8154.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8155.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8156.tmp.pngfile:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8157.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8158.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8159.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps815A.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps815B.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816C.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816D.tmp.png
N file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816E.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps816F.tmp.png Y file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8170.tmp.png
file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8171.tmp.png file:///C:\Users\dellll\AppData\Local\Temp\ksohtml\wps8172.tmp.png 圖2-8 顯示部分工作流程圖
該部分程序如下:
uchar code wei[4]={0x01,0x02,0x04,0x08}; uchar code disp_code[10]={0x03,0x9f,0x25,0x0d,0x99, 0x49,0x41,0x1f,0x01,0x09}; uchar speed; uchar disp_busf[4];
void main()
{ TMOD=0X11; TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1; while(1) { disp_busf[0]=speed%10; disp_busf[1]=speed%100/10; disp_busf[2]=speed%1000/100; disp_busf[3]=speed/1000; } }
void timer0(void) interrupt 1 { TH0=(65536-10)/256; TL0=(65536-10)%256; P0=wei[jishu]; P2=disp_code[disp_busf[jishu]]; jishu++; if(jishu>=4) jishu=0; }
第3章結論
通過為期兩個星期的微機控制原理課程設計,我對課堂上學到的微機控制原理的理論知識有了更深的理解,而且在親自動手設計的過程中使知識形象化,了解了很多元件的用途,用法,以及很多細節問題。 在設計硬件電路過程中,雖然對AT89C51單片機非常熟悉,但它與ADC0809搭配測量模擬量的工作方式還不是很熟悉,因此我通過查閱相關書籍和上網查找有關知識,明白了二者接線的方式。尤其是第一次使用ADC0809, 除了輸入通道和輸出通道外,其他控制端口也要準確配置,特別是CLK端需要大約500KHz的工作頻率,由于其自身內部并不存在時鐘電路,因此需要外接。因此我采用了51的定時器T1輸出方波,接入0809的CLK端。 在繪制電路圖時,我應用了比較熟悉的Proteus繪圖仿真軟件,如果按照傳統的畫法,數碼管以及0809的數據輸出端的連線非常多,畫面非常凌亂。因此我采用總線方式,是畫面看起來非常簡潔美觀。 軟件設計即程序編寫工作有一些麻煩,首先要進行數據轉換,由于直流測速發電機的輸出電壓在幾十伏,而0809的輸入電壓被限定在0~5V,因此需要用滑動變阻器進行電壓范圍的縮小,數據處理中需要將電壓按公式換算成轉速。其次是顯示部分,開始我用了一套復雜的動態掃描方法,即在main函數的循環中不斷掃描各位,同時顯示出該位的數字,但這種方法太過冗長,占用資源,因此我放棄了這種麻煩的方法,采用了在中斷中循環掃描的思想,而且用一個數組,一個變量jishu即可完成位選和段選的賦值。這樣,程序看起來非常簡練。 總而言之,這次的課設讓我收獲頗豐,除了理論知識的充實外,也提高了自己應用軟件,查找資料的能力,是對自身綜合素質的一個提高。最后,非常感謝兩位指導老師的指點與幫助,使我較好的完成了此次課程設計。
第4章 參考文獻 1 何立民.MCS-51系列單片機應用系統設計.北京:北京航空航天大學出版社,1990 2 王曉明.電動機的單片機控制.北京:北京航空航天大學出版社,2002 3 張淑清.單片機原理及應用技術.北京:國防工業出版社,2010 4 溫淑煥.微機原理及其應用.北京:中國農業科學技術出版社,2010
|