华拓科技网
您的当前位置:首页使用MS4525DO压力传感器计算空速

使用MS4525DO压力传感器计算空速

来源:华拓科技网


使用MS4525DO压力传感器计算空速

——中北大学:马政贵

MS4525DO压力传感器内含高性能压力数字输出(14位)和温度数字输出(11位),包含多种气压量程,支持SPI或者IIC总线接口。为降低通讯时间,程序使用SPI通讯方式,气压量程为±1psi,为两端差分输出,A输出类型,供电电压3.3V。

MS4525DO的数据读取及转换:

图1 MS4525DO数据包的输出

根据数据手册,MS4525DO的数据包大小为4字节(32位),从高字节开始传输。其中,最高的两位S(1:0)表示数据包的状态,紧接着是14位的气压AD值,再接着是11位的温度AD值,最后5位为无效位,没有相应的数据定义,可不理会。该芯片不用进行初始化,不接受指令,可直接进行数据读取并根据关系式进行转换。

图2 气压AD值和实际气压的关系式

根据上述气压AD值和实际气压的关系式,有

80%*16383*Pressuresta10%*16383PressureRange

OutputstaOutput80%*16383*Pressure10%*16383PressureRange

所以,

PPressurePressuresta(OutputOutputsta)*PressureRange80%*16383

其中,Pressuresta、Outputsta为静态下的气压值及其AD值,Pressure、Output为当前的气压值及其AD值,P为变化的气压量。

Outputsta通过在静态下多次读取(程序中为100次)求平均值的方式进行获取,对应

程序中的Air_Speed_AD_Static:

MS4525_CS_L; delay_us(200); for(i=0;i<32;i++) //对数据的各个位进行逐一读取 { MS4525_CLK_H; Get_Data <<=1; Get_Data |=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6); delay_us(150); MS4525_CLK_L;

delay_us(200); } delay_us(200); MS4525_CS_H; delay_us(200); Air_Speed_AD = Get_Data & 0x3fff0000; 应数据包的16~29位 Air_Speed_AD >>=16; if(!Init_Finish) { count++; Pressure_Add += Air_Speed_AD; if(100 == count) { //取气压的AD值,对

count = 0; Init_Finish=1; Air_Speed_AD_Static = Pressure_Add/100; //获取静态下的气压AD值 Pressure_Add=0; } }

图3 温度AD值和实际温度的关系式

读出气压AD值和温度AD值之后,可以根据芯片手册给出的关系式求出相应的气压值和温度值。根据气压和速度的关系

2P12VPV2 ===》

其中,ρ为大气密度,当温度为15℃,处于海平面时,其值近似为1.225 kg/m3。在不同温度和不同气压下,按如下式子进行近似计算:

PR*T

P:当前气压值,单位是Pa;

R:气体常数,为287.5;

T:当前空气温度,单位K,K=℃+273.15。

因此,ρ的取值可以结合气压计MS5611进行修正。

说明:由于气压值和速度值的指数关系,即使传感器在静态下,较小的器件误差也会造成一定的速度输出,为避免此种情况,可在气压值较小时,进行比例缩小,缩小因子与气压值成正比。

/*******************************************************************************

功能:读取MS4525DO数据,并转换为温度、速度值 参数:无 返回值:无 *******************************************************************************/ MS4525_CS_L; delay_us(200); for(i=0;i<32;i++) //对数据的各个位进行逐一读取 { MS4525_CLK_H; Get_Data <<=1; Get_Data |=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6); delay_us(150); MS4525_CLK_L;

delay_us(200); } delay_us(200); MS4525_CS_H; delay_us(200); Air_Speed_AD = Get_Data & 0x3fff0000; //取气压的AD值,对应数据包的16~29位 Air_Speed_AD >>=16; /********计算气压变化量,并由单位psi转为Pa***********/ Pressure (Air_Speed_AD-Air_Speed_AD_Static)*2*6.4757*1000.0/(0.8*16383); Air_Speed = sqrt(2*fabs(Pressure)/1.225)*3.6; //换算为空速 if(AirSpeed < 10) { =

AirSpeed = AirSpeed * (AirSpeed/10)* (AirSpeed/10); //在速度较低时进行缩放处理 if(AirSpeed<0.7) { AirSpeed = 0.0; } } AirSpeed = fabs(AirSpeed*autotakeoff_speed/100); 子 Temp_AD = Get_Data & 0x0000ffe0; 数据包的5~15位 Temp_AD >>=5; Temp = (float)Temp_AD*200/2047-50; Get_Data = 0; 参看:

//加入空速调节比例因 //取温度的AD值,对应//转换为对应的温度

1、Measurement Specialties, Inc.-《4525DO-Datasheet》

因篇幅问题不能全部显示,请点此查看更多更全内容