TDScc(外科医生的反渗透净水机的控制主板)系列连载——TDS检测技术实例
很幸运地我在网络上获得了瑞萨电子(Renesas Electronics)公开的全套RL78/G11 TDS水质测试笔资料。
(详见:
https://www.renesas.com/zh-cn/solutions/renesas-easygo/example/demo-set.html#rl78g11-tds-water-quality-tester )
电路原理图
TDS测量以及温度测量流程图
TDS计算的源程序(关键是温度补偿的参数!)
void R_TDS_Calculate(uint16_t adcr_average_value)
{
uint16_t tds_resister, siemens_value;
float electornic_conductor,temperature;
g_tds_ProbeShortConnect = 0;
adcr_average_value = adcr_average_value - 15;
if(adcr_average_value >= 0x3e6)
{
g_tds_Value = 0;
}
else if(adcr_average_value <= 10)
{
g_tds_ProbeShortConnect = 1;
}
else
{
tds_resister = (uint32_t)adcr_average_value * 1500 / (1024 - adcr_average_value);
siemens_value = POLAR_CONSTANT / tds_resister;
temperature = g_Temperature[0] + (float)g_Temperature[1] / 10;
if (g_Temperature[0] <= 10)
{
electornic_conductor = siemens_value / (0.0169 * temperature + 0.5583);
}
else if (g_Temperature[0] <= 20)
{
electornic_conductor = siemens_value / (0.018 * temperature + 0.5473);
}
else if (g_Temperature[0] <= 30)
{
electornic_conductor = siemens_value / (0.0189 * temperature + 0.5281);
}
else
{
electornic_conductor = siemens_value / (0.022 * temperature + 0.45);
}
g_tds_Value = electornic_conductor * TDS_COEFFICIENT / 100;
}
}
难题:RL78/G11型号MCU无足够IO以扩展出对系统多个继电器、电磁阀的控制。唯有消化其原理后选择其它适用MCU来组建系统。
我的TDS检测方案
考虑51系列单片机比较普及(其实是我根本什么都不会,手头有本单片机入门书《爱上单片机》(杜洋),觉得行,就决定了),故选用带AD功能的STC12C2052AD搭建实验电路。
电路设计
电路特点。STC12C2052AD的P1.5(经R8分压后的TDS)与P1.6(TB)强推挽输出驱动方波电压至TDS探测电极,P1.7为ADC状态,将TDS端(电极间导电的水等效于电阻,与R8形成分压)的电压模数变换。C2为滤波电容。考虑目标水样TDS较低,电阻值达数十k(本例探头下),故R8分压电阻较参考电路为大(10到20k),以在8位ADC下能在低TDS区间有较高分辨率。
困难
1.无法照搬转换系数TDS_COEFFICIENT 。因为探头导电面积、探头距离等会直接影响到检测出来的电压,进而影响结果。这影响关系的计算非常复杂。另外,考虑到DIY的条件,统一探头材质、尺寸是非常不现实的。但情况并不悲观,因为我们检测TDS变化才是关键,精确度不重要!所以,直接用已知TDS值的水去标定(就是确定计算系数)会简单、可行。你手头应该就有一只TDS检测笔吧,几十块钱而已。没的就去买。
2.8位的51MCU运算能力太弱了,特别是浮点运算!庆幸的是,TDS结果肯定不会太大,产水能到255ppm(0xff)或99(两位LED数码管显示)就非常恐怖了。我轻易就把运算都变换成8位或16位整形的简单运算了,而且对精度和溢出都作了很好的考虑。
源代码(节选)
unsigned char tds_ads_v = 0 ; //TDS平均ADC值
unsigned char TDS = 0 ; //TDS值
unsigned char TEMP = 0 ; //温度值
sbit TA=P1^5 ; //P1^5与P1^6输出驱动电压
sbit TB=P1^6 ;
#define K_TDS 90 //TDS转换系数(需按探头参数调整)
void TDS_Calculate(u8 tds_v)
{
unsigned int tk = 0 ;
unsigned int tds_t = 0 ;
if( tds_v > 252 ) //下限
{
TDS = 0 ;
}
else if( tds_v < 10 ) //上限
{
TDS = 99 ;
}
else
{
if (TEMP <= 10)
{
tk = 17 * TEMP + 558 ;
}
else if (TEMP <= 20)
{
tk = 18 * TEMP + 547 ;
}
else if (TEMP <= 30)
{
tk = 19 * TEMP + 528 ;
}
else
{
tk = 22 * TEMP + 450 ;
}
tds_t = 255 - tds_v ;
tds_t <<= 8 ; //左移位8次,扩大被除数可多保留有效位。
tds_t = tds_t / tk ;
tds_t = tds_t * K_TDS ; //乘后再除,增加得数有效值
TDS = tds_t / tds_v ;
}
}
上面是第一代(试验版)方案。而在第3代控制板,采用了新的驱动电路,只需使用两个IO端口,而且能够在负脉冲周期也能采样一次,所以速度加倍。同时,这两个端口驱动一个由两个MOS管构成的与门电路,作为蜂鸣器的驱动。总的效果就是节省了端口之余还增加了功能,同时检测速度还加倍。当然,编程难度会增加。
TDScc(外科医生的反渗透净水机的控制主板)系列连载——TDS检测技术实例相关推荐
- 中国净水机行业市场全面分析及发展趋势调研报告
智研瞻产业研究院专注于中国产业经济情报及研究,目前主要提供的产品和服务包括传统及新兴行业研究.商业计划书.可行性研究.市场调研.专题报告.定制报告等.涵盖文化体育.物流旅游.健康养老.生物医药.能源化 ...
- 消费新品周报 | 老板推出新款消毒柜;A.O.史密斯橱下冷热即饮净水机上市
摘要 老板.A.O.史密斯.Gululu.阿迪达斯.安踏.THOMAS SABO.自然堂.恰恰.Aspinal of London发布最新产品. 消费者科技 老板消毒柜推出XB831新品 基于消毒柜在 ...
- 深度净化自来水,还支持即时加热,爱贝源R3桌面净水机体验
近几年大家对饮食安全越来越重视,特别是在用水健康方面,除了购买童装纯净水之外,很多人还会通过各种净水设备来对自来水进行净化,比较起来,通过净水器净化自来水的成本,要远远低于桶装水,而且使用时候更加方便 ...
- rust进水器怎么用_净水机怎么使用才正确 净水机使用教程【详细介绍】
水和我们的每个人的生活息息相关,现在 净水机 的出现,可以改善水质,而且对水压 . 水流 和 水温都会产生一定影响,从而满足人们更为个性化的需求.该如何正确使用净水机呢?净水机使用说明是在使用之前,用 ...
- 净水机市场成蓝海,机会在哪?
2015年4月15日是一个属于"水"的日子:国务院关于水污染治理的"水十条"政策正式颁布,中国最大的净水机公司碧水源则发布了一款采用"纳滤膜(DF膜) ...
- java 分布式 redis缓存技术_JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载...
课程名称 JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载 课程目标 本课程从0基础开始,对redis的方方面面进行细粒度的讲解:包括基础操作.高级命令.各种集群模式.动态增减节点 ...
- c# 两个list比较_C#刷遍Leetcode面试题系列连载(1) 入门与工具简介(VS Code amp; VS)...
什么要刷LeetCode 大家都知道,很多对算法要求高一点的软件公司,比如美国的FLAGM (Facebook.LinkedIn.Amazon/Apple.Google.Microsoft),或国内大 ...
- python从零开始系列连载_技术 | Python从零开始系列连载(一)
导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五定时推出,欢迎大家学积极习转载~ 安装环境 大家和我一起搜索一下anaconda(注意 ...
- spring cloud入门_SpringBoot 入门系列0SpringBoot与SpringCloud技术选型
点击上方蓝字关注我们 SpringBoot 入门系列0-SpringBoot与SpringCloud技术选型01 概 述 Spring Boot与Spring Cloud版本严格来讲,Bo ...
最新文章
- Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
- 【转】 LINQ TO SQL中的selectMany
- 使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表
- C语言volatile关键字—最易变的关键字
- openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba
- MySQL自定义查询字段排序
- python项目计划_2017年vn.py项目计划
- Session共享的四种方法
- idea404未找到错误怎么解决_普联路由器提示无线网密码位数错误怎么解决【解决方法】...
- 关于 mcafee 8.7 更新失败的 解决办法
- gsp计算机管理权限,新gsp计算机权限设置
- UE4中的委托和事件
- 端口扫描 -- scanport和superscan
- 基于pymupdf的PDF与图片互转
- android 二级联动列表,仿eleme点餐页面
- centos yum 第三方仓库 scl 应用
- BeAlert 一款alert和confirm美化插件(优化)
- Gluster安装+kubesphere3.0
- 千兆级LTE时代的重要技术——免许可频谱与小型基站深入解析
- “智多星”手机销售网
热门文章
- 如何提高GitHub开源代码下载速度,这7招你必须知道
- iPad能不能装c语言的编译器,IPhone/IPad/IPod安装GCC的方法
- 《深入理解Java虚拟机》阅读——垃圾回收机制
- c语言位段的作用,c语言中位段的使用
- 因为他的离去,星空又多启明星
- FFMPEG函数open_output_file()
- Planet snap shot 澳大利亚珊瑚礁精选照片一览(每一张都可作为壁纸)2022 年 4 月 7 日
- python_斗鱼自动化爬取到MySQL1.0
- Vue 全家桶之 vue cli (脚手架)
- 河北省职称计算机考试什么时候,河北省2010年职称计算机考试报名时间通知