数字传感器MPXY8020A与MSP430的接口设计

2019-08-01 15:28发布

1 概述

MPXY8020A是摩托罗拉公司于2003年推出的汽车轮胎气压监测传感器。其内部集成了气压传感器、温度传感器和数字接口电路,8引脚SSOP封装;能承受的最大气压为1400MPa。MPXY8020A的功耗比较低,特别适用于轮胎气压和温度监测系统,能和摩托罗拉的无线遥控开锁系统集成在一起,组成低成本、高集成度的系统。此外,MPXY8020A还可应用于其他气压和温度监测系统中。

2 片内结构

MPXY8020A的功能结构如图1所示。气压信号的采样由电容式传感器完成,温度信号的采样由薄膜电阻完成,此外,片内集成了数字接口电路。整个传感器采用硅CMOS工艺加工而成[1]。气压信号的采样分两步完成:首先是把采样电容上的信号转换为电压信号,然后用开关式电容放大器对信号进行放大,以提高采样的准确度。电容放大器带有温度补偿电路,采样偏移量可调,并且可以通过在EEPROM寄存器中写入校正值进行采样信号的校正。气压信号值的大小通过电压比较器确定。在气压转换前,外部微控制器通过MPXY8020A的数字接口输入8位极限值。片内8位DAC(数模转换器)把该值转换成相应的模拟电压,电压比较器把采样的电压值与该值进行比较,在OUT引脚输出比较后的结果。当采样值高于输入值时,OUT引脚为高电平;反之,为低电平。温度信号的采样由带有正温度系数的薄膜电阻完成。由图1可见,通过2路开关,可选择传感器工作于气压采样状态或温度采样状态。温度信号的采样过程与气压信号的采样过程相似。

在MPXY8020A片内,集成了1个低频率、低功率的5.4 kHz晶体振荡器,1个14级的分频器。通过14级分频,可在OUT引脚得到周期性(一般3 s)的输出信号。该信号还可以用作微控制器的中断源。此外,MPXY8020A片内还集成了1个10级的分频器,通过该分频器,传感器可每隔52 min使外部微控制器复位1次,以防程序长时间跑飞。为了节能,可通过MPXY8020A的引脚,控制其工作于不同的工作状态。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
1988020566
2019-08-02 11:51
4. 2. 2温度和气压数据的读取

获取MPXY8020A传感器气压和温度数据的方法有逐次逼近法和报警值检查法。逐次逼近法能够获得8位精度的转换结果,但需要较长的转换时间和消耗较多的电能。报警值检查法是预先设置一个气压或温度的报警值,然后监测OUT引脚的电平来确定气压和温度值是否超过报警值。这是一种低功耗模式,在不需要知道准确的气压/温度值时,可采用这种工作方式。本系统中采用的是逐次逼近法。

MPXYS020A传感器利用外部的MSP430F1232作为逐次逼近程序的控制器,MSP430F1232将猜测的极限值通过SPI接口串行地发送到传感器的DAR(数/模转换寄存器)。器件内DAR将此猜测值变为模拟值,并与待测的气压值比较,通过OUT引脚给出比较后的结果。每次比较需用64个时钟周期。例如:第1次猜测值为0x80,如果检测OUT脚为高电平,则说明气压值大于0x80,MSP430F1232通过SPI再送人0xC0,检测OUT引脚的状态,如果这次OUT引脚是低电平,说明气压在0x80和0xC0之间,重复这样的过程,直到逼近近似值。整个过程类似对分搜索,首先,取全量程值的一半作为第1个猜测值,并送人数/模转换寄存器,然后监测传感器OUT引脚的输出状态。若OUT引脚的输出为“低”,说明猜测值太大或者和取样值接近;若OUT引脚的输出保持“高”,则说明猜测值太小。转换结果寄存器作为一个变量由MSP430F135实时修改。如果猜测值太小,结果寄存器的最低位置“1”;如果猜测值太大,结果寄存器的最低位置“0”,使用新的猜测值继续逼近,直到得到最终结果。

用逐次逼近的方法读取MPXY8020A温度数据的程序代码如下:

void MPXY8020A_temperature_sample(void){
uchar MPXY8020A_temp=0;
P3D1R&=~mpxy8020_ut; //INPUT
MPXY8020A_temp=BIT7;//N始值为128,即位7=1
MPXY8020A_standby_state(); //待机模式
MPXY8020A__sendByte(MPXY8020A_Xemp);
//发送极限值
MPXYS020A_temperature_state(); //测量温度模式
MPXY8020A_output_state(); //读数据模式
if((P31N&mpxy8020_out)==mpxy8020_out){
//比较OUT引脚是否为1
MPXYS020A_temp |=BIT6; //位6=1
}
else{
MPXY8020A_temp&=~B1T7;//位7=0
MPXY8020A_temp |=BIT6; //位6=1
://省略部分为从位6到位1的重复逼近的程序,其c
//代码与位7的相似
MPXY8020A_standby_state(); //待机模式
MPXY8020A_sendByte(MPXY8020A_temp);
//发送极限值
MPXY8020A_temperature_state(); //测量温度模式
MPXY8020A_output_state(); //读数据模式
if((P3IN&mpxy8020_out)==mpxy8020_out)
//比较OUT引脚是否为1
{}
else{
MPXY8020A_temp&=~BITO;//位0=0
}
temperature=MPXY8020A_temp;
//用全局变量储存采样值

读取MPXY8020A气压数据的函数代码与读取温度的函数相似。限于篇幅,本文不再细述。

一周热门 更多>