很幸运地我在网络上获得了瑞萨电子(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检测技术实例相关推荐

  1. 中国净水机行业市场全面分析及发展趋势调研报告

    智研瞻产业研究院专注于中国产业经济情报及研究,目前主要提供的产品和服务包括传统及新兴行业研究.商业计划书.可行性研究.市场调研.专题报告.定制报告等.涵盖文化体育.物流旅游.健康养老.生物医药.能源化 ...

  2. 消费新品周报 | 老板推出新款消毒柜;A.O.史密斯橱下冷热即饮净水机上市

    摘要 老板.A.O.史密斯.Gululu.阿迪达斯.安踏.THOMAS SABO.自然堂.恰恰.Aspinal of London发布最新产品. 消费者科技 老板消毒柜推出XB831新品 基于消毒柜在 ...

  3. 深度净化自来水,还支持即时加热,爱贝源R3桌面净水机体验

    近几年大家对饮食安全越来越重视,特别是在用水健康方面,除了购买童装纯净水之外,很多人还会通过各种净水设备来对自来水进行净化,比较起来,通过净水器净化自来水的成本,要远远低于桶装水,而且使用时候更加方便 ...

  4. rust进水器怎么用_净水机怎么使用才正确 净水机使用教程【详细介绍】

    水和我们的每个人的生活息息相关,现在 净水机 的出现,可以改善水质,而且对水压 . 水流 和 水温都会产生一定影响,从而满足人们更为个性化的需求.该如何正确使用净水机呢?净水机使用说明是在使用之前,用 ...

  5. 净水机市场成蓝海,机会在哪?

    2015年4月15日是一个属于"水"的日子:国务院关于水污染治理的"水十条"政策正式颁布,中国最大的净水机公司碧水源则发布了一款采用"纳滤膜(DF膜) ...

  6. java 分布式 redis缓存技术_JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载...

    课程名称 JAVA架构师系列课程分布式缓存技术Redis权威指南,资源教程下载 课程目标 本课程从0基础开始,对redis的方方面面进行细粒度的讲解:包括基础操作.高级命令.各种集群模式.动态增减节点 ...

  7. c# 两个list比较_C#刷遍Leetcode面试题系列连载(1) 入门与工具简介(VS Code amp; VS)...

    什么要刷LeetCode 大家都知道,很多对算法要求高一点的软件公司,比如美国的FLAGM (Facebook.LinkedIn.Amazon/Apple.Google.Microsoft),或国内大 ...

  8. python从零开始系列连载_技术 | Python从零开始系列连载(一)

    导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五定时推出,欢迎大家学积极习转载~ 安装环境 大家和我一起搜索一下anaconda(注意 ...

  9. spring cloud入门_SpringBoot 入门系列0SpringBoot与SpringCloud技术选型

    点击上方蓝字关注我们 SpringBoot 入门系列0-SpringBoot与SpringCloud技术选型01   概  述    Spring Boot与Spring Cloud版本严格来讲,Bo ...

最新文章

  1. Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
  2. 【转】 LINQ TO SQL中的selectMany
  3. 使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表
  4. C语言volatile关键字—最易变的关键字
  5. openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba
  6. MySQL自定义查询字段排序
  7. python项目计划_2017年vn.py项目计划
  8. Session共享的四种方法
  9. idea404未找到错误怎么解决_普联路由器提示无线网密码位数错误怎么解决【解决方法】...
  10. 关于 mcafee 8.7 更新失败的 解决办法
  11. gsp计算机管理权限,新gsp计算机权限设置
  12. UE4中的委托和事件
  13. 端口扫描 -- scanport和superscan
  14. 基于pymupdf的PDF与图片互转
  15. android 二级联动列表,仿eleme点餐页面
  16. centos yum 第三方仓库 scl 应用
  17. BeAlert 一款alert和confirm美化插件(优化)
  18. Gluster安装+kubesphere3.0
  19. 千兆级LTE时代的重要技术——免许可频谱与小型基站深入解析
  20. “智多星”手机销售网

热门文章

  1. 如何提高GitHub开源代码下载速度,这7招你必须知道
  2. iPad能不能装c语言的编译器,IPhone/IPad/IPod安装GCC的方法
  3. 《深入理解Java虚拟机》阅读——垃圾回收机制
  4. c语言位段的作用,c语言中位段的使用
  5. 因为他的离去,星空又多启明星
  6. FFMPEG函数open_output_file()
  7. Planet snap shot 澳大利亚珊瑚礁精选照片一览(每一张都可作为壁纸)2022 年 4 月 7 日
  8. python_斗鱼自动化爬取到MySQL1.0
  9. Vue 全家桶之 vue cli (脚手架)
  10. 河北省职称计算机考试什么时候,河北省2010年职称计算机考试报名时间通知