STM32f1是具有arm cortex-M3内核的芯片,具有两个10位(或16位)adc检测功能,这为很多模拟输出的传感器的信号传输提供了便利。
MPX4250是一种线性度极强的一种压力传感器,它的线性范围为20-250kpa,测量范围也比较广泛,适用于大多数场合的压力检测。

废话不多说,先看mpx4250的接线图:

STM32f1系列压力传感器MPX4250压力检测_mpx


可以看到mpx4250的外接电路还是很方便的,再附上一张仿真接线图:

STM32f1系列压力传感器MPX4250压力检测_IT_02


这样实物接线应该没有问题了。

可以看到这里可以从1端口输出电压值 。这个电压是可以被32的AD检测的。但是,这个电压又是咋来的?或者直接点,电压与压力对应关系如何??

查看手册我们可以看到这样一幅图:

STM32f1系列压力传感器MPX4250压力检测_标准输出_03


STM32f1系列压力传感器MPX4250压力检测_传感器_04


可以看到,这里有三条线,在(20-250)范围内成线性关系。可是为啥是三条,看图中公式可知它是在标准输出±了一个误差值,这里可以看到在0-85C的范围内的Vs=5.1V,那么其他呢,其他值,Error为多少?

STM32f1系列压力传感器MPX4250压力检测_标准输出_05


STM32f1系列压力传感器MPX4250压力检测_芯片_06


由上图可知,测量压力时与温度是分不开的(这个下一个讲18b20测温)。

有了这些数据,可以算出压力对应的输出电压,也可以看出,该模块的误差是出厂就带有的,无法消除。而电压值换算出压力值,根据公式反推就好。下面上代码:

if ( TIM_GetITStatus( ADVANCE_TIM, TIM_IT_Update) != RESET ) 
{
time++;
num0++;



if(num0 == 2) ad0 = ADC_ConvertedValue[0];
if(num0 >= 3) num0 = 0;
pressure = (double)((double)ad0/4096/5*5.1-0.04)/0.00369;

pressure1 = (uint32_t)(pressure*1000);
TIM_ClearITPendingBit(ADVANCE_TIM , TIM_FLAG_Update);
}
此为电压值的获取与换算ad值除以4096*5为电压值,乘以5.1(系数)后减去0.04,再除以0.00369就是压力值。
显示程序如下
OLED_ShowChar(0,0,'0'+pressure1/100000%10,10);
OLED_ShowChar(16,0,'0'+pressure1/10000%10,10);
OLED_ShowChar(32,0,'0'+pressure1/1000%10,10);
OLED_ShowChar(64,0,'0'+pressure1/100%10,10);

这里单位为PA。

整体电路连接图如下

STM32f1系列压力传感器MPX4250压力检测_IT_07


其他功能以后一一讲解。