AGR12100A 气压传感器

ASAIR 奥松电子 · MEMS压阻式表压传感器 · STM32F103C8T6 演示程序

量程 0~100 kPa 输出 0.5~4.5 V 12-bit ADC HAL 库
1传感器原理与功能

AGR12100A 是广州奥松电子(ASAIR)推出的 MEMS 压阻式表压传感器模块,采用硅压阻芯体,将气体压力信号线性转换为模拟电压输出,广泛应用于工业控制、医疗设备、消费电子等领域。

传感器简介

AGR12100A 内部集成 MEMS 压阻式压力传感芯体与专用信号调理电路,采用比例输出(Ratiometric)架构——输出电压与供电电压成比例关系。在 5V 供电下,零点输出 0.5V,满量程输出 4.5V,对应压力量程 0~100 kPa。模块采用八角形 PCB 封装,顶部带气压接口,底部为 SIP 直插引脚(VCC / GND / OUT),安装便捷。

工作原理 — MEMS 压阻效应

传感器的核心是一片利用 MEMS 工艺在单晶硅上刻蚀出的弹性薄膜(Diaphragm)。薄膜上通过离子注入形成四个压阻应变元件,构成惠斯通电桥(Wheatstone Bridge)。其工作过程如下:

🔵

1. 压力作用

气体压力通过气压接口作用于硅膜片正面,使膜片产生微小弹性形变。

🟢

2. 压阻效应

膜片形变导致应变电阻阻值变化——受拉区域电阻增大,受压区域电阻减小。

🟡

3. 电桥输出

惠斯通电桥失去平衡,输出与压力成正比的差分毫伏级电压信号。

🔴

4. 信号调理

内部 ASIC 对微弱信号放大、温度补偿、线性校正,输出 0.5~4.5V 标准电压。

压阻式压力传感原理动画

气压接口 气体压力 P 硅膜片 (Diaphragm) R1↑ R2↓ R3↓ R4↑ 惠斯通电桥 → 差分输出 ΔV VCC GND Vout ASIC 信号调理 放大 · 温度补偿 · 线性化 → 0.5~4.5V 压力 P → 膜片形变 → 压阻变化 → 电桥失衡 → 电压输出

技术参数

参数数值说明
品牌/型号ASAIR AGR12100A广州奥松电子
传感原理MEMS 压阻式硅压阻芯体 + 惠斯通电桥
测量类型表压 (Gauge)以大气压为参考零点
压力量程0 ~ 100 kPa对应 0 ~ 100000 Pa
供电电压5.0 V DC典型值,范围 4.5~5.5V
零点输出0.5 V (500 mV)零压力时输出电压
满量程输出4.5 V (4500 mV)满量程压力时输出
输出特性比例输出 (Ratiometric)输出与供电电压成比例
输出接口模拟电压单端输出
引脚定义VCC / GND / OUT3-pin SIP 直插
引脚间距2.54 mm标准 0.1 英寸
封装形式八角形 PCB + 气压接口顶部 Φ3mm 气嘴

功能特点

📏

宽量程测量

0~100 kPa 量程覆盖常见工业气压范围,适用于正压检测场景。

⚡

比例输出架构

输出电压与供电成比例,配合同源基准的 ADC 可消除供电波动影响。

🌡️

内置温度补偿

ASIC 集成温度补偿算法,在全温区保持输出精度稳定。

🔧

安装便捷

八角形 PCB + SIP 直插引脚,标准 2.54mm 间距,兼容面包板与 PCB。

💡

低功耗设计

5V 供电下工作电流小,适合电池供电与嵌入式系统集成。

🏭

工业级可靠性

MEMS 工艺制造,抗震动、抗冲击,适用于工业现场长期运行。

外观展示

以下为传感器各角度实物照片,原尺寸展示。

尺寸图

AGR12 压力传感器尺寸图
AGR12 压力传感器尺寸图(单位: mm;未标注公差: ±0.20mm)— 总高 19.90mm,八角形法兰,引脚间距 2.54mm
2原理图与 PCB 封装

以下为传感器模块的原理图与 PCB 封装设计。

传感器原理图
原理图 — 传感器 U1 经 R1/R2 分压后连接至 MCU 的 PA0 引脚

原理图分析

原理图中传感器 U1 为 6 引脚封装,引脚 2、4 接 +5V 供电,引脚 3、6 接地,引脚 5 为模拟电压输出(OUT)。由于传感器输出范围超过3.3V,而 STM32F103C8T6 的 ADC 输入范围为 0~3.3V,因此使用 R1 = R2 = 10KΩ 构成 1:1 分压电路,将传感器输出电压衰减一半后送入 MCU 的 PA0(ADC1_IN0) 引脚。

分压关系:VPA0 = VOUT × R2 / (R1 + R2) = VOUT × 10K / 20K = VOUT / 2
PCB封装图
PCB 封装 — U1 传感器封装与 R1、R2 电阻封装的 PCB 布局

PCB 封装说明

PCB 封装图中,U1 为传感器的 6 引脚封装(左侧引脚 1/2/3,右侧引脚 6/5/4),R1 与 R2 为两颗 10KΩ 电阻的封装,布置在 U1 右侧。所有焊盘采用圆形通孔设计,引脚间距为标准 2.54mm,可直接对应传感器实物引脚布局。

3程序分析

演示程序基于 STM32F103C8T6 + HAL 库开发,通过 ADC1 通道 0 采集传感器模拟电压,经线性映射计算压力值,并在 OLED 屏幕上显示。以下从硬件连接、时钟配置、ADC 采集、电压换算到压力计算进行逐段分析。

硬件连接

外设MCU 引脚功能
ADC1_IN0PA0采集传感器分压后模拟电压
OLED SDAPB14OLED I2C 数据线
OLED SCLPB15OLED I2C 时钟线
传感器 VCC+5V传感器供电
传感器 GNDGND共地
传感器 OUT→ R1 → PA0经 10K/10K 分压接 MCU

系统时钟配置

系统采用外部高速晶振(HSE 8MHz),经 PLL 倍频 9 倍后得到 72MHz 系统主频。ADC 时钟由 APB2(72MHz)8 分频得到 9MHz,满足 STM32F103 ADC 时钟不超过 14MHz 的要求。

main.c — SystemClock_Config()
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;       // 使用外部晶振 8MHz
RCC_OscInitStruct.PLL.PLLMUL    = RCC_PLL_MUL9;              // PLL ×9 → SYSCLK = 72MHz

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;           // APB1 = 36MHz
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;           // APB2 = 72MHz

PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8;        // ADC时钟 = 72/8 = 9MHz

ADC 配置

ADC1 配置为单通道、软件触发、12位分辨率、右对齐。通道 0(PA0)采样时间设为 239.5 个 ADC 时钟周期,确保高阻抗信号源下的采样精度。

adc.c — MX_ADC1_Init()
hadc1.Init.ScanConvMode         = ADC_SCAN_DISABLE;        // 单通道扫描关闭
hadc1.Init.ContinuousConvMode   = DISABLE;                  // 单次转换模式
hadc1.Init.ExternalTrigConv     = ADC_SOFTWARE_START;      // 软件触发
hadc1.Init.DataAlign            = ADC_DATAALIGN_RIGHT;     // 数据右对齐,12位有效
hadc1.Init.NbrOfConversion      = 1;                        // 1个转换通道

sConfig.Channel     = ADC_CHANNEL_0;               // PA0 → ADC1_IN0
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; // 239.5周期采样

// GPIO: PA0 设为模拟输入模式
GPIO_InitStruct.Pin  = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
采样时间计算:Tsample = (239.5 + 12.5) / 9MHz ≈ 28μs,转换精度高,适合缓慢变化的气压信号。

电压换算原理

ADC 采集到的是 PA0 引脚上的分压后电压(0~2.5V),需还原为传感器原始输出电压。STM32F103 的 ADC 为 12 位,参考电压 3.3V,转换公式如下:

VADC = ADC_Value × 3300 / 4095  (mV)
VOUT = VADC × 2  (还原分压衰减)
// 代码: Pressure_V = (HAL_ADC_GetValue(&hadc1) * 3300 / 4095.0) * 2;
关键点:代码中的 × 2 正是为了还原 R1/R2 = 10K/10K 的 1:1 分压衰减。传感器实际输出 0.5~4.5V 经分压后为 0.25~2.25V,均在 ADC 3.3V 量程范围内。

压力计算 — map() 线性映射

已知传感器输出电压与压力呈线性关系:0.5V 对应 0 Pa,4.5V 对应 100000 Pa(100 kPa)。程序中使用 map() 函数完成线性映射:

main.c — map() 线性映射函数
long map(long x, long in_min, long in_max, long out_min, long out_max) {
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

// 调用: 将电压 500~4500mV 映射为压力 0~100000Pa
pressure = map(Pressure_V, Voltage_0, Voltage_100, 0, 100000.0);
Pressure = (VOUT − 500) × (100000 − 0) / (4500 − 500) + 0
// 即: Pressure = (VOUT − 500) × 25  (Pa)

映射后进行上下限幅处理,确保输出值在 0~100000 Pa 范围内:

if(pressure <= 0)        pressure = 0;          // 下限幅
if(pressure >= 100000.0) pressure = 100000.0;  // 上限幅

主循环 — while(1)

主循环以 500ms 为周期,利用 HAL_GetTick() 实现非阻塞定时。每次周期触发 ADC 采集、电压换算、压力计算、OLED 显示更新。

main.c — while(1) 主循环
while (1) {
    if(HAL_GetTick() - Time_Now >= 500) {        // 每500ms执行一次

        // ① 启动ADC并等待转换完成
        HAL_ADC_Start(&hadc1);
        if(HAL_ADC_PollForConversion(&hadc1, 999) == HAL_OK)
            Pressure_V = (HAL_ADC_GetValue(&hadc1) * 3300 / 4095.0) * 2;  // ② 计算传感器输出电压
        HAL_ADC_Stop(&hadc1);

        // ③ 线性映射为压力值
        pressure = map(Pressure_V, Voltage_0, Voltage_100, 0, 100000.0);

        // ④ 压力限幅
        if(pressure <= 0)        pressure = 0;
        if(pressure >= 100000.0) pressure = 100000.0;

        // ⑤ OLED 显示更新
        OLED_Clear();
        OLED_CenterPrintf(16, "压力");
        OLED_CenterPrintf(32, "%dPa", pressure);
        OLED_Update();

        Time_Now = HAL_GetTick();                // ⑥ 更新时间戳
    }
}
4程序流程图

以下为完整的程序执行流程图,从上到下展示初始化阶段与 while(1) 主循环的完整逻辑。

AGR12100A 气压传感器程序流程图
开始 HAL_Init() 系统初始化 SystemClock_Config() 72MHz MX_GPIO_Init() GPIO初始化 MX_ADC1_Init() ADC1通道0 OLED_Init() 显示初始化 HAL_ADCEx_Calibration_Start() while (1) HAL_GetTick() - Time_Now ≥ 500? 否 是 HAL_ADC_Start() 启动ADC HAL_ADC_PollForConversion() 计算电压 V = (ADC×3300/4095)×2 map() 线性映射 → 压力值 压力限幅 0 ~ 100000 Pa OLED_Clear() 清屏 OLED 显示 "压力" + 数值 OLED_Update() 刷新显示 Time_Now = HAL_GetTick() 图例 起止 处理 判断 循环
5动画演示

通过动态可视化展示传感器信号采集链路与实时压力监测效果。

信号采集链路动画

气体压力 → 传感器 → 分压电路 → ADC → MCU计算 → OLED显示

气体压力 0 Pa AGR12100A 0.50 V (输出) 分压电路 0.25 V (÷2) ADC1 通道0 0 12-bit STM32 MCU map() 映射 限幅处理 OLED 显示 0Pa 0.96寸 SSD1306 数据沿链路流动,每 500ms 完成一次完整的采集→计算→显示周期

实时压力监测模拟

模拟传感器在不同压力下的读数变化(0~100 kPa)

0 25 50 75 100 kPa 0 kPa
0
Pa
实时压力值
📊 量程: 0 ~ 100,000 Pa
⚡ 更新周期: 500 ms
🔌 采集: ADC1_IN0 (PA0)
📐 分辨率: 12-bit / 4095
📈 输出: 0.5 ~ 4.5 V

电压-压力线性映射关系

传感器输出电压与压力值的线性对应关系

压力 输出电压 0 25k 50k 75k 100k 0.5V 1.5V 2.5V 3.5V 4.5V V = 0.5 + P × 4/100000