這幾年來,隨著不斷發展的傳感器技術,單片機技術的廣泛應用,越來越多的采用單片機與PC機構成的小型傳感器測控系統。關鍵在于它們很好地結合了單片機的價格低,功能強,抗干擾能力好,溫限寬和面向控制等優點及Pc機操作系統中Windows的高級用戶界面、多任務、自動內存管理等特點。在這種測控系統中,單片機主要進行實時數據采集及預處理,然后通過串行口將數據送給PC機,PC機再對這些數據進一步處理,例如求均值、方差、畫動態曲線與計算給定、打印輸出的各種參數等任務。 這里采用霍爾傳感器作為前端進行數據采集,然后在單片機控制下進行A/D轉換,并將信號通過串口送給PC機進行繪圖處理。 1 系統介紹 系統可以分為3個部分。第一部分是信號源,由霍爾傳感器產生電壓信號,信號通過差分放大,濾波得到較清晰的信號;第二部分是信號經過A/D轉換送入單片機進行處理,再通過串行通信送入PC機處理得到結果;第三部分是數據的顯示,這部分是通過VB的繪圖程序來完成,顯示結果以v-x關系圖來顯示。系統總流程如圖1所示。 2 硬件設計及實現 2.1 霍爾傳感器 霍爾傳感器是利用霍爾效應實現磁電轉換的一種傳感器。它具有靈敏度高,應用廣泛的特點。其工作原理如圖2所示:一塊半導體薄片,其長度為L,寬度為B,厚度為D,置于磁感應強度為B的磁場中,在相對的兩邊通以控制電流I,且磁場方向與電流方向正交,則在半導體的兩邊將產生一個與控制電流和磁感應強度乘積成正比的電勢U,該電勢即為霍爾電壓,用UH表示,即UH=KHIB,其中KH為霍爾元件的靈敏度,半導體薄片就是霍爾元件。 同理有2塊磁場相同的永久磁鐵,同極性相對放置。當其表面積遠遠大于兩者的間距時,正中間磁感應強度為O,在縫隙間沿z軸形成一個均勻梯度的磁場dB/dx=K(K為常數)。B=0處作為位移x的參考原點,則x=O時,B=O,UH=O。當它們中間的霍爾元件移動到x處時,UH大小由x處的B決定。由公式UH=KHIB可知:保持I不變,則dUH/dx=IKHdB/dx=KHI=K,積分后得UH=Kx,即霍爾電勢與位移成比例。磁場梯度越大,靈敏度越高,磁場變化越均勻,UH和x的線性越好。 本系統中的第一部分由圖3中的霍爾傳感器裝置提供,由霍爾元件(A44E)、差分放大器和濾波器組成。其輸出電壓與霍爾元件位移成比例,具有較高靈敏度,能夠產生出符合要求的電壓信號。 2.2 模/數轉換原理 該系統中的單片機是使用Atmel公司的AT89C51微控制器,與MCS一51單片機產品兼容,具有4 KB閃爍可編程可擦除只讀存儲器、1 000次擦寫周期、32個可編程I/O口線、2個16位定時器/計數器、5個中斷源、UART串行通道等特點。在設計中主要用它來控制傳感器信號發生裝置輸出的模擬信號轉換成數字信號,進行數據采集和顯示以及串行通信。 經過與標準量比較處理后的模擬量轉化成以二進制數值表示的離散信號的轉換器,簡稱A/D轉換器.轉換器的輸入量一般為直流電流或電壓,輸出量為二進制數碼的數字量。該設計中使用ADC0809轉換器。過程如下:首先它可以將其看成由一個8位A/D轉換器和一個8通道模擬多路開關組合而成,INO~IN7分別對應8路模擬量輸人,由引腳ADDA,ADDB和ADDC決定具體是哪一條模擬量來進行轉化。在引腳START和ALE上加1個正脈沖后,通道選擇碼立即鎖定并同時ADC轉換啟動。轉換開始后OE引腳加1個正脈沖,將輸出緩沖器的三態門打開,使轉換后的數字量能夠傳送至數據總線。 2.3 數據采集和顯示 放大處理后的電壓信號,雖然在幅值上達到了可以處理的范圍,但模/數電壓轉換的范圍是0~5 V,而傳感器輸出的電壓存在負值,為了使電壓匹配,信號電壓在接人模/數轉換器前可以加一級加法電路,將電壓信號全部轉換為正值。放大電路、濾波電路和加法電路均使用LM324實現,硬件電路如圖4所示。 數據顯示電路分為數碼管顯示電路和PC機顯示 部分。數碼管顯示用于單片機上,單片機分別通過段顯 碼和位顯碼對數碼管上顯示的數據進行控制。段顯碼 控制顯示的數據內容,位顯碼則控制數碼管亮或滅。段 顯碼是單片機通過可編程通用并行接口8155逐位傳到 8位移位寄存器74LSl64中去,再由它將串行傳輸數據 變為并行數據傳給數碼管顯示。而位顯碼是單片機 通過8155一次性送到數據鎖存器74L$244中鎖存,再 去驅動數碼管并控制其亮或滅。 2.4 串行通信 該設計中采用異步串行通信的方式。而AT89C51 單片機的串行口,當工作于方式1,2和3時,UART(通用異步接收和發送)可以實現單片機系統與PC機之間的串行通信。PC機串行通信主要是通過串行口芯片8251實現的。8251有10個寄存器,端口地址從3F8H~3FEH(c0M1),可以通過對8251編程來指定通信協議即通信的波特率、數據位數、奇偶類型和停止位長度。另外由于Pc機串口的電平是RS 232電平,不與單片機串口的TTL電平兼容,因此需要在它們之間進行電平轉換。傳統的方法是使用MCl488將TTL電平轉換成RS 232電平,用MCl488實現反向轉換,由于MCl488需要±12 V電壓,使用中非常不便,故該設計采用MAXIM公司的產品片MAX232來實現,由單+5 V的電壓供電,既可實現TTL到RS 232的電平轉換,也可實現RS 232到TTL電平的轉換,使用十分方便,具體的線路如圖5所示。 3 軟件實現部分 3.1 單片機部分 AT89C51系列單片機的串行口可工作于4種不同的方式。在該程序中,單片機串行口工作設定為方式1,即數據經TxD端發送,RxD端接收,波特率2 400 b/s,10位構成一幀,l位起始位,8位數據位,1位停止位,初值0F3H,SMOD=1。 由于單片機多應用于實時性較強的控制場合,為了盡量少占用CPU的時間,充分發揮CPU的功能。該系統在單片機程序設計中采用中斷方式與PC機進行通信。主程序只進行串行通信、數碼管實時顯示、模/數轉換結果的初始化和循環等待串行中斷工作,當接收到PC機發來的信號時,就轉人中斷服務程序,進行A/D轉換,并向Pc機發送數據。中斷服務子程序流程圖如圖6所示。 以下僅給出串行通信初始化和中斷服務子程序代碼: 串行通信初始化程序為: 3.2 PC機部分 在Windows中,串行口的硬件設備通過通信驅動程序comm.drv與windows進行連接,通過使用標準的windows API函數發送和接收數據。而MSComm控件通信功能的實現,是調用windows API函數,并通過設置其屬性和事件,來定義windows通信驅動程序的API函數接口,為應用程序提供了通過串行接口收發數據的簡便方法。 MSCOmm控件提供了2種處理通信的方法:一是事件驅動方法,也就是利用OnComm事件,這是一種處理串行端口活動非常有效的方法,不僅能夠利用MSCOmm控件來偵測并處理通信事件和錯誤,而且還具有程序響應及時、可靠性高等優點;另一種方法是查詢法,MSComm控件的C0mmEvent屬性返回通信中產生的事件和錯誤類型,由通信控件自動檢測和跟蹤通信狀態后設置。因此可以直接讀取CommEvent屬性的值來檢測通信中產生的事件和錯誤類型,這種方法比較簡單,常用在小的自含程序中。 該設計程序即采用查詢法讀取InBufferCount的屬性值來接收單片機發來的數據。實驗主程序對串口初始化并畫出坐標系;每單擊‘繪點’鍵程序向單片機發送一個任意數,告訴單片機將模數轉換結果發送過來,然后采用查詢方式接收該數據,進行相應的轉化后把該點繪在坐標系上,一次數據采集結束。 MSComm控件的常用屬性:CommPort:設置并返回通信端口號;Settings:以字符串的形式設置并返回波特率、奇偶校驗、數據位、停止位;Pott()pen:設置并返回通信端口的狀態也可以打開和關閉端口;Input:從接收緩沖區返回和刪除字符;Output:向傳輸緩沖區寫1個字符串。 該實驗的Coml口串行通信初始化程序如下: 從圖7中PC機界面顯示位移一電壓坐標圖,表1記錄的數據以及圖8在示波器上顯示的霍爾線性電路理想電壓一位移曲線圖相比較,可以發現由于傳感器實驗臺受外界干擾等原因使得輸出信號輸出誤差在所難免,而且沒有電平轉換,使得VB繪圖中得到的數值存在負值;但是可以在圖中看到傳感器輸出的電壓值在正負之間有明顯的對稱性,與要求輸出的理想輸出信號波形相符合,證明本系統運行良好,設計的非常成功。 4 結 語 對于目前廣泛應用的WindOWs環境下實現PC機與單片機之間的通信問題具有重要的參考價值。 |