【摘要】 介紹了一種基于AT89C51單片機平臺,采用光電傳感器實施電機轉速測量的方法,硬件系統包括脈沖信號產生、脈沖信號處理和顯示模塊,并采用C語言編程,結果表明該方法具有簡單、精度高、穩定性好的優點。介紹了該測速法的基本原理、實現步驟和軟硬件設計
1.概述 目前國內外測量電機轉速的方法很多,按照不同的理論方法,先后產生過模擬測速法(如離心式轉速表、用電機轉矩或者電機電樞電動勢計算所得)、同步測速法(如機械式或閃光式頻閃測速儀)以及計數測速法。計數測速法又可分為機械式定時計數法和電子式定時計數法。傳統的電機轉速檢測多采用測速發電機或光電數字脈沖編碼器,也有采用電磁式(利用電磁感應原理或可變磁阻的霍爾元件等)、電容式(對高頻振蕩進行幅值調制或頻率調制)等,還有一些特殊的測速器是利用置于旋轉體內的放射性材料來發生脈沖信號.其中應用最廣的是光電式,光電式測系統具有低慣性、低噪聲、高分辨率和高精度的優點.加之激光光源、光柵、光學碼盤、CCD 器件、光導纖維等的相繼出現和成功應用,使得光電傳感器在檢測和控制領域得到了廣泛的應用。而采用光電傳感器的電機轉速測量系統測量準確度高、采樣速度快、測量范圍寬和測量精度與被測轉速無關等優點,具有廣闊的應用前景。 1.2 本設計課題的目的和意義
在工程實踐中,經常會遇到各種需要測量轉速的場合, 例如在發動機、電動機、卷揚機、機床主軸等旋轉設備的試驗、運轉和控制中,常需要分時或連續測量和顯示其轉速及瞬時轉速。要測速,首先要解決是采樣問題。在使用模技術制作測速表時,常用測速發電機的方法,即將測速發電機的轉軸與待測軸相連,測速發電機的電壓高低反映了轉速的高低。為了能精確地測量轉速外,還要保證測量的實時性,要求能測得瞬時轉速方法。因此轉速的測試具有重要的意義。
這次設計內容包含知識全面,對傳感器測量發電機轉速的不同的方法及原理設計有較多介紹,在測量系統中能學到關于測量轉速的傳感器采樣問題,單片機部分的內容,顯示部分等各個模塊的通信和聯調。全面了解單片機和信號放大的具體內容。進一步鍛煉我們在信號采集,處理,顯示發面的實際工作能力。
2.轉速測量系統的原理 轉速是指作圓周運動的物體在單位時間內所轉過的圈數,其大小及變化往往意味著機器設備運轉的正常與否,因此,轉速測量一直是工業領域的一個重要問題。按照不同的理論方法,先后產生過模擬測速法(如離心式轉速表) 、同步測速法(如機械式或閃光式頻閃測速儀) 以及計數測速法。計數測速法又可分為機械式定時計數法和電子式定時計數法。本文介紹的采用單片機和光電傳感器組成的高精度轉速測量系統,其轉速測量方法采用的就是電子式定時計數法。 對轉速的測量實際上是對轉子旋轉引起的周期脈沖信號的頻率進行測量。在頻率的工程測量中,電子式定時計數測量頻率的方法一般有三種: ①測頻率法:在一定時間間隔t 內,計數被測信號的重復變化次數N ,則被測信號的頻率fx 可表示為 f x =Nt(1) ②測周期法:在被測信號的一個周期內,計數時鐘脈沖數m0 ,則被測信號頻率fx = fc/ m0 ,其中, fc 為時鐘脈沖信號頻率。 ③多周期測頻法:在被測信號m1 個周期內, 計數時鐘脈沖數m2 ,從而得到被測信號頻率fx ,則fx 可以表示為fx =m1 fcm2, m1 由測量準確度確定。 電子式定時計數法測量頻率時,其測量準確度主要由兩項誤差來決定:一項是時基誤差;另一項是量化±1誤差。當時基誤差小于量化±1 誤差一個或兩個數量級時,這時測量準確度主要由量化±1 誤差來確定。對于測頻率法,測量相對誤差為: Er1 =測量誤差值實際測量值×100 % =1N×100 % (2) 由此可見,被測信號頻率越高, N 越大, Er1就越小,所以測頻率法適用于高頻信號(高轉速信號) 的測量。對于測周期法,測量相對誤差為: Er2 =測量誤差值實際測量值×100 % =1m0×100 % (3) 對于給定的時鐘脈沖fc , 當被測信號頻率越低時,m0 越大, Er2就越小,所以測周期法適用于低頻信號(低轉速信號) 的測量。對于多周期測頻法,測量相對誤差為: Er3 =測量誤差值實際測量值100%=1m2×100 % (4) 從上式可知,被測脈沖信號周期數m1 越大, m2 就越大,則測量精度就越高。它適用于高、低頻信號(高、低轉速信號) 的測量。但隨著精度和頻率的提高, 采樣周期將大大延長,并且判斷m1 也要延長采樣周期,不適合實時測量。 根據以上的討論,考慮到實際應用中需要測量的轉速范圍很寬,上述的轉速測量方法難以滿足要求,因此,研究高精度的轉速測量方法,以同時適用于高、低轉速信號的測量,不僅具有重要的理論意義,也是實際生產中的需要。 一般的轉速長期測量系統是預先在軸上安裝一個有60 齒的測速齒盤,用變磁阻式或電渦流式傳感器獲得一轉60 倍轉速脈沖,再用測頻的辦法實現轉速測量。而臨時性轉速測量系統,多采用光電傳感器,從轉軸上預先粘貼的一個標志上獲得一轉一個轉速脈沖,隨后利用電子倍頻器和測頻方法實現轉速測量。不論長期或臨時轉速測量,都可以在微處理器的參與下,通過測量轉軸上預留的一轉一齒的鑒相信號或光電信號的周期,換算出轉軸的頻率或轉速。即通過速度傳感器,將轉速信號變為電脈沖,利用微機在單位時間內對脈沖進行計數,再經過軟件計算獲得轉速數據。即: n=N/ (mT) (1) ◆n ———轉速、單位:轉/ 分鐘; ◆N ———采樣時間內所計脈沖個數; ◆T———采樣時間、單位:分鐘; ◆m ———每旋轉一周所產生的脈沖個數(通常指測速碼盤的齒數) 。 如果m=60, 那么1 秒鐘內脈沖個數N就是轉速n, 即: n=N/ (mT) =N/60 ×1/60=N (2) ◆通常m為60。 在對轉速波動較快系統或要求動態特性好而精度高的轉速測控系統中,調節周期一般很短,相應的采樣周期需取得很小,使得脈沖當量增高,從而導致整個系統測量精度降低,難以滿足測控要求。提高采樣速率通常就要減小采樣時間T, 而T 的減小會使采到的脈沖數值N 下降,導致脈沖當量(每個脈沖所代表的轉速) 增高,從而使得測量精度變得粗糙。通過增加測速碼盤的齒數可以提高精度,但是碼盤齒數的增加會受到加工工藝的限制,同時會使轉速測量脈沖的頻率增高,頻率的提升又會受到傳感器中光電器或磁敏器或磁電器件最高工作頻率的限制。凡此種種因素限制了常規智能轉速測量方法的使用范圍。而采用本文所提出的定時分時雙頻率采樣法,可在保證采樣精度的同時,提高采樣速率,充分發揮微機智能測速方法的優越性及靈活性。 
圖2.1 系統原理圖 各部分模塊的功能: ①傳感器:用來對信號的采樣。 ②放大、整形電路:對傳感器送過來的信號進行放大和整形,在送入單片機進行數據的處理轉換。 ③單片機:對處理過的信號進行轉換成轉速的實際值,送入LED ④LED顯示:用來對所測量到的轉速進行顯示。
3.系統方案提出和論證 轉速測量的方案選擇,一般要考慮傳感器的結構、安裝以及測速范圍與環境條件等方面的適用性;再就是二次儀表的要求,除了顯示以外還有控制、通訊和遠傳方面的要求。本說明書中給出兩種轉速測量方案,經過我和伙伴查資料、構思和自己的設計,總體電路我們有兩套設計方案,部分重要模塊也考慮了其它設計方法,經過分析,從實現難度、熟悉程度、器件用量等方面綜合考慮,我們才最終選擇了一個方案。下面就看一下我們對兩套設計方案的簡要說明。 霍爾傳感器是利用霍爾效應進行工作的?其核心元件是根據霍爾效應原理制成的霍爾元件。本文介紹一種泵驅動軸的轉速采用霍爾轉速傳感器測量。霍爾轉速傳感器的結構原理圖如圖3.1, 霍爾轉速傳感器的接線圖如圖3.2 。 傳感器的定子上有2 個互相垂直的繞組A 和B, 在繞組的中心線上粘有霍爾片HA 和HB ,轉子為永久磁鋼,霍爾元件HA 和HB 的激勵電機分別與繞組A 和B 相連,它們的霍爾電極串聯后作為傳感器的輸出。
圖3.1 霍爾轉速傳感器的結構原理圖
圖3.2方案霍爾轉速傳感器的接線圖
缺點:采用霍爾傳感器在信號采樣的時候,會出現采樣不精確,因為它是靠磁性感應才采集脈沖的,使用時間長了會出現磁性變小,影響脈沖的采樣精度。 整個測量系統的組成框圖如圖3.3所示。從圖中可見,轉子由一直流調速電機驅動,可實現大轉速范圍內的無級調速。轉速信號由光電傳感器拾取,使用時應先在轉子上做好光電標記,具體辦法可以是:將轉子表面擦干凈后用黑漆(或黑色膠布) 全部涂黑,再將一塊反光材料貼在其上作為光電標記,然后將光電傳感器(光電頭) 固定在正對光電標記的某一適當距離處。光電頭采用低功耗高亮度LED ,光源為高可靠性可見紅光,無論黑夜還是白天,或是背景光強有大范圍改變都不影響接收效果。光電頭包含有前置電路,輸出0—5V的脈沖信號。接到單片機89C51的相應管腳上,通過89C51內部定時/計時器T0、T1及相應的程序設計,組成一個數字式轉速測量系統。 
圖3.3 測量系統的組成框圖 優點:這種方案使用光電轉速傳感器具有采樣精確,采樣速度快,范圍廣的特點。 綜上所述,方案二使用光電傳感器來作為本設計的最佳選擇方案。
4.系統硬件設計
隨著超大規模集成電路技術提高,尤其是單片機應用技術以及功能強大,價格低廉的顯著特點,是全數字化測量轉度系統得一廣泛應用。出于單片機在測量轉速方面具有體積小、性能強、成本低的特點,越來越受到企業用戶的青睞。對測量轉速系統的硬件和編程進行研究,設計出一種以單片機為主的轉速測量系統,保證了測量精度。 在設計中采用光電傳感器采集信號,這種傳感器是把旋轉軸的轉速變為相應頻率的脈沖,然后用測量電路測出頻率,由頻率值就可知道所側轉素值。這種測量方法具有傳感器結構簡單、可靠、測量精度高的特點。是目前常用的一種測量轉速的方法。 從光源發出的光通過測速齒盤上的齒槽照射到光電元件上,使光電元件感光。測速齒盤上有30個齒槽,當測速齒槽旋轉一周,光敏元件就能感受與開孔數相等次數的光次數。對于被測電機的轉速在90—1700r/min的來說,每轉一周產生30個電脈沖信號,因此,傳感器輸出波形的頻率的大小為: 45Hz≤f≤850Hz (1) 測速齒盤裝在發射光源(紅外線發光二極管)與接收光源的裝置(紅外線接收二極管)之間,紅外線發光二極管(規格IR3401)負責發出光信號,紅外線接收三極管(規格3DU12)負責接收發出的光信號,產生電信號,每轉過一個齒,光的明暗變化經歷了一個正弦周期,即產生了正弦脈沖電信號。 圖4.1所示為轉速傳感器電路,由于紅外光不可見,無法用肉眼識別發光信號是否在工作,故將紅外線的輸出回路串接了一個普通光電二極管作為判別光源發生回路是否為通路。所選用的紅外二極管IR3401,在正向工作電流為20mA時,其導通電壓為1.2—1.5V,所選用的發光二極管的正向壓降一般為1.5—2.0V,電流為10--20Ma。R的計算公式為: 計算得:Rmin=425Ω;Rmin=465Ω。設定中所選阻值為430Ω(Rmin≤R≤Rmax)。 轉速傳感器輸出電壓幅度在0—1.6mV呈正弦波變化,由此可見,紅外線接收三極管的光信號轉化為電信號的電壓Uo很微弱(一般為mV量級),需要進行信號處理. 
圖4.1 轉速傳感器電路圖 (1) 光電傳感器是應用非常廣泛的一種器件,有各種各樣的形式,如透射式、反射式等,基本的原理就是當發射管光照射到接收管時,接收管導通,反之關斷。以透射式為例,如圖4.1所示,當不透光的物體擋住發射與接收之間的間隙時,開關管關斷,否則打開。為此,可以制作一個遮光葉片如圖4.2 所示,安裝在轉軸上,當扇葉經過時,產生脈沖信號。當葉片數較多時,旋轉一周可以獲得多個脈沖信號。  
圖4.2光電傳感器的原理圖 圖4.3 遮光葉片 (2)選用的傳感器型號為SZGB-3(單向) SZGB-3型傳感器特點介紹如下: 1)供單向計數器使用,測量轉速和線速度. 2)采用密封結構性能穩定. 3)光源用紅外發光管,功耗小,壽命長. 4) SZGB-3, 20電源電壓為12V DC SZGB-3型傳感器主要性能介紹如下: SZGB-3.型光電轉速傳感器,使用時通過連軸節與被測轉軸連接,當轉軸旋轉時,將轉角位移轉換成電脈沖信號,供二次儀表計數使用。 1)輸出脈沖數:60脈沖(每一轉)
2)輸出信號幅值:50r/min時300mV
3)測速范圍:50---5000r/min 4)使用時間:可連續使用,使用中勿需加潤滑油
5)工作環境:溫度-10~40℃,相對濕度≤85%無腐蝕性氣體 轉速信號處理電路包括信號放大電路、整形及三極管整形電路。由于產生的電壓信號很小,所以要進行放大處理,一般要放大至少1000倍(≥60dB),然后在進行信號處理工作。信號放大裝置選用運算放大器TL084作為放大電壓放大元件,采用兩級放大電路,每一級都采用反響比例運算電路如圖4.4.設計的電壓放大倍數為3000倍。其中第一級放大倍數為30,第二級放大倍數為100.放大后電壓變化范圍為0~4.8V。TL084采用12V雙電源供電,由于電源的供電電壓在一定范圍內有副值上的波動,形成干擾信號。為起到消除干擾,實現濾波作用,故供電電源兩端需接10UF的電容接地,電容選擇金屬化聚丙已烯膜電容。兩級運放放大所采用的供電電源均采用此接法。 
圖4.4信號處理電路圖 整形電路的主要作用是將正弦波信號轉化為方波脈沖信號,正弦波信號電壓的最大幅值約為4.8V,最小幅值為0V。整形電路設計的是一種滯回電壓比較器,它具有慣性,起到抗干擾的作用。從而向輸入端輸入的滯回比較器。在整形電路的輸入端接一個電容C7(103),起到的作用是阻止其他信號的干擾,并且將放大的信號進行濾波,解耦。R11和R17是防止電路短路,起到保護電路的作用。 一次整形后的信號基本上為±5V的電平的脈沖信號,在脈沖計數時,常用的是+5V的脈沖信號。如果直接采用-5V的脈沖計數,會增加電路的復雜性,故一般不直接使用,而是先進行二次整形。 第二次用三極管整形電路,當輸出為-5V的信號時,三極管VT2(8050)的基-射極和電阻R18組成并聯電路電流經過R18.R17,三極管VT2處于反向偏置狀態,所以,VT2的集-射極未接通,故處于截止狀態。電源回路由R19,三極管VT2的集-射極組成,采用單電源+12V供電,由于集射極截止,處于斷路狀態,故輸出電壓U0為V。當第一次整形輸出為+5V的信號時,三極管VT2基-射極處于正向偏置狀態,有電流I通過,故此時三極管的集-射極處于通路狀態。電源電流流經電阻R19,三極管的集-射極到地端,由于集-射極導通時的電阻很小,可以忽略不計。電源電壓主要在R19上,其輸出電壓約為0V。綜上所述,三極管整形的電路的輸入關系是:信號為-5V時,U0=+12V;信號為+5V時,U0=0V。 AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。 圖4.5是常用的一種單片機,型號為AT89C51,它將計算機的功能都集成到這個芯片內部去了,就這么一個小小的芯片就能構成一臺小型的電腦,因此叫做單片機。 
圖4.5 AT89C51芯片 它有40個管腳,分成兩排,每一排各有20個腳,其中左下角標有箭頭的為第1腳,然后按逆時針方向依次為第2腳、第3腳……第40腳。 在40個管腳中,其中有32個腳可用于各種控制,比如控制小燈的亮與滅、控制電機的正轉與反轉、控制電梯的升與降等,這32個腳叫做單片機的“端口”,在單片機技術中,每個端口都有一個特定的名字,比如第一腳的那個端口叫做“P1.0”。 AT89C51單片機的功能: 1.主要特性: ◆與MCS-51 兼容 ◆4K字節可編程閃爍存儲器 ◆壽命:1000寫/擦循環 ◆數據保留時間:10年 ◆全靜態工作:0Hz-24Hz ◆三級程序存儲器鎖定 ◆128*8位內部RAM ◆32可編程I/O線 ◆兩個16位定時器/計數器 ◆5個中斷源 ◆可編程串行通道 ◆低功耗的閑置和掉電模式 ◆片內振蕩器和時鐘電路 2.管腳說明(圖4.7): 
圖4.7 AT89C51管腳分布 ●VCC:供電電壓, ●GND:接地。 ●P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。 ●P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 ●P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 ●P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功能口。 P3口管腳備選功能: ●P3.0 RXD(串行輸入口) ●P3.1 TXD(串行輸出口) ●P3.2 /INT0(外部中斷0) ●P3.3 /INT1(外部中斷1) ●P3.4 T0(記時器0外部輸入) ●P3.5 T1(記時器1外部輸入) ●P3.6 /WR(外部數據存儲器寫選通) ●P3.7 /RD(外部數據存儲器讀選通) ●P3口同時為閃爍編程和編程校驗接收一些控制信號。 ● RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。 ●ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。 ●PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。 ●EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 ●XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 ●XTAL2:來自反向振蕩器的輸出。 3.振蕩器特性: XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅動器件,XTAL2應不接。有余輸入至內部時鐘信號要通過一個二分頻觸發器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。 4.芯片擦除: 整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲字節被重復編程以前,該操作必須被執行。 此外,AT89C51設有穩態邏輯,可以在低到零頻率的條件下靜態邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數器,串口和中斷系統仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。
- 4.4 最小系統的設計
- 4.4.1復位電路(圖4.8):
MCS-51 單片機復位電路是指單片機的初始化操作。單片機啟運運行時,都需要先復位,其作用是使CPU和系統中其他部件處于一個確定的初始狀態,并從這個狀態開始工作。因而,復位是一個很重要的操作方式。但單片機本身是不能自動進行復位的,必須配合相應的外部電路才能實現。 
圖4.8復位電路 ①復位功能: 復位電路的基本功能是:系統上電時提供復位信號,直至系統電源穩定后,撤銷復位信號。為可靠起見,電源穩定后還要經一定的延時才撤銷復位信號,以防電源開關或電源插頭分-合過程中引起的抖動而影響復位。 單片機的復位是由外部的復位電路來實現的。片內復位電路是復位引腳RST通過一個斯密特觸發器與復位電路相連,斯密特觸發器用來抑制噪聲,它的輸出在每個機器周期的S5P2,由復位電路采樣一次。復位電路通常采用上電自動復位(如圖4.9 (a))和按鈕復位(如圖4.9(b))兩種方式。 
圖4.9 RC復位電路 ②單片機復位后的狀態: 單片機的復位操作使單片機進入初始化狀態,其中包括使程序計數器PC=0000H,這表明程序從0000H地址單元開始執行。單片機冷啟動后,片內RAM為隨機值,運行中的復位操作不改變片內RAM區中的內容,21個特殊功能寄存器復位后的狀態為確定值,見表1。 值得指出的是,記住一些特殊功能寄存器復位后的主要狀態,對于了解單片機的初態,減少應用程序中的初始化部分是十分必要的。 說明:表4-1中符號*為隨機狀態: 表4-1 寄存器復位后狀態表 | | | | | | | | | 07H 00H 00H FFH ***00000B 0**00000B | | |
PSW=00H,表明選寄存器0組為工作寄存器組; SP=07H,表明堆棧指針指向片內RAM 07H字節單元,根據堆棧操作的先加后壓法則,第一個被壓入的內容寫入到08H單元中;Po-P3=FFH,表明已向各端口線寫入1,此時,各端口既可用于輸入又可用于輸出 。IP=×××00000B,表明各個中斷源處于低優先級; IE=0××00000B,表明各個中斷均被關斷; 系統復位是任何微機系統執行的第一步,使整個控制芯片回到默認的硬件狀態下。 51單片機的復位是由RESET引腳來控制的,此引腳與高電平相接超過24個振蕩周期后,51單片機即進入芯片內部復位狀態,而且一直在此狀態下等待,直到RESET引腳轉為低電平后,才檢查EA引腳是高電平或低電平,若為高電平則執行芯片內部的程序代碼,若為低電平便會執行外部程序。51單片機在系統復位時,將其內部的一些重要寄存器設置為特定的值,至于內部RAM內部的數據則不變。 晶振(圖4.10)是晶體振蕩器的簡稱,在電氣上它可以等效成一個電容和一個電阻并聯再串聯一個電容的二端網絡,電工學上這個網絡有兩個諧振點,以頻率的高低分其中較低的頻率是串聯諧振,較高的頻率是并聯諧振。 AT89C51單片機內部有一個用于構成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外晶體諧振器一起構成一個自激振蕩器。外接晶體諧振器以及電容C1和C2構成并聯諧振電路,接在放大器的反饋回路中。對外接電容的值雖然沒有嚴格的要求,但電容的大小會影響震蕩器頻率的高低、震蕩器的穩定性、起振的快速性和溫度的穩定性。因此,此系統電路的晶體振蕩器的值為12MHz,電容應盡可能的選擇陶瓷電容,電容值約為30μF。在焊接刷電路板時,晶體振蕩器和電容應盡可能安裝得與單片機芯片靠近,以減少寄生電容,更好地保證震蕩器穩定和可靠地工作。晶體振蕩電路如圖3-6: 晶振有一個重要的參數,那就是負載電容值,選擇與負載電容值相等的并聯電容,就可以得到晶振標稱的諧振頻率。 圖4.10晶振電路 最小系統的仿真圖4.11 
圖4.11 最小系統的仿真 附最小系統仿真程序如下: #include <AT89X51.h> sbit LED=P1^0; //定義LED接P1.0口// void Delay () //延時函數// {unsigned char i,j; for(i=255;i>0;i--) for(j=255;j>0;j--); } void main () {while(1) {LED=0; // LED滅// Delay (); //返回延時函數// LED=1; //LED亮// Delay (); //反回延時函數// } } (1)許多電子產品上都有跳動的數碼來指示電器的工作狀態,其實數碼管顯示的數碼均是由八個發光二極管構成的。每段上加上合適的電壓,該段就點亮。 LED數碼有共陽和共陰兩種,把這些LED發光二極管的正極接到一塊(一般是拼成一個8字加一個小數點)而作為一個引腳,就叫共陽的,相反的,就叫共陰的,那么應用時這個腳就分別的接VCC和GND。再把多個這樣的8字裝在一起就成了多位的數碼管了。實物如圖4.12 
圖4.12 數碼管 共陽型(圖4.13)就是八個發光管的正極都連在一起 ,作為一條引線.A~G段用于顯示數字,字符的筆畫,(dp顯示小數點),每一段控制A~G~dp的亮與來。 內部結構: 
圖4.13 共陽型LCD 共陰型(圖4.14)就是七個發光管的負極都連在一起 ,作為一條引線。A~G段用于顯示數字,字符的筆畫,(dp顯示小數點),每一段控制A~G~dp的亮與來. 內部結構: 
4.14 共陰型LCD 數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據數碼管的驅動方式的不同,可以分為靜態式和動態式兩類。 靜態顯示驅動:靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個單片機的I/O端口進行驅動,或者使用如BCD碼二-十進制譯碼器譯碼進行驅動。靜態驅動的優點是編程簡單,顯示亮度高,缺點是占用I/O端口多,如驅動5個數碼管靜態顯示則需要5×8=40根I/O端口來驅動,要知道一個89S51單片機可用的I/O端口才32個呢:),實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。 動態顯示驅動:數碼管動態顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。在輪流顯示過程中,每位數碼管的點亮時間為1~2ms,由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位數碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能夠節省大量的I/O端口,而且功耗更低。 (2)段碼表 表4-2為LED段碼表 表4-2 LED段碼表 (3)動態顯示仿真(圖4.15) 
圖4.15 動態顯示仿真圖 動態顯示程序: #include<reg51.h> #define uchar unsigned char #define uint unsigned int uint mm=1234; //顯示1234//
uchar jj; uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; delay(uint m) { uint i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); } xian_shi() { uchar qian,bei,shi,ge; qian=mm/1000; bei=mm%1000/100; shi=mm%100/10; ge=mm%10; P2=0x80; P0=table[qian]; delay(50); P2=0; P2=0x40; P0=table[bei]; delay(50); P2=0; P2=0x20; P0=table[shi]; delay(50); P2=0; P2=0x10; P0=table[ge]; delay(50); P2=0; }
5.系統軟件設計
硬件電路完成以后,進行系統軟件設計。首先要分析系統對軟件的要求,然后進行軟件的總體的設計,包括程序的總體設計和對程序的模塊化設計。按整體功能分為多個不同的模塊,單獨設計、編程、調試,然后將各個模塊裝配聯調,組成完整的軟件。 根據設計的要求,單片機的任務是:內部進行計數,在計算出速度后顯示。軟件編程用C語言完成的,需要能掌握C語言,還要熟練AT89C51單片機。從程序流程圖、編寫程序、編譯,到最后的調試,是很復雜的。下面作簡單介紹:系統軟件主程序的功能是完成系統的初始化、顯示程序。 (1).定時器的初始化 AT89C51有兩個定時器/計數器T0和T1,每個定時器/計數器均可設置成為16位,也可以設置成為13位進行定時或計數。計數器的功能是對T0或T1外來脈沖的進行計數,外部輸入脈沖負跳變時,計數器進行加1。 定時功能是通過計數器的計數來實現的,每個機器周期產生1個計數脈沖,即每個機器周期計數器加1,因此定時時間等于計數個數乘以機器周期。定時器工作時,每接收到1個計數脈沖(或機器周期)則在設定的初值基礎上自動加1,當所有位都位1時,再加1就會產生溢出,將向CPU提出定時器溢出中斷身請。當定時器采用不同的工作方式和設置不同的初值時,產生溢出中斷的定時值和計數值將不同,從而可以適應不同的定時或計數控制。 定時器有4種工作方式:方式0、方式2、方式2和方式3,在此對工作方式不做具體介紹。 工作方式寄存器TMOD的設定: TMOD各位的含義如下: ◆GATE:門控位,用于控制定時/計數器的啟動是否受外部中斷請求信號的影響。 ◆C/T:定時或計數方式選擇位,當C/T=1時工作于計數方式;當C/T=0時工作于定時方式。 M1、M0為工作方式選擇位 ,用于對T0的四種工作方式,T1的三種工作方式進行選擇,選擇情況如下表5-1:M1M0=00為方式0;M1M0=01為方式1; 表5-1 M1、M0為工作方式選擇位 | | | | | | | 13位定時/計數器 16位定時/計數器 8位自動重置定時/計數器 兩個8位定時/計數器(只有T0有) |
(2)中斷允許控制 MCS-51單片機中沒有專門的開中斷和關中斷指令,對各個中斷源的允許和屏蔽是由內部的中斷允許寄存器IE的各位來控制的。中斷允許寄存器IE的字節地址為A8H,可以進行位尋址. 表5-2 中斷位尋址表 ◆EA:中斷允許總控位。EA=0,屏蔽所有的中斷請求;EA=1,開放中斷。 ◆ET2:定時器/計數器T2的溢出中斷允許位 ◆ES:串行口中斷允許位。 ◆ET1:定時器/計數器T1的溢出中斷允許位。 ◆EX1:外部中斷 INT1的中斷允許位。 ◆ET0:定時器/計數器T0的溢出中斷允許位。 ◆EX0:外部中斷 INT0的中斷允許位。
①主程序流程圖5.1
圖5.1 流程圖 ②顯示子程序流程圖5.2 
圖5.2 顯示子程序流程圖 ③定時計數子程序流程圖5.3 
圖5.3 定時計數子程序流程圖
總 結
采用單片機技術來實現轉速的測量,可以提高轉速的測量,可以提高轉速測量的精確度,并且加快了采樣的速率,具有較好的實時性。本文介紹的轉速方法使用于高、低轉速的測量,測量精確度與轉速無關,因而具有較寬的應用范圍和廣闊的應用的前景。 基于單片機的轉速測量系統,具有硬件電路簡單,程序簡單和運算速度快,測速范圍廣,抗干擾性能好的特點。在設計的信號處理電路中經過濾波,能夠進一步減少誤差,是測速精度得到提高。
致 謝 經過幾個月的忙碌,本次畢業設計已經接近尾聲,通過這次學校組織的畢業設計,端正了自己學習的態度,鍛煉了自己獨立動手的能力,在此,我要感謝每一個幫助過我的人。 首先,我要感謝的是我的導師楊帆老師。楊帆平日里工作繁多,但在我做畢業設計的每個階段,都給予我悉心的指導和幫助?梢哉f,沒有楊帆的悉心指導和幫助,我是不可能順利完成我的畢業設計的。另外,他的治學嚴謹和科學研究的精神也是我永遠學習的榜樣,并將積極影響我今后的學習和工作。 再次,我要感謝的是我的同學趙星輝和舍友們在我畢業設計期間,他們給了我不少的關心和幫助。理論與實踐的結合,是對知識較好牢固掌握的一種方法,這次的畢設就有這種理念.基于改變高分低能的現狀.對于即將畢業的我們,社會更迫切需要的是能力而不是以往的高分.學校看出了這種現狀,所以安排了畢業生的最后一門課:理論實踐相結合.所以作為畢業生的我表示深切感謝.這次真的是機不可失,失不在來.最后我要感謝的是我親愛的陜西理工學院的每一位老師和同學。 總之,感謝每一位關心過我,愛護過我的人。滴水之恩,當涌泉相報。
附錄A系統總電路圖 
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint mm=1234;
- uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
- delay(uint m)
- { uint i,j;
- for(i=m;i>0;i--)
- for(j=60;j>0;j--);
- }
- xian_shi()
- { uchar qian,bei,shi,ge;
- uint jj;
- jj=mm;
- jj*=20;
- //jj+=1;
- qian=jj/1000;
- bei=jj%1000/100;
- shi=jj%100/10;
- ge=jj%10;
-
- P2=0x10;
- P0=table[qian];
- delay(1);
- //P2=0;
-
- P2=0x20;
- P0=table[bei];
- delay(1);
- //P2=0;
-
- P2=0x40;
- P0=table[shi];
- delay(1);
- //P2=0;
-
- P2=0x80;
- P0=table[ge];
- delay(1);
- //P2=0;
-
- }
- timer_init() //定時器計數器初始化函數
- { EA=1;
- ET0=1;
- ET1=1;
- TMOD=0X51;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- TH1=0;
- TL1=0;
- TR0=1;
- TR1=1;
- }
- main()
- {
- timer_init();
- P0=0; //開始數碼管不顯示
- while(1)
- {
- xian_shi();
- delay(2); //數碼管刷新時間單位毫秒
- }
- }
- void timer0() interrupt 1
- { TR0=0;
- TR1=0;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- mm=0;
- mm|=TH1;
- mm=(mm<<8)|TL1;
- // mm-=55536;
- TH1=0;
- TL1=0;
- TR0=1;
- TR1=1;
- }
- void timer1() interrupt 3 //顯示0000說明出錯
- { TR1=0;
- TR0=0;
- mm=0;
- // TH1=0;
- // TL1=0;
- // TR1=1;
- }
復制代碼
完整的Word格式文檔51黑下載地址: http://www.raoushi.com/bbs/dpj-143354-1.html
|