基于STM32单片机的压力变送器的使用

本文介绍了如何在STM32F103VET6单片机项目中使用PT210B-M20压力变送器,包括选购原因、传感器特性、开发环境搭建、代码编写,重点讲解了通过ADC采集电压并利用数学模型计算压力的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于STM32单片机的压力变送器的使用

1、使用原因

在一次项目中需要获取压力罐中的压力,在淘宝挑选了一款压力变送器。在没有学习《过程控制》这门课之前,我也分不清楚“传感器”与“变送器”的区别。后来才清楚,传感器是把非电量信号转换为电信号,而变送器是将电信号转换为标准电信号。根据课本上所写的,目前广泛使用的是4~20mA DC模拟电流与1~5V DC模拟电压信号是国际标准。那这就好办了,对接这款压力变送器,我只需要使用单片机的ADC采集去采集电压,再根据输出电压与实际压力之间的数学关系式计算出测得的压力即可。
在这里插入图片描述

2、传感器介绍

介绍下这款压力变送器,手感挺沉的,底部有一小孔,下端有螺纹可以用来固定安装。铭牌上标注有:

  • 型号:PT210B-M20

  • 量程:(-0.1-2)MPa

  • 输出:0.2-3.2V

  • 供电:DC3.5V

  • 精度:0.5%FS

  • 红:电源、黑:共地、蓝:输出
    在这里插入图片描述

3、开发环境与工具

  • keil 5

  • STM32CubeMX

  • 单片机型号:STM32F103VET6

  • 串口烧录FlyMCU

  • 串口监视软件:MicroLab

    4、初始代码生成

打开STM32CubeMX,新建工程。

  1. 外部时钟,倍频至72MHz
    在这里插入图片描述

  2. 串口打印配置
    在这里插入图片描述

  3. 配置ADC采集+DMA
    在这里插入图片描述在这里插入图片描述

  4. 生成工程
    在这里插入图片描述

5、编写代码

基本采用自己的框架,不做详细展示了。但是这里需要注意,找到压力变送器输出电压与压力的数学关系式。

量程:(-0.1-2)MPa

输出:0.2-3.2V

采用数学小工具:在线多项式曲线拟合

在这里插入图片描述

获得函数关系式:[F(x) = +0.7000000000000002*x-0.24000000000000002]
简化后为:F(x) = 0.7 * x - 0.24

压力传感器.c/.h编写:

#include "Mydrivers.h"

static void  Get_Pressure_Voltage(void);       //获取压力电压
static void  Get_Pressure_Value(void);      //获取压力值

Pressure_t Pressure = 
{
	Get_Pressure_Voltage,
	0,
	0.0,
	
	Get_Pressure_Value,
  0.0
};

/*
	* @name   Get_Pressure_Voltage
	* @brief  获取压力电压
	* @param  None
	* @retval None    
*/
static void Get_Pressure_Voltage(void)
{
	Pressure.Pressure_Voltage =  (Pressure.usADC_Value * 3.3) / 4095;
	
	printf("AD转换原始值 = %d\r\n", Pressure.usADC_Value);
	printf("计算得出的电压值 = %.2fV\r\n", Pressure.Pressure_Voltage);
}

/*
	* @name   Get_Temperature_Value
	* @brief  获取压力值
	* @param  None
	* @retval None    
*/
static void Get_Pressure_Value(void)
{
	Pressure.fPressure = 0.7 * Pressure.Pressure_Voltage - 0.24;
	
	printf("Pressure = %.1fMPa", Pressure.fPressure);
}
#ifndef __Pressure_Transmitter_H__
#define __Pressure_Transmitter_H__

#include "Mydrivers.h"

typedef struct
{
	void (*Get_Pressure_Voltage)(void);      //获取压力电压
	uint16_t usADC_Value;                    //ADC采集值
	float Pressure_Voltage;                  //压力电压
	
	void (*Get_Pressure_Value)(void);     //获取压力值
	float fPressure;                         //压力
}Pressure_t;

extern Pressure_t Pressure;

#endif

main.c
在这里插入图片描述

6、测试结果

在这里插入图片描述

7、总结

  1. 仔细阅读变送器的数据手册或者铭牌
  2. 计算出数学关系式
  3. 配置ADC采集+DMA
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值