微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 采用C8051F060的水质重金属在线监测仪的研制

采用C8051F060的水质重金属在线监测仪的研制

时间:12-26 来源:电子产品世界 点击:

引言

随着工业的发展,重金属对水质的污染越来越严重,微量的重金属就可以使人体产生中毒和其它危害症状,实时在线监测水质重金属的含量成为当务之急。光谱、质谱、中子活化、分光光度等几种方法在连续监测及现场测定方面受到很大限制,电化学伏安法[1]得到的是直接可以测量的电信号,仪器设备简单,易于实现自动化。以电化学分析方法作为测试方法,开发研制低成本、高精度、实时在线连续监测的仪器是环境监测发展的必然趋势。

水质重金属监测仪结构及工作原理

水质重金属自动监测仪包括简单信号发生器、恒电位仪[2]、弱电流采集处理部分、三电极体系、单片机系统及外扩部分、泵阀的控制部分、上位机及人机界面,整体结构图如图1所示。该检测仪中的函数信号发生器输出的电压通过恒电位仪加载到三电极系统,使工作电极(WE)的电压精确保持在需要的电压上,采集对电极(CE)与工作电极(WE)回路产生的微弱电流信号,并记录过程中的伏安曲线,并通过上下位机记录存储处理数据。根据电化学溶出伏安法,曲线中峰电流的大小在一定条件下与被测离子的浓度成正比,峰电位与被测离子的种类特性有关,从而定性定量地分析出重金属离子的种类和浓度[3]

监测仪的硬件设计

MCU控制器选型

C8051F060是完全集成的混合信号片上系统型MCU芯片[4],具有59个数字I/O引脚,高速流水线结构的8051兼容内核(25MIPS),64KB可在系统编程的FLASH存储器,4K字节的片内RAM,可寻址64KB地址空间的外部存储器,硬件实现的SPI、SMBUS/IIC和两个UART串行接口,控制器局域网(CAN2.0B)控制器,5个通用的16位定时器,20个中断源,片内看门狗定时器、VDD监视器和温度传感器。此单片机处理速度快、片内资源丰富、外扩能力强,能够充分满足重金属监测仪的硬件需要,相比于普通8位单片机既节约了成本有提高了检测仪的性能。

简单函数信号发生器的设计

函数信号发生器有几种实现方法,可以由晶体管、运放IC等通用器件制作,但是功能较少,精度不高,调节方式不够灵活,也可以利用专用直接数字合成DDS芯片[5]的函数发生器,能够产生任意波形,但成本较高。

为了给恒电位仪提供多种类、易实现的电压信号,设计了一种简单可行、精度高、成本低的简单函数信号发生器。该系统利用C8051F060单片机的I/O口模拟SPI通信口来控制16位高精度数模转换芯片DAC8831[6],DAC根据预先输入的D/A控制字将数字信号转换成模拟电压信号,结合外部运放可以实现单极性(0~VREF)和双极性(-VREF~+VREF)两种输出模式,恒电位仪中使用有正负两种极性的电压,故采用双极性输出。

恒电位仪设计

恒电位仪就是维持参比电极与工作电极之间的电位差恒定的电子设备。把工作电极接虚地,可以防止寄生信号的干扰,从而提高了电路中电流和电压的稳定度和精度。这样恒电位仪就变成了保证参比电极没有电流流过的前提下,把参比电位加到比较器的反向输入端,在运放的同向输入端加控制电压作为基准电位,运放的输出端接对电极形成电压闭环负反馈调节系统。反向输入端的电位随同向输入端的电位变化而变化,因此同向输入端电压恒定时,电极中电流变化时,参比电极电位相对于工作电极电位任何微小变化均将为电路的电压负反馈所纠正,从而达到自动恒定的目的[7]

弱电流采集处理

工作电极上产生的微弱电流一般为mA级,监测低浓度重金属含量时能够达到pA级,为了精确采集微弱电流小信号,提高仪器的检测精度,在I/V转换电路中采用了自稳零、轨到轨输出运算放大器AD8639,此芯片把极低的输入偏置电流(最大值40pA)、高共模抑制比、极低失调电压、高精度、低噪声等特性集于一体,满足了微弱电流小信号的采集处理功能[8],电路原理图如图3所示。

I/V转换滤波后的电压由C8051F060单片机内部集成的ADC进行模数转换,内部ADC是16位而且转换速度可以达到1MSPS的高速精准模数转换芯片[9],实现了高分辨率、转换速度快的效果。

检测仪的软件设计

检测时序

检测仪上下位机通过Modbus协议[10]进行通讯,完成仪器检测整个过程。时序流程图如图4所示。

提高检测仪的检测能力

通过软件的编写控制DAC芯片产生不同的电压扫描波形[11]:线性、差分脉冲等波形[12],为了提高仪器检测重金属离子的检出限,采用差分脉冲电压扫描方式消除背景电流的影响,提高监测仪在检测低浓度重金属溶液的能力,差分脉冲波形如图5所示。

在Keil软件中编制差分脉冲扫描部分软件如下:

void scan(uint dac_begin,uint dac_end,uint speed,uint step,uint dac_basic)
  {
  adcnum0=0;
  step=1;//增加步长可变
  while(dac_begin>dac_end&&MCU_flag==5)
  {
  if(daca>=speed)
  {
  daca=0;
  dac_begin-=step;
  dac8831(dac_begin); //DAC数模转换子程序
  if((dac_begin<=dac_basic)&&(dac_begin%((dac_basic-dac_end)/256))==0)
  {
  AD0BUSY=1; //软件置1启动ADC转换
  if(dac_begin<=dac_end)
  {
  break;
  }
  }
  }
  dac8831(0x8000);
  }
  }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top