韋 偉,周凌翱,劉 青
(南京鐘山職業(yè)技術(shù)學(xué)院 江蘇 南京 210049)
紅外測距[1]是一種非直接接觸的測量方式,由于其結(jié)構(gòu)簡單、抗干擾性強(qiáng)、成本低等優(yōu)點,在測量測繪上得到廣泛的運(yùn)用。該系統(tǒng)由紅外發(fā)射接收傳感器、A/D轉(zhuǎn)換電路、信號采集處理、數(shù)據(jù)顯示電路等組成,體積小,操作簡單,非常適合于近距離的測量應(yīng)用。本系統(tǒng)形成了一套完整的硬件系統(tǒng)和軟件開發(fā)平臺,便于功能的改造,擴(kuò)展及其他應(yīng)用研究。
本控制系統(tǒng)的MCU采用STC公司的STC89LE516RD,它是MCS-51系列的派生產(chǎn)品,在指令系統(tǒng)、硬件結(jié)構(gòu)和片內(nèi)資源上與標(biāo)準(zhǔn)8052單片機(jī)完全兼容,最高時鐘頻率90 MHz,低功耗,可支持(ISP IAP)編程。 紅外測距采用GP2Y0A02YK芯片,它采用光學(xué)三角測量的方法,測量精度受反射物體的顏色和光線的影響比較小。內(nèi)部集成了紅外接收發(fā)射兩個模塊,感應(yīng)距離為 20 cm 至 150 cm,寬范圍供電(0~7 V),不需要多余的外部接口電路,也不需要額外的處理電路,簡化了底層控制器的外圍電路,使用方便。感應(yīng)距離與輸出電壓的關(guān)系如圖1所示[2]。
由于在20~150 cm范圍內(nèi)測量距離與輸出電壓成曲線變化,測量輸出電壓將其進(jìn)行A/D轉(zhuǎn)換,對轉(zhuǎn)換后的數(shù)字量信息進(jìn)行歸算得到測量的距離,在將其結(jié)果用數(shù)碼管或者上傳到PC機(jī)進(jìn)行實時顯示。結(jié)構(gòu)圖如圖2所示。
圖1 測量距離與輸出電壓關(guān)系圖Fig.1 Measuring distance and output voltage curve
圖2 系統(tǒng)結(jié)構(gòu)圖Fig.2 System structure
AD/DA采用PHILIP的PCF8591芯片,精度為8 bit。有4路A/D轉(zhuǎn)換輸入,一路D/A轉(zhuǎn)換輸出,既可以作A/D也可以作D/A轉(zhuǎn)換。A/D轉(zhuǎn)換為逐次比較型,采用典型的I2C總線接口器件尋址方法,即總線地址由器件地址、引腳地址和方向位組成。通過控制字寄存器對4路模擬量的輸入方式進(jìn)行編程,實現(xiàn)A/D轉(zhuǎn)換功能[3]。原理圖如圖3所示。ADC的轉(zhuǎn)換公式為:VOUT=(VADJ-VAGND)·256/(VREF-VAGND)。
圖3 AD/DA原理圖Fig.3 AD/DA schematic
24LC02作為EEPROM,輸出信號采用I2C方式與STC89LE516 MCU通信,SDA和SCL分別由是啟動和關(guān)閉I2C的控制信號[4]。當(dāng)I2C總線空閑時,SDA和SCL都處于高電平狀態(tài)。當(dāng)SCL保持高電平時,一個SDA下降沿表示初始化一個起始條件。當(dāng)SCL保持高電平時,SDA的一個上升沿表示初始化一個停止條件。起始和停止條件都是由MCU發(fā)起的。傳輸數(shù)據(jù)開始前,MCU控制24LC02的SDA和SCL發(fā)送起始位,傳輸數(shù)據(jù)結(jié)束時,控制SDA和SCL發(fā)送停止位。輸出到SDA線上的每個字節(jié)必須是8位,每次傳輸?shù)淖止?jié)數(shù)則不受限制,起始條件后緊跟著地址字節(jié),每個字節(jié)必須有一個確認(rèn)位(ACK),如果 MCU在完成其他功能之前不能傳輸另一數(shù)據(jù)的完整字節(jié),24LC02會保持時鐘線SCL為低,使其進(jìn)入等待狀態(tài),當(dāng)MCU準(zhǔn)備好接收并釋放SCL信號后,數(shù)據(jù)傳輸繼續(xù)進(jìn)行[5]。
1)PCF8591 AD 轉(zhuǎn)換程序
電路上PCF8591的第0通道采集的是GP2Y0A02YK芯片的模擬量。采用KEIL軟件環(huán)境編寫AD轉(zhuǎn)換及傳輸程序。在主函數(shù)中編寫讀PCF8591第0通道數(shù)據(jù)的函數(shù)如下:
當(dāng)模擬量信號為3.3 V時,Val返回255,當(dāng)模擬量信號為0 V時,Val返回0,呈線性的關(guān)系,計算得到每伏電壓的數(shù)值為 77.27。
2)數(shù)據(jù)歸算問題
圖1所示測量距離與輸出電壓關(guān)系并不是線性的關(guān)系,在20~150 cm范圍內(nèi)測量距離與輸出電壓近似成二次曲線的關(guān)系。用MATLAB編寫程序,輸入坐標(biāo)值求解關(guān)系式,將圖一擬合成如下函數(shù)關(guān)系式:y=35x2-160x+191(其中x為紅外輸出電壓,y為測量距離值),最后將其歸算成距離量。
num=ReadADC(0);//采集第 0 通道的模擬量
x=(num)/77.27;//將 AD 轉(zhuǎn)換的數(shù)換算成電壓值,以便代入函數(shù)。
y=35*x*x-160*x+191.25 ;//歸算成距離量(單位為 cm)。
3)測量結(jié)果顯示
本系統(tǒng)設(shè)有3個SEG共陽的數(shù)碼管,如圖4所示,它可以用來顯示紅外傳感器測量的距離量[6]。
圖4 SEG顯示原理圖Fig.4 SEG display schematic
STC89LE516RD的P0口控制3個SEG顯示的數(shù)值,由于P0口在某一特定的時刻只有一個特定的值,所以如果讓P0口控制3個不同的SEG,就需要經(jīng)過數(shù)據(jù)鎖存器,對數(shù)據(jù)先進(jìn)行鎖存再送入SEG。鎖存器選用74HC574,OE一直為有效,3個 CP 分別用 MCU 的 P2.5 P2.6 P2.7控制, 當(dāng) CP 上升沿時鎖存數(shù)據(jù)。經(jīng)0到9這十個數(shù)據(jù)按照SEG共陽的接法寫成一個有10個成員一維的數(shù)組,成員從0到9依次對應(yīng)于SEG顯示的0到9。這樣的寫法易于SEG顯示程序的編寫。
本系統(tǒng)與上位機(jī)采用串口通訊[7]的方式,在VC下編程實現(xiàn)紅外距離數(shù)據(jù)的接收。除了紅外測距,本開發(fā)系統(tǒng)還具有實時報警,繼電器開關(guān)控制,直流/步進(jìn)電機(jī)正反轉(zhuǎn)等其他模塊。在對STC89LE516RD編程時,對各個硬件模塊進(jìn)行了地址上的分配以及命令格式上的定義。如蜂鳴器開為AA01其中AA為通訊測試編碼,01為接收距離數(shù)據(jù),AA02為關(guān)閉接收數(shù)據(jù),AA03為繼電器吸合,AA04為繼電器釋放,AA05為直流電機(jī)運(yùn)行,AA06為直流電機(jī)停止等。這里定義寫入到MCU后,上位機(jī)只需將這些命令通過串口發(fā)出即可實現(xiàn)對硬件系統(tǒng)的控制。Microsoft公司在WINDOWS中提供了一個串口 通 訊 ActiveX控 件 Communication Control(MSComm),MSComm間接調(diào)用Windows API,然后再傳遞給驅(qū)動設(shè)備進(jìn)行處理[8]。將控件加在單文檔對話框上再用ClassWizard生成相應(yīng)的對象,就可以使用其函數(shù)如:SetCommPort(指定使用的串口),GetCommPort(得到當(dāng)前使用的串口),SetPortOpen(打開或關(guān)閉串口),GetPortOpen(取得串口狀態(tài)),GetInPut(讀取輸入緩沖區(qū)),GetOutBufferCount(輸出緩沖區(qū)中待發(fā)送的字符數(shù)),SetOutPut(寫入輸出緩沖區(qū))。設(shè)置好MSComm的屬性,將以上命令編碼通過SetOutPut等函數(shù)發(fā)出即可。采用MSComm編程控制該系統(tǒng)的界面如圖5所示。
圖5 紅外測距系統(tǒng)上位機(jī)界面Fig.5 PC interface of system
圖6 測距系統(tǒng)實物圖Fig.6 Material object of system
本便攜式測距系統(tǒng)完成了一整套軟件硬件的系統(tǒng)設(shè)計,具有成本低、實用性高、功率小、反映速度快、抗干擾能力強(qiáng)、易于小型化等特點,非常適用于短距離測量、移動機(jī)器人避障及紅外感應(yīng)控制等諸多領(lǐng)域。為了避免盲區(qū)和提高測量精度,還可以采用多個紅外發(fā)送接收模塊同時工作,得到更準(zhǔn)確的數(shù)據(jù)。
[1]陳昱,楊濟(jì)民.電腦鼠電路的改進(jìn)及搜索算法研究 [J].現(xiàn)代電子技術(shù),2011(10):68-70.CHEN Yu,YANG Ji-min.Improvement and search algorithm of micromouse circuit[J].Modern Electronics Technique,2011(10):68-70.
[2]GP2Y0A02YK0F Distance Measuring Sensor Unit Measuring distance:20 to 150cm Analogoutputtype[M].SHARP Corporation,2006.
[3]PCF8591 8-bitA/D and D/A converter [M].Philips Semiconductors,2003
[4]于再興,陳江.基于C8051F的數(shù)據(jù)傳輸系統(tǒng)設(shè)計與實現(xiàn)[J].微計算機(jī)信息,2008(11):99-101.YU Zai-xing CHEN Jiang.The design and implement of the data transmission system based on C8051F[J].Microcomputer Information,2008(11):99-101.
[5]徐偉,劉建成.基于模擬IIC總線的電壓測量系統(tǒng)[J].南京信息工程大學(xué)學(xué)報:自然科學(xué)版,2011,3(1):91-96.XU Wei LIU Jian-cheng.A design of voltage measurement system based on simulated IIC bus[J].Journal of Nanjing University: Information Science & Technology,2011,3(1):91-96.
[6]宋軼群,杜華生.基于PIC16F877的紅外測距系統(tǒng)[J].儀表技術(shù),2004(5):48-49.SONG Yi-qun,DU Hua-sheng.Range-measurement infrared system based on PIC16F877[J].Instrumentation Technology,2004(5):48-49.
[7]祝紅彬,李偉,劉子驥,等.基于單片機(jī)SPI器件的串口控制[J].現(xiàn)代電子技術(shù),2009(24):20-22.ZHU Hong-bin,LI Wei,LIU Zi-ji,et al.Serial port control of SPI devices based on single chip microcomputer[J].Modern Electronics Technique,2009(24):20-22.
[8]胡乃平,趙振.基于VC6.0串口通信動態(tài)鏈接庫(DLL)的設(shè)計與應(yīng)用[J].微計算機(jī)信息,2007,23(3-3):214-216.HU Nai-ping,ZHAO Zhen.A design and application of serial communications Dynamic Link Library on VC6.0 platform[J].Microcomputer Information,2007,23(3-3):214-216.