崔璨++鄧圣++代航陽++張楊++楊泰波
摘 要:MS5611是瑞士MEAS推出的新一代高分辨率的氣壓傳感器,廣泛應用于移動高度計/氣壓計系統、自行車電腦、智能手表、GPS、智能手機、無人機高度測量系統等。MS5611體積小,內部集成了氣壓傳感器、溫度傳感器、24位ADC、128位PROM、數字濾波器、SPI和I2C接口。針對MS5611的SPI接口,選用輸入輸出資源豐富,配置靈活的FPGA作為微控制器,并設計相應的SPI接口電路;采用Verilog編寫具有MS5611五種指令的SPI接口模塊,并進行了時序仿真驗證。仿真結果表明,基于FPGA的SPI接口模塊能很好地對MS5611進行控制,并實現數據的讀寫,在基于MS5611的氣壓測量設備上有很好應用。
關鍵詞:氣壓測量 MS5611 SPI 時序仿真
中圖分類號:TP361.1 文獻標識碼:A 文章編號:1674-098X(2017)01(a)-0031-04
Design of SPI for MS5611
Cui Can Deng Sheng Dai Hangyang Zhang Yang Yang Taibo
(Nuclear Power Institute of China, Chengdu Sichuan, 610094, China)
Abstract:The MS5611, which is a new generation of high resolution pressure sensor from MEAS(Measurement Specialties) Switzerland, is widely used in mobile altimeter/barometer system, bicycle computer, smart watch, GPS(Global Positioning System), smart phone, unmanned aerial vehicle height detection system and so on. The MS5611 is small, and pressure sensor, temperature sensor, 24 bit ADC (Analog-Digital Converter), 128 bit PROM (Programmable Read Only Memory), digital filter, SPI (Serial Peripheral Interface) and I2C(Inter-Integrated Circuit) interface are included in. The FPGA (Field-Programmable Gate Array), which has abundant input/output resource and can be configured neatly, is used as the microcontroller for the SPI of MS5611, and corresponding SPI circuit is designed also. The SPI module based on five commands of MS5611 is designed with Verilog, and it is timing simulated for verification. The simulation result presents that SPI module based on FPGA can control MS5611 well, and realize data reading and writing. It can be applied well in pressure measurement device based on MS5611.
Key Words:Pressure measurement; MS5611; SPI; Timing simulation
氣壓和溫度一直都是很多實驗室和工業生產中的重要環境參數,需要對其進行實時檢測,以實現對實驗室環境和工業生產環境的控制,達到實驗預想效果,生產出高品質產品[1]。例如:在機房設備監測系統中,通過氣壓傳感器對氣壓進行監測,當波動較大時,可通過短信通知機房負責人[2]。
而對于登山愛好者來說,非常關心海拔高度,可通過測量氣壓來計算海拔高度,其測量精度遠比全球定位系統(Glo bal Positioning System, GPS)高,在原有GPS基礎上增加氣壓測量功能,可使三維定位更加準確。另外,在使用導航時,GPS信號常被地形、地物遮擋,導致精度大大降低,甚至不能使用。尤其在高樓林立的城區和植被茂密的林區,GPS有效率僅為60%,為彌補這一不足常常采用氣壓傳感器輔助測量海拔高度[3]。
如今被廣泛應用的小型無人機,具有成本低廉、體積小、重量輕、機動性強、續航時間長等特點,而其高度測量系統就是通過海拔高度和壓力大小關系計算出來[4-5]。
MS5611作為新一代高分辨率的氣壓傳感器,它具有體積小、重量輕等特點,使其廣泛應用于移動高度計/氣壓計系統、自行車電腦、智能手表、GPS、智能手機、無人機高度測量系統等。它具有串行外設接口(Serial Peripheral Interface, SPI)和I2C總線兩種數字通訊接口,使它更容易與微控制器進行數據交換,該文針對MS5611的SPI接口,采用現場可編輯邏輯陣列(Field-Programmable Gate Array, FPGA)實現對其數據的讀寫控制,并對設計的SPI接口模塊進行了時序仿真驗證。
1 硬件設計
1.1 MS5611介紹
MS5611體積小,僅為5.0 mm×3.0 mm×1.0 mm,內部集成有氣壓傳感器、溫度傳感器、24位模數轉換器(Analog-Digital Converter,ADC)、128位可編程只讀存儲器(Programmable Read Only Memory,PROM)、數字濾波器、SPI和I2C接口。其分辨率可達0.012mbar,用于高度測量時,精度可達10 cm。MS5611同時可以測量溫度并對壓力進行溫度補償。其主要技術指標見表1。
1.2 微控制器
MS5611集成有SPI和I2C數字接口,可使用FPGA、單片機等為微控制器,實現對MS5611的控制。選用本身具有SPI或I2C接口的微控制器可縮短開發周期,但這些微控制器本身資源固定,所以靈活性較差。
FPGA是ASIC基礎上發展起來的,但它又克服了ASIC靈活性差的缺點。其端口資源豐富,并且可以根據用戶的需要進行配置,在高速數據采集、數字通信、編碼譯碼方面有著廣泛應用。
考慮到MS5611本身供電電壓范圍為-0.3~4.0 V,該文選用Altera公司的FPGA芯片EP1C6Q240C8作為微控制器,其邏輯電平為3.3 V,可與MS5611匹配,在FPGA內部設計針對MS5611的SPI接口模塊,實現對其數據讀寫,同時可以在FPGA內設計其他數字通訊接口,如RS485等[6],實現數據遠程傳輸。
FPGA必要外圍電路包括:下載電路、外部時鐘、電源。如圖1所示,存儲芯片EPCS1作為FPGA的程序存儲,上電后自動加載程序。外部時鐘采用40 MHz的有源晶振,其供電壓為3.3 V。整個系統需要的電壓為1.5 V和3.3 V,其中1.5 V由1117~1.5 V產生,3.3 V由1117~3.3 V產生。
1.3 SPI接口電路
該文選用MS5611的SPI接口進行數據通訊。SPI是一種高速的,全雙工,同步的通信總線,只占用四根線。它采用主從方式工作,由一個主設備和多個從設備構成,FPGA作為主設備,MS5611作為從設備,接口電路如圖2所示。供電電壓選擇與FPGA一致的3.3 V,其中SCLK為時鐘信號,PS為通訊模式選擇信號,拉高選擇I2C模式,拉低選擇SPI模式;CSB為片選信號,對從設備進行選擇,低有效;SDO為串行數據輸出總線,SDI為串行數據輸入總線。
2 軟件設計
2.1 控制指令
MS5611具有5種基本的控制指令:復位、讀取PROM數據、D1轉換、D2轉換、讀取ADC結果。
復位:復位指令應在芯片上電時發送以確保PROM中的數據能夠順利的加載,同時可在未知狀態下復位芯片的只讀存儲器(Read Only Memory ,ROM)。
讀取PROM數據:PROM是一個128位的存儲器,存儲了6個出廠時的標定參數C1~C6,6個參數用于壓力補償和溫度補償,此指令在復位完成后發出,之后返回16位數據。
D1、D2轉換:此指令用于啟動轉換未補償壓力(D1)和未補償溫度(D2)。
ADC讀取:在D1轉換或D2轉換后發出,分別返回24位的壓力或溫度數據。
以上每種指令均是8位,指令值如表2所示。
2.2 SPI接口模塊
SPI總線中所有數據均是通過串行時鐘SCLK進行同步,每個時鐘脈沖傳送1位數據[7]。時鐘的相位(CPHA)和極性(CPOL)的不同組合可以讓SPI總線工作在4種不同的模式下。
模式0:CPHA=0,SCLK空閑狀態時為低電平;CPOL=0,在CSB有效后SCLK的第一個周期進行采樣。
模式1:CPHA=0,SCLK空閑狀態時為低電平;CPOL=1,在CSB有效后SCLK的第二個周期進行采樣。
模式2:CPHA=1,SCLK空閑狀態時為高電平;CPOL=0,在CSB有效后SCLK的第一個周期進行采樣。
模式3:CPHA=1,SCLK空閑狀態時為高電平;CPOL=1,在CSB有效后SCLK的第二個周期進行采樣。
SPI可工作在主模式或從模式下。在主模式,每一位數據的發送/接收需要一個時鐘作用;而在從模式下,每一位數據都是在接收到時鐘信號之后才發送/接收[7]。
MS5611作為從機,支持工作在模式0和模式3,該文選擇在工作在模式3下。FPGA作為主機,內部設計的SPI接口模塊為模式3的主模式。
FPGA內部設計SPI模塊采用Quartus II的verilog編寫,如圖3所示的流程進行,首先將SPI的所有總線初始化,SCLK、CSB、SDO、SDI均拉高。根據并行輸入8位數據(表2所示指令)判斷10種狀態,不同狀態下所發出的時鐘周期不同,ADC讀取和PROM讀取指令因為分別要返回24位數據和16位數據,時鐘周期分別為32和24,其他指令均是8個時鐘周期,SCLK上的時鐘信號由晶振分頻后產生。而片選信號CSB均拉低,指令碼數據轉換為串行數據后通過SDI輸入到MS5611,返回的串行數據通過SDO輸入到FPGA再轉化為并行數據后存儲。
3 仿真驗證
對于設計完成的SPI接口模塊需進行時序仿真,以驗證其控制時序是否能滿足MS5611的SPI接口。
MS5611的SPI總線可工作在模式0和模式3,該文設計的SPI接口選擇工作在模式3下。筆者對MS5611的五種指令均進行了時序仿真,結果與MS5611的技術手冊上一致,圖4列舉出了MS5611的ADC讀取功能進行的時序仿真結果。其中,datain[7:0]為指令碼并行數據,ADC讀取指令碼0x00并行輸入;spido為FPGA的串行數據輸出,即SDI,仿真圖4中輸出指令碼的0x00的串行數據;spidi為FPGA的串行數據輸入,即SDO信號,從時鐘信號SCLK的第9個上升沿開始到32個上升沿為24位ADC轉換數據結果,第9個時鐘上升沿為數據最高位。dataout[23:0]為ADC讀取數據并行輸出結果,結果為0x7fffff。spics為CSB片選信號,指令發出和讀取過程中拉低。spiclk為SCLK時鐘信號,ADC讀取共產生32個時鐘周期,上升沿進行數據讀取。
4 結語
該文在FPGA內設計適用于MS5611的SPI接口,對MS5611的五種指令進行了時序仿真,具體列舉ADC讀取功能進行了介紹,仿真結果表明文中設計的基于FPGA的SPI接口能很好地對MS5611進行控制,并實現數據的讀寫,在基于MS5611的氣壓測量設備上能有很好應用。
參考文獻
[1] 賴貴川,黃華偉.基于MS5611-01BA01的高精度氣壓和溫度檢測系統設計[J].四川理工學院學報,2012,25(5):33-36.
[2] 陳新興,尤宇星.機房設備監測系統設計[J].福建電腦,2015(11):123-132.
[3] 朱韶紅,王玉泉.危險品物流監控系統中車載終端的研究與設計[J].物流技術,2013,32(12):429-432.
[4] 潘銀松,劉天剛,馬澤忠,等.基于MS5611的小型無人機高度檢測系統設計[J].電子測量技術,2015,38(7):22-25.
[5] 楊新湦,高春燕.一種氣壓測量系統設計[J].電子產品世界,2014(10):32-34.
[6] 梁士龍,王力男,楊嘉偉.用FPGA實現RS-485通信接口芯片[J].系統工程與電子技術,2002,24(4):103-106.
[7] 楊承富,徐志軍.SPI總線接口的FPGA設計與實現[J].軍事通信技術,2004,25(2):72-76.