韋 偉,周凌翱,劉 青
(南京鐘山職業技術學院 江蘇 南京 210049)
紅外測距[1]是一種非直接接觸的測量方式,由于其結構簡單、抗干擾性強、成本低等優點,在測量測繪上得到廣泛的運用。該系統由紅外發射接收傳感器、A/D轉換電路、信號采集處理、數據顯示電路等組成,體積小,操作簡單,非常適合于近距離的測量應用。本系統形成了一套完整的硬件系統和軟件開發平臺,便于功能的改造,擴展及其他應用研究。
本控制系統的MCU采用STC公司的STC89LE516RD,它是MCS-51系列的派生產品,在指令系統、硬件結構和片內資源上與標準8052單片機完全兼容,最高時鐘頻率90 MHz,低功耗,可支持(ISP IAP)編程。 紅外測距采用GP2Y0A02YK芯片,它采用光學三角測量的方法,測量精度受反射物體的顏色和光線的影響比較小。內部集成了紅外接收發射兩個模塊,感應距離為 20 cm 至 150 cm,寬范圍供電(0~7 V),不需要多余的外部接口電路,也不需要額外的處理電路,簡化了底層控制器的外圍電路,使用方便。感應距離與輸出電壓的關系如圖1所示[2]。
由于在20~150 cm范圍內測量距離與輸出電壓成曲線變化,測量輸出電壓將其進行A/D轉換,對轉換后的數字量信息進行歸算得到測量的距離,在將其結果用數碼管或者上傳到PC機進行實時顯示。結構圖如圖2所示。

圖1 測量距離與輸出電壓關系圖Fig.1 Measuring distance and output voltage curve

圖2 系統結構圖Fig.2 System structure
AD/DA采用PHILIP的PCF8591芯片,精度為8 bit。有4路A/D轉換輸入,一路D/A轉換輸出,既可以作A/D也可以作D/A轉換。A/D轉換為逐次比較型,采用典型的I2C總線接口器件尋址方法,即總線地址由器件地址、引腳地址和方向位組成。通過控制字寄存器對4路模擬量的輸入方式進行編程,實現A/D轉換功能[3]。原理圖如圖3所示。ADC的轉換公式為:VOUT=(VADJ-VAGND)·256/(VREF-VAGND)。

圖3 AD/DA原理圖Fig.3 AD/DA schematic
24LC02作為EEPROM,輸出信號采用I2C方式與STC89LE516 MCU通信,SDA和SCL分別由是啟動和關閉I2C的控制信號[4]。當I2C總線空閑時,SDA和SCL都處于高電平狀態。當SCL保持高電平時,一個SDA下降沿表示初始化一個起始條件。當SCL保持高電平時,SDA的一個上升沿表示初始化一個停止條件。起始和停止條件都是由MCU發起的。傳輸數據開始前,MCU控制24LC02的SDA和SCL發送起始位,傳輸數據結束時,控制SDA和SCL發送停止位。輸出到SDA線上的每個字節必須是8位,每次傳輸的字節數則不受限制,起始條件后緊跟著地址字節,每個字節必須有一個確認位(ACK),如果 MCU在完成其他功能之前不能傳輸另一數據的完整字節,24LC02會保持時鐘線SCL為低,使其進入等待狀態,當MCU準備好接收并釋放SCL信號后,數據傳輸繼續進行[5]。
1)PCF8591 AD 轉換程序
電路上PCF8591的第0通道采集的是GP2Y0A02YK芯片的模擬量。采用KEIL軟件環境編寫AD轉換及傳輸程序。在主函數中編寫讀PCF8591第0通道數據的函數如下:


當模擬量信號為3.3 V時,Val返回255,當模擬量信號為0 V時,Val返回0,呈線性的關系,計算得到每伏電壓的數值為 77.27。
2)數據歸算問題
圖1所示測量距離與輸出電壓關系并不是線性的關系,在20~150 cm范圍內測量距離與輸出電壓近似成二次曲線的關系。用MATLAB編寫程序,輸入坐標值求解關系式,將圖一擬合成如下函數關系式:y=35x2-160x+191(其中x為紅外輸出電壓,y為測量距離值),最后將其歸算成距離量。
num=ReadADC(0);//采集第 0 通道的模擬量
x=(num)/77.27;//將 AD 轉換的數換算成電壓值,以便代入函數。
y=35*x*x-160*x+191.25 ;//歸算成距離量(單位為 cm)。
3)測量結果顯示
本系統設有3個SEG共陽的數碼管,如圖4所示,它可以用來顯示紅外傳感器測量的距離量[6]。

圖4 SEG顯示原理圖Fig.4 SEG display schematic
STC89LE516RD的P0口控制3個SEG顯示的數值,由于P0口在某一特定的時刻只有一個特定的值,所以如果讓P0口控制3個不同的SEG,就需要經過數據鎖存器,對數據先進行鎖存再送入SEG。鎖存器選用74HC574,OE一直為有效,3個 CP 分別用 MCU 的 P2.5 P2.6 P2.7控制, 當 CP 上升沿時鎖存數據。經0到9這十個數據按照SEG共陽的接法寫成一個有10個成員一維的數組,成員從0到9依次對應于SEG顯示的0到9。這樣的寫法易于SEG顯示程序的編寫。
本系統與上位機采用串口通訊[7]的方式,在VC下編程實現紅外距離數據的接收。除了紅外測距,本開發系統還具有實時報警,繼電器開關控制,直流/步進電機正反轉等其他模塊。在對STC89LE516RD編程時,對各個硬件模塊進行了地址上的分配以及命令格式上的定義。如蜂鳴器開為AA01其中AA為通訊測試編碼,01為接收距離數據,AA02為關閉接收數據,AA03為繼電器吸合,AA04為繼電器釋放,AA05為直流電機運行,AA06為直流電機停止等。這里定義寫入到MCU后,上位機只需將這些命令通過串口發出即可實現對硬件系統的控制。Microsoft公司在WINDOWS中提供了一個串口 通 訊 ActiveX控 件 Communication Control(MSComm),MSComm間接調用Windows API,然后再傳遞給驅動設備進行處理[8]。將控件加在單文檔對話框上再用ClassWizard生成相應的對象,就可以使用其函數如:SetCommPort(指定使用的串口),GetCommPort(得到當前使用的串口),SetPortOpen(打開或關閉串口),GetPortOpen(取得串口狀態),GetInPut(讀取輸入緩沖區),GetOutBufferCount(輸出緩沖區中待發送的字符數),SetOutPut(寫入輸出緩沖區)。設置好MSComm的屬性,將以上命令編碼通過SetOutPut等函數發出即可。采用MSComm編程控制該系統的界面如圖5所示。

圖5 紅外測距系統上位機界面Fig.5 PC interface of system

圖6 測距系統實物圖Fig.6 Material object of system
本便攜式測距系統完成了一整套軟件硬件的系統設計,具有成本低、實用性高、功率小、反映速度快、抗干擾能力強、易于小型化等特點,非常適用于短距離測量、移動機器人避障及紅外感應控制等諸多領域。為了避免盲區和提高測量精度,還可以采用多個紅外發送接收模塊同時工作,得到更準確的數據。
[1]陳昱,楊濟民.電腦鼠電路的改進及搜索算法研究 [J].現代電子技術,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的數據傳輸系統設計與實現[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總線的電壓測量系統[J].南京信息工程大學學報:自然科學版,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的紅外測距系統[J].儀表技術,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]祝紅彬,李偉,劉子驥,等.基于單片機SPI器件的串口控制[J].現代電子技術,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串口通信動態鏈接庫(DLL)的設計與應用[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.