基于GPRS和单片机的串口通讯设计.docx
《基于GPRS和单片机的串口通讯设计.docx》由会员分享,可在线阅读,更多相关《基于GPRS和单片机的串口通讯设计.docx(10页珍藏版)》请在冰豆网上搜索。
基于GPRS和单片机的串口通讯设计
基于GPRS和单片机的串口通讯设计
基于GPRS和单片机的串口通讯设计
马保国1,贾寅波2,乔玲玲3
1.武汉理工大学材料科学与工程学院,武汉(430070)
2.武汉理工大学计算机科学与技术学院,武汉(430070)
3.武汉理工大学计算机科学与技术学院,武汉(430070)
摘要:
提出了一种从PLC中实时读取数据,传送给上位计算机,实现无线通讯的墙体外表面数据采集系统的设计。
设计中从实际情况出发,选用了工作稳定可靠的无线通讯芯片和先进的温/湿度传感器,工作子站选用MSP430F149作为处理芯片,采用SHTlX系列中的SHT10传感器用于现场的实时温/湿度数据采集。
并将所采集的数据发送给GPRS(通用分组无线业务)无线传输模块,GPRS传输模块再将数据以无线方式发送到数据采集服务器。
上位机监控程序采用java程序进行编
通信技术和Internet的远程数据采集、无线数据传输和控制等功能。
这不但降低了数据采集的成本,而且保证数据的准确性,更为后期的数据处理带来方便[3]。
2.数据采集系统
整个采集系统由传感器模拟量采集模块、GPRS无线通信模块和电源供电及复位模块组成。
传感器模块主要采集模拟量,由于接的是标准的传感器,传感器送过来的是标准电流信号,因此模拟量采集部分具有一定的通用性,只要接不同的传感器,就可以采集不同信号源的数据。
GPRS无线通信模块主要是把SHT10传感器采集的数据转发到Internet。
电源及复位模块主要是为整个系统提供可靠的电源,另外考虑到系统工作需要有复位功能,因此提供复位信号。
2.1模拟量采集模块
模拟量采集模块于SHT10传感器相连,由于从SHT10传感器送来的是标准信号(即4mA~20mA),所以需要A/D转换,把电流信号转换为电压信号。
模拟量采集电路通过一个高精度电阻将电流转换成电压信号,这样可以提高采集的精度。
电路中采用二极管作为ESD保护电路,考虑到干扰问题,采用电容进行滤波处理。
模拟量采集模块的流程如图2-1:
图2-1模拟量采集流程图
该模块主要涉及到A/D转换和定时器A的操作:
采集8通道模拟数据,并通过定时器A来控制采集的频率,另外也设置一个标志来通知主程序已经获得新的数据,通过全局变量来实现与主处理程序实现数据的交互。
这部分采用中断来实现,在定时器A里先停止A/D转换,读取数据后再启动A/D转换,然后再等待下一次中断的到来[1]。
A/D转换的初始化程序如下:
VoidInit_ADC(viod)
{
P6SEL=0XFF;//设置P6.0为模拟输入通道
ADC12CTL0&=~(ENC);//设置ENC为0,从而修改ADC12寄存器的值
ADC12CTL1|=CSTARTADD_0;//转换的起始地址为:
ADCMEM0
ADC12MCTL0=INCH_0;//设置参考电压分别为AVSS和AVCC,输入通道为A0
ADC12MCTL1=INCH_1;//设置参考电压分别为AVSS和AVCC,输入通道为A1
ADC12MCTL2=INCH_2;//设置参考电压分别为AVSS和AVCC,输入通道为A2
ADC12MCTL3=INCH_3;//设置参考电压分别为AVSS和AVCC,输入通道为A3
ADC12MCTL4=INCH_4;//设置参考电压分别为AVSS和AVCC,输入通道为A4
ADC12MCTL5=INCH_5;//设置参考电压分别为AVSS和AVCC,输入通道为A5
ADC12MCTL6=INCH_6;//设置参考电压分别为AVSS和AVCC,输入通道为A6
ADC12MCTL7=INCH_7+EOS;//设置参考电压分别为AVSS和AVCC,输入通道为A7
ADC12CTL0|=ADC12ON;
ADC12CTL0|=MSC;//上升沿触发
ADC12CTL1|=CONSEQ_1;//转换模式为:
多通道、单次转换
ADC12CTL1|=ADC12SSEL_1;//SMCLK
ADC12CTL1|=ADC12DIV_0;//时钟分频为1
ADC12CTL1|=(SHP);//采样脉冲由采用定时器产生
ADC12CTL0|=ENC;//使能ADC转换
Return;
}
2.2GPRS无线通讯模块
单片机通过串口和GPRS模块交换数据,所以首先要编写串口驱动程序,包括串口初始化(Init_Comm)、写串口数据(PrintChar)等函数。
读串口数据是通过中断来完成的。
串口初始化的代码如下:
voidInit_Comm(void)
{
TMOD=TMOD&0x0F;
TMOD=TMOD|0x20;//定时器1采用方式2,用于产生串口1的波特率
TL1=0xFD,TH1=0xFD;//32MHz-57600bps
WDCON=0x80;//SMOD1=1
SCON1=0x50;//串口1采用方式1
TR1=1;//启动定时器1
}[2]
在这些串口函数的基础上编写GPRS模块的驱动函数。
单片机通过AT命令进行拨号后,GPRS模块就转入在线模式,此时通过PPP协议取得一个IP地址,就可以连接到互联网了。
其流程如图2-2:
图2-2数据传输流程图
2.3电源供电
整个系统采用3.3V供电,考虑到硬件系统对电源要求具有稳压功能和纹波小、低功耗等特点,因此采用TI公司的TPS76033芯片实现。
该芯片具有个很小的封装,因此能有效节约PCB板的面积[1]。
2.4复位电路
该系统采用MAX809芯片来实现复位电路。
用复位芯片复位代替R-C复位电路,保证了复位电路的可靠性。
3.PC机程序设计
本实验室承接的项目是墙体外表面保温材料监测及评估系统。
需求:
针对全国不同地区(南北方不同气候)的墙体外表面保温材料在四季气候影响下是否符合标准及人体舒适度问题
解决方案:
在墙体外表面安装恒温箱、热流计和传感器等设备,捕获数据后,经过MSP430F149芯片处理转发后,由编写的上位机java程序获得数据,并存入数据库。
再从数据库中调出数据处理,进行相关验证及评价。
实验通过加载串口通讯javaAPI--javacomm20-win32包编写上位机程序,在此仅以COM1口数据捕获部分代码为例。
(只略写出主要部分,省略了异常捕获的代码):
串口定义部分:
/*检测系统中可用的通讯端口类*/
staticCommPortIdentifierportId;
staticEnumerationportList;
InputStreaminputStream;
/*声明RS-232串行端口的成员变量*/
SerialPortserialPort;
/*线程*/
ThreadreadThread;
数据捕获部分:
通过按钮的点击事件打开串口之后,由串口数据触发数据捕获程序:
/*点击按扭所触发的事件:
打开串口,并监听串口.*/
publicvoidactionPerformed(ActionEventevent)
{
if(event.getSource()==btnOpen)
{
/*获取系统中所有的通讯端口*/
portList=CommPortIdentifier.getPortIdentifiers();
/*用循环结构找出串口*/
while(portList.hasMoreElements())
{
/*强制转换为通讯端口类型*/
portId=(CommPortIdentifier)portList.nextElement();if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL)
{
if(portId.getName().equals("COM1"))
{
……
/*设置串口监听器*/
try
{
serialPort.addEventListener(this);
}
……
/*侦听到串口有数据,触发串口事件*/
serialPort.notifyOnDataAvailable(true);
}//ifend
}//ifend
}//whileend
readThread=newThread(this);
readThread.start();//线程负责每接收一次数据休眠20秒钟
}
}//actionPerformed()end
/*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/
publicvoidserialEvent(SerialPortEventevent)
{
/*设置串口通讯参数:
波特率、数据位、停止位、奇偶校验*/
try
{
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
}
……
byte[]readBuffer=newbyte[20];
try
{
inputStream=serialPort.getInputStream();
}
……
try
{
/*从线路上读取数据流*/
while(inputStream.available()>0)
{
intnumBytes=inputStream.read(readBuffer);
}//whileend
str=newString(readBuffer);
/*接收到的数据存放到文本区中*/
in_message.append(str+"\n");
in_message.setLineWrap(true);//激活自动换行功能
in_message.setWrapStyleWord(true);//激活断行不断字功能
}
……
}//serialEvent()end
4.实验总结:
该系统采用MSP430F149芯片、温/湿度传感器实现的数据采集系统具有一定的通用性,它通过片内的A/D转换通道与外部的采集传感器进行连接,由于外部与传感器进行连接,获得是标准的电流信号,这样使采集系统具有很大的通用性,只要接不同的传感器就可以采集不同数据源的数据,做到系统与数据源的无关性[1]。
采集系统采集到数据后,通过GPRS模块转发到Internet,上位机程序再从串口读取数据存到数据库中处理分析。
既降低了系统的负担,避免了采集系统的海量存储器,也为以后分析数据提供资料。
参考文献
[1]秦龙.MSP430单片机应用系统开发典型实例.中国电力出版社,2005.
[2]祁国梁.基于单片机的GPRS无线通信协议[D].山东省科学院海洋仪器仪表研究所,青岛,2007.
[3]杨雷,郑国恒,王立端.基于GPRS的远程雨量监测系统[D].郑州大学,物理电子学2005.
[4]张浩,孟开元,曹庆年.基于MSP430和MAX1452的温度补偿系统设计[D].西安石油大学计算机学院,2006.