林 游 張俊杰 易 凡
摘 要:隨著傳感器技術(shù)的不斷發(fā)展,如何更好地對(duì)信號(hào)進(jìn)行處理越來越重要。利用霍爾傳感器產(chǎn)生的電壓作為輸入信號(hào),經(jīng)單片機(jī)采集并進(jìn)行A/D轉(zhuǎn)換和串行通信后,最終在PC機(jī)上顯示出來。該系統(tǒng)采用的軟硬件實(shí)現(xiàn)方法,操作過程簡(jiǎn)單方便,得到結(jié)果與示波器上顯示的曲線相符,具有重要的參考價(jià)值。
關(guān)鍵詞:霍爾傳感器;單片機(jī);串行通信;MSComm通信控件
中圖分類號(hào):TP393.04 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004-373X(2009)04-191-04
Design of Hall Sensor Signal Acquisition and Display System
LIN You,ZHANG Junjie,YI Fan
(School of Physics Science and Technology,Wuhan University,Wuhan,430072,China)
Abstract:With the continuous development of sensor technology,how to process signal becomes more and more important.A system whose voltage signal is generating from hall sensor,realizing A/D conversion and serial communication by microcontroller,and it can display comparative results on the computer at last.This software and hardware implementation method used in the system is simple and convenient,the showing result is identical with the curve displaying on the oscillograph.The method has important reference value.
Keywords:Hall sensor;single chip computer;serial communication;MSComm control
0 引 言
近年來,隨著傳感器技術(shù)的不斷發(fā)展,特別是單片機(jī)技術(shù)的廣泛應(yīng)用,采用單片機(jī)與PC機(jī)構(gòu)成的小型傳感器測(cè)控系統(tǒng)越來越多。因?yàn)樗鼈兒芎玫亟Y(jié)合了單片機(jī)的價(jià)格低,功能強(qiáng),抗干擾能力好,溫限寬和面向控制等優(yōu)點(diǎn)及PC機(jī)操作系統(tǒng)中Windows的高級(jí)用戶界面、多任務(wù)、自動(dòng)內(nèi)存管理等特點(diǎn)[1]。在這種測(cè)控系統(tǒng)中,單片機(jī)主要進(jìn)行實(shí)時(shí)數(shù)據(jù)采集及預(yù)處理,然后通過串行口將數(shù)據(jù)送給PC機(jī),PC機(jī)再對(duì)這些數(shù)據(jù)進(jìn)一步處理,例如求均值、方差、畫動(dòng)態(tài)曲線與計(jì)算給定、打印輸出的各種參數(shù)等任務(wù)。
這里采用霍爾傳感器作為前端進(jìn)行數(shù)據(jù)采集,然后在單片機(jī)控制下進(jìn)行A/D轉(zhuǎn)換,并將信號(hào)通過串口送給PC機(jī)進(jìn)行繪圖處理。
1 系統(tǒng)介紹
系統(tǒng)可以分為3個(gè)部分。第一部分是信號(hào)源,由霍爾傳感器產(chǎn)生電壓信號(hào),信號(hào)通過差分放大,濾波得到較清晰的信號(hào)[2];第二部分是信號(hào)經(jīng)過A/D轉(zhuǎn)換送入單片機(jī)進(jìn)行處理,再通過串行通信送入PC機(jī)處理得到結(jié)果;第三部分是數(shù)據(jù)的顯示,這部分是通過VB的繪圖程序來完成,顯示結(jié)果以v-x關(guān)系圖來顯示。系統(tǒng)總流程如圖1所示。
2 硬件設(shè)計(jì)及實(shí)現(xiàn)
2.1 霍爾傳感器
霍爾傳感器是利用霍爾效應(yīng)實(shí)現(xiàn)磁電轉(zhuǎn)換的一種傳感器。它具有靈敏度高,應(yīng)用廣泛的特點(diǎn)。其工作原理如圖2所示:一塊半導(dǎo)體薄片,其長(zhǎng)度為L(zhǎng),寬度為B ,厚度為D,置于磁感應(yīng)強(qiáng)度為B的磁場(chǎng)中,在相對(duì)的兩邊通以控制電流I,且磁場(chǎng)方向與電流方向正交,則在半導(dǎo)體的兩邊將產(chǎn)生一個(gè)與控制電流和磁感應(yīng)強(qiáng)度乘積成正比的電勢(shì)U,該電勢(shì)即為霍爾電壓,用UH表示,即UH=KHIB[3],其中KH為霍爾元件的靈敏度,半導(dǎo)體薄片就是霍爾元件。
同理有2塊磁場(chǎng)相同的永久磁鐵,同極性相對(duì)放置。當(dāng)其表面積遠(yuǎn)遠(yuǎn)大于兩者的間距時(shí),正中間磁感應(yīng)強(qiáng)度為0,在縫隙間沿x軸形成一個(gè)均勻梯度的磁場(chǎng)dB/dx=K(K為常數(shù))。B=0處作為位移x的參考原點(diǎn),則x=0時(shí),B=0,UH=0。當(dāng)它們中間的霍爾元件移動(dòng)到x處時(shí),UH大小由x處的B決定。由公式UH = KHIB可知:保持I不變,則dUH/dx=IKHdB/dx= KHI=K,積分后得UH=Kx,即霍爾電勢(shì)與位移成比例[3,4]。磁場(chǎng)梯度越大,靈敏度越高,磁場(chǎng)變化越均勻,UH和x的線性越好[4]。
本系統(tǒng)中的第一部分由圖3中的霍爾傳感器裝置提供,由霍爾元件(A44E)、差分放大器和濾波器組成[5]。其輸出電壓與霍爾元件位移成比例,具有較高靈敏度,能夠產(chǎn)生出符合要求的電壓信號(hào)。
2.2 模/數(shù)轉(zhuǎn)換原理
該系統(tǒng)中的單片機(jī)是使用Atmel公司的AT89C51微控制器,與MCS-51單片機(jī)產(chǎn)品兼容,具有4 KB閃爍可編程可擦除只讀存儲(chǔ)器、1 000次擦寫周期、32個(gè)可編程I/O口線 、2個(gè)16位定時(shí)器/計(jì)數(shù)器、5個(gè)中斷源 、UART串行通道等特點(diǎn)。在設(shè)計(jì)中主要用它來控制傳感器信號(hào)發(fā)生裝置輸出的模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),進(jìn)行數(shù)據(jù)采集和顯示以及串行通信。
經(jīng)過與標(biāo)準(zhǔn)量比較處理后的模擬量轉(zhuǎn)化成以二進(jìn)制數(shù)值表示的離散信號(hào)的轉(zhuǎn)換器,簡(jiǎn)稱A/D轉(zhuǎn)換器.轉(zhuǎn)換器的輸入量一般為直流電流或電壓,輸出量為二進(jìn)制數(shù)碼的數(shù)字量。該設(shè)計(jì)中使用ADC0809轉(zhuǎn)換器。過程如下:首先它可以將其看成由一個(gè)8位A/D轉(zhuǎn)換器和一個(gè)8通道模擬多路開關(guān)組合而成,IN0~IN7分別對(duì)應(yīng)8路模擬量輸入,由引腳ADDA,ADDB和ADDC決定具體是哪一條模擬量來進(jìn)行轉(zhuǎn)化[6]。在引腳START和ALE上加1個(gè)正脈沖后,通道選擇碼立即鎖定并同時(shí)ADC轉(zhuǎn)換啟動(dòng)。轉(zhuǎn)換開始后OE引腳加1個(gè)正脈沖,將輸出緩沖器的三態(tài)門打開,使轉(zhuǎn)換后的數(shù)字量能夠傳送至數(shù)據(jù)總線[6,7]。
2.3 數(shù)據(jù)采集和顯示
放大處理后的電壓信號(hào),雖然在幅值上達(dá)到了可以處理的范圍,但模/數(shù)電壓轉(zhuǎn)換的范圍是0~5 V,而傳感器輸出的電壓存在負(fù)值,為了使電壓匹配,信號(hào)電壓在接入模/數(shù)轉(zhuǎn)換器前可以加一級(jí)加法電路,將電壓信號(hào)全部轉(zhuǎn)換為正值。放大電路、濾波電路和加法電路均使用LM324實(shí)現(xiàn),硬件電路如圖4所示。
數(shù)據(jù)顯示電路分為數(shù)碼管顯示電路和PC機(jī)顯示部分。數(shù)碼管顯示用于單片機(jī)上,單片機(jī)分別通過段顯碼和位顯碼對(duì)數(shù)碼管上顯示的數(shù)據(jù)進(jìn)行控制。段顯碼控制顯示的數(shù)據(jù)內(nèi)容,位顯碼則控制數(shù)碼管亮或滅。段顯碼是單片機(jī)通過可編程通用并行接口8155逐位傳到8位移位寄存器74LS164中去,再由它將串行傳輸數(shù)據(jù)變?yōu)椴⑿袛?shù)據(jù)傳給數(shù)碼管顯示[6]。而位顯碼是單片機(jī)通過8155一次性送到數(shù)據(jù)鎖存器74LS244中鎖存,再去驅(qū)動(dòng)數(shù)碼管并控制其亮或滅[6,7]。
2.4 串行通信
該設(shè)計(jì)中采用異步串行通信的方式。而AT89C51單片機(jī)的串行口,當(dāng)工作于方式1,2和3時(shí),UART(通用異步接收和發(fā)送)可以實(shí)現(xiàn)單片機(jī)系統(tǒng)與PC機(jī)之間的串行通信。PC機(jī)串行通信主要是通過串行口芯片8251實(shí)現(xiàn)的。8251有10個(gè)寄存器,端口地址從3F8H~3FEH(COM1),可以通過對(duì)8251編程來指定通信協(xié)議即通信的波特率、數(shù)據(jù)位數(shù)、奇偶類型和停止位長(zhǎng)度。另外由于PC機(jī)串口的電平是RS 232電平,不與單片機(jī)串口的TTL電平兼容,因此需要在它們之間進(jìn)行電平轉(zhuǎn)換[7-9]。傳統(tǒng)的方法是使用MC1488將TTL電平轉(zhuǎn)換成RS 232電平,用MC1488實(shí)現(xiàn)反向轉(zhuǎn)換,由于MC1488需要±12 V電壓,使用中非常不便[8],故該設(shè)計(jì)采用MAXIM 公司的產(chǎn)品片MAX232來實(shí)現(xiàn),由單+5 V的電壓供電,既可實(shí)現(xiàn)TTL到RS 232的電平轉(zhuǎn)換,也可實(shí)現(xiàn)RS 232到TTL電平的轉(zhuǎn)換,使用十分方便,具體的線路如圖5所示[9]。
3 軟件實(shí)現(xiàn)部分
3.1 單片機(jī)部分
AT89C51系列單片機(jī)的串行口可工作于4種不同的方式。在該程序中,單片機(jī)串行口工作設(shè)定為方式1,即數(shù)據(jù)經(jīng)TXD端發(fā)送,RXD端接收,波特率2 400 b/s,10位構(gòu)成一幀,1位起始位,8位數(shù)據(jù)位,1位停止位,初值0F3H,SMOD=1[7]。
由于單片機(jī)多應(yīng)用于實(shí)時(shí)性較強(qiáng)的控制場(chǎng)合,為了盡量少占用CPU的時(shí)間,充分發(fā)揮CPU的功能。該系統(tǒng)在單片機(jī)程序設(shè)計(jì)中采用中斷方式與PC機(jī)進(jìn)行通信。主程序只進(jìn)行串行通信、數(shù)碼管實(shí)時(shí)顯示、模/數(shù)轉(zhuǎn)換結(jié)果的初始化和循環(huán)等待串行中斷工作,當(dāng)接收到PC機(jī)發(fā)來的信號(hào)時(shí),就轉(zhuǎn)入中斷服務(wù)程序,進(jìn)行A/D轉(zhuǎn)換,并向PC機(jī)發(fā)送數(shù)據(jù)[1]。中斷服務(wù)子程序流程圖如圖6所示。
以下僅給出串行通信初始化和中斷服務(wù)子程序代碼[6,7]:
串行通信初始化程序?yàn)椋?/p>
MOV TMOD,#20H;定時(shí)器T1初始化
MOV TH1,#0F3H;計(jì)數(shù)器初值
MOV TL1,#0F3H
MOV SCON,#50H ;串行口初始化2 400,8,1,n
MOV PCON,#80H ;SMOD=1
SETB TR1;啟動(dòng)定時(shí)器T1
SETB EA ;開中斷
SETB ES ;允許串行口中斷
中斷服務(wù)子程序?yàn)椋?/p>
SERVE: CLR EA ;關(guān)中斷
CLR RI ;清接收中斷標(biāo)志
PUSH DPH;保護(hù)現(xiàn)場(chǎng)
PUSH DPL
PUSH ACC
RECEIVE: MOV A,SBUF ;接收PC機(jī)發(fā)過來的數(shù)據(jù)
ACALL AD;啟動(dòng)A/D轉(zhuǎn)換
SENDBACK: MOV SBUF,A ;將數(shù)據(jù)回送給PC機(jī)
WAIT:JNB TI,WAIT ;發(fā)送器不空則循環(huán)等待
CLR TI
…
RETURN: POP ACC ;恢復(fù)現(xiàn)場(chǎng)
POP DPL
POP DPH
SETB EA;開中斷
RETI;返回
3.2 PC機(jī)部分
在Windows 中,串行口的硬件設(shè)備通過通信驅(qū)動(dòng)程序Comm.drv 與Windows 進(jìn)行連接,通過使用標(biāo)準(zhǔn)的Windows API 函數(shù)發(fā)送和接收數(shù)據(jù)。而MSComm 控件通信功能的實(shí)現(xiàn),是調(diào)用Windows API 函數(shù),并通過設(shè)置其屬性和事件,來定義Windows 通信驅(qū)動(dòng)程序的API 函數(shù)接口[10],為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)便方法。
MSComm 控件提供了2種處理通信的方法:一是事件驅(qū)動(dòng)方法,也就是利用OnComm 事件,這是一種處理串行端口活動(dòng)非常有效的方法,不僅能夠利用MSComm 控件來偵測(cè)并處理通信事件和錯(cuò)誤,而且還具有程序響應(yīng)及時(shí)、可靠性高等優(yōu)點(diǎn);另一種方法是查詢法,MSComm控件的CommEvent 屬性返回通信中產(chǎn)生的事件和錯(cuò)誤類型,由通信控件自動(dòng)檢測(cè)和跟蹤通信狀態(tài)后設(shè)置。因此可以直接讀取CommEvent 屬性的值來檢測(cè)通信中產(chǎn)生的事件和錯(cuò)誤類型,這種方法比較簡(jiǎn)單,常用在小的自含程序中[11]。
該設(shè)計(jì)程序即采用查詢法讀取InBufferCount的屬性值來接收單片機(jī)發(fā)來的數(shù)據(jù)。實(shí)驗(yàn)主程序?qū)Υ诔跏蓟嫵鲎鴺?biāo)系;每單擊‘繪點(diǎn)鍵程序向單片機(jī)發(fā)送一個(gè)任意數(shù),告訴單片機(jī)將模數(shù)轉(zhuǎn)換結(jié)果發(fā)送過來,然后采用查詢方式接收該數(shù)據(jù),進(jìn)行相應(yīng)的轉(zhuǎn)化后把該點(diǎn)繪在坐標(biāo)系上,一次數(shù)據(jù)采集結(jié)束。
MSComm控件的常用屬性[10,11]:CommPort:設(shè)置并返回通信端口號(hào);Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位;PortOpen:設(shè)置并返回通信端口的狀態(tài)也可以打開和關(guān)閉端口;Input:從接收緩沖區(qū)返回和刪除字符;
Output:向傳輸緩沖區(qū)寫1個(gè)字符串。
該實(shí)驗(yàn)的Com1口串行通信初始化程序如下:
Private Sub Form_Load()
MSComm1.CommPort = 1,設(shè)置端口號(hào)位Com1
MSComm1.Settings = "2400,n,8,1" ,對(duì)com1口初始化,波特率2 400,8位數(shù)據(jù)位,1位停止位
MSComm1.InputLen = 0
MSComm1.PortOpen = True ,打開串口
MSComm1.RThreshold = 1,1次接收1個(gè)數(shù)據(jù)
End Sub
從圖7中PC機(jī)界面顯示位移-電壓坐標(biāo)圖,表1記錄的數(shù)據(jù)以及圖8在示波器上顯示的霍爾線性電路理想電壓-位移曲線圖相比較,可以發(fā)現(xiàn)由于傳感器實(shí)驗(yàn)臺(tái)受外界干擾等原因使得輸出信號(hào)輸出誤差在所難免,而且沒有電平轉(zhuǎn)換,使得VB繪圖中得到的數(shù)值存在負(fù)值;但是可以在圖中看到傳感器輸出的電壓值在正負(fù)之間有明顯的對(duì)稱性,與要求輸出的理想輸出信號(hào)波形相符合,證明本系統(tǒng)運(yùn)行良好,設(shè)計(jì)的非常成功。
4 結(jié) 語(yǔ)
對(duì)于目前廣泛應(yīng)用的Windows環(huán)境下實(shí)現(xiàn)PC機(jī)與單片機(jī)之間的通信問題具有重要的參考價(jià)值。
參 考 文 獻(xiàn)
[1]羅紅萍,彭云柯.基于VB的單片機(jī)與PC機(jī)串行通信程序設(shè)計(jì)[J].機(jī)械工程與自動(dòng)化,2005,70(3):70-72.
[2]康華光.電子技術(shù)基礎(chǔ)(模擬部分)[M].北京:高等教育出版社,1999.
[3]孫傳友,孫曉斌.感測(cè)技術(shù)基礎(chǔ) [M].北京:電子工業(yè)出版社,2004.
[4]何希才,薛永毅.傳感器及其應(yīng)用實(shí)例[M].北京:機(jī)械工業(yè)出版社,2004.
[5]盧文科,朱長(zhǎng)純,方建安.霍爾元件與電子檢測(cè)應(yīng)用電路[M].北京:中國(guó)電力出版社,2005.
[6]李建忠.單片機(jī)原理及應(yīng)用 [M].西安:西安電子科技大學(xué)出版社,2002.
[7]李廣弟,朱月秀,冷祖祁.單片機(jī)基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2001.
[8]張淑儉.PC機(jī)與單片機(jī)之間的串行通信[J].電腦知識(shí)與技術(shù),2005(14):22-25.
[9]楊會(huì)成,卓芝強(qiáng).單片機(jī)與PC機(jī)串行數(shù)據(jù)通信的工程實(shí)踐[J].硬件縱橫,2003(5):50-54.
[10]許永洪,符影杰,江峰,等.基于VB6.0的串口通信實(shí)現(xiàn)[J].儀器儀表用戶,2004(1):67-68.
[11]朱旻.在VB下PC機(jī)與MCS-51單片機(jī)的串行通信[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2001(1):68-70.
作者簡(jiǎn)介 張俊杰 1981年出生,碩士研究生。
易 凡 1955年出生,副教授,碩士研究生導(dǎo)師。