基于單片機的電子式轉速里程表的設計 介紹一種新型的基于單片機的電子式汽車轉速里程表的實現方案。討論了里程計數的原理和轉速指示原理。針對機械式里程表缺點結構復雜,精度不高,并且價格較昂貴,設計了數字式汽車轉速里程表。這里以AT89C2051單片機為核心,利用SPI串行總線開發了電子式里程表。該里程表利用磁電式傳感器采樣汽車行駛所得到的信號;采用LCD數碼管顯示汽車總行駛里程數,本次里程采EEPROM 芯片X25045,利用其通電可改寫,掉電信息可保存的特點存儲汽車行駛的總里程數。本設計的轉速里程表具有結構簡單,精度較高,誤差較小,顯示清楚醒目,穩定可靠等特點,另外對該系統的軟件也作了相應的說明。 關鍵詞: 汽車; 轉速里程表 單片機 Single Chip Microcomputer Controll ing Displaying of Automobile Odometer Abstract : This article mainly introduces a new -type electric automobile odometer. Its core is 2051 single chip microcom2 puter ; L ED digital tube is used to display the total and present running distance. Comparing with the mechanical automo2 bile odometer , it has following features : higher accuracy and less error , and it also can be displayed more clearly and pro2 duced with simpler technology. 目 錄 摘要…………………………………………………………………………………… Abstract……………………………………………………………………………… 第一章:緒論………………………………………………………………………… 1.1研究的目的與意義……………………………………………………………… 1.2 國內外研究概況及發展趨勢…………………………………………………… 第二章:系統的總體設計…………………………………………………………… 2.1系統的總體結構…………………………………………………………………… 2.2.轉速里程表的介紹……………………………………………………………… 2. 3轉速里程表的工作原理………………………………………………………… 第三章:系統的硬件設計…………………………………………………………… 3.1.系統CPU的選擇………………………………………………………………… 3.2輔助芯片的選取………………………………………………………………… 3.3LM1819在轉速里程表中的應用………………………………………………… 3.3. 1電動里程表結構……………………………………………………………… 3.3.2LM1819驅動線路工作原理………………………………………………… 3..4液晶顯示器LCM1010的應用…………………………………………………… 3.5傳感器的選擇……………………………………………………………………… 第四章系統的軟件設計……………………………………………………………… 4.1主程序模塊………………………………………………………………………… 4.2串行中斷服務程序模塊…………………………………………………………… 第五章印制板圖的繪制……………………………………………………………… 結束語……………………………………………………………………………… 附錄…………………………………………………………………………………… 參考文獻…………………………………………………………………………… 致謝…………………………………………………………………………………… 第一章:緒論 1.1研究的目的與意義 自1886年發明汽車以來,汽車走過了100多年的發展歷程。汽車的出現和發展,使汽車儀表也在不斷開發和發展之中。隨著光學、電子技術的迅速發展,特別是計算機技術在汽車儀表中的廣泛應用,汽車儀表正向數字化和智能化方向展。汽車儀表的發展趨勢,從一個側面反映出汽車電子化水平的快速提高。 傳統的汽車轉速里程表的功能有兩個,一是用指針指示汽車行駛的瞬時車速,二是用機械計數器記錄汽車行駛的累計里程。現代汽車正向高速化方向發展,隨著車速的提高,用軟軸驅動的傳統車速里程表受到前所未有的挑戰。這是因為軟軸在高速旋轉時,由于受鋼絲交變應力極限的限制而容易斷裂,同時,軟軸布置過長會出現形變過大或運動遲滯等現象,而且,對于不同的車型,轉速里程表的安裝位置也會受到軟軸長度及彎曲度的限制。凡此種種,使得基于非接觸式轉速傳感器的電子式轉速里程表得以迅速發展。 1.2國內外研究概況及發展趨勢 為了充分了解汽車儀表發展現狀,準確地把握其未來發展趨勢,有必要對其發展過程作一簡單回顧。按汽車儀表在工作原理上取得的重大技術創新來分,可以劃分為4個階段,或稱為經過4代。第1代汽車儀表是基于機械作用力而工作的機械式儀表,人們習慣稱這類儀表為機械機心表;第2代汽車儀表的工作原理基于電測原理,即通過各類傳感器將被測的非電量變換成電信號加以測量,通常稱這類儀表為電氣式儀表;第3代為模擬電路電子式;第4代為數字汽車儀表。 1 現代汽車儀表的現狀 汽車儀表正在經歷由第3代向第4代轉型時期。第3代汽車用儀表工作原理與電氣式儀表基本相同,只不過是用電子器件取代原來的電氣器件。其出現的時間大致在20世紀50~60年代,隨著集成電路技術突飛猛進的發展,這種儀表現在均采用各種專用集成電路(為汽車儀表專門設計的集成電路),國內汽車儀表目前的主流產品就是這種儀表,經過20多年的發展,其結構形式經歷了動圈式機心(線圈連同指針一起轉動)和動磁式機心(磁鋼連同指針一起轉動)2個基本階段。電子器件經歷了分立器件和專用集成電路2個階段。在整個發展過程中,國內外工程技術人員一直從未停止對其進行改進。如圍繞降低成本,不斷改進制作工藝,機械零件起初以金屬件為主,發展到今天以塑料件為主;圍繞提高指示精度和指針平穩性,由動圈式發展成動磁式等。雖然,每次較大改進后整體性能價格比都有所提高,但受其工作原理的限制,其線性、精度、重復性、響應速度等性能指標難以有根本的突破。 嚴格地說,第4代全數字式汽車儀表從其應用的技術手段上看,還是電子技術范疇,也屬于電子式儀表,但信號處理方式已從模擬變成數字。僅憑信號處理方式的改變還不足以將全數字式汽車儀表劃分成一個新階段,其最顯著的特征是工作原理與第3代汽車儀表完全不同。如果一個產品在工作原理上有創新和突破,則其設計思路、組成形式、功能和性能的改變將是根本性的。鑒于此,將全數字式汽車儀表暫且列入第4代。關于全數字式汽車儀表早在20世紀80年代就已經被提出,最初為“數字顯示”形式的汽車儀表。雖然該儀表的工作方式是全數字式,技術水平和儀表的性能遠遠超過了第3代汽車儀表,但其致命的缺點是只能顯示一組孤立的數字,沒有動感,在被測物理量(如車速、發動機轉速)發生變化時,只有數字翻動,而沒有指示上升、下降直觀感,再加上讀數時間比較長,容易分散駕駛員的注意力等,這種形式的汽車儀表很難被駕駛員接受,因而國內外都沒有普及與推廣。為了克服上述不足,后來出現了采用光點、光條或光帶模擬動態顯示被測物理量形式的全數字汽車儀表,顯示器件主要有LED、LCD和電致發光材料等。由于受到成本的限制,目前光顯示汽車儀表只能選用字段顯示方式的顯示屏,無法選用顯示分辨率更高的點陣式顯示屏。因此,其視覺效果和顯示精度還不能令人滿意。 隨著電子技術的發展,特別是單片機性能的提高,主要表現在抗強電磁干擾、工作溫度范圍和對工作電源穩定性要求等方面的改善,再加上價格的大幅度降低,目前有條件在汽車儀表上使用單片機控制的全數字儀表。雖然全數字式汽車儀表曾經出現多種款式,但業內人士和專家一致看好“基于單片機的數字式汽車儀表”。它是針對目前廣泛使用的模擬電子式汽車儀表機心存在多方面不足,在其工作原理上作出技術創新,即徹底放棄了“動磁式”或“動圈式”模擬電子式汽車儀表,通過線包與磁鋼間產生電磁轉矩驅動指針工作的形式。該汽車儀表由傳感器完成各種被測物理量的采集,經過換算后直接送入單片機,再由驅動器驅動指針,在刻度盤上指示被測物理量,同時輔以被測物理量LCD數字顯示。該汽車儀表在指示方式上仍然保留了第3代儀表指示直觀、有動感、符合駕駛員習慣等特點,而且批量生產的成本有望低于同等功能的模擬電子式汽車儀表,更可貴的是在工作原理上的創新和突破,帶來了技術性能質的提高。 2 汽車儀表的發展趨勢 繼全數字式汽車儀表后,未來汽車儀表應向何方向發展呢?雖然具體過程不清楚,但總的趨勢還是比較明朗的,那就是充分應用光技術和機、電一體化技術,并突出現代信息技術和網絡技術的應用,其功能將極大拓寬,指示形式將演變成計算機終端顯示器。雖然人們對未來汽車儀表作出種種預測,并賦予它遠遠超出現在汽車儀表多得多的功能。個人認為僅從技術本身的角度出發,就目前技術條件而言,實現這些功能并沒有什么問題,制約新技術在汽車儀表上應用的主要因素是制造成本。因為汽車儀表是一個量大、對成本極為敏感的產品,在其改進和創新的過程中,不僅要考慮技術的可行性、功能的拓寬、性能的改善、使用的可靠性等,更重要的是其制造成本。脫離制造成本談汽車儀表,那只能是概念性的汽車儀表。在有關技術使用費用,特別是其依賴硬件成本進一步降低的前提下,汽車儀表未來可能發展趨勢如下。 1 從近期來看,未來汽車儀表的功能將不局限于現在的車速、里程、發動機轉速、油量、水溫、方向燈指示,可能增添如下功能。 (1) 能指示安全系統運行狀態,如輪胎氣壓、制動裝置、安全氣囊、安全帶等。這些信號傳輸形式,將不再是簡單的開關接通和斷開直流信號,而是包含反映這些安全裝置工作狀態較多信息的調制信號,供單片機讀取,以便單片機能準確地綜合判斷這些安全裝置的工作狀態,并給出故障顯示提醒駕駛員,或指導維修人員排除故障,也就是說帶基于單片機的汽車儀表將有一定水平的智能化。 (2) 將防盜系統納入汽車儀表單片機的監管下,如車門、后行李箱等處防盜鎖指紋識別開啟系統,防撬振動報警裝置,防盜點火起動裝置等。 2 隨著顯示器件,如液晶顯示器件的性能,特別是工作溫度范圍的拓寬,在價格進一步降低的前提下,汽車儀表的功能將被極大地拓寬,形式將發生根本改變,外觀上就是一個高清晰度的計算機顯示器。 3 電光學技術將在汽車儀表上得到廣泛應用。 (1) 顯示和內照明器件不再用白熾燈泡,而是選用高效冷光源發光器件,如LCD、LED、電致發光器件等。導光系統更多體現出光學領域的新技術,如儀表面板顏色可變等滿足個性化要求設計等。 (2) CCD攝像后視系統,現在的后視光學反光鏡有可能被取消,而改用電子攝像顯示后視系統,駕駛員的視野范圍將更寬。 4 自動導航和定位系統可能也是未來汽車儀表上不可缺少的部分,包括全球衛星定位系統和電子地圖等。 5 具備完善的通訊系統,將來汽車上的計算機系統會與公共互連網相連,以便充分共享信息資源,處理通訊作業將是汽車儀表計算機系統工作內容的一部分。 6 汽車儀表的計算機系統具備對娛樂、空調等舒適性設備進行監管的功能, 可以自動控制這些設備或支持駕駛員遠程操縱。以上在基于當今成熟技術的基礎上,對未來汽車儀表的發展方向做些簡單設想。也許,未來汽車儀表的發展將遠遠超出我們今天的想象。 在當今世界范圍內,汽車儀表正處于技術更新的轉型期。為此,業內人士和專家對此都給予極大關注。什么樣的儀表是今后汽車儀表的主流產品,什么技術是今后汽車儀表的主導技術,對于這些問題業內人士的看法可能不盡相同,但有一點是肯定的,帶有基于單片機的數字技術在汽車儀表上的廣泛應用,將是汽車表發展的必然。原因主要有4點: 1 儀表的功能由軟件和硬件共同實現,而且主要是通過軟件實現。這對于量大且對成本極為敏感的汽車儀表有特殊意義,因為軟件的開發費用分攤到每個儀表上是非常少的。 2 與僅由電子線路硬件組成的汽車儀表相比,帶有基于單片機的汽車儀表,其功能的實現手段更加靈活多樣。 3 產品的“柔性”更好,即在推出新款產品時,能最大限度地利用以前產品的硬、軟件設計成果,僅做少量修改便可,這在產品更新換代很快的今天和未來特別重要。 4 隨著汽車電子化水平的提高,必須要求汽車儀表與汽車上其它裝置交換數據,即要求接入到汽車的計算機系統總線上。 第二章 系統的總體設計 2.1 系統的總體結構 本系統以單片機AT89C205為核心,由液晶顯示、WATCHDOG及復位電路等部分組成。單片機采用美國ATME公司生產的AT89C2051單片機。該芯片不僅具MCS-51系列單片機的所有特性,而且片內集成2K字節的電擦除閃爍存儲器(Flash EPROM)。其價格低,引腳少(20腳),是目前性能價格比較高的單片機芯片之一。它為很多嵌入式控制應用提供了一個高度靈活的有效的解決方案。AT89C2051的工作頻率為12/24 MHz,本系統利用單片機的內部振蕩器外加石英晶體構成時鐘源,為了工作可靠,晶體振蕩頻率選為12MHz。顯示驅動電路為簡化硬件設計,減少使用系統I/O口,節約系統硬件資源的基礎上,顯示部分由驅動器LM1819驅動雙線圈汽車轉速表頭顯示轉速,通過單片機編程液晶顯示模塊LCM1010顯示累計里程和本次里程. 2.2 轉速里程表的介紹 單片機自從推出以來,以其超小型化、結構緊湊、可靠性高、成本低等優點被人們廣泛接受,從而應用于工業、電訊、數據處理、儀器儀表等多方面。汽車里程表是汽車的重要配件,在汽車儀表中占重要位置。這里講述的是一種以2051單片機為核心,10位LCD作為顯示器,再加上其掉電信息不丟失,并且數據可方便改寫,利用此特性在其中存放汽車總里程數據. 2.3轉速里程表的工作原理 1里程計數實現原理 1 霍爾傳感器輸出的脈沖信號是傳感器轉輪旋轉時磁場使舌簧管分開閉合而產生的脈沖。每一個脈沖代表行駛了一定的距離,設汽車行駛1km時驅動輪轉數為N,霍爾傳感器轉數為NF則NF=N×I其中I為傳動比。設輪胎外徑為D,則汽車行駛1km驅動輪轉數為N = 1 000/ Πd,實際中由于輪胎承載變形使得輪胎外徑D變化,此時NXI = 1 000/ πμD,其中μ為變形系數,一般為0.93~ 0。96磁電式傳感器在汽車行駛1km時轉數N F = (1 000/ πμD)I,傳感器轉輪勻安排m個磁片時,汽車行駛1 km ,傳感器輸出脈沖為mNF個。 2 序中以INT1的輸入為里程計數脈沖,2051斷1置為高中斷優先級以保證計數準確。定時器T0置為低中斷優先級,T0每10ms中斷1次,中斷1次送1位顯示。每行駛1km向5045中寫1次數據。 3 以60H~62H單元為計數脈沖暫存單元。68H、69H單元為判斷數據暫存單元,6CH中為本次里程小數點位數值。當6CH單元內容達到0AH時清零。70~72H單元為讀出的總里程數。 2速測量實現原理 車速指示可采用雙線圈汽車轉速表頭,它由空氣軸表芯和驅動電路組成,空氣軸表芯通常由三部分組成:磁鐵、與轉軸相連的指針和兩個互成九十度的線圈。轉軸是表芯唯一的可動部件,磁鐵的轉角總是趨向于兩個線圈的磁場強度矢量的合成方向,磁場強度正比于加在線圈上的電壓,因此,通過改變電壓的極性和幅度,可在理論上使轉軸組件在0~360度范圍內轉動。 顯然,只要能按一定的規律驅動兩個線圈,就可以使指針偏轉位置與輸入量成線性關系,即滿足下列公式: θ= KVin 其中θ為指針偏轉角,單位為度;K為轉角常數,單位為度/V ;Vin是輸入電壓,單位為V。 每個線圈的磁場強度矢量之和必須跟隨偏轉角θ。考慮到轉軸組件總是指向Hsine和Hcosine這兩個正交矢量之和的方向,則其方向可由下式求得: θ= arctan Hsine / Hcosine 并由此可以得出: θ= arctan sinθ/cosθ 由上述公式可見,當Hsine按θ的正弦函數變化,而Hcosine按θ的余弦數變化時,所得到的總磁場強度的方向與θ角的方向相同,由于轉軸組件與磁場強度矢量和的方向相同,因此,指針將始終指向θ角的方向。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D1B.tmp.png 圖1.1 LM1819內部組成原理圖 圖1 所示是LM1819驅動器的內部組成原理框圖,它由電荷泵、整形器、函數發生器等組成,輸入的轉速信號通過內部的三極管緩沖后,輸入到電荷泵即可進行F/V頻率電壓轉換,兩個輸出端按輸入量的正弦和余弦函數變化,2腳和12腳的最小驅動能力為±20mA(±4V),線圈的公共端接到1腳可為內部函數發生器提供反饋信號,同時為5.1V齊納二極管提供參考電壓。在該電路中,K=54°/V ,輸入Vin實際上是4腳和8腳的電位差,8腳既是諾頓放大器的輸出,又是函數發生器的輸入,一般4 腳的電壓是2.1V,所以有: θ= K(V8 -Vref) = 54(V8 -2. 1) 由于V8是在2.1V~7.1V的范圍內變化的,故LM1819可以驅動十字表頭以使其在0°~270°范圍內轉動。 當然也可以通過軟件來實現: 時速表的編程思想如下:里程表程序中,每計數1次,汽車行駛0.001 602 564 1 km ,T0每10ms中斷1次,送顯示,其中斷100次時間為1s,計算這1s計數次數,乘3 600再乘0. 001 602 564 1 即可求出時速.公式為:時速= 次數×5.7692.此算法可精確到0.001位.然后將求得的時速送顯示。 時速表顯示以P1.1及外接按鍵來控制,P1.1腳為高電平,P3.0為低電平時顯示汽車時速.此時速表可顯示到小數點后2位,精度較傳統汽車時速表提高2個數量級。(具體程序本設計就不在獒述) 第三章 系統的硬件設計 本系統以單片機AT89C2051為核心,由液晶顯示、WATCHDOG及復位電路等部分組成。 1單片機 單片機采用美國ATMEL公司生產的AT89C2051單片機。該芯片不僅具有MCS51系列單片機的所有特性,而且片內集成有2 K字節的電擦除閃爍存儲器(Flash EPROM)。其價格低,引腳少(20 腳),是目前性能價格比較高的單片機芯片之一。它為很多嵌入式控制應用提供了一個高度靈活的有效的解決方案。 AT89C2051的工作頻率為12/24 MHz ,本系統利用單片機的內部振蕩器外加石英晶體構成時鐘源,為了工作可靠,晶體振蕩頻率選為12 MHz。 2顯示驅動電路 顯示驅動電路為簡化硬件設計,減少使用系統I/O口,節約系統硬件資源的基礎上,顯示部分由驅動器LM1819驅動雙線圈汽車轉速表頭顯示轉速。里程顯示選用LCM1010串行控制業經顯示模塊,它具有以下獨特特點: (1) 它只有3個輸入端: CS、LOAD、CLK,接線簡單, 工作可靠。 (2) 被動顯示: 液晶顯示器本身不發光而是靠調制外界光進行顯示,也就是說,它不象發光的主動型器件那樣,靠發光刺激人眼而實現顯示,而是單純依靠對光的不同反射呈現的對比度達到顯示的目的。符合人的視覺習慣,不容易引起疲勞,而且外界光亮度越強,其顯示內容越清晰。特別適用于室外和強光直射的場合。 (3) 低電壓功耗: 極低的工作電壓, 只有3~5V, 工作電流則只有幾個μA/(cm)2,可以和大規模集成電路直接匹配。 (4) 液晶顯示器采用平板式結構,由兩片玻璃組成夾層盒,目前都將液晶顯示器件制作成液晶顯示模塊(LCM),使用方便。 本顯示器分為兩組: 第一組為6位,用以顯示總行駛里程數,最大顯示值為: 999999 km;第二組為4位,用以顯示本次行駛里程數,最大顯示值為: 999.9 km 3 WATCHDOG及復位電路 本電路直接選用Xicor公司的X25045芯片。它把3種常用的功能: 看門狗定時器,電壓監控和EEPROM組合在單個封裝之內,這種組合降低了系統成本并減少了對電路板空間的要求。另外X25045與CPU的連接方式也是采用模擬串行外設接口(SPI),因此也節約了系統的口資源。該電路由3個信號構成: 定時脈沖提供定時器時鐘信號源、清除信號復位定時器、RESET 信號產生復位系統。在工作時, 假定工作軟件循環周期為T ,如果設定定時器定時長度為T1( T1<T) , 這樣CPU在每個工作循環周期都對定時器進行一次清零操作,只要系統正常工作, 定時器永遠都不會溢出, 也就不會使系統復位; 否則, 當系統出現故障時, 在可選超時周期之后, X25045看門狗將以RESET 信號作出響應。X25045片還有一個顯著的特點是它內部的閃爍存儲器2 KX8 位的EEPROM,它采用Xicor公司Direct WriteT專利技術, 提供不少于100 000次的使用年限和最小100年的數據保存期, 在本系統中,用于存儲汽車行駛的總里程數。 3.1系統CPU的選擇 用戶在使用單片機時必須了解單片機的供應狀態。單片機的供應狀態決定于片內的ROM配置狀態,片內ROM狀態通常分三種: 1 片內ROM狀態既單片機內帶有的是掩腌ROM。由于用戶無法自己將程序寫入片內ROM,故這種單片機(如MCS-51中的8051)只是用于某種大批量產品時使用。此時,用戶將調試好的應用程序有廠家固化到片內ROM中,當然,前提是片內的ROM容量必須滿足用戶程序的要求。 2 片內EPROM狀態,用戶自己可以通過高壓脈沖將程序寫入片內EPROM中去。當用戶開發程序不大時(既不需要外擴EPROM),使用這種單片機可以簡化整個系統的組成。它可以作為開發片內ROM單片機的代用芯片,開發成功以后,再改用帶片內ROM的芯片(MCS-51系列的8751屬于這種芯片)。此類單片機應用最為廣泛。 3 片內無ROM狀態,使用這種單片機時,必須外部配置程序存儲器EPROM。其容量可視需要靈活配置。 而MCS89-51系列中的2051正屬于第二類單片機下面是針對2051芯片的介紹。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D3B.tmp.png 功能框圖 3.2輔助芯片的選取 微機控制系統干擾、電源的波動引起的程序飛車和數據丟失, 常造成系統的各種誤動作或死機, 直接影響著系統的正常運行, 設計人員為此倍感頭痛。25045芯片將微機測控系統中常用的功能: 看門狗定時器、電源電壓監控、上電復位、串行E2PROM 集成在一片8 引腳的芯片內. 這種組合大大減少了對電路板的空間要求, 簡化了硬件設計, 降低了成本和功耗,大大提高了系統的可靠性和安全性. 1 芯片簡介 在采用DMX512協議通信時,換色器的編號用于從總控制臺發送的數據包中選擇發給本設備的數據幀。正常工作時,編號數據不會掉電丟失,而且必要時編號還可修改。因此采用XICOR公司的串行E2PROM器件X25045對編號數據進行存儲。 X25045是帶有串行E2PROM的CPU監控器。圖2是它的引腳圖: file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D3C.tmp.png 5045引腳圖 CS/WDI:片選輸入/看門狗復位輸入; SO:串行輸出; WP:寫保護輸入; Vss:地; Vcc:電源; RESET:復位輸出; SCK:同步時鐘輸入; SI:串行輸入。 X25045的狀態寄存器描述器件的當前狀態,各位意義如表1所列。
表1 其中,WD1、WD0是看門狗定時時間設置位;BL1、BL0是存儲單元寫保護區設置位;WEL是只讀標志,1表明寫使能開關打開;WIP也是只讀標志,1代表芯片內部正處于寫周期。電復位時,各位都被清零。 X25045芯片功能包括以下4種: (1)上電復位控制。在對X25045通電時,ERSET引腳輸出有效的復位信號,并保持至少200ms,使CPU有效復位。 (2)電源電壓監控。當檢測到電源電壓低于內部門檻電壓VTRIP時,RESET輸出復位信號,直至電源電壓高于VTRIP并保持至少200ms,復位信號才被撤消。VTRIP的出廠值根據芯片型號不同共有5個級別的電壓范圍。對于需要電源電壓精確監控的應用,用戶可以搭建編程電路,對芯片內VTRIP電壓進行微調。 (3)看門狗定時器。芯片內部狀態寄存器的WD1、WD0是看門狗定時設置位,通過狀態寄存器寫指令WRSR修改這2個標志位,就能在3種定時間隔中進行選擇或關閉定時器。對看門狗的復位由CS輸入電平的下降沿完成。表2是WD1、WD0組合的含義。 表2 (4)串行E2PROM。芯片內含512字節存儲單元,10萬次可靠寫,數據保持時間100年。XICOR設計了3種保護方式防止誤寫。包括:WP寫保護引腳,當引腳被拉低時,內部存儲單元狀態寄存器都禁止寫入;存儲區域寫保護模式,通過對狀態寄存器的BL1、BL0位的設置,可以選擇對不同的存儲區域進行寫保護;在進行任何寫操作前都必須打開寫使能開關,而且在上電初始化寫操作完成時,寫使能開關自動關閉。顯然,在幾方面的保護之下,產生誤寫的可能性極小,表3是BL1、BL0組合的含義。
表3 對X25045的操作是通過4根口線CS、SCK、SI和SO進行同步串行通信來完成的。SCK是外部輸入的同步時鐘信號。在對芯片定改指令或數據時,時鐘前沿將SI引腳信號輸入;在讀郵數據時,時鐘后沿將數據位輸出到SO引腳上。數據的輸入/輸出都是高位在先。 芯片內部共有6條指令,如表4所列。
表4 (1)WREN和WRDI是寫使能開關的開/關指令。它們都是單字節指令。 (2)RDSR和WRSR是狀態寄存器的讀/寫指令。在從SI輸入指令后,RDSR的執行結果,即狀態寄存器內容須從SO讀出;而WRSR需要緊接著輸入修改數據。 (3)READ和WEITE是存儲單元的讀/寫指令。輸入指令后(指令碼第三代表存儲單元地址的最高位),接著輸入低八位地址,最后就可以連續讀出或寫入數據。其中,讀指針和寫指針的工作方式完全不同,讀指針的全部8位用來計數,0FFH溢出后變成00H;寫指針只用最低兩位計數,XXXXXX11B溢出后變成XXXX XX00B,所以連續寫的實際結果是在4個單元中反復寫入。另外,由于E2PROM的寫入時間長,所以在連續兩條寫指令之間應讀取WIP狀態,只有內部寫周期結束時才可輸入下一條寫指令。 AT89C2051內部沒有SPI接口硬件,因此本系統利用了單片機的4根口線和軟件模擬讀寫時序的方式與X25045通信。 5045與2051連接圖 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D4D.tmp.png 3.3LM1819在轉速里程表中的應用 目前國際上流行大轉角(0~270°)動磁式指示儀表,它克服了一般動圈式指示儀表抗震性能差、過載能力弱、指針易抖動等缺點。而引進的一些驅動芯片,如KEFA-796專用集成芯片,有成本高、不易國產化等弱點。我們采用LM1819專用集成芯片(美國國家半導體公司新產品),配以適當的應用電路,就可以很好地解決以上問題。 3.3.1電動里程表結構 電動里程表接收霍爾傳感器送來的方波信號,把方波信號頻率轉換成指針的轉角。我們選用動磁式十字交叉機芯,實現瞬間里程指示功能。十字交叉機芯是一種動磁式的轉速表,它代表現代轉速表的發展方向,因為它與動圈式轉速表相比有下列優點: (1) 轉動組件質量小、抗震性能好、指示平穩; (2) 無需動平衡、裝配簡單; (3) 機芯體積小、機械結構較簡單。 3.3LM1819專用集成電路簡介 為了使指針準確地指示出瞬時車速,需要一套電子電路。將霍爾速度傳感器送來的方波信號的頻率轉化為驅動線圈N1 和N2 的電波信號,使合成磁場H 與水平線夾角θ能根據車速變化按線性規律改變,以便指針均勻、準確地指示車速。我們選用LM1819 專用集成電路實現上述功能。LM1819 是專門為驅動動磁式儀表而設計的。LM1819 是由電荷泵、整形器、函數發生器、等組成。其集成電路功能框圖如圖1所示。 (5) 下面對外圍電路和工作原理作較詳細分析和說明。 (1)電流供給部分:該電路單元由二極管D1、電阻R3、穩壓管DW1電容C3組成。二極管D1是為了防止電源反接,以保護LM1819燒毀;電阻R3和穩壓管DW1是LM1819 的腳13上電源電壓值限定在18V以下,起過壓保護作用;電容C3是電源的吸收電容,以避免電源電壓頻繁波動對LM1819影響。 (2)正弦、余弦繞組公共端基準電位設定電路:由電阻R4和穩壓管DW2組成,電阻R4是穩壓管DW2的限流電阻。穩壓管DW2選用5.1V ,使正弦和余弦繞組公共端基準電位設在5.1V。 (3)霍爾探頭方波信號輸入電路:該電路單元由二極管D4 ,電阻R5、R6、R7,電容C4組成。二極管D4作用是防止信號反接;電阻R5和電容C4組成低通濾波器;電阻R7是輸入電路限流電阻,使加到LM1819的腳10上電流限制在2.5mA 以下;當LM1819內部NPN開關晶體管關斷時,電阻R6為電容C4提供一個放電通路。 (4)方波整形電路:為了提高電路的處理精度,需要將霍爾探頭送入的方波信號加以整形。整形的目的是使方波正半周幅度恒定,上升沿和下降沿盡可能陡。為了實現上述目的,LM1819內部電壓基準電路產生一個非常穩定的8.5V電壓由腳11輸出,整形靠LM1819內部NPN開關晶體管實現,其具體過程如圖4所示。 圖4 方波整形示意圖 V10是LM1819腳10的輸入信號,它是霍爾探頭輸出的信號經輸入電路處理而得到的方波;V9是LM1819腳9的輸出信號,即上述整形電路輸出信號。當V10為高電平時,LM1819內部NPN開關晶體管導通,V9輸出低電平;V10為低電平時,開關晶體管截止,V9輸出高電平(約等于腳11 輸出電 壓,因V11穩定在8.5V 左右). 同時,LM1819內部的 NPN開關晶體管導通和關閉時間都非常短,因而V9幅值非常穩定,上升沿和下降沿都非常陡,為后續方波頻率與電壓轉換電路提供一個理想的信號源。 (5)方波頻率與電壓轉換電路:該電路單元的功能是將霍爾探頭送來的反映車速的方波信號頻率轉換為LM1819內部函數發生器輸出的控制電壓。當車速變化(即方波信號頻率變化)時,控制電壓V 8也將隨之變化,以滿足: θ = 54 ( V 8 - 2. 1) 的最終要求。該電路單元由R1、C1、R2、C2、R8及諾頓放大器組成。R1、C1是諾頓放大器正向輸入端的微分輸入電路,其作用是將幅度恒定的方波信號轉化為加到腳6上的電流信號。諾頓放大器本質上是一個電流放大器,隨著方波頻率變化, R1、C1構成的微分電路充放電電流平均值也隨之變化,諾頓放大器是將正向輸入端的平均充放電電流變化轉化成其輸出電壓變化的核心器件。R2、R8、C2是諾頓放大器反饋網絡,R2+R8的大小決定諾頓放大器的增益,C2是抑制輸出脈沖的補償電容。 在電動車速里程表中,選用LM1819專用集成電路驅動動磁式電子轉速表的十字交叉機芯。將霍爾速度傳感器送來的方波信號的頻率轉化為驅動線圈N1和N2 的電流信號,使合成磁場H與水平線夾角θ能根據車速變化按線性規律改變,以便指針均勻、準確地指示車速。此裝置具有穩定性好、可靠性高、響應速度快、指示性能好、精度優良等特點,其應用前景十分廣闊。 3..4液晶顯示器LCM1010的應用 液晶顯示器已廣泛應用于儀器儀表產品、機電一體化產品、自動化控制系統、智能小區監控系統中。下面是對LCM1010的介紹: 其引腳如圖所示 (1) 它只有3 個輸入端: CS、LOAD、CL K, 具有接線簡單, 工作可靠。 (2) 被動顯示: 液晶顯示器本身不發光而是靠調制外界光進行顯示, 也就是說, 它不象發光的主動型器件那樣, 靠發光刺激人眼而實現顯示, 而是單純依靠對光的不同反射呈現的對比度達到顯示的目的。符合人的視覺習慣, 不容易引起疲勞, 而且外界光亮度越強, 其顯示內容越清晰。特別適用于室外和強光直射的場合。 (3) 低電壓功耗: 極低的工作電壓, 只有3~5V , 工作電流則只有幾個μA/ (cm) 2 可以和大規模集成電路直接匹配。 (4) 液晶顯示器采用平板式結構, 由兩片玻璃組成夾層盒, 目前都將液晶顯示器件制作成液晶顯示模塊(LCM) , 使用方便。本顯示器分為兩組: 第一組為6 位, 用以顯示總行駛里程數, 最大顯示值為: 999999 km ; 第二組為4 位, 用以顯示本次行駛里程數, 最大顯示值為:99919 km。 3.5傳感器的選擇 3.5.1霍爾傳感器的選擇 傳感器是一種以一定的精度把被測量轉換成為與之有確定對應關系的便于應用的某種物理量的測量裝置。傳感器的功能是感受被測信息并傳送出去。 近年來傳感器的應用日益擴大,地位也越來越重要。磁敏式傳感器按其結構可分為體型和結型兩大類。前者有霍爾傳感器,其主要材料有:InSb,InAs,Ge,Si,GaAs等和磁敏電阻(InSb,InAs);后者有磁敏二極管(Ge,Si)和磁敏晶體管(Si)等。它們都是利用半導體材料中的自由電子或空穴隨磁場改變其運動方向這一特性而制成的一種磁敏傳感器。磁敏傳感器的應用范圍可分為模擬用途和數字用途兩種。例如利用霍爾傳感器測量磁場強度,用磁敏電阻,磁敏二極管作無接觸式開關等。 霍爾傳感器是利用霍爾效應實現磁電轉換的一種傳感器。霍爾效應自1879年被發現至今已有100多年的發展歷史,但是直到本世紀50年代,由于微電子學的發展,才被人們重視和利用,開發了多種霍爾元件。我國從70年代開始研究霍爾元件,經過20余年的研究和開發,目前以能生產各種性能的霍爾元件,例如:普通型,高靈敏度型,低溫度系數型,測溫測磁型和開關式的霍爾元件。 由于霍爾傳感器具有靈敏度高,線性度好,穩定性高,體積小和耐高溫等特性,它已經廣泛應用于非電測量,自動控制,計算機裝置,和現代軍事技術等各個領域。 霍爾傳感器的工作原理主要是在線圈中放置一軟磁(可旋轉)這樣可以改變線圈內的磁通的變化,從而在線圈中產生的頻率與待測轉軸轉速成正比。 1基本測量電路 霍爾元件的基本測量電路如圖所示: file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D4E.tmp.png 控制電源I由電源E供給,電位器W調節控制電流的大小。霍爾元件的輸出接負載電阻R,R可以是放大器的輸入電阻或者是測量電路的內阻。由于霍爾元件必須在磁場與控制電流作用下,才會產生霍爾電勢U。所以在測量中,可以把I和B的乘積,或者I,或者B作為輸入信號,則霍爾元件的輸出電勢分別正比與IB或I或B。 2連接方式: 除了霍爾元件的基本電路形式之外,如果為了獲得較大的霍爾輸出電勢,可以采用幾片疊加的方式如圖所示。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D5F.tmp.png 下圖為直流供電情況。控制電流端并聯,由W1,W2調節兩個元件的霍爾輸出電勢,A,B為輸出端則它的輸出電示為單塊的兩倍。 下圖為交流供電情況。控制電流端串聯,各個元件的輸出端連接輸出變壓器B的初級繞組,變壓器的次級便有霍爾輸出電勢信號的疊加值輸出。 3霍爾電勢的輸出電路: 霍爾元件是一種四端器件,本身不帶放大器。霍爾電勢一般在毫伏量級,在實際使用的時候必須加差分放大器。輸出電路如圖所示的結構。 file:///C:\Users\junjie\AppData\Local\Temp\ksohtml\wps5D60.tmp.png 第四章系統的軟件設計 軟件設計在系統設計中占很大比重,好的軟件環境能使單片機硬件資源得以充分發揮,在軟件編程時應注重程序的結構化,以簡化編碼,方便調試. 本汽車里程表程序短小簡練,結構簡單,匯編完后為713字節,占用程序空間少,用2716 亦能勝任(采用25045主要為了方便功能擴充) . 1)里程計數原理:汽車磁電式傳感器輸出的脈沖信號是傳感器轉輪旋轉時磁場使舌簧管分開閉合而產生的脈沖.每一個脈沖代表行駛了一定的距離.設汽車行駛1km時驅動輪轉數為N,磁電式傳感器轉數為NF 則NF=N×I,其中I為傳動比. 設輪胎外徑為D,則汽車行駛1km驅動輪轉數為N=1000/πD,實際中由于輪胎承載變形使得輪胎外徑D變化,此時NXI=1000/πμD,其中μ為變形系數,一般為0. 93~0.96.則磁電式傳感器在汽車行駛1km時轉數NF=(1000/πμD)I.設傳感器轉輪上均勻安排m個磁片時,汽車行駛1km,傳感器輸出脈沖為mNF個. 2)程序中以INT1的輸入為里程計數脈沖,2051中斷1置為高中斷優先級以保證計數準確.定時器T0置為低中斷優先級,設T0每10ms中斷1次,中斷1次送1位顯示.每行駛1km向5045中寫1次數據. 3)以60H~62H單元為計數脈沖暫存單元.68H,69H單元為判斷數據暫存單元,6CH中為本次里程小數點位數值.當6CH單元內容達到0AH時清零.70~72H單元為讀出的總里程數. 本程序包括主程序和2個中斷服務程序,程序功能如下: 主程序:初始化,清零存儲單元,讀出總里程存入暫存單元,開CPU中斷、置中斷優先級,啟動定時器,等待中斷. INT1中斷服務程序:脈沖個數加1,判斷是否小數點數值為0.1 km,判斷是否行駛1km.不是則返回. T0 中斷服務程序:判斷是否顯示總里程,顯示方式初始化,顯示里程數,返回. 第五章 印制板圖的繪制 首先根據轉速里程表的結構特點,將整個硬件圖版分為兩部分,即打成主板和立板,主板2051,5045和驅動器LM1819,立板為顯示版,固定LCM1010顯示器,立板和主板用接口模塊固定。 下面就可以用PROTEL中的TRAXED來繪制和制板圖了 1首先C》CD PROTEL C:PROTEL》TRAXEDIT 進入編輯狀態 2選setup-pads 定義焊接板類型 (設置)setup-toggbe layers 打開和關閉層 默認當前的線寬,字符尺寸和捕獲柵格的大小。 3選place放置元件component 可以直接輸入元件名,也可以用回車查找元件表后確定要安置的元件。 型號 封裝 2051 DIP40 5045 DIP28 LM1819 DIP 4元件進行布線(選用手動布線) 用place-track 用鼠標左鍵定義起點,左鍵確認,用小鍵盤的 星 改變層。在本次繪制印制圖板中還用到了以下命令。 (塊)Block-copy Block-Define Block-Hide Block-Move Block-Insade Delete (放置)Place-Arc -Pad (庫管理)Library-Aold -Browse -List -New Library (屏幕控制)Zoom-Expand 印制板圖如圖 結束語 基于單片機的電子式轉速里程表的設計經過了3個多月的時間的設計,現在已經結束。在這次設計中我查閱了大量的關于單片機及測試技術等多方面的書籍,在老師的幫助下學到了許多沒有學過的知識,并且把四年來所學的MCS-51系列的單片機原理,單片機接口等課程重新溫習了一遍。同時,將其中的部分知識運用到本次設計之中,作到了理論與實際相結合,并使所學的理論知識融會貫通,提高了學習的質量。也培養了對設計的分析能力。 致謝 本次設計即是對多門課程的一次綜合性的運用,也是將理論知識運用到實際當中的一次嘗試。在設計中由于老師和同學的熱心幫助,解決了很多問題和難點。再次,我向他們表示忠心的感謝。另外由于缺乏經驗,缺點和不足再所難免。懇切的希望老師和同學們批評指正。 附錄 //****************************************************************/ //文件:zslcb.c //** //** //** #include<reg51.h> #include <absacc.h> //----------------------------------------------------- //*定義25045端口--------- sbit CS = P1^1; //*片選 sbit SO = P1^0; //*串行輸出 sbit SI = P1^3; //*串行輸入 sbit SCK = P1^2; //*串行時鐘輸入 char command; //*指令字 //------------------------------------- sbit K1 = P3^0; //計程開關 int pulsdate; //*計數脈沖變量 int lengthsdate1; //*保存本次里程數的整數 int lengthsdate2; //*保存本次里程數的小數 int totallength; //*總里程數 //------------------------------------------- int timer0date1; //*定時器0記數變量變1 int timer0date2; //*定時器0記數變量變2 //*初始化2051工作寄存器--------- void init(void) { TMOD = 0x11; //0001 0001B T0:16位定時中斷;T1:6位定時中斷,方式1 TL0 = 0xfe; //時鐘 0.00108506944444444444ms TH0 = 0xdb; //10ms=0x2400,0xffff-0x2400=0xdbff PT0 = 0; //定時器0中斷優先級 PT1 = 0; PX0 = 0; PX1 = 1; //外部中斷1中斷優先級 ET0 = 1; //掃描開始時開T0中斷 IE1 = 1; //開外部中斷1 IT1 = 1; //邊沿觸發 TR0 = 1; //開T0 中斷 EA = 1; //開總中斷 command= 0x00; pulsdate=0x00; lengthsdate1=0x00; lengthsdate2=0x00; timer0date1=0x00; timer0date2=0x00; } //*把狀態值State寫入25045狀態寄存器函數 void Write25045State(char State) { int i; SCK=0; CS=0; for(i=0;i<8;i++) { State<<1; SCK=1; SCK=0; SI=CY; } CS=1; } //*讀25045狀態寄存器函數,返回值為狀態寄存器的值 char Read25045State(void) { int i; char State0; CS = 0; Write25045State(0x06); Write25045State(0x05); SCK=0; for(i=0;i<8;i++) { SCK=1; SCK=0; CY =SO; State0>>1; } CS=1; return State0; } //*從25045的data1存儲器中讀取數據 char Read25045MEM(char data1) { int i; char out1; CS = 1; CS = 0; command = 0x03; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } command= data1; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } SCK=0; for(i=0;i<8;i++) { SCK=1; SCK=0; CY =SO; out1>>1; } CS=1; return out1; } //*把date2寫出25045MEM void Write25045MEM(char data2,char Memory1) { int i; CS = 1; CS = 0; command = 0x02; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } command= Memory1; for(i=0;i<8;i++) { command<<1; SCK=0; SI=CY; SCK=1; } for(i=0;i<8;i++) { data2<<1; SCK=0; SI=CY; SCK=1; } CS=1; } //*X25045芯片復位函數 void reset25045(void) { CS=0; CS=1; } // void init25045(void) { int i; char data5; CS=0; Write25045State(0x06); Write25045State(0x01); data5=0x04; for(i=0;i<8;i++) { data5<<1; SCK=0; SI=CY; SCK=1; } CS=1; } //*寫LCM1010函數 void Writelcm1010(char data3 , char data6) { ; } //*定義外部中斷1函數 void Int1(void) interrupt 2 { char totall; char totalh; pulsdate++; lengthsdate2+=16; if(lengthsdate2>10000) lengthsdate2-=10000; if(pulsdate>=624) { lengthsdate2=0; lengthsdate1++; pulsdate-=624; } if(pulsdate==0) { totallength++; totall=totallength; Write25045MEM(totall,0x00); totalh=(totallength>>8); Write25045MEM(totalh,0x01); } } //*定義定時器0中斷函數 void Timer0(void) interrupt 1 { char i; bit j; bit k; char a; timer0date1++; timer0date2++; if(timer0date1>=4) { timer0date1-=4; } if (k==K1) { a++; } else { k=K1; a=0; } if(i>=20) { j=k; a=20; } if(!j) { switch(timer0date1) { case 0: i=lengthsdate2/100; Writelcm1010(i,timer0date1); break; case 1: i=lengthsdate1%10; Writelcm1010(i,timer0date1); break; case 2: i=(lengthsdate1/10)%10; Writelcm1010(i,timer0date1); break; case 3: i=(lengthsdate1/100)%10; Writelcm1010(i,timer0date1); break; default: break; } } else { switch(timer0date1) { case 0: i=totallength%10; Writelcm1010(i,timer0date1); break; case 1: i=(totallength/10)%10; Writelcm1010(i,timer0date1); break; case 2: i=(totallength/100)%10; Writelcm1010(i,timer0date1); break; case 3: i=(totallength/1000)%10; Writelcm1010(i,timer0date1); break; default: break; } } } //*主函數 void main(void) { char totall; char totalh; init(); init25045(); totall=Read25045MEM(0x00); totalh=Read25045MEM(0x01); totallength=totalh; totallength<<8; totallength=totall; while(1) { if(timer0date2>=30) { timer0date2=0; init25045(); } }
|