TDS(Total Dissolved Solids,总溶解固体)是衡量水质纯净度的核心指标之一。 本演示使用 STM32F103C8T6 通过 ADC 采集 TDS 传感器模拟输出, 经电压–浓度映射后实时显示在 OLED 屏上。
TDS(Total Dissolved Solids)指水中溶解性固体的总浓度, 单位通常为 ppm(mg/L)。 它包含 Ca²⁺、Mg²⁺、Na⁺、K⁺ 等阳离子和 Cl⁻、HCO₃⁻、SO₄²⁻ 等阴离子, 反映水的纯净度与矿物质含量。
纯净水几乎不导电,水中溶解的盐分越多,电导率越高。 TDS 传感器在两根电极之间施加交流激励信号, 通过测量回路电流换算水溶液电阻 → 电导 → TDS 值。
本模块将探头、信号调理电路、连接器集成在一块 PCB 上, 输出模拟电压信号,可直接接入 MCU 的 ADC 引脚。
本示例的采集与换算参数,均直接来自源码,可在 main.c / adc.c 中核对。
滑动条改变"水的纯净度",三个模块将同步联动:探杯 → ADC 采集 → TDS 计算
TDS 模块由信号板 + 探头 + 3P 连接线组成,探头通过 BNC 接头接入信号板。


模块对外只有 3 个引脚。VCC 接 5V 供电,AO 输出与 TDS 浓度正相关的模拟电压,MCU 通过 ADC 采集 AO 即可换算出 ppm 值。


以下摘自 Core/Src/main.c、adc.c,可点击切换查看。
/* 1 秒节拍,采集 + 换算 + 显示 */ while (1) { if (HAL_GetTick() - Time_Now >= 1000) { // ---- 单通道 ADC 采集 ---- HAL_ADC_Start(&hadc1); if (HAL_ADC_PollForConversion(&hadc1, 999) == HAL_OK) float V = (HAL_ADC_GetValue(&hadc1) / 4095.0) * 3.3; HAL_ADC_Stop(&hadc1); // ---- 三次多项式拟合 ---- float TDS = 66.71*V*V*V - 127.93*V*V + 428.7*V; // ---- OLED 显示 (Y=24 居中) ---- OLED_Clear(); OLED_CenterPrintf(24, "TDS:%.1f", TDS); OLED_Update(); Time_Now = HAL_GetTick(); } }
/* ADC1 初始化:通道 0(PA0),单次软件触发 */ ADC_HandleTypeDef hadc1; void MX_ADC1_Init(void) { hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.ContinuousConvMode= DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; HAL_ADC_Init(&hadc1); // 配置通道 0 = PA0,采样 239.5 周期 sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; HAL_ADC_ConfigChannel(&hadc1, &sConfig); }
// ① ADC 数字量 → 电压 V = ADC / 4095 × 3.3V = 12-bit 满量程映射(0~3.3V) // ② 电压 → TDS(ppm)三次多项式 TDS = 66.71·V³ − 127.93·V² + 428.7·V // ③ 数值实例: // V = 1.20V → TDS ≈ 66.71·1.728 − 127.93·1.44 + 428.7·1.20 // ≈ 115.3 − 184.2 + 514.4 ≈ 445 ppm