单路数字 TDS 水质传感器是什么?从电导测量、温度补偿到模块与串口,新手一篇快速看懂
做 STM32 水质监测、净水设备状态显示或环境数据采集时,我们经常想知道“水中溶解的物质大概有多少”。本资料中的模块将电极驱动、信号采样、TDS 换算和温度处理放在板上,单片机发送一条串口检测命令,就能读取一组 TDS 和水温数据。


图 1 探头、数字模块、单片机与应用之间的工作链路
一、先认识 TDS、探头和模块
手册中的正式名称为“单路数字 TDS 传感器模块”。TDS 是 Total Dissolved Solids,中文为总溶解性固体。本文以单路模块为主,双路资料用于说明版本区别,不把两种协议混写。
1. 探头不是整块传感器系统
浸入水中的 BA01 探头包含导电测量电极和温度敏感元件;干燥位置的模块板负责激励、采样与计算。
2. ppm 是什么?为什么常看到 mg/L?
ppm 表示百万分之一的比例。对于密度接近 1 kg/L 的稀水溶液,质量浓度的数值常近似用 1 ppm ≈ 1 mg/L 理解。这个近似有条件,不能把它套用于所有液体和高浓度溶液。模块利用导电特性估算 TDS,并没有把水蒸干后称量残留物。
读数反映的是一个总量相关指标。它不能告诉你是哪种离子、有没有细菌或某种重金属,也不能单凭一个 TDS 数值判断水是否可以饮用。
二、新手最应该记住的模块参数
以下数值来自单路模块用户手册与尺寸图。
表 1 单路数字 TDS 模块关键参数及含义
|
项目 |
资料参数 |
怎么理解 |
|
TDS 测量范围 |
0~3000 ppm |
用于该量程内水样,不适合直接测海水。 |
|
TDS 测量误差 |
< 2% F.S. |
按满量程理解:3000 × 2% = 60 ppm。 |
|
TDS 协议数值步长 |
1 ppm |
结果按整数传输,不等于准确到 1 ppm。 |
|
温度测量范围 |
0~100 ℃ |
模块测量范围,不代表配套探头可耐 100 ℃。 |
|
温度测量误差 |
±0.5 ℃ |
附件未给详细测试条件,按手册标称引用。 |
|
温度协议数值步长 |
0.01 ℃ |
两字节整数除以 100;小数位不等于精度。 |
|
供电电压 |
3.3 V |
未给 5 V 兼容依据,按 3.3 V 接入。 |
|
电源纹波要求 |
< 20 mV |
需要干净电源;普通万用表难以检查纹波。 |
|
工作电流 |
< 3 mA |
是模块指标,不是探针允许激励电流。 |
|
模块环境温度 |
−10~75 ℃ |
指板子使用环境,与水温测量范围分开。 |
|
测量通道 |
1 路 TDS + 对应温度 |
两只 2 针接口不代表两个 TDS 通道。 |
|
通信接口 |
UART,9600 bps |
TTL 逻辑串口,不是 I2C、RS-232 或 RS-485。 |
|
串口格式 |
8N1,无硬件流控 |
8 数据位、无奇偶校验、1 停止位。 |
|
指令长度 |
6 字节 |
1 字节命令 + 4 字节参数 + 1 字节校验。 |
|
单路测量返回 |
6 字节 AA 帧 |
同时包含 TDS 和温度,不是双路的 12 字节。 |
|
电极驱动 |
双极性驱动 |
交替极性以减轻极化,不能保证永不污染。 |
|
默认 NTC 参数 |
R25 = 10 kΩ;B = 3435 K |
匹配热敏电阻,换探头时应重新核对。 |
|
NTC 上拉电阻 |
10 kΩ |
原理图 R2,参与温度电阻分压采样。 |
|
模块板尺寸 |
约 21.0 × 15.8 mm |
来自单路尺寸图;不是探头外形尺寸。 |
|
测量响应时间 |
手册未明确规定 |
例程中的 100 ms 或 1 s 不能当保证值。 |
F.S. 是 Full Scale(满量程)。例如显示 100 ppm 时,不能把“<2% F.S.”理解为误差仅 2 ppm;它与“读数的 2%”不同。资料也没有说明低量程、温度变化与不同离子组成下的完整误差曲线。
三、两根金属电极怎样“测出水质”?
原理的起点是电导,不是“电极识别出了水里所有物质”。水中的可移动离子参与导电;离子种类、浓度和温度改变时,电导响应也会变化。对于合适的水样,这种响应可用来估算 TDS,但估算结果依赖模型和标定条件。

图 2 水中离子导电与双极性激励的概念示意
专用芯片内集成振荡电路、模数转换电路(ADC)和浮点运算单元。可以按功能理解为:建立检测激励,把模拟响应转成数字,再结合温度进行运算,最后通过 UART 输出结果。
1. 从电流、电压到电导率
对电极施加受控激励,并测量响应,可以得到与导电能力有关的量。理想化理解中,电导 G = I / V;电导率 EC 还需要考虑探头的几何因素,即电极面积、间距等形成的电极常数。因此不能只更换一副形状不同的金属针,却期望原有标定始终有效。
2. 为什么换算成 TDS 后仍是“估算”?
常见入门关系写作 TDS ≈ k × EC,其中 EC 常以 μS/cm 表示,k 为换算系数。这个式子用来帮助理解,不能据此断言本模块内部固定使用某个系数。不同水样的离子组成不同,同样电导率未必对应完全相同的 TDS。
3. 为什么不用长期直流一直加在电极上?
持续单向激励可能使电极界面发生极化,改变测量响应,并增加电化学效应。模块采用双极性驱动来减轻这类影响。它不是让用户给两根探针直接接电源:探针应接入模块的专用 TDS 接口,由模块控制驱动与采样。电极结垢、附着污染和气泡仍会影响读数。
这块模块给主机的检测协议是 TDS + 温度,附件未给出直接读取 EC 的独立命令。探头名称带“EC”,不代表 UART 默认会输出电导率数据。
四、为什么 TDS 模块还需要一根温度探头?
同一杯水即使没有加入新的盐,温度变化也会改变离子的迁移能力和导电响应。模块利用 NTC 测水温,并据此校正 TDS,从而减少“把水温变化误认为浓度变化”的问题。NTC 是负温度系数热敏电阻,温度升高时阻值通常下降。

图 3 NTC 分压测温与 TDS 温度校正的作用关系
1. 板上的 10 kΩ 电阻做什么?
原理图中 R2 从 3.3 V 接到温度采样节点,NTC 的另一端接地,C3 = 100 nF 从采样节点接地用于滤波。忽略输入负载时,节点电压可近似为 3.3 × RNTC / (10 kΩ + RNTC)。在 25 ℃且 NTC 约 10 kΩ 时,节点约为 1.65 V;温度升高、阻值下降,节点电压也随之下降。
2. R25 和 B 值分别告诉模块什么?
R25 是 25 ℃时的标称电阻,B 值描述阻值随温度变化的特性。模块默认 R25 = 10 kΩ、B = 3435 K;BA01 规格书也给出 R25 = 10 kΩ ±1%、B25/85 = 3435 K ±1%。如果接了 100 kΩ 或不同 B 值的探头却保持默认参数,温度就可能算错,并进一步影响 TDS 校正。
3. 不接 NTC 能不能用?
单路手册说明:没有温度检测 NTC 时,芯片仍可工作,但 TDS 不具备温度校正效果。此时不能把温度字段当成可靠水温。软件应记录探头配置状态;如果本来应该有 NTC,却发生断线,也不能当成正常无温度模式继续使用。
常见温度校正模型会把某温度下的 EC 折算到参考温度;但附件没有公开模块所用系数、参考温度和完整算法。已经由模块完成校正的 TDS 不宜在 STM32 中再随意套一次补偿公式,否则可能重复补偿。
五、单路数字 TDS 模块由哪些部分组成?
这次附件提供了板级原理图,因此可以把实际器件的作用说清楚。U1 标注 BA111;CN1 接 NTC,CN2 接 TDS 电极;H1 提供供电与串口连接。原理图的接口编号与手册图示视角不同,实际接线始终按信号名称确认。[2]

图 4 根据单路原理图整理的核心芯片、接口与外围器件
表 2 原理图中各器件的作用
|
器件 / 接口 |
资料标注 |
新手怎么理解 |
|
U1 |
BA111,8 引脚 |
负责电极激励、采样处理和 UART 通信;独立芯片规格未附。 |
|
C1 / C2 |
10 μF / 100 nF |
并联在电源与地之间,帮助稳住供电、抑制不同频段干扰。 |
|
R1 |
1 kΩ |
位于 TDS 驱动支路;不能随意改变阻值来“提高精度”。 |
|
R2 |
10 kΩ |
NTC 分压上拉,改变它会影响温度换算关系。 |
|
C3 |
100 nF |
温度采样节点滤波,减少该节点的快速噪声。 |
|
CN1 / CN2 |
XH2.54-2 |
分别接温度线与 TDS 电极线,功能不能互换。 |
|
H1 |
GND / TX / RX / 3V3 |
对应原理图脚号 1 / 2 / 3 / 4;按信号接线。 |
为什么不把单路板写成“带指示灯、带稳压”?
单路原理图没有给出稳压器或 LED;双路原理图则有 D1 红色指示灯。把双路板的 LED 或其他产品的稳压芯片写进单路组成,会误导新手判断供电与硬件故障。本板按 3.3 V 电源直接接入理解,不能因为接口叫 VCC 就接 5 V。
六、BA01 探头与单路、双路版本有什么区别?

图 5 BA01 电极线、温度线与模块接口的对应关系
表 3 BA01 探头参数与整套使用边界
|
探头项目 |
附件信息 |
怎么理解 |
|
探针 / 主体材料 |
钛合金 / ABS |
与模块板材、芯片封装是不同层级的参数。 |
|
线缆长度 |
规格书 500 ±20 mm |
宣传图为 50 ±1 cm,公差口径不同;实物版本需确认。 |
|
温度元件 |
10 kΩ NTC,B25/85 = 3435 K |
与模块默认参数相匹配,仍需核对实际订货探头。 |
|
组件温度限制 |
BA01 选型表 0~70 ℃ |
保护罩规格也为 0~70 ℃,不按模块 100 ℃上限使用。 |
|
探针电压 / 电流 |
≤5 V / ≤10 mA |
探针端的规格限制,不是模块供电范围,也不是建议直接加电。 |
|
防水范围 |
探头头部与导线可浸水 |
连接器和信号板不防水;没有给出整套 IP 等级。 |
1. 为什么有两个插口,却仍叫“单路”?
一个插口接导电电极,另一个接温度元件,两者服务同一份水样。双路板是两套 TDS + NTC,可分别观察进出水。双路手册要求两只 TDS 探头同型号;若都放入同一水体,应保持适当距离以减小干扰,但附件没有给具体距离数值。
2. 软件上的区别,比“多接一只探头”更重要
单路 AA 帧的第 3、4 参数字节是温度;双路 AA 帧的后两个参数字节却是第二通道 TDS,温度另由 AB 帧返回。不能拿双路程序的“等待 12 字节”直接套在单路上。后文先讲清单路格式,再给出双路对照。
七、串口怎样传送 TDS 和温度?
本模块不是 DHT11 的单线协议,也不是 I2C。它使用异步串口:TX 用来发送,RX 用来接收,没有单独的时钟线;收发双方预先约定 9600 bps、8N1。电气接口是逻辑电平串口,接电脑时需要合适的 USB 转 TTL 转换器。

图 6 UART 的起始位、8 个数据位与停止位
1. 发送十六进制字节,不是发送字符串
检测命令为 A0 00 00 00 00 A0,共 6 个字节。串口助手要选 HEX 发送,不要自动追加回车换行。文本模式输入“A0”,会发送字符 A 和字符 0,即 0x41、0x30;模块需要的却是一个 0xA0。两者完全不同。
2. 一条检测命令怎样得到结果?
主机先把 6 字节命令发给模块,模块处理后返回测量结果或异常状态。单路成功测量结果以 AA 开头,整帧 6 字节。UART 是字节流,一次串口中断只收到一个字节是正常现象;一次电脑读取也可能收到半帧或多帧,不能把软件“收到一批数据”等同于“收到一整帧”。
3. 字节传输时间,不是测量完成时间
9600 8N1 下,6 字节在线路上传输约需要 6.25 ms。但模块内部的测量、温度处理和响应等待还需要时间。附件没有给出严格的最大响应时间,因此不能据此规定“6.25 ms 后一定有结果”。初测可采用较慢查询周期并记录真实响应时间,再设置合理超时。
UART 的“无奇偶校验”只是 8N1 的字节层设置,不表示应用数据帧可以不检查校验和。电气格式、帧格式和数据含义要分开理解。
八、6 个字节具体装了什么?
单路正常测量结果按 AA、TDS 高字节、TDS 低字节、温度高字节、温度低字节、校验字节排列。手册的“2 个通道 TDS 值”字样与单路格式不符;STM32 与 Arduino 例程均将后两个参数字节解析为温度,因此本文按此解释。

图 7 TDS 与温度的拆字节、拼接和单位换算
1. 高低字节怎样合成一个数?
TDS = 高字节 × 256 + 低字节;温度 =(温度高字节 × 256 + 温度低字节)/ 100。示例中 0x0064 = 100,TDS 为 100 ppm;0x0A96 = 2710,水温为 27.10 ℃。温度字段的两位小数只是传输步长,模块温度标称误差仍为 ±0.5 ℃。
2. 为什么图里特地给 AE 加了星号?
手册原例为 AA 00 64 0A 96 40。依据检测命令、A3、A5 和双路帧示例一致的“前 5 字节累加取低 8 位”规则,前五字节之和为 0x1AE,应得到 AE,而不是 40。附件未明确写出校验算法公式,且例程没有验证接收校验,因此 AE 是有依据的推算,不是已验证的硬件回包。首次联调应抓取真实帧,与厂家确认该版本规则;不要把印刷疑点写死成正常协议。
表 4 单路与双路正常检测回包的字段区别
|
版本 / 帧类型 |
前两个参数字节 |
后两个参数字节 |
|
单路 AA,一帧 6 字节 |
TDS |
温度 ×100 |
|
双路 AA,第一帧 6 字节 |
通道 1 TDS |
通道 2 TDS |
|
双路 AB,第二帧 6 字节 |
通道 1 温度 ×100 |
通道 2 温度 ×100 |
双路同样不能简单假定一次读取必得 12 字节,应按两个 6 字节帧分别组帧、检查类型和有效性。异常返回 AC 需要单独处理,不能当成测量帧。
九、接 STM32 或电脑,最简单的连法是什么?
这里沿用附件 STM32 测试工程的 USART3:PB10 发送、PB11 接收。模块串口为 9600 bps。工程里 USART1 初始化为 115200,但它不是这里连接 TDS 模块的串口;USART2 用于向外打印解析后的文字结果。[3]

图 8 STM32F103 的 USART3 与单路模块的交叉收发连接
表 5 最小接线关系
|
主机侧 |
模块侧 |
作用 |
|
3.3 V 电源 |
3V3 |
稳定供电,核对纹波和供电能力。 |
|
PB10 / TX |
RX |
STM32 发送检测命令给模块。 |
|
PB11 / RX |
TX |
STM32 接收模块的二进制返回帧。 |
|
GND |
GND |
共地,建立逻辑电平参考。 |
|
BA01 红 / 黑线 |
TDS 接口 |
连接两根测量电极线。 |
|
BA01 黄 / 白线 |
NTC 接口 |
连接温度元件,不接到 UART。 |
先用电脑跑通,再移植到单片机
用 3.3 V 逻辑的 USB 转 TTL 模块,TX 接传感器 RX、RX 接传感器 TX,连接共地并正确供电。打开对应串口,设 9600、8 数据位、无校验、1 停止位,HEX 发送 A0 00 00 00 00 A0,并使用 HEX 接收观察完整字节。
不要把 USB 转串口板上“3.3 V 电源输出”误认为其 TX 一定是 3.3 V 逻辑,应核对转换器设计。不要直接接 RS-232 或 RS-485 端子。模块已有独立供电时,应先理清电源关系,避免两个电源输出直接并联。
十、STM32 软件应该如何可靠地读取?
新手先建立一条清晰链路:发命令、收完整帧、判断状态、解析数值、更新显示。不能仅看到第一个字节是 AA,就把后面的缓冲区内容全部当成新数据。

图 9 带有超时、状态判定和数据有效性的读取流程
1. 定时查询与字节接收分工
可先每约 1 s 发起一次查询,并记录响应耗时;这属于起步策略,不是厂家规定的最小采样周期。中断或 DMA 负责接收字节,主循环在完整帧准备好后处理。正在等待响应时不要无限追加新查询;忙碌或超时应有有限重试与退出条件。
十一、基线校准、NTC 配置与异常返回
普通读取只需要检测命令。基线校准和 NTC 设置会改变测量依据,应在明确目的、记录原设置后进行;不要为了“让显示更好看”反复校准,也不要每次开机自动覆盖参数。

图 10 校准前确认条件、校准后验证结果的基本顺序
表 6 手册命令示例与需要注意的含义
|
功能 |
手册给出的 6 字节示例 |
怎么理解 |
|
读取测量 |
A0 00 00 00 00 A0 |
正常单路返回 AA 测量帧。 |
|
基线校准 |
A6 00 00 00 00 A6 |
手册要求探头处于 25 ±5 ℃纯净水中。 |
|
设 NTC 常温阻值 |
A3 00 01 86 A0 CA |
参数为 100000 Ω = 100 kΩ,不是默认 10 kΩ。 |
|
设 NTC B 值 |
A5 0F 0A 00 00 BE |
0x0F0A = 3850 K,不是默认 3435 K。 |
|
设置成功返回 |
AC 00 00 00 00 AC |
需检查状态,不把任何 AC 都视为成功。 |
1. 默认 BA01 配套不应照抄“设置示例”
BA01 规格对应 10 kΩ、3435 K,手册的 A3 / A5 示例只是展示编码方式。按同一参数布局与累加规则推算,10 kΩ 对应 A3 00 00 27 10 DA;3435 K 对应 A5 0D 6B 00 00 1D。这些是推算帧,未做硬件验证;已有匹配默认值时无需重发设置,修改前应确认具体版本。
2. AC 后面的状态码不能忽略
手册异常码为 01:命令帧异常;02:忙碌中;03:校正失败;04:检测温度超出范围。错误模板写成 AC XX 00 00 00 AE,但按累加规则,AE 只与 XX = 02 相符,其他错误码的校验也应变化。单路手册还残留“两个通道同时校准”的字样,不能据此把单路硬件解释成双路。
附件未说明基线校准的完整机理、参数保存方式和恢复默认操作。校准后应重新读取,记录水样、温度、回包和重复性;若不能稳定复现,先查探头与环境,不通过继续改参数掩盖问题。
十二、第一次使用,最容易踩的 9 个坑

图 11 浸没位置、容器距离与干湿边界的安装示意
1. 显示为 0,就认定是纯水
也可能是探头未浸没、接口松动、通信失败或旧值。先确认有效 AA 帧,再检查探头状态。
2. 把温度接口当成第二路 TDS
NTC 与 TDS 两接口用途不同。接反可能导致异常温度,并影响 TDS 校正;按线组与丝印复核。
3. 波特率正确,却总是无返回
检查 TX / RX 是否交叉、是否共地、是否 HEX 发送,以及是否误加回车换行。再核对串口与供电电平。
4. Arduino 例程收够 12 字节才解析
单路例程确有 available() >= 12,但随后只读 6 字节,注释也不一致。单路应按实际 6 字节帧组帧,避免等待第二帧才处理第一帧。
5. 换水后读数迟迟不稳定
先冲洗并避免上个样品残留,再排除电极气泡;让温度平衡,固定深度和位置后观察稳定性。
6. 探头贴杯壁、触杯底或靠近其他电极
电场与导电路径可能改变。同一比较实验保持相似位置,双探头使用时减少相互干扰。
7. 认为模块测温 100 ℃,整套就能测开水
BA01 选型表和保护罩的边界为 0~70 ℃。整套系统按探头、线材、连接器和模块中的较严限制使用。
8. 用滤波掩盖数值跳变或温度错误
先排查电源纹波、接线、NTC 参数与收帧问题。平均值能减小随机波动,不能修复错误协议和错误补偿。
9. 把校准命令放进每次采样流程
校准需要特定条件,随意执行会改变基线。日常采样发 A0;只有明确需要时才进入独立校准流程。
十三、若有项目需要可私信联系,包含但不限于:开题报告、嵌入式项目软硬件功能实现

更多推荐


所有评论(0)