TDS水质传感器原理图深度解析:完整信号链与工程避坑指南

发布时间:2026/10/27 7:50:33
TDS水质传感器原理图深度解析:完整信号链与工程避坑指南

简介:TDS水质传感器原理图压缩包面向水质监测设备开发者、电子爱好者及相关专业学生,用于了解基于电导率测量的TDS检测电路设计,适用于工业水处理、家用饮水机、环境监测等场景。原理图涵盖双电极检测回路与温度补偿等关键部分,可帮助读者快速掌握传感器信号采集与电导率、溶解固体总量的转换思路,为二次开发或产品调试提供参考。包内共2个文件,包含1份PDF原理图与1份JSON配套文件,整体仅20KB,轻量易用;PDF适合查看与打印,JSON便于数字化存档或程序读取。已有99人学习下载。借助该原理图,读者可对照TDS值与电导率转换关系,理解惰性电极材料选择和温度补偿对测量准确性的影响,也可在此基础上扩展自动校准、数据记录或无线传输等功能,从而提升水质监测项目的完整性与可靠性。

1. TDS水质传感器原理图:为什么读数飘,问题全在这张图上

第一次拿到 TDS 水质传感器模块时,我手上只有一张扫描得不太清晰的原图:一个探头接口、一颗 LMV358、两个二极管、几个电阻电容,看起来十分钟就能看懂。等我把探头浸进自来水,ADC 读回来的电压却和 TDS 笔差了四倍,瞬间懵了。折腾一晚上才明白,TDS 水质传感器原理图里藏着的门道根本不在探头本身,而在激励信号频率、放大倍数和检波方式这几个容易被忽略的细节上。这张图的完整链路是:探头把水的电导率变成电阻,交流激励防极化,运放放大,整流后再交给 ADC。它适合手头有传感器但读数不稳的入门者,也适合想在 stm32 最小系统板或 51 上复用这个模拟前端的人。

2. 电导率变电压:TDS 前端信号链路的四段拆解

2.1 探头本质是可变电阻:两电极结构决定了必须用交流激励

TDS 的原理不复杂:两根金属电极插进水里,水的离子浓度越高,导电能力越强,两极之间的等效电阻就越小。所以原理图里的探头符号明明是一个连接器,测量时它在电气上就是一个可变电阻,阻值范围大概从几百 kΩ(干净水、甚至接近纯水)到几 kΩ(高矿化度水)。

这个电阻特性直接决定了激励方式。如果给探头通直流电,水里的离子会在电极表面聚集,形成类似极化电容的东西,等效电阻会越测越大,读数一路漂。很多第一次接触这张图的人会把探头直接接在分压电路里通直流,结果就是读数稳定不下来,这是最常见的开箱翻车点。

TDS 水质传感器原理图的典型做法,是给探头加交流方波激励,常见频率在 1kHz 到 3kHz 之间。交流让离子在两只电极间来回迁移,不产生持续聚集,极化效应大幅减弱。你拿到原理图后,第一件事就是找激励源:是用 NE555 自激振荡,还是直接从单片机引脚取方波,这决定了你后面排错的思路。

2.2 LMV358 这颗运放:轨到轨和单电源是天作之合

市面上绝大多数 TDS 模块原理图都选 LMV358,不是随机挑的。这颗运放能在 2.7V 到 5.5V 下工作,输出接近电源轨,也就是所谓轨到轨,对 3.3V 系统尤其友好。TDS 前端常被塞进电池供电设备,LMV358 的静态电流只有 200μA 左右,不会把功耗撑爆。

从信号链看,运放接在探头分压网络之后,承担放大任务。增益通常是固定的 Av = 1 + Rf / Rg,很多成品原理图上 Rf 取 10kΩ、Rg 取 1kΩ,增益就是 11 倍。这个数字不是拍脑袋定的,它跟探头阻值范围和 ADC 参考电压匹配有关。如果你把增益从 11 倍改成 51 倍,传感器从自来水换到纯净水时输出可能会顶到电源轨,读数变成一条直线。

还有一个容易忽略的细节:运放输入偏置电流。LMV358 是 CMOS 输入,偏置电流极低,可以直接接兆欧级输出阻抗的探头分压节点,换作老式双极运放很可能直接把信号拉偏。所以别把运放随便换成 LM358,那个 BJT 输入的版本在一些高阻节点上会翻车。

2.3 检波与参考电压:半波整流二极管会让你怀疑人生

探头激励是交流方波,放大后还是交流,ADC 只能读正电压,所以原理图会有一级整流。常见做法是用 1N4148 做半波整流,再经过 RC 滤波变成缓变直流。

但这里有个很隐蔽的坑:小信号情况下,1N4148 的导通压降约 0.5V 到 0.6V。如果放大后的信号幅度本来就不大,整完流输出可能接近零,你会以为探头短路或者运放坏了。所以很多高质量原理图不直接整流,而是采用叠加直流偏置的办法:用一个基准电压把交流信号抬到零点以上,让负半周也保持在 0V 之上,再送滤波器。这个基准电压最常见的来源就是 TL431,输出 2.5V 稳定值。

原理图上 TL431 周围的两个分压电阻,决定了基准电压具体落在哪。如果你看到基准电压选在 1.25V,说明设计者希望小信号也能被抬起来,给 ADC 留足动态范围。调试时,这块节点电压是最值得用万用表实测的地方,而不是一上来就怀疑 ADC 坏了。

2.4 原理图参数速查表:标着数值,却没标用途的元件

为了后面不迷路,我把这类 TDS 水质传感器原理图上最常见的元件和参数整理成一个速查表,你对照自己手头的图纸逐个确认就行。

元件/节点典型参数实际作用
探头激励频率1kHz ~ 3kHz降低电极极化效应,频率越高越能抑制极化
探头上拉/分压电阻10kΩ ~ 100kΩ与探头电阻分压,决定动态范围和灵敏度
运放 Rf / Rg10kΩ / 1kΩ闭环增益约 11 倍,需滴定
检波二极管1N4148半波整流,注意小信号压降损失
TL431 基准2.5V 或 1.25V提供直流偏置,将交流信号抬到正区间
输出滤波1kΩ + 100nF一阶低通,滤掉方波残余纹波
电源去耦100nF 靠近运放电源脚防止激励方波串扰进供电

这张表的核心在两处:一是激励频率,二是基准电压电平。这两个参数决定你调试时看什么波形、设置多大的 ADC 参考。把这张表抄在纸上,再去看原理图,你会发现图上的每个电阻都变得有目的了。

3. 照着原理图搭测量通路:激励、放大、整流、对接四步走

3.1 激励信号:NE555 方波发生器,还是单片机引脚直接出波

拿到原理图,第一步是确认激励信号从哪里来。成品模块里最常见的是 NE555 搭一个无稳态多谐振荡器,输出方波加在探头上。NE555 的频率由 R1、R2 和 C 决定:

f = 1.44 / (( R1 + 2 * R2 ) * C)

举个例子,图上 R1 取 1kΩ,R2 取 6.8kΩ,C 取 100nF,算出来频率约 970Hz,接近 1kHz,正好落在前面说的典型区间。注意这个公式里 R2 的系数是 2,很多人照抄公式时算错,导致实际频率偏移很大,体现为两个探针间阻抗测量不准、读数非线性。

如果你自己画板,我一般建议直接从单片机引脚输出方波。STM32 的定时器可以输出 1kHz 到 3kHz 的 PWM 或方波,硬件上省掉一颗 NE555,软件还能随时改频率做对比实验。唯一要注意的是:方波幅度必须稳定,如果单片机供电是 3.3V,探头激励幅度就是 0V 到 3.3V,整个链路后续的放大基准都要按这个幅度去算。

3.2 放大与整流:先看懂分压方向,再算增益

探头接入的位置通常有两种画法:一种是把探头放在分压网络下臂,另一种是放在反馈网络里。主流 TDS 传感器原理图用的是前一种:方波激励经过探头上方的固定电阻进入探头,然后到 GND,中间节点接运放输入端。水质越差,探头电阻越小,中间节点电压越低,于是输出和 TDS 形成负相关关系。

放大级之后的交流信号要整流成直流。很多图纸会画一个二极管加一个电解电容,结构简单,但你要知道它带来的压降误差:信号幅度小于二极管导通压降时,整个整流级等于没有输出。遇到这种情况,我一般会在 TL431 基准网络上做一个偏置,把运放输出端交流信号整体抬到基准电压附近,让二极管始终工作在导通区边缘以上,小信号才不会丢。

如果你用示波器看检波点,正常情况下应该是一串直流纹波,而不是干净的直线。纹波来源于方波残余,RC 时间常数决定纹波大小。时间常数太大,响应变慢, probe 从一杯水移到另一杯水时要等半天;太小,纹波会直接进入 ADC,读数跳动。常见取值 10kΩ 电阻加 1μF 电容,时间常数 10ms,对应约 16Hz 截止频率,这个折中在多数场景下可用。

3.3 输出级与 ADC 对接:阻抗匹配比滤波更关键

原理图最后一段通常是输出引脚,直接标注“TDS_OUT”或者“AO”,焊接时很容易忽略输出阻抗问题。如果 ADC 是普通单片机内置的,采样电容会在采样瞬间抽走电流,而输出级的 RC 网络驱动能力弱,电压会被拉低一截,最终换算出来的 TDS 值偏低。

解决办法有两类:一是在输出端加一级运放电压跟随器,用运放的低输出阻抗去驱动 ADC 采样电容;二是把 ADC 采样周期拉长,或者在软件里连续采样多次后取平均。原理图上如果只画了电阻电容没画跟随器,那就要检查单片机 ADC 的输入阻抗指标。对 STM32 这类内置 ADC 来说,建议外接一个 1kΩ 串联电阻再进 ADC 引脚,配合 100nF 对地电容,能同时起到低通滤波和缓冲的作用。

还有一个细节:ADC 参考电压与 TL431 基准的匹配。如果 TL431 基准是 2.5V,而 ADC 参考是 3.3V,那么整流后信号即使满幅也只占 ADC 量程的 76%,分辨率损失不小。设计时最好让两者保持一致,或者把基准分压到 1.25V 再抬升信号上限。

3.4 浊度传感器电路原理图:同源思路可以互相验证

拆过的原理图多了以后会发现,浊度传感器电路原理图和 TDS 前端非常像:都是传感器阻抗/透光率变化 -> 信号调理 -> 放大 -> 整流 -> ADC。区别在于浊度传感器往往用光敏管把透光率变成电流,再用跨阻放大器转电压,而 TDS 探头是直接用交流阻抗转电压。两者的后端几乎可以共用。

这带来一个实用技巧:如果你手头正好有浊度传感器电路原理图的调试经验,可以直接套用它的信号调理习惯,比如光电前端常用的固定偏置加反馈电容防自激,在 TDS 前端同样适用。反过来,TDS 原理图里标定用的两点校准法,搬到浊度传感器上也成立。我习惯把这两类图纸放在一起看,互相参照,排查速度会快很多。

4. 原理图实战避坑:四个让读数翻车的硬件细节

坑一:读数一路漂,越测越高

现象:探头插进溶液,ADC 读数缓慢爬升,几秒到几十秒都稳定不下来,拔出来再插又从头开始。

原因:激励信号不是真正的交流,或者方波频率太低。很多简化版原理图用直流分压测探头电阻,电极极化让离子在表面堆积,等效电阻越来越大,读数就一路漂。频率低到接近几十赫兹也一样,因为交流周期太长,极化效应没有被有效打断。

解决:先检查激励源。用示波器夹在探头两端看波形,确认是 1kHz 以上的方波;如果只是直流电平,就需要改成 NE555 振荡器或单片机 PWM 输出。如果波形和频率都正常,那就把频率提高到 2kHz 到 3kHz 再试,极化效应会进一步减弱。

坑二:输出电压接近零,以为探头短路

现象:运放输出端和整流输出端都接近 GND,换了探头、换了运放都没用,读数一直是零。

原因:放大后的交流信号幅度太小,半波整流二极管导通压降吃掉了整个信号。尤其在水质较好的情况下,探头阻值大,分压节点信号小,放大倍数又不够,整流级直接不工作了。

解决:去掉二极管整流,改成偏置整流。用 TL431 输出 2.5V 或者 1.25V 基准,把运放输出信号抬到基准点上下,再用二极管检波。优先级第二的做法是把增益调大,比如 Rf 从 10kΩ 改成 22kΩ,同时注意输出别顶到电源轨。

坑三:接上单片机后电压被拉低,读数系统性偏小

现象:万用表测整流输出是 1.2V,但单片机 ADC 读回来只有 0.8V,且误差随溶液浓度变化,不是固定偏差。

原因:ADC 采样电容瞬间抽流,输出级 RC 滤波的驱动能力不够。特别是输出串了 10kΩ 以上电阻时,这个问题会非常明显。TDS 信号本身阻抗就高,再加上后级重载,信号直接被拉垮。

解决:输出级加一级运放电压跟随器,让低阻抗输出驱动 ADC 引脚;或者把输出串联电阻降为 1kΩ,并加大采样时间。软件上也可以连续采样 16 次取平均,降低单次采样抽流造成的影响。

坑四:温度一变化,同一杯水读数差 20%

现象:同一杯水,早上测和下午测,TDS 数值差一截;加热后读数显著升高,放凉了又掉回来。

原因:水的电导率随温度变化大约是 2%/℃,25℃ 和 35℃ 之间就有 20% 的差异。原理图硬件本身不会温补,它输出的是当前温度下的绝对电导率电压,如果不换算成 25℃ 基准值,读数必然失真。

解决:硬件上在探头附近加一颗 NTC 热敏电阻,软件里读温度后套补偿公式。常见做法是TDS_25 = TDS_t / (1 + 0.02 * (t - 25)),把当前温度下的 TDS 折算到 25℃ 标准。后面第五章会详细说标定和温度补偿,这个坑是最容易被人忽略的。

5. 标定与温度补偿:把原理图上的电压换算成 mg/L

5.1 TDS 和电导率的关系:系数不是固定的 0.5

原理图输出对应的是电导率,单位通常是 μS/cm,而 TDS 是总溶解固体,单位是 mg/L。两者换算是一个经验系数:TDS = 电导率 × 系数。市面上很多资料默认取 0.5,但这个系数跟水质成分强相关。

比如氯化钠溶液,0.5 基本准确;富含硫酸盐、碳酸氢盐的水体,系数可能在 0.55 到 0.7 之间。如果原理图配套的代码里硬编码了 0.5,而你实际测的是地下水,误差会明显偏大。我一般会在标定阶段用已知标准液反推系数,而不迷信某个固定值。

校准思路是:先用电导率标准液或者精准的 TDS 笔测出参考值,记为 TDS_ref;再用原理图输出电压换算出一个未标定的电导率值;两者相除,得到实际系数。这个系数写进代码后,整个测量链路的误差降到最低。

5.2 两点标定步骤:零点和标准液一个都不能少

标定不能只测一个点,至少要做两点线性标定。第一点是零点,用纯净水或者蒸馏水,理论上电导率极低。第二点用标准液,常见做法是分析纯 NaCl 配溶液。下面这个流程是我反复验证过的。

第一步,配置标准液:取 0.5g 分析纯 NaCl,溶解到 1L 纯净水中,约等于 1000μS/cm 电导率,按 0.5 系数折算就是 500mg/L TDS。

第二步,探头上电,先放进纯净水里,稳定后记下 ADC 读数,记为 ADC_zero。

第三步,把探头擦干,放进标准液,稳定后记下 ADC 读数,记为 ADC_std。

第四步,计算斜率:scale = 500.0 / (ADC_std - ADC_zero)。后面每次测量,TDS = (ADC_now - ADC_zero) * scale。

这个线性模型在 0 到 1000mg/L 范围内够用。如果测量范围更大,建议改成三点标定,取 500、1000、2000mg/L 三档,分别记录,用分段线性插值处理。

5.3 温度补偿:公式、系数和实测修正

温度补偿公式前面提过一版:TDS_25 = TDS_t / (1 + 0.02 * (t - 25))。这个 0.02 是温度系数,大约是每摄氏度 2%,但它不是万能的。不同水体的温度系数略有差异,有些资料用 0.019,有些用 0.025,误差在高温度差下能到几个百分点。

如果你手头没有高精度温控环境,我建议用另一种做法:把探头放进恒温水浴,从 10℃ 到 40℃ 每 5℃ 记录一次 ADC 读数,固定同一杯水,然后拟合成一条温度曲线,把系数反推出来。实测曲线通常接近线性,但拐点处会有些弯曲,用二阶多项式拟合效果更好。

温度补偿还需要考虑探头上 NTC 的位置。如果 NTC 离电极太远,测到的温度和探头接触区域的水温不一致,软件补了也补不到点上。原理图设计阶段就应该把 NTC 靠近电极放置,或者做成一体化探头。标定完成后,把温度和折算后的 TDS 值同时通过串口打印出来,观察几轮,确认波动收敛,链路就算闭环了。

6. 从原理图到可读数据:ADC 读取与端到端验证

6.1 读取与换算的参考代码

用单片机读 TDS 前端,逻辑不复杂,但要注意几个参数跟原理图严格对应。下面这一段是 Arduino 风格的代码,STM32 上改成自己的 ADC 驱动即可。

// TDS 前端读取换算示例 const int adcPin = A0; // 接原理图 TDS_OUT 输出端 const float vref = 3.3f; // 单片机 ADC 参考电压 const int adcRes = 1023; // 10位 ADC,12位改 4095 const float tdsCoeff = 0.5f; // 电导率转 TDS 系数,需标定修正 const float slope = 0.45f; // 每℃电导率变化近似值,单位 %/℃ float readTDS() { float sum = 0; for (int i = 0; i < 16; i++) { sum += analogRead(adcPin); // 连续采样 16 次,降低抽流误差 } float avg = sum / 16.0f; float voltage = avg * vref / adcRes; // 下面按实际电路换算,电压与电导率的比例需对照原理图增益 float conductivity = voltage * 2.0f; // 需要的增益系数,由标定确定 float tds = conductivity * tdsCoeff; return tds; } void setup() { Serial.begin(115200); } void loop() { float tempC = readTemperature(); // NTC 读数转换,或 I2C 温度传感 float tds25 = readTDS() / (1.0f + 0.02f * (tempC - 25.0f)); Serial.println(tds25); delay(1000); }

这段代码里,slope实际上没用上,因为温度补偿直接用了 0.02 固定系数。如果你实测温度系数不是 0.02,把两个地方一起改成你的曲线拟合结果。conductivity那一步的2.0f不是标准值,它取决于探头常数和运放增益,必须用第五章的标定流程替换,直接抄代码一定会出偏差。

6.2 端到端验证:用标准液和 TDS 笔双重确认

硬件和代码都跑起来后,强制做一轮验证:取三杯水,分别是纯净水、自来水和标准 NaCl 溶液,用你的设备测三遍,同时用 TDS 笔测一遍,算偏差。误差在 ±5% 以内,说明原理图链路、标定和代码三者匹配;如果超过 10%,重新回第四章检查整流偏置和阻抗匹配。

从那以后,我每次拿到一块新的水质传感器原理图,都会先干一件事:抄下激励频率、检波方式、增益和基准电压这四个参数,再动手焊。不先把这几个点确认清楚,后面所有调试都是玄学。这套习惯帮我少走了很多弯路,希望帮到你。

本文还有配套的精品资源,点击获取