TDS水质及电导率计算方法及电路程序设计

本文介绍了设计的一款TDS水质检测模块,利用Ti合金传感器和NTC热敏电阻配合STM8S003F4P6单片机,通过电导率测量和温度补偿技术,实时监测水质,并提供串口数据输出和数码管显示。模块可用于净水器检测和饮用水质量评估。
该文章已生成可运行项目,

      TDS 用来表示测定溶解在水中的所有固体物质,包括矿物质、盐分以及溶解在水中的微小金属物质,说白了,其值的大小反映了水质的好坏,为此我们设计一款基于电极测量法的TDS水质检测模块。下面为该模块设计原理及功能介。

1.模块功能概述

       TDS水质检测模块采用TDS传感器(钛合金)和NTC(3950_10K)热敏电阻配合8 位高性价比单片机(STM8S003F4P6),内部已做 AD (10位)采集,并通过算法计算出对应的TDS值及温度值,用户只需通过串口读数据即可,另外可接数码管显示模块,即可循环显示TDS值和温度值,方便用户快速使用。 

2.TDS定义简介

       TDS 用来表示测定溶解在水中的所有固体物质,包括矿物质、盐分以及溶解在水中的微小金属物质。测量单位为 ppm 或 mg/L,它表明 1 升水中溶有多少毫克溶解性固体。通常可用电导率推测溶液中的盐分,水越纯净,可溶性固体越少,电阻越大,电导越小,纯水几乎不能导电。TDS 值与电导率有直接关系,TDS 值一般为电导率的 0.55 倍。

TDS 水质检测广泛用于评估净水器滤芯性能,测试饮用水质量以及其它水质分析相关领域。

3.模块TDS测量方法

        TDS 测量主要通过给测试电极输入交变的驱动电压(防止探头极化),在被测液体中产生微小电流,从而得到被测液体的电导率。温度测量则通过测量 NTC 负温度系数的热敏电阻值,从而计算出当前的环境温度。并根据TDS传感器在受不同温度范围所表现的特性差异,通过获取的温度在相应温度范围内进行补偿。

       模块采用电极法测定水溶液的电导率,当两电极插入溶液中,可以测出两电极间的电阻R。根据欧姆定律,温度一定时,有R=pL/A,其中p为电阻率,L为电极间间距,A为电极的截面积。由于A、L是固定不变的,故L/A是一常数,称为电导池常数Q,即R=pQ.

电导S与电阻R成倒数关系:S=1/R

电导率K与电阻率p成倒数关系:K=1/p

K=1/p=Q/R

      用标准溶液校准,获得电导池常数Q再测水样得到电阻R,即可求出K,即可得到TDS=0.55K。

注意受温度影响,以25℃为标准温度,温度每增加1℃,电导率上升2%,故温度作为补偿因子参与TDS计算,公式为:K=K(未温补)÷(1+0.02*(T-25))。T为测得溶液温度值。

       本模块采用TDS为488ppm的校准液进行校准,经计算得出电导池常数为437140.将电导池常数更新到计算公式后对溶液进行测量

      如上图为本模块TDS传感器接口电路,通过将TDS传感器两端接入TDS2和TDS3,TDS1和TDS3分别连接单片机的两个普通IO,TDS2连接至单片机AD测量IO。通过控制TDS1和TDS3进行高低电平交替输出,则等效于采用交流驱动TDS传感器。电流通过R13电阻和TDS探针及溶液形成回路,则可测量TDS2端的电压,根据电阻分压原理,即可求出TDS两探针之间的电阻值,即溶液的阻值。

       TDS 测量主要通过给测试电极输入交变的驱动电压,在被测液体中产生微小电流,从而得到被测液体的电导率。温度测量则通过测量 NTC 负温度系数的热敏电阻值,从而计算出当前的环境温度,如下图。

 

本模块总体电路原理图如下:

 以下为模块mcu进行计算TDS值的关键算法代码:

#define POLAR_CONSTANT        (513385)  /* 电导池常数,可通过与标准TDS测量仪对比计算反推  */ 
#define TDS_COEFFICIENT       (55U)     /* TDS = 0.55 * 电子传导率*/
//TDS 的计算  输入TDS传感器分压的平均电压
// adc_avg_value: 采集到的TDS传感器分压AD值
void R_TDS_Calculate(u16 adc_avg_value)
{
    float tds_resister=0,siemens_value=0;//西门子值
    float electornic_conductor=0,temperature=0;
   
   //获取温度值
   temperature=(u16)((u16)(g_Temperature[0]*10)+g_Temperature[1])/10;
       /*AD限值处理*/
    if(adc_avg_value >=998)  //998   
    {
       tds_Value = 0;
    }
    else
    {
      //计算溶液电阻值
      /* 1.5k的串联液体TDS电阻值 */
      tds_resister =1.0*adc_avg_value * 1500 / (1024 - adc_avg_value); 
  
      /* 计算电导率值 。 其中POLAR_CONSTANT 为电导池常数*/
      siemens_value =(1.0* POLAR_CONSTANT / tds_resister); 
      
      /* temperature adjust */
      //经过温度补偿过的电导率值
      electornic_conductor= siemens_value /(1+0.02*(temperature-25)); 
      // 计算出TDS值,TDS_COEFFICIENT为转换系数 
      tds_Value =(u16)(1.0* electornic_conductor * TDS_COEFFICIENT / 100);
      
    }
}

4.技术指标

产品型号

KM-TDS-NTC1

检测对象

TDS、温度

通信方式

UART(TTL)+microUSB串口

工作电压

5V (DC)

工作电流

10-30mA

检测温度

0~81℃

检测TDS

0-9999PPM

TDS检测方式

交变电压驱动

外形尺寸

26.4*33.3(mm)

数据接口

4 针单排直插+MicroUSB接口

显示接口

4P排座(接数码管模块)

模块主控MCU

STM8S003F3P6(10位AD分辨率)

5.外形尺寸

6. 通信协议

 波特率:9600,无校验位,1停止位,8位数据。

1

0x86

读传感器的AD值

向模块发送

0

1

2

3

4

5

6

7

8

起始位

地址

命令

--

--

--

--

--

校验值

0xFF

0x01

0x86

0

0

0

0

0

0x79

EXP.

FF 01 86 00 00 00 00 00 79

模块返回

0

1

2

3

4

5

6

7

8

起始位

命令

TDS

温度值

--

--

校验值

0xFF

0x86

高字节

低字节

整数

小数

0

0

--

EXP.

FF 86 00 5B 1A 02 00 00 03

TDS:91ppm。 温度:26.2℃
//校验值算法 起始位后 86 00 85 00 00 00 00 到校验值前相加求和取低八
//位,再取反加一
uint8_t getCheck(uint8_t *data,uint8_t iLength)
{
uint8_t sum=0; uint8_t iFor=0;
for(iFor=0;iFor<iLength;iFor++)
{
sum+=data[iFor];
}
return (0xff-sum+1);
}

7.上位机和数码管显示应用

       模块板载USB转TTL电平芯片和micro-usb接口,可直接通过micro-usb数据线将电脑与模块连接,即可在电脑查看模块所使用的串口端口号,请到电脑设备管理器查看,端口号因个人电脑而异,如下图:

       板上另有串口TTL接口引出,方便用户与其他mcu进行连接读取数据。

接下来可打开上位机软件,并选择相应串口号,如下图:

       上位机发送及接收数据协议按照模块协议编写,上位机每1秒向模块获取一次数据。

模块载有串行控制四位数码管接口,只要模块上电,将数码管显示模块直接插在模块接口上即可显示所测温度值及TDS值,TDS和温度显示时间为:3S+2S。显示效果如下图:

 

8.测试数据对比

      下图是关于TDS水硬度标准的说明,用户可根据图中标准对照查看所测水质符合哪种等级,以达到直观判断水质优劣的目的。

 

     以下为采用本模块和小米TDS检测仪分别对两种不同TDS值水进行测试对比所得的实验效果图:

1.左图为小米TDS检测笔所测数据为376ppm,右图为本模块所测数据为372ppm。

 

 2.左图为小米TDS检测笔所测数据为74ppm,右图为本模块所测数据为78ppm。

 

9.使用注意事项

1、TDS探头不能用于55℃以上的水中。

2、TDS探头放置位置不能太靠近容器边缘,否则会影响测量结果。

3、TDS 探头头部与导线为防水,可浸入水中,但连线接口处与信号转接板不防水,请注意使用。

模块链接:

https://item.taobao.com/item.htm?spm=a2126o.success.result.1.36854831z6hzrj&id=624980370218

本文章已经生成可运行项目
04-01
### 关于 TDS 协议的技术信息 #### 什么是 Tabular Data Stream (TDS)? Tabular Data Stream (TDS) 是一种用于客户端和数据库服务器之间通信的协议,主要由 Microsoft SQL Server 和 SAP Adaptive Server Enterprise (ASE) 使用。该协议支持多种功能,包括查询执行、存储过程调用以及数据传输等操作[^1]。 #### TDS 的历史版本及其对应的产品 以下是不同版本的 TDS 协议所对应的数据库产品: | **TDS 版本** | **支持的产品** | |--------------|------------------------------------| | 4.2 | Sybase SQL Server < 10<br>Microsoft SQL Server 6.5 | | 5.0 | Sybase SQL Server >= 10 | | 7.0 | Microsoft SQL Server 7.0 | | 7.1 | Microsoft SQL Server 2000 | | 7.2 | Microsoft SQL Server 2005 | | 7.3/7.4 | Microsoft SQL Server 2017 及更高版本 | 具体来说,对于最新的 Microsoft SQL Server 2017 (v14.00.x),其首选的 TDS 协议版本为 `7.4`,而实际使用的最低兼容版本可以是 `7.3`。 #### TDS 协议的功能结构 TDS 协议的核心组成部分包括以下几个方面: - **包格式**: 描述了如何封装网络上的消息。 - **登录包**: 定义了客户端连接到服务器时所需的认证流程。 - **客户端请求**: 包括查询语句、参数化命令以及其他交互指令。 - **服务端响应**: 返回的结果集、状态码或其他反馈信息。 - **排序规则结构**: 支持多语言环境下的字符比较逻辑[^2]。 #### SQL Server 中的 TDS 实现细节 在 SQL Server 中,可以通过配置特定的 TDS 端点来指定监听地址和端口号。例如,在 SQL Server 2012 或更新版本中,管理员能够创建自定义的 TDS 终结点以便更灵活地控制访问权限[^3]。 下面是一个简单的 PowerShell 脚本来展示如何查看当前实例上启用的所有终结点: ```powershell Get-SqlEndpoint -ServerInstance "YourServerName" ``` 如果需要进一步调试或分析流量,则可能需要用到第三方工具或者捕获网络抓包文件进行解析。 #### 常见问题与解决方案 当尝试通过外部系统(如 Debezium)连接至 SQL Server 并遇到权限不足的情况时,通常是因为缺少必要的授权许可。比如,“拒绝了对对象 'server' 数据库 'master' 的 VIEW SERVER STATE 权限”这样的警告提示表明用户账户缺乏足够的特权去监控某些活动[^5]。对此类情形的一个常见修复办法就是授予相应的角色权利给应用程序使用的登录名。 --- ### 示例代码片段:模拟基本 TDS 请求 以下 Python 示例展示了利用 pyodbc 库发送简单 SELECT 查询的过程,间接体现了底层基于 TDS 进行的数据交换机制。 ```python import pyodbc connection_string = ( r'DRIVER={ODBC Driver 17 for SQL Server};' r'SERVER=your_server_address;' r'DATABASE=testdb;' r'UID=user_name;' r'PWD=password;' ) try: with pyodbc.connect(connection_string) as conn: cursor = conn.cursor() result_set = cursor.execute("SELECT TOP(10) * FROM some_table").fetchall() except Exception as e: print(f"Error occurred: {e}") finally: pass ``` 此脚本中的 ODBC 驱动程序实际上会负责构建并传递符合标准 TDS 格式的帧序列给目标 RDBMS。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

>行者<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值