问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

TDS传感器+STM32F103C8T6+Keil5

创作时间:
作者:
@小白创作中心

TDS传感器+STM32F103C8T6+Keil5

引用
CSDN
1.
https://blog.csdn.net/qq_62975093/article/details/144564291

TDS(Total Dissolved Solids)传感器是一种用于测量水中溶解性总固体的设备,其测量单位为毫克/升(1mg/L=1ppm)。本文将介绍如何使用TDS传感器与STM32F103C8T6微控制器结合,通过Keil5开发环境进行数据采集和处理。

一、接线

如果没有购买温度传感器,可以不接温度传感器接口和温度T。但最好加上温度传感器,因为25℃为标准温度,温度每增加1℃,电导率上升2%。

二、原理与公式

1、原理(仅供了解)

TDS(Total Dissolved Solids),中文解释为溶解性总固体,测量单位为毫克/升(1mg/L=1ppm),它表明1升水中溶有多少毫克溶解性总固体,或者说1升水中的离子总量。通俗的说,TDS值代表了水中溶解物杂质含量,TDS值越大,水中溶解物杂质越多,说明水中的可导电物质的杂质含量大。

TDS 测量主要通过给测试电极输入交变的驱动电压(防止探头极化),在被测液体中产生微小电流,从而得到被测液体的电导率。模块采用电极法测定水溶液的电导率,当两电极插入溶液中,可以测出两电极间的电阻,经过转接板转换,最终输出模拟电压值,根据电压值与TDS的线性关系式,最终得到TDS值。

2、公式

TDS 传感器模块标准曲线如下图所示。

25℃为标准温度,温度每增加1℃,电导率上升2%,故温度作为补偿因子参与TDS计算,公式为:

V修 = V * (1 + 0.02(T-25))*

上式中V修为修正后的电压值,V为测量的电压值,T为测得溶液温度值。

TDS计算公式:

TDS = (66.71V修³ – 127.93V修 ² + 428.7*V修 ) * K

K是修正系数,K = TDS标准值 / TDS测量值

3、校准方法,即求出k值

①需要购买TDS笔,来测量水里的TDS标准值

将 TDS 探针和温度传感器放入 TDS 标 准溶液或已知 TDS 值的待测溶液中,测试传感器模块 AO 口输出电压值,记录 为 V 测试。测量当前测试溶液的温度值为 T 。

V修正 = V测试 * (1 + 0.02(T-25))*

TDS测试 = (66.71V修正³ – 127.93V修正 ² + 428.7*V修正 )

K = TDS标准值 / TDS测试

三、实操+代码

这里没有使用ds18b20温度传感器,所以温度值直接给了25摄氏度。如果使用温度传感器的话,直接初始化,给温度赋值即可。

1、代码

/********************(C) COPRIGHT 2019 Crownto electronic **************************
 * 文件名  :main.c
**********************************************************************************/
#include "stm32f10x.h"
#include <string.h>
#include "delay.h"
#include "bsp_SysTick.h"
#include "math.h"
#include "bsp_adc.h"
#include "ds18b20.h"
#include "bsp_usart1.h"
volatile uint32_t time = 0; // ms 计时变量 
定义变量
unsigned char AD_CHANNEL=0;
float TDS=0.0,TDS_voltage;
float TDS_value=0.0,voltage_value;
float kValue=0.976;
float TEMP_Value=250;
// ADC1转换的电压值通过MDA方式传到SRAM
extern __IO uint16_t ADC_ConvertedValue;
// 用于保存转换计算后的电压值 	 
float ADC_ConvertedValueLocal; 
/**************温度采集函数***************/
void TEMP_Value_Conversion()
{
      TEMP_Value=DS18B20_Get_Temp();
}
/**************TDS值采集函数***************/
void TDS_Value_Conversion()
{
    ADC_ConvertedValueLocal=((float)ADC_ConvertedValue/4096*3.3)*(1.0+0.02*(TEMP_Value/10-25.0)); //AD转换
    
    TDS_value=(66.71*ADC_ConvertedValueLocal*ADC_ConvertedValueLocal*ADC_ConvertedValueLocal - 
    127.93*ADC_ConvertedValueLocal*ADC_ConvertedValueLocal + 428.7*ADC_ConvertedValueLocal)*kValue;
    
      if((TDS_value<=0)){TDS_value=0;}
        if((TDS_value>1400)){TDS_value=1400;}	
            printf("TDS:%f\n",TDS_value);
    
}
/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{	 
    /* 配置USART1 */
    USART1_Config();
        ADCx_Init();		// ADC 初始化
        //DS18B20_Init();//DS18B20初始化 		
  while(1)
    {	
            //TEMP_Value_Conversion();//温度数据转换
            TDS_Value_Conversion();//TDS
            delay_ms(1000);
    }	
}
/*********************************************END OF FILE**********************/

2、校准,求k值

将代码公式里的kValue去掉,执行代码,求出测试的TDS值

串口显示测试的TDS值大概为170

使用市场买的TDS笔测试,显示TDS标准值为166

所以kValue=TDS标准值 / TDS测试=166/170=0.976

修改代码中的kValue值为0.976,最后烧录代码。测试的数据和TDS笔差不多

四、注意事项

1、25℃为标准温度,温度每增加1℃,电导率上升2%。

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

3、TDS 探头放置位置不能太靠近容器边缘,否则会影响示数。

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号