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

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

废话不多说,先看mpx4250的接线图:STM32f1系列压力传感器MPX4250压力检测_第1张图片
可以看到mpx4250的外接电路还是很方便的,再附上一张仿真接线图:
STM32f1系列压力传感器MPX4250压力检测_第2张图片
这样实物接线应该没有问题了。
可以看到这里可以从1端口输出电压值 。这个电压是可以被32的AD检测的。但是,这个电压又是咋来的?或者直接点,电压与压力对应关系如何??
查看手册我们可以看到这样一幅图:STM32f1系列压力传感器MPX4250压力检测_第3张图片
STM32f1系列压力传感器MPX4250压力检测_第4张图片
可以看到,这里有三条线,在(20-250)范围内成线性关系。可是为啥是三条,看图中公式可知它是在标准输出±了一个误差值,这里可以看到在0-85C的范围内的Vs=5.1V,那么其他呢,其他值,Error为多少?
STM32f1系列压力传感器MPX4250压力检测_第5张图片
STM32f1系列压力传感器MPX4250压力检测_第6张图片
由上图可知,测量压力时与温度是分不开的(这个下一个讲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压力检测_第7张图片
其他功能以后一一讲解。

你可能感兴趣的:(stm32,传感器,芯片)