PH测量传感器电极信号转换模块设计原理介绍
时间:2022-11-01 04:30:00
1.模块简介:
本模块可将PH通过该单片机的10位,传感器电极信号通过运放放大输出,该模块载有8位单片机处理器ADC采样放大后的传感器信号,调整板载电位器输出信号的范围,并通过最小的二乘法软件算法计算信号和PH值得线性函数关系,然后使用线性函数关系来获取相应的信号PH值。另板载TTL串口接口,用户可通过串口设置校准及获取当前PH测量分辨率为0.1.串口功能用户可根据是否需要选择购买相应的套餐。
2.技术指标:
产品型号 |
KM-PH |
检测对象 |
PH传感器测量溶液PH值 |
通信方式 |
UART(TTL)是否需要可选 |
工作电压 |
5V (DC) |
默认信号输出量程 |
0-5V(电位器可调量程) |
支持PH输入电极接口 |
|
输出接口 |
PH电极放大信号,2.5V参考电压 |
外形尺寸 |
40*30(mm) |
串口通信参数 |
波特率9600,停止位1,无校验 |
串口输出PH分辨率 |
0.1 |
模块主控MCU |
ST8G(10位AD可选是否需要分辨率) |
3.使用说明:
用户可以通过两种方式获得PH值,第一种是串口读取法,利用本模块的串口接口直接获得输出PH值,第二种是AD用户采用外部采集计算法mcu或其它处理器ADC通过自编程计算模块输出的模拟量信号PH值。注意用户在购买时需要选择具有串口输出功能的模块。
模块可接入BNC接口的PH复合电极传感器,出厂默认PH电极放大信号输出范围0-5V。此外,用户可以根据自己的需要调整电位器PH电极放大信号的输出范围。
4.测量原理:
pH传感器电极输出的信号是信号电极和参考电极的相对电压。本设计的传感器参考电极为中性溶液,即当时pH当值为7时,输出电压理论为0,而其他情况则根据溶液的酸碱度而变化。根据操作放大器的工作原理,负电压输入与单电源供电存在矛盾。但由于输出信号是相对于参考电极的电压差,因此给出参考电极(pH给出合适的电压值,可以保证信号电极(pH电极正输入)电压恒定为正值, 单电源供电运输可满足要求。电极输出电压不符合单片机A/D转换输入要求,通过运输的基本放大功能可以使其达到模数转换所需的电压范围,可以送到单片机进行数据处理。
本设计中RW1电位器用于量程调节,常见的量程分为:
①量程0-3.3V,将电极放入7.0标准溶液中,调节电位器,使得运放1端输出电压为1.65V(根据溶液PH越大运放1端输出电压越小的关系,(14-7)/14*3.3V=1.65V),则电路采集的PH最小值对应的输出电压为3.3V.
②量程0-5V,将电极放入7.0标准溶液中,调节电位器,使得运放1端输出电压为2.5V(根据溶液PH越大运放1端输出电压越小的关系,(14-7)/14*5V=2.5V),则电路采集的PH最小值对应的输出电压为5V.
由于本模块板载的51单片机AD采集分为是0-5V,故本模块默认设置的量程为0-5V,即PH_Vol的默认输出量程为0-5V。
校准原理:依次将电极放入三种标准溶液中,记录对应输出电压值,并采用excel绘制PH值与电压的标准曲线,例如:
Y=-5.9647x+22.255即为得到的标准曲线表达式,其中Y为溶液PH,x为对应输出电压。这种曲线拟合方式称为最小二乘法,根据三组数据即可求出关系表达式,本模块板载的51单片机中利用C程序实现最小二乘法求出标准曲线表达式,从而即可计算PH值,用户第一次使用模块前,只需对模块进行串口发送相应的校准指令后,方可通过读取指令,获取模块返回的PH值。
如用户购买为非串口输出功能模块,则需自行采用以上绘制excel表格或采用软件算法计算得到标准曲线表达式,然后通过外接mcu的AD读取模块输出的模拟量来转换计算PH值。
关于采用软件实现最小二乘法可参考博客:行者 <的博客-csdn博客_c语言 拟合函数"> 最小二乘法求拟合曲线函数的C语言实际应用_>行者<的博客-CSDN博客_c语言 拟合函数
5.串口协议:(仅对支持串口输出功能的模块适用)
串口通讯为应答式查询方式。
初次使用模块或更换PH电极传感器后,需对模块进行PH校准,即对与模块连接的PH复合电极进行校准,校准一共分为三个步骤,如下。
第一步:首先将PH电极放入PH值为4.0的溶液中,然后向模块串口发送校准PH值4.0指令,模块会立即返回默认状态为0的响应指令,等待模块mcu检测溶液对应电压稳定后会返回状态为1的校准完毕指令,此时可将PH电极从4.0的溶液中取出,并放入清水中冲洗后,搽拭掉电极探头处的多余水分。
1 |
0x80 |
校准PH值4.0指令 |
|||||||
向模块发送 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
起始位 |
地址 |
命令 |
-- |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x01 |
0x80 |
0 |
0 |
0 |
0 |
0 |
0x7F |
|
EXP. |
FF 01 80 00 00 00 00 00 7F |
||||||||
模块返回 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
起始位 |
命令 |
-- |
状态 |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x80 |
0 |
0 |
0 |
0 |
0 |
0 |
0x80 |
|
EXP. |
FF 80 00 00 00 00 00 00 80 //指令响应回复 |
||||||||
EXP. |
FF 80 00 01 00 00 00 00 7F //校准完毕回复 |
第二步:将PH电极放入PH值为7.0的溶液中,然后向模块串口发送校准PH值7.0指令,模块会立即返回默认状态为0的响应指令,等待模块mcu检测溶液对应电压稳定后会返回状态为1的校准完毕指令,此时可将PH电极从7.0的溶液中取出,并放入清水中冲洗后,搽拭掉电极探头处的多余水分。
1 |
0x81 |
校准PH值7.0指令 |
|||||||
向模块发送 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
起始位 |
地址 |
命令 |
-- |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x01 |
0x81 |
0 |
0 |
0 |
0 |
0 |
0x7E |
|
EXP. |
FF 01 81 00 00 00 00 00 7E |
||||||||
模块返回 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
起始位 |
命令 |
-- |
状态 |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x81 |
0 |
0 |
0 |
0 |
0 |
0 |
0x7F |
|
EXP. |
FF 81 00 00 00 00 00 00 7F //指令响应回复 |
||||||||
EXP. |
FF 81 00 01 00 00 00 00 7E //校准完毕回复 |
第三步:将PH电极放入PH值为10.0的溶液中,然后向模块串口发送校准PH值10.0指令,模块会立即返回默认状态为0的响应指令,等待模块mcu检测溶液对应电压稳定后会返回状态为1的校准完毕指令,此时可将PH电极从10.0的溶液中取出,并放入清水中冲洗后,搽拭掉电极探头处的多余水分后即可开始正常测量读取PH值,此时板载mcu已经根据三点校准数据采用最小二乘法计算出标准曲线函数式,并将函数关系保存至单片机内部Flash中,掉电不丢失,重新上电使用则不必执行校准步骤。
1 |
0x82 |
校准PH值10.0指令 |
|||||||
向模块发送 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
起始位 |
地址 |
命令 |
-- |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x01 |
0x82 |
0 |
0 |
0 |
0 |
0 |
0x7D |
|
EXP. |
FF 01 82 00 00 00 00 00 7D |
||||||||
模块返回 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
起始位 |
命令 |
-- |
-- |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x82 |
0 |
0 |
0 |
0 |
0 |
0 |
0x7E |
|
EXP. |
FF 82 00 00 00 00 00 00 7E //指令响应回复 |
||||||||
EXP. |
FF 82 00 01 00 00 00 00 7D //校准完毕回复 |
串口读取PH值指令
1 |
0x86 |
读模块PH返回值 |
|||||||
向模块发送 |
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 |
起始位 |
命令 |
-- |
PH值 |
-- |
-- |
-- |
-- |
校验值 |
|
0xFF |
0x86 |
0 |
1字节 |
0 |
0 |
0 |
0 |
-- |
|
EXP. |
FF 86 00 44 00 00 00 00 36 |
PH:0x44对应十进制为68,则PH值为6.8 (注:返回的PH值扩大了10倍,需要缩小10倍后保留一位小数)
校验值算法:
起始位后 86 00 44 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 {
sum+=data[iFor]; } return (0xff-sum+1); } 6.模块展示及接线图: 7.模块尺寸: 8.模块完整电路原理图: 模块链接: https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111debyZ88SJ&ft=t&id=677880984132