适用于MS5611的SPI接口设计
2017-03-21崔璨邓圣代航阳张杨杨泰波
崔璨++邓圣++代航阳++张杨++杨泰波
摘 要: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.