一、项目介绍
本项目旨在设计一款基于纳芯微NSPGD1M006DT04表压传感器的压力测量系统。该系统主要用于测量不同水柱高度对应的压力值,并通过I2C通信协议将数据传输至主控单片机,最终通过串口输出显示。项目重点在于实现传感器的正确配置、数据采集的稳定性以及测量结果的准确性,且把压力系数准确的呈现在oled上。

二、项目设计思路(含设计框图)
2.1 功能需求
- 使用NSPGD1M006DT04表压传感器配置为I2C输出模式
- 测量不同水压(10cm、30cm、60cm水柱)对应的I2C数值
- 通过串口输出压力系数值,呈现在oled屏上
- 使用12指神探分析I2C数据波形,与规格书对比分析
2.2 设计框图

2.3 硬件介绍
NSPGD1M006DT04表压传感器:
- 压力范围:0-6kPa(约0-60cm水柱)
- 输出方式:I2C数字输出
- 工作电压:3.3V
- 高精度、低功耗特性
主控平台:STM32最小系统板(STM32F103C8T6)
- 基于树莓派RP2040微控制器
- 内置I2C接口和UART串口STM
- 240×240分辨率LCD显示屏
- 丰富的GPIO资源
2.4 电路板设计
电路板设计使用嘉立创设计绘制,其中关键元器件封装使用 立创EDA 。PCB布局参考了 2024年寒假练 的 带屏12指神探的传感器扩展板,连线完全兼容 12指神探 的引脚。
关于I2C的主芯片电路设计,参考其NSPGD1M_Series_Datasheet Rev2.0_EN

下图为 中的 立创EDA3D渲染效果图。

NSPGD1M006DT04 带屏12指神探
VDD → 3.3V
GND → GND
SCL → B10(I2C SCL)
SDA → B11(I2C SDA)
OLED SCL → B8
OLED SDA → B9
2.5 关键代码展示与说明
2.5.1 NSPGD1M006DT04表压数据
NSPGD1M006DT04 这颗高精度气压传感器在 Arduino 平台没有现成的库可供使用。而根据其 数据手册 它的 I2C 通讯写地址固定为:0xFE , 读固定固定为:0xFF。关键代码如下:
// 1. 测试写地址的ACK回应
MyI2C_Start(); // 发送起始信号
MyI2C_SendByte(I2C_ADDR_WRITE); // 发送等待地址
ackFlag = MyI2C_ReceiveAck(); // 等待传感器ACK
MyI2C_Stop(); // 释放总线
if (ackFlag != 0)
{
//printf("Test 1 Fail: 写地址0XFE无回应\n");
return 1;
}
// 2. 测试读地址的ACK回应
MyI2C_Start(); // 发送起始信号
MyI2C_SendByte(I2C_ADDR_READ); // 发送等待地址
ackFlag = MyI2C_ReceiveAck(); // 等待传感器ACK
MyI2C_Stop(); // 释放总线
if (ackFlag != 0)
{
//printf("Test 1 Fail: 写地址0XFE无回应\n");
return 2;
}
// 地址响应正常
//printf("Test 1 Pass: I2C写地址0XFE/读0XFF均有回应\n");
return 0;
}
2.5.2 绝压数据
NSPGD1M006DT04 将 压力信号转换为可自定义输出范围(0~5V)的模拟输出信号。电路板设计时将 NSPGD1M006DT04 的 SCL/SDA 引脚通过两个 4.7KΩ 电阻上拉后接到排针,如下图所示:

根据其 数据手册 中的转换公式,将模拟信号值转换为以千帕为单位的气压值。数据手册中给出的是模拟信号的计算公式:
Code = (A × P + B) × 8388607
P(kPa) = (4194303/8388607-B)/A
A=0.13333 B=0.1
最后,根据求解后得到的公式,编码实现气压值的转换。
code = ((int32_t)pdata[0] << 16) | ((int32_t)pdata[1] << 8) | pdata[2];
if (code > 8388607)
{
code -= 16777216; // 16777216 = 22?£¨²¹Âëת»»Îª¸ºÊý£¬ÊÊÅä-10~10kPa·¶Î§£¬Îĵµ3. Product Overview£©
}
pressure = (code / 8388607.0f - SENSOR_B) / SENSOR_A;
return pressure;
READ_ERR:
MyI2C_Stop();
return NAN;
}
三、搜集素材的思路
在项目实施过程中,主要通过以下途径获取所需资料:
- 官方数据手册:从纳芯微官网下载NSPGD1M006DT04 完整数据手册
- 应用笔记:参考纳芯微提供的传感器应用设计指南
- 开源社区:查阅类似项目的实现方案和代码库
- 技术论坛:在专业电子论坛寻求I2C配置和数据处理建议
5.供应商沟通:与传感器、微控制器等关键元器件的供应商建立联系,获取详细的产品规格书和应用案例
四、成果展示
4.1 实物照片
展示传感器与12指神探的实际连接情况,包括焊接质量和布线规整度 。


芯片SCL和SDA与12指探连接引脚一致。

水杯150毫升,显示屏显示压力4.0Pa
4.2 实测数据
不同水量对应的压力测量数据
水量 (ml) | 压力系数 (kPa) |
|---|---|
50 | 1.0 |
100 | 2.0 |
150 | 4.0 |
4.3 上位机数据展示
除了注重用户体验的设计提供了清晰易懂的用户界面和便捷的交互方式。用户通过串口接收数据即可在电脑或其它上位机上展示传感器数据,下图为PC端使用12指探 展示传感器数据曲线图:
五、总结
5.1遇到的问题
- 封装问题:全部的封装库都是使用 立创EDA 中的封装库下载后使用,传感器芯片在 立创EDA 中也没有相应的封装,故而使用相同封装的其它型号进行代替绘制。好在打板后焊接验证没有问题。
- 焊接环节:NSPGD1M006DT04这颗芯片,本身封装很小,所有的芯片都在底下内部。需要用加热台焊接。
- I2C地址识别问题:初始无法检测到传感器,通过一步步检查I2C时序,找到错误点完成
5.2 心得体会
通过本项目深入理解了数字压力传感器的工作原理和I2C通信协议的实际应用。纳芯微NSPGD1M006DT04传感器表现出良好的线性度和稳定性,
通过本次压力测量系统项目,我深入实践了从传感器配置、电路设计到数据处理的完整开发流程。面对无现成库的挑战,我研读手册自主实现了I2C通信协议,并成功驱动传感器采集压力数据。焊接与调试过程锻炼了我的动手能力和问题解决能力。当OLED屏准确显示压力值时,我深刻体会到理论转化为成果的成就感。这次经历不仅巩固了嵌入式知识,更让我认识到细致与坚持在工程实践中的重要性。
最后,感谢硬禾学堂推出的《WeDesign》活动!此次活动带给我许多宝贵实践经验和机会,我们下期活动再见!