远程污水综合测试仪

[复制链接]

150

主题

445

帖子

1904

积分

审核员

Rank: 9Rank: 9Rank: 9

积分
1904
查看: 1948回复: 2 发表于 2019-12-12 13:17:56   只看该作者
本帖最后由 secret 于 2019-12-12 13:19 编辑

摘要:设计一种远程污水监测系统,该系统以MSP430单片机为核心控制器,通过不同传感器采集污水流量、温度、溶氧量、PH值、氰化物、混浊度、氨氨含量等指标,通过EMODEM转换器、完备的公共电话网实现和计算机的远距离通信,为了帮助环保部门监督厂矿尽可能少的污染环境,系统还采用GSM无线传输方式实现监测数据的超标报警。所有实时数据为了留有备份,除了通过公共电话网传输到计算机外,还通过SPI接口存储在下位机SD存储卡中。

关键词:污水监测,MSP430 单片机,GSM, SD 存储卡

1.作品简介
结合我国排污企业的特点,设计的污水综合测试仪具有以下功能。
    1) 可以准确对多路模拟量信号采样,AD转换,并做简单的数据处理:
    2)在现场可 以直观的查看当前各项污染物指标;3)利用通用的、现成的电话网实现数据的远程传送;4)对污染物超标的工厂要及时通过GSM短信方式向有关部门和人员报告;5)利用现有技术手段和资金尽可能多地制作出传感器,经过分析,可以制作的传感器包括浑浊度和温度传感器,其它量暂时用模拟电压信号代替:
    6)在不具备电话线条件的地区,仪器应能将数据保存在自带的存储模块上,该存储模块应具有大容量、方便插拔和读取的特性:
    7)为了避免“只监不控”的缺点,设计的仪器还应具有对设备控制的功能。

2.方案设计
2.1理论分析
    仪器是各个模块的组合,所以要让模块间正常有序的工作是关键,而保
    证有序的重要前提是对整个信号流的了解,现在就以模块为单位讲解信号的特征及传递关系:
    1)数据采集模块是整个 信号流的开始,由相应的传感器及电路将被测非电量转换成电量,并将这些电压信号限定在0--3.3v左右,以适应MSP430的工作需要:
    2)使用MSP430自带的12位AD转换器,将被测电量转换成0--4096的数字量,以方便进行数据处理;3)对ADC的数字量进行简单的处理,现阶段,只对浑浊度和温度进行有实!
    际意义的转换,其它量用其模拟电压值代替:
    4)将转换好的数据和保存的各项阈值进行比较,如果超标,则用短信方式报警,单片机用串口将一定命令格式的AT命令发送至GSM模块,如AT+CMGS=电话号码表示所要发送到的手机号码,信息要以0x1a作为结尾。
    5)用于发送至电话线的数据及保存在SD卡中的数据要遵循一-定的数据格式以方便接收、存取及分析,现定义一条信息为31个字节,包括7字节的时间信息,每个通道占有3个字节的信息量,若某通道关闭,则用0xee填充这3个字节。
    另外,对所选传输介质的选择也很重要,要保证数据传输的正确性,实时性,并且要降低成本。
    由于MODEM技术已经很成熟,并且现有的公用电话网也非常完善,利用MODEM来完成远程数据的传输既经济又方便。GSM无线传输技术也被广泛应用,并且已经非常成熟,价格适宜,易于应用于数据量较小,无线短信通信的场合。

    2.2选用 TI器件的依据,选型理由,所选TI器件详细介绍
1) MSP430F149特点
    口低电源电压范围: 1.8v-3.6v口超低功耗: 2.5 HA@4kHz, 2.2v;280μA @ 1MHz, 2.2v。
    口5种节电模式:
    等待方式1.6μA:
    RAM保持的节电方式0.1 uA。
    口从等待方式唤醒时间小于6pμs。
    016位RISC结构,125ns 指令周期。
    口基本时钟模块配置:
    高速晶体(最高8MHz);低速晶体(32768Hz);DCO口配合外部器件可构成单斜边A/D转换器。
    012位200Ksps的AD转换器,自带采样保持。
    口内部温度传感器。
    口具有3个捕获/比较寄存器的16为定时器Timer A, Timer _B。
    口两通道串行通信接口可用于异步和同步模式。
    口6个8位并行端口,且2个8位端口有中断能力。
    口硬件乘法器。
    口多达60KB的FLASHROM和2KBRAM。
    口串行在系统编程。
    口保密熔丝的程序代码保护。

2) OPA228: 由TI公司生产的OPA228是一款高精度,低噪声的运算放大器口低噪声: 3nV/VHz口宽带宽: 33MHz,10V/μus口调整时间: 5pμs口高共模抑制比: 138dB口高开环增益: 160dB口低输入电流: 10nA口低漂移电压: 75μV口宽供电范围:士2.5V ~士18V    3) OPA300:
    口高带宽: 150MHz口低噪声: 3nV/NHz口失真小: 0.003%口输出电压漂移小: (V+) - 100mV ~ (V-) + 100mV口单电源供电: +2.7V ~+5.5V4) OP07:
    口极低的电压漂移: 150μV MAX口低输入电流: 1.8nA5) DAC7611: TI 公司生产的12位串行输入DA转换芯片口低功耗: 2.5mW口快速调节时间: 7msto 1 LSB口线性输出口3线接口

3.系统实现
3.1硬件设计
3.1.1 系统框图系统框架如图1所示
01.jpg

    3.1.2单元间接口设计仪器包含很多模块,主要使用IO口将各个模块和主控芯片联系起来,在这里MSP430提供的大量IO口就派上了用场,程序按硬件模块分成多个软件模块,方便调用。最重要的一 一个设计应当是SD卡和GSM部分,在存取SD卡时,USART2工作于SPI模式,当发送报警短信时,USART2工作于UART模式,而且在硬件上两者也有交集,这就牵扯到两种模式的切换,最后采用的方案基于一个考虑:在整个系统运行期间,绝大部分时间,存取SD卡较发送报警短信更频繁,所以一般将USART2设置在SPI模式,当有报警时,再切换到UART模式,发送完成后再换回来。
    ADC的参考电压选择的是MSP430的VCC,3.3v,所有传感器均与MSP430共地,所以在温度传感器和浑浊度传感器的设计上就要考虑把输出电压调整到0- 3.3v 左右,在前端是用电桥电路对热敏电阻实施前端补偿,后端使用TI公司的OP07和OPA228搭建了一一个仪用放大器,有效地抑制了共模干扰,获得理想的电压输出。
    3,3硬件设计注音事项乃空门
    3.2软件设计3.2. 1.软件流程,软件设计思路及技巧由于作品中硬件包含多个模块,所以在软件编程上我也将属于各个模块的程序封装成一一个个头文件,在头文件中实现该模块的功能,并且编制好接口函数以供主函数或其他模块调用。
    用c语言编程在接口设计和可读性上体现了极大的优势,现将整个


01.jpg

    3.2.3各头文件中重 要的接口函数及参数 . Itype.h O #define uchar unsigned char:
    O todefine uint unsigned int;:
    . Imy_ system init.h O void SystenInitvoid :初始化系统以及对相关参数的配置:
    O uchar open canal8] :全局变量,每个元素为1或0,分别对应于8 个AD通道的开关,其他头文件或主函数对其检测以判断是否对相 应AD操作。
    Imy_ uart.h O void UARTInit(void):初始化串行口:
    O void UartSendSomeByte(uchar *strint num) :向串口发送num个字节,字 节内容保存在str中:
    O void UatSendStringuchar *tr): 向串口发送一个字符串str:
    由于DS1302使用的是BCD码,所以在串口发送时间数据前要进 行相应的转换,所以编写了如下两个工具函数:
    O uchar DecToHx(uchar num):工具函数,十进制转换成BCD; O uchar HexToDec(uchar mum):工具函数,BCD 转换成十进制。
    Imy uart 2.h和my. uart.h 的接口函数基本相同 O void UARTInitvoid):由于USART2要分时工作与SPI模式和UART 模式,这个函数就是用来切换UART模式的:
    O void Uar2SendString(uchar "str); D void Uat2SendSomeByte(uchar *strzint num)= I my_gsm.h O void GSMInitvoid):初始化GSM模块:
    O void SendMessage(uchar *nforuchar length): 发送短信,信息为length个 字节的字符数组。
    ■my_ modem.h O uchar ModemCrearConet(void):拨电话,建立连接:
    O void ModemShutDown(void): 挂电话,断开连接。
    ■my ds1302.h O void DS1302 SttngData:(uchar "str): 设定ds1302时间:
    0 void DS1302 GetData(uchar *str):读取 当前DS1302的时间:
    O uchar DS1302 Timepiece s(uchar): 用ds1302定时n秒,返回值是是否    报警的状态值。
    . my_12864h 。voidLCD Iitvoid): 初始化液品屏:
    O void LCD WiteString(unsigned char X,unsigned char Yunsigned char *String) :
    在屏幕的特定位置显示-一个字符串:
    O void LCD WrieDECunsigned char X.unsigned char Y,unsigned char Num):
    在屏幕的特定位置显示一个数:
    O voidLCD _Drawfuchari):显示一幅画:
    O voidLCD Movie(void):一个简单的动画:
    O void LCD ShowI istuchar pageint *ade12 tmp):在液品上显示各个被测量
    的值。
    ■my_ _adcl2.h O voidADCI2CnertSatvoid):启动次AD转换:
    O voidConvetData(int adc12 resu[8D):保存AD的值到指定数组。
    ■my_ dac7611h O voidDACuint value):进行一次DA转换。
    ■MMC LIB.C O unsigned char InitMMC(void) :初始化SD卡,将USART2切换到SPI 模式:
    O char mmcWriteBlock(const unsigned long address.const unsigned long count,unsigned char *pBufer):从SD卡中address地址起写入count个 字节的数据。

    3.2.3编程感想及软件设计注意事项这个作品的成功得益于模块化的硬件及软件设计,对每一一个硬件模块,我都编制了相应的测试程序和头文件,前者可以独立完成该模块的硬件功能,达到测试的目的,后者则是将模块整合进系统的软件保证。模块化的软件设计对于系统排错,系统裁剪都有很大作用。
    另外,如前所述,串口的率先实现也对整个工程的完成起到事半功倍的作用。

4.  附录 ( 作品照片 , 使用图像编辑软件在照片上标明 TI  器件位置和型号 )
01.jpg
01.jpg





41

主题

160

帖子

332

积分

二氧化硅

Rank: 2

积分
332
发表于 2019-12-12 13:33:43   只看该作者
有点看不懂 略乱一点啊

20

主题

124

帖子

290

积分

二氧化硅

Rank: 2

积分
290
发表于 2019-12-18 15:09:55   只看该作者
谢谢分享
快速回复 返回顶部 返回列表