張國強(qiáng) 諶炎輝 張茂盛
摘 要: 介紹一種以51系列單片機(jī)STC89C52作為核心控制器的便攜式高度測量儀的設(shè)計(jì)方法。其采用氣壓傳感器BMP180采集相應(yīng)的氣壓等數(shù)據(jù),采取I2C通信協(xié)議與單片機(jī)進(jìn)行串口通信,用C語言編寫了相關(guān)的計(jì)算和補(bǔ)償?shù)能浖绦?,將氣壓值轉(zhuǎn)換成海拔高度。實(shí)踐表明,該設(shè)計(jì)能夠快速并且較準(zhǔn)確地測量出測量儀所處位置的氣壓值和海拔高度。
關(guān)鍵詞: STC89C52; 氣壓傳感器; 程序設(shè)計(jì); 通信協(xié)議; 串口通信; 高度測量儀
中圖分類號(hào): TN949.6?34; TP391.9 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2018)22?0075?04
Abstract: A design method of the portable height measurement instrument with the 51?series microcontroller STC89C52 as the core controller is introduced. The barometric sensor BMP180 is used to collect the corresponding barometric pressure data. The serial port communication between the barometric sensor and SCM is conducted by using the I2C communication protocol. The related software program for calculation and compensation is compiled with C language, so as to convert the barometric pressure value to the altitude value. The practice shows that the design method can quickly and accurately measure the barometric value and altitude of the position that the measuring instrument is located at.
Keywords: STC89C52; barometric sensor; program design; communication protocol; serial port communication; height measurement instrument
在生態(tài)環(huán)境方面,海拔、氣溫、濕度、風(fēng)速這些環(huán)境因素十分重要[1?2],在工業(yè)方面,海拔高度和大氣壓強(qiáng)影響許多產(chǎn)品的質(zhì)量狀況[3]。飛機(jī)在飛行時(shí)往往需要及時(shí)準(zhǔn)確地獲得飛行的海拔高度,從而確保飛行路線的準(zhǔn)確。運(yùn)動(dòng)愛好者需要獲得野外的海拔高度、溫度及大氣壓強(qiáng),以便制定合理的運(yùn)動(dòng)計(jì)劃。因此,將溫度、氣壓和海拔高度測量出來就顯得尤為重要。本次設(shè)計(jì)的高度測量儀具有體積小、精度高、功耗低等優(yōu)點(diǎn),可以應(yīng)用于飛行高度測量、戶外運(yùn)動(dòng)等多種場合。
本系統(tǒng)主要基于單片機(jī)進(jìn)行設(shè)計(jì),根據(jù)大氣壓強(qiáng)和海拔高度的轉(zhuǎn)換關(guān)系,通過數(shù)字氣壓傳感器測量相關(guān)的氣壓數(shù)據(jù),測量氣壓模塊采用BMP180氣壓傳感器,和單片機(jī)STC89C52進(jìn)行通信,通信方式為I2C通信協(xié)議。單片機(jī)讀取傳感器傳過來的一系列參數(shù),例如大氣、壓力及補(bǔ)償參數(shù),通過軟件進(jìn)行計(jì)算和補(bǔ)償,將實(shí)現(xiàn)相關(guān)數(shù)值計(jì)算的C程序燒寫進(jìn)單片機(jī),并且將大氣壓強(qiáng)和海拔高度顯示在LCD1602上[4?7]。要求接入電源后,按下開關(guān),LCD1602亮,并且立即顯示大氣壓強(qiáng)和海拔高度。系統(tǒng)框圖如圖1所示。該系統(tǒng)測量原理主要是利用大氣壓強(qiáng)和海拔高度的轉(zhuǎn)換關(guān)系,通過測量所得的氣壓大小,進(jìn)行轉(zhuǎn)換公式的軟件編程,最后得到海拔高度。BMP180內(nèi)部提供了氣壓和海拔高度轉(zhuǎn)換公式,對(duì)于誤差,采用線性插值的方法將其檢測的數(shù)據(jù)修正,能夠得出比較準(zhǔn)確的測量氣壓P,再結(jié)合標(biāo)準(zhǔn)大氣壓強(qiáng)P0,計(jì)算出傳感器所處位置的海拔高度h。海拔高度測量計(jì)算公式為:
系統(tǒng)硬件電路是基于51系列單片機(jī)進(jìn)行設(shè)計(jì)的,包括復(fù)位電路、晶振電路的單片機(jī)最小系統(tǒng),傳感器選用BMP180氣壓傳感器,顯示模塊為LCD1602。
選用的51系列單片機(jī)為STC89C52,該型號(hào)的單片機(jī)使用了經(jīng)典的MCS?51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程FLASH,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案[8]。STC89C52單片機(jī)內(nèi)部含有8位的微處理器,512 B RAM, 4個(gè)8位并行的I/O接口P0~P3,均為雙向通道;內(nèi)置4 kB的E2PROM,MAX810復(fù)位電路,2個(gè)計(jì)數(shù)器/定時(shí)器,5個(gè)中斷源,一個(gè)全雙工UART的串行I/O口。
BMP180是博世公司推出的一款數(shù)字氣壓傳感器,具有非常高的性能,主要應(yīng)用于先進(jìn)的移動(dòng)設(shè)備,如智能手機(jī)、平板電腦和運(yùn)動(dòng)設(shè)備,例如室內(nèi)導(dǎo)航GPS增強(qiáng)的航位推算,高度分布?xì)庀箢A(yù)報(bào)垂直速度指示(上升/下沉速度)等。LCD液晶顯示屏功耗十分低,體積也很小,方便連接;此外還具有壽命長、重量輕、顯示效果清晰明亮等優(yōu)點(diǎn)。本設(shè)計(jì)選用的LCD1602顯示屏是香港精電公司生產(chǎn)制造的,代碼詞頭為“MDLS?” [9?10]。
系統(tǒng)整體硬件電路如圖2所示。其中,BMP180與STC89C52之間的通信方式為I2C通信協(xié)議。I2C總線由數(shù)據(jù)線和時(shí)鐘線構(gòu)成,一條線路用來傳輸時(shí)鐘,另外一條用來傳輸數(shù)據(jù)。兩根線都是串行的,且數(shù)據(jù)線SDA和時(shí)鐘線SCL的所有同名端相連接。通過一個(gè)帶有緩沖區(qū)的接口,數(shù)據(jù)可以被I2C發(fā)送或接收??偩€上所有器件要依靠SDA發(fā)送的地址信號(hào)尋址,不需要片選線[11]。I2C的工作原理圖如3所示。
首先編寫對(duì)元器件進(jìn)行初始化的C程序,分別對(duì)BMP180,LCD 1602進(jìn)行初始化;然后編寫從傳感器讀取的氣壓數(shù)據(jù)的程序,需要將氣壓數(shù)據(jù)傳入單片機(jī),再計(jì)算出海拔高度,將氣壓轉(zhuǎn)換成海拔高度的程序是本次設(shè)計(jì)的重要環(huán)節(jié);最后將氣壓和高度顯示在LCD1602的液晶顯示屏上。其中要判斷是否有復(fù)位KEY按下,如果按下復(fù)位KEY,重新顯示出主界面。主程序流程圖如圖4所示。
BMP180傳感器會(huì)從I2C總線獲取1 B的數(shù)據(jù),主要是獲得氣壓值(該傳感器還可以獲得溫度的數(shù)據(jù))。讀操作的子程序設(shè)計(jì)思路是調(diào)用I2C總線的一些子程序中的函數(shù);然后發(fā)寫操作指令,寫操作的函數(shù)帶一個(gè)設(shè)備地址參數(shù),再次啟動(dòng)BMP180,再發(fā)讀操作的指令,讀操作的函數(shù)帶一個(gè)設(shè)備地址參數(shù),調(diào)用Sendack( );最后給一個(gè)停止操作。
用LCD1602顯示大氣壓和轉(zhuǎn)換的高度,程序設(shè)計(jì)思路是需要確定LCD是否處于忙的狀態(tài),初始化LCD1602液晶顯示屏需調(diào)用寫指令函數(shù)LCD1602_write_cmd(0x40),函數(shù)帶CGRAM起始地址,寫數(shù)據(jù)的子程序中LCD1602的RS端置“1”,RW端置“0”,使能端EN先置“1”,再置“0”。顯示位置的編程主要是為了將氣壓數(shù)據(jù)和轉(zhuǎn)換的高度分成兩行顯示,主要顯示在第二行,變量x的值加0x40。
利用Proteus軟件繪制仿真電路圖,并用Keil軟件進(jìn)行軟件編程生成目標(biāo)文件,將其寫入Proteus中進(jìn)行仿真調(diào)試[12?14]。電路圖如圖5所示。
實(shí)物制作時(shí)電路布局排版應(yīng)緊湊,井然有序。注意不同種類元器件封裝的方法不同,同時(shí)要遵循PCB設(shè)計(jì)的基本原則[15]。實(shí)物效果如圖6所示。
本文介紹一種以51系列單片機(jī)STC89C52作為核心控制器的便攜式高度測量儀的設(shè)計(jì)方法。其采用氣壓傳感器BMP180采集相應(yīng)的氣壓等數(shù)據(jù),采取I2C通信協(xié)議與單片機(jī)進(jìn)行串口通信,用C語言編寫了相關(guān)的計(jì)算和補(bǔ)償?shù)能浖绦?,將氣壓值轉(zhuǎn)換成海拔高度。實(shí)踐表明,該設(shè)計(jì)能夠快速并且較準(zhǔn)確地測量出測量儀所處位置的氣壓值和海拔高度。
參考文獻(xiàn)
[1] 潘紅麗,李邁和,蔡小虎,等.海拔梯度上的植物生長與生理生態(tài)特性[J].生態(tài)環(huán)境學(xué)報(bào),2009,18(2):722?730.
PAN Hongli, LI Maihe, CAI Xiaohu, et al. Responses of growth and ecophysiology of plants to altitude [J]. Ecology and environmental sciences, 2009, 18(2): 722?730.
[2] 保婭,達(dá)哇卓瑪.不同海拔高度溫、濕度對(duì)土壤養(yǎng)分的影響[J].青海草業(yè),2014,23(4):16?18.
BAO Ya, DAWA Zhuoma. different elevation of temperature humidity effects on soil nutrients [J]. Qinghai prataculture, 2014, 23(4): 16?18.
[3] 范立軍.高海拔地區(qū)大氣參數(shù)對(duì)電氣設(shè)備外絕緣影響的研究[D].大連:大連理工大學(xué),2002.
FAN Lijun. Research on influence of atmospheric parameters on electric equipment outer insulation in high elevation zone [D]. Dalian: Dalian University of Technology, 2002.
[4] 王俊彩,王福平,侯瑞峰,等.基于BMP085的一種便攜式海拔高度測量系統(tǒng)設(shè)計(jì)[J].傳感器與微系統(tǒng),2011,30(12):123?125.
WANG Juncai, WANG Fuping, HOU Ruifeng, et al. Design of a portable altitude measurement system based on BMP085 [J]. Transducer and microsystem technologies, 2011, 30(12): 123?125.
[5] 張金燕,劉高平,楊如祥.基于氣壓傳感器BMP085的高度測量系統(tǒng)實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2014,33(6):64?67.
ZHANG Jinyan, LIU Gaoping, YANG Ruxiang. Implementation of height measurement system based on pressure sensor BMP085 [J]. Microcomputer & its applications, 2014, 33(6): 64?67.
[6] 雷曉靜,丁金華,丁明亮,等.海拔高度測量儀設(shè)計(jì)[J].工業(yè)儀表與自動(dòng)化裝置,2015(4):107?109.
LEI Xiaojing, DING Jinhua, DING Mingliang, et al. Design of the altitude measurement instrument [J]. Industrial instrumentation & automation, 2015(4): 107?109.
[7] 袁捷,韓波,李平.基于89C52的氣壓高度計(jì)系統(tǒng)的設(shè)計(jì)和應(yīng)用[J].機(jī)電工程,2005,22(10):30?34.
YUAN Jie, HAN Bo, LI Ping. The design and application of an altimeter system based on 89C52 [J]. Journal of mechanical & electrical engineering, 2005, 22(10): 30?34.
[8] 呂友懿,許建明,陳炯明.基于單片機(jī)的電子時(shí)鐘設(shè)計(jì)[J].電子世界,2016(9):31.
L? Youyi, XU Jianming, CHEN Jiongming. Electronic clock design based on single chip microcomputer [J]. Electronics world, 2016(9): 31.
[9] 陸蓉.液晶顯示器(LCD)顯示驅(qū)動(dòng)原理及其應(yīng)用[J].電子制作,2005(5):51?52.
LU Rong. Display drive principle and application of liquid crystal display (LCD) [J]. Practical electronics, 2005(5): 51?52.
[10] 黃旭.MDLS點(diǎn)陣字符型液晶顯示模塊與DSP芯片ADSP2106X的接口實(shí)現(xiàn)[J].電子技術(shù),2000(2):59?61.
HUANG Xu. Interface realization between MDLS lattice character LCD module and DSP chip ADSP2106X [J]. Electronic technology, 2000(2): 59?61.
[11] 王效華,張?jiān)伱?單片機(jī)原理與應(yīng)用[M].北京:北京交通大學(xué)出版社,2007.
WANG Xiaohua, ZHANG Yongmei. Principle and application of single chip microcomputer [M]. Beijing: Beijing Jiaotong University Press, 2007.
[12] 彭偉.單片機(jī)C語言程序設(shè)計(jì)實(shí)訓(xùn)100例:基于8051+Proteus仿真[M].北京:電子工業(yè)出版社,2012.
PENG Wei. 100 cases of C language programming for SCM based on 8051+Proteus simulation [M]. Beijing: Publishing House of Electronics Industry, 2012.
[13] 黎雪芬.KEIL及Proteus軟件在單片機(jī)仿真教學(xué)中的應(yīng)用[J].裝備制造技術(shù),2012(3):49?50.
LI Xuefen. KEIL and Proteus software SCM simulation teaching [J]. Equipment manufacturing technology, 2012(3): 49?50.
[14] 鄭春來,韓團(tuán)軍,李鑫.編譯軟件Keil在單片機(jī)課程教學(xué)中的應(yīng)用[J].高教論壇,2009(12):96?97.
ZHENG Chunlai, HAN Tuanjun, LI Xin. The application of simulation software Keil in teaching process of MCU course [J]. Higher education forum, 2009(12): 96?97.
[15] 安宗權(quán),汪云祥.PCB排版對(duì)提高單片機(jī)應(yīng)用系統(tǒng)可靠性的研究[J].安徽機(jī)電學(xué)院學(xué)報(bào),2002,17(3):34?37.
AN Zongquan, WANG Yunxiang. Research of PCB employed in MCU application system [J]. Journal of Anhui Institute of Mechanical & Electrical Engineering, 2002, 17(3): 34?37.