一、所选主题和项目介绍
本次所选主题参加的是FastBond第四季中感知方向的工业自动化主题
在工业自动化控制系统中,环境与设备状态的数据采集是实现智能监测、稳定控制与安全预警的核心基础。各类运行参数的实时获取,直接决定了自动化系统的响应精度、决策可靠性以及设备整体运行寿命。而在众多关键参数中,温度采集无疑占据着最为重要的地位。
无论是工控主板、驱动芯片、电源模块等核心电子器件的工作温度监测,还是车间环境、机柜内部、设备腔体等场景的环境温度感知,温度数据都直接关系到设备是否过热、运行是否异常、控制策略是否需要动态调整。一旦温度失控,轻则导致器件性能下降、测量漂移,重则引发停机、烧毁甚至安全事故,因此高精度、高稳定性的温度采集方案显得尤为必要。
基于这一工业实际需求,本次参加活动我带来的是一款基于 NTC 热敏电阻设计的单通道温度采集模块。NTC 热敏电阻具有灵敏度高、响应速度快、成本低廉、体积小巧等优势,非常适合嵌入式与工业场景下的单点温度检测。该模块通过优化硬件采样电路与信号处理逻辑,能够实现对目标点位温度的稳定采集与精准转换,可快速接入 PLC、单片机或工控主板等控制系统,为工业自动化设备提供可靠的温度反馈,适用于设备温控、环境监测、过热保护等多种实际应用场景。
二、硬件介绍
1.NTC热敏电阻

型号 | GA10K4A1A |
制造商 | TE Connectivity Measurement Specialties |
25°C 时欧姆阻值 | 10k |
电阻容差 | ±0.1°C |
B 值容差 | ±0.5% |
B25/85 | 3694K |
工作温度 | -40°C ~ 125°C |
2.线性低压差(LDO)稳压器

型号 | ADP122AUJZ-3.3-R7 |
制造商 | Analog Devices Inc. |
电压 - 输入(最大值) | 5.5V |
电压 - 输出(最小值/固定) | 3.3V |
电流 - 输出 | |
电流 - 静态 (Iq) | 105 µA |
工作温度 | -40°C ~ 125°C |
3.MCU微控制器


型号 | CH32V003F4P6 |
制造商 | 沁恒 |
内核 | 青稞 RISC-V2A |
主频 | 48MHz |
存储器 | 2KB+16KB |
外设 | 1*10位ADC、1*USART、1*I2C、1*SPI、1*16 位高级定时器、1*16 位通用定时器 |
工作温度 | -40°C ~ 125°C |
三、方案框图和项目设计思路介绍

整体可分为供电单元、通信单元、主控单元和温度采集单元四大模块
- 1.供电单元
- USB:作为模块的外部供电输入接口,提供5V直流电压,同时也是与上位机的数据通信链路载体。
- LDO(ADP122AUJZ-3.3):属于低压差线性稳压器,将 USB 输入的5V电压稳压为3.3V,为主控芯片ch32V003和其他电路提供稳定的工作电压,保证模块低功耗、低噪声运行。
- 2.通信单元
- CH340:是 USB 转串口的桥接芯片,负责将 USB 的总线信号转换为串口(UART)信号,实现上位机与主控芯片ch32V003之间的双向数据通信,完成温度数据的上传和指令的下发。
- 3.主控单元
- ch32V003:是模块的核心控制芯片(基于 RISC-V 架构的单片机),主要承担两大功能:一是通过 ADC(模数转换) 接口采集温度采集单元的模拟电压信号,并将其转换为数字信号;二是通过串口与 CH340 交互,将处理后的温度数据发送至上位机。
- 4.温度采集单元
- 10K 电阻 + NTC(GA10K4A1A):采用分压电路设计,10K 固定电阻与 NTC 热敏电阻串联在 VCC 和 GND 之间,两者的分压节点连接至 ch32V003 的 ADC 引脚。NTC 热敏电阻的阻值会随温度变化,导致分压节点的电压发生改变,ch32V003 通过采集该电压值,结合 NTC 的阻值 - 温度特性曲线,即可计算出实际温度。
四、原理图和PCB展示及介绍

原理图
原理图共划分出七大功能电路模块,覆盖了供电、通信、主控、温度采集、辅助功能等核心环节,各模块分工明确且协同工作,以下是逐模块的详细解析:
1. USB 接口电路
- 采用标准 USB Type-C 接口(USB_C_ReceptacleJS92.0_16P)作为供电输入和数据通信的物理接口,提供5V电源输入,同时引出 USB_D+、USB_D - 差分信号用于数据传输。
- 配置了CC引脚电阻(R1、R2),用于适配C to C数据线。
2. 5V 转 3.3V 电路
- 核心器件为 LDO 芯片ADP122AUJZ-3.3,将 USB 输入的5V电压稳压为3.3V,为 MCU、NTC 采集电路等提供稳定的工作电压。
- 设计有保险丝 F1(1A)实现过流保护,电容C1、 C2、C3、C4 组成滤波网络,降低稳压后的电压纹波;EN 引脚接地使芯片始终使能。
3. USB 转串口电路
- 核心芯片为CH340,负责将 USB 的差分信号转换为 UART 串口信号(TX、RX),实现上位机与 MCU 之间的通信。
- 滤波电容(C5、C6)为CH340提供3.3V电压适配,确保与主控电路电平适配。
4. NTC 接口电路
- 核心为 NTC 热敏电阻GA10K4A1A与 10K 固定电阻组成的分压电路,3.3V 电源经 10K 电阻后接 NTC 热敏电阻再到 GND,分压节点连接至 MCU 的 ADC 引脚(PC4/ADC_IN4)。
- 温度变化会改变 NTC 阻值,进而改变分压节点的电压,MCU 通过采集该电压值计算实际温度。
- 使用螺丝快捷接口,方便快速安装和更换NTC热敏电阻。
5. 电源指示灯电路
- 由 LED 灯和 1K 限流电阻 R1 组成,一端接 3.3V 电源,另一端接地,模块上电后 LED 点亮,直观指示电源工作状态。
6. 单总线烧录电路
- 采用排针接口,引出 MCU 的单总线烧录引脚(PD5/SWD),配合 3.3V 和 GND,实现对 ch32V003 芯片的程序烧录与调试。
7. MCU 电路
- 核心为Ch32V003单片机,是模块的控制核心:通过 ADC 引脚采集 NTC 分压电压,完成模数转换和温度计算;通过 UART 串口与 CH340 通信,实现数据上传和指令接收;同时集成了烧录、IO 口等功能引脚,预留了扩展能力。
- 配置了滤波电容(C7)稳定 MCU 供电,保证芯片运行可靠性。
此外,原理图还设计了M2 固定孔(H1、H2),用于模块的物理安装固定,整体电路兼顾了功能性、稳定性和实用性。

PCB
整体布局与版型特点
1.版型形态:采用矩形窄板设计,边缘做了圆角处理,适配小型设备 / 机柜的安装空间,同时标注了 M2 规格的固定孔位(图中圆形接地标识处),方便物理固定。
2.层叠与走线:PCB使用双面板设计,顶层与底层分工走线,减少信号交叉干扰;地采用大面积敷铜,提升供电稳定性与抗干扰能力。
3.器件排布:①核心器件(MCU、LDO、CH340、USB 接口)按数据及电源走向有序排列,遵循 “信号短路径” 原则,缩短关键信号走线长度;
②NTC 采集接口布在下部,方便后续NTC热敏电阻的安装;
③电容靠近对于芯片的VCC和GND引脚,连线遵循先过电容再到引脚
4.接地设计:板卡上多处使用 “GND” 的圆形焊盘为接地节点,大面积地敷铜与各器件接地引脚相连,形成统一地平面,降低电磁干扰。
五、调试软件介绍
本次使用的是沁恒为CH32V003配备的MounRiver Studio Ⅱ(MRS2)集成开发环境
MounRiver Studio Ⅱ(简称 MRS2)是沁恒微电子推出的新一代免费嵌入式 IDE,基于 VSCode 框架深度定制,主打RISC-V(如 CH32V/CH32X 系列)与ARM(如 CH32F 系列)内核 MCU 开发,兼顾轻量化、高效性与国产化适配,是 CH32 系列芯片的首选开发环境。
六、软件流程图和关键代码介绍

软件流程图
1. 系统上电初始化阶段
- 接入 USB 接口,5V供电输入,同时触发 CH340 与上位机建立通信连接;
- 5V电压输入 LDO 芯片 ADP122AUJZ-3.3,经稳压处理后输出稳定3.3V,为 ch32V003 主控芯片供电;
- ch32V003 完成上电复位,初始化 ADC 模数转换模块、UART 串口通信模块,设置采样参数(如 ADC 采样精度、串口波特率)。
// ========== 硬件参数 ==========
#define VREF 3.3f // ADC 参考电压 (V)
#define ADC_MAX 1024.0f // 10 位 ADC 最大值 (0-1023)
#define R_FIXED 10000.0f // 固定电阻 10kΩ
#define R_NTC_25 10000.0f // NTC 25°C 电阻值
#define B_VALUE 3694.0f // B25/85 常数
#define T0_K 298.15f // 25°C 开尔文温度
// ========== GPIO 初始化 ==========
void gpio_Init(void)
{
// 使能 GPIOC 时钟(用于 PC4)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
// PC4 配置为模拟输入 (ADC)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
// ========== ADC 初始化 ==========
void adc_Init(void)
{
// 使能 ADC1 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// ADC 结构体初始化
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 非扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 单次转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; // 规则组通道数
ADC_Init(ADC1, &ADC_InitStructure);
// 使能 ADC
ADC_Cmd(ADC1, ENABLE);
// 校准 ADC
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
2. 温度采集与信号转换阶段
- NTC 热敏电阻(GA10K4A1A)与 10K 固定电阻构成分压电路,实时感应环境温度;
- 温度变化导致 NTC 阻值改变,分压节点输出对应的模拟电压信号,传输至 ch32V003 的 ADC 引脚;
- ch32V003 按预设周期启动 ADC 采样,将模拟电压信号转换为数字量;
- 主控芯片调用 NTC 阻值 - 温度特性算法,将数字量换算为精准的温度数值。
// ========== 读取 ADC 值 (PC4 / ADC_IN2) ==========
uint16_t ADC_Read(void)
{
// 配置规则组通道:ADC_Channel_2 (对应 PC4),采样时间 57 周期
// 可选采样时间宏定义:
// ADC_SampleTime_3Cycles, ADC_SampleTime_9Cycles, ADC_SampleTime_15Cycles,
// ADC_SampleTime_30Cycles, ADC_SampleTime_43Cycles, ADC_SampleTime_57Cycles,
// ADC_SampleTime_73Cycles, ADC_SampleTime_241Cycles
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_57Cycles);
// 启动软件转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// 等待转换完成
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
// 返回 ADC 转换结果 (0-1023)
return ADC_GetConversionValue(ADC1);
}
// ========== 根据 NTC 电阻计算温度(B 参数方程)==========
float NTC_GetTemperature(float R_ntc)
{
float T_k = 1.0f / (1.0f/T0_K + (1.0f/B_VALUE) * logf(R_ntc / R_NTC_25));
return T_k - 273.15f;
}
// 读取 ADC 值
uint16_t adc_val = ADC_Read();
// 计算 NTC 电压
float V_ntc = (adc_val / ADC_MAX) * VREF;
// 计算 NTC 电阻
float R_ntc = V_ntc / (VREF - V_ntc) * R_FIXED;
// 计算温度
float temperature = NTC_GetTemperature(R_ntc);
// 输出整数温度(四舍五入)
int temp_int = (int)(temperature + 0.5f);
3. 数据传输与交互阶段
- 计算完成后,Ch32V003 通过 UART 串口将温度数据发送至 CH340 芯片;
- CH340 将串口信号转换为 USB 总线信号,通过 USB 接口上传至上位机;
- 上位机接收数据并实时显示(如数值、曲线);
- 指令经 USB→CH340→UART 传输至 Ch32V003,主控执行对应操作,完成闭环控制。
// 通过 printf 输出
printf("ADC=%d, Temp=%d C\r\n", adc_val, temp_int);
4. 持续运行与异常阶段
- 循环执行 “采集 - 转换 - 传输” 流程,实现温度实时监测;
- 断开 USB 供电后,系统断电停止工作,完成一次完整运行周期。
七、硬件功能展示及说明


串口实时打印当前NTC电压及环境温度


使用手指触摸NTC热敏电阻,模拟环境温度改变,并通过串口实时打印
八、所遇难题及心得体会
本次在选品中失误了一下,NTC热敏电阻的引出线为非绝缘的导线,导致在使用过程中需额外注意不要触碰到导线,导致数据读取错误,好在导线可塑性较好,不会轻易搭接。以后在选品时需检查仔细。