1、 摘 要随着网络的高速发展,各种设备的智能化越来越明显。通过 TCP 网络通信,可以实现 PT100 温控系统的智能化。在该温控系统中,PC 机应用程序端通过网络来实现对温控系统温度信息的提取和控制。系统使用 STM32F3 作为主控芯片,以 MAX485 芯片作为 RS485 串口通信硬件载体,以 ENC28J60 作为以太网通信控制芯片,使用开源的 uIP作为 TCP/IP 软件协议栈,使用 TC35 双频的 GSM 模块作为应急通信方式,以发送短信的形式将系统当前信息告知用户。本系统基本实现了温度的检测,RS485 通信,TCP 通信,GSM 应急功能。若同时采用 GPRS 模块,便能实
2、现无线网络通信。关键词:PT100,RS485,网络 TCP,GSM目 录摘 要 IABSTRACTII第 1 章 绪论 11.1 引言 11.2 设计的目的和意义 11.3 系统相关硬件简介 .11.3.1 PT100 的简介 11.3.2 系统相关其它重要芯片简介 .21.4 系统相关开发软件简介 31.4.1 Keil 软件的相关简介 31.4.2 Visual C+6.0 软件的相关简介 41.5 本设计主要内容和涉及技术简介 4第 2 章 系统要求及硬件组成 .62.1 设计要求 62.1.1 功能要求 62.1.2 成本要求 .62.2 系统硬件组成 62.2.1 温度采集部分 .
3、62.2.2 模数转换部分 .72.2.3 RS485 通信部分 82.2.4 TCP 通信部分 82.2.5 GSM 通信部分 92.3 软件部分 102.3.1 温度转换部分 102.3.2 RS485 通信部分 112.3.3 TCP 通信部分 122.3.4 GSM 通信部分 132.3.5 上位机 PC 端应用控制软件部分 13第 3 章 系统测试 .143.1 系统下位机测试 143.1.1 系统下位机硬件测试 143.1.2 系统下位机软件测试 143.2 系统 PC 端软件测试 163.3 系统整体测试 18结 论 .20参考文献 .21附录 系统核心程序 .22致 谢 .46
4、长沙学院毕业设计第 1 章 绪论1.1 引言随着科技的快速发展,人类对生活要求的提高,各种设备的智能化层出不穷。在日常生活中和工业应用领域对于温控系统的智能化要求也越来越高,越来越迫切。然而以往的温控系统通信功能单一,甚至无通信能力,导致实时控制无法做到。在人类无法直接接触的环境中对温控系统的操作尤为困难,甚至无法实施。无法将过去的温度和控制信息实时记录下来,导致对历史数据无法进行再次调阅分析处理,不便于日后系统的相关参数调整和设置。随着 PC 机的普及和智能手机的普及,为温控系统的智能化控制提供了有利的条件。互联网的高速发展使温控系统网络通信变得可行,本温控系统的设计就是温控系统向智能化网络
5、化发展的一个小缩影。1.2 设计的目的和意义传统的温控系统,需要人实时对其温度数据进行人工记录,需要人工干预实现温度的调控。在恶劣的环境下,人工对温控系统进行操作变得尤为困难,实时性也变得难以保证。为了达到温控的实时性和有效性,解决无需人实时监控,融入通信能力到温控系统中变得尤为重要迫切。在互联网高速发展的今天,通过网络来实现通信和控制无疑是最好的选择,为了降低成本和兼容,本系统将 RS485 通信能力也作保留。该温控系统设计旨在实现小型嵌入式系统远程控制网络化,智能化。通过对温控系统的网络化,来体现其它系统实现网络化的一般方法。一般小型嵌入式系统的网络化、智能化的简单实现方案是本系统设计的根
6、本出发点,也是最终目的。1.3 系统相关硬件简介1.3.1 PT100 的简介PT100 是一种铂热电阻式传感器,采用对温度有良好感知的铂金属来作为制作材料。铂相比其它金属对温度的感知能力具有更高的灵敏度,相对于其它金属其可延伸性和导电性要更好,而且其耐高酸高碱耐融,更重要是它的稳定性在温度相同条件下电阻值具有可重现性。PT100 意味着此温度传感器在温度为摄氏 0 度时其电阻值是长沙学院毕业设计100,电阻变化率为 0.3851/ 1。在实际应用中,需要在一稳定的温度中对其进行调零,采用可调精密电阻作为电桥平衡电阻,以达到预期的相对精度。由于金属固有的缺陷,事实上 PT100 的温度变化并不
7、和电阻值成绝对的比例关系,而是呈略微抛物线关系,但是在一定的温度范围内它却是呈一定的比例关系,这点需要设计者在软件中进行自动调节。下面为铂电阻的阻值随温度的变化而变化的计算一般公式-2005);ENC28J60Bank = (ucAddress unsigned char ENC28J60Read(unsigned char ucAddress)ENC28J60SetBank(ucAddress);return ENC28J60ReadOp(ENC28J60_READ_CTRL_REG, ucAddress);void ENC28J60Write(unsigned char ucAddress
8、, unsigned char ucData)ENC28J60SetBank(ucAddress);ENC28j60WriteOp(ENC28J60_WRITE_CTRL_REG, ucAddress,ucData);长沙学院毕业设计unsigned int ENC28J60_Read_PHYReg(unsigned char ucAddress)unsigned int uiReadValue;ENC28J60Write(MIREGADR, ucAddress);/设定要操作的物理寄存器地址ENC28J60Write(MICMD, MICMD_MIIRD);while( (ENC28J60R
9、ead(MISTAT) /等待操作完成ENC28J60Write(MICMD, MICMD_MIIRD);uiReadValue = ENC28J60Read(MIRDL);uiReadValue |= ENC28J60Read(MIRDH);return uiReadValue;void ENC28J60_Write_PHYReg(unsigned char ucAddress, unsigned int uiData)ENC28J60Write(MIREGADR, ucAddress);ENC28J60Write(MIWRL, uiData ENC28J60Write(MIWRH, uiD
10、ata 8);while(ENC28J60Read(MISTAT) void ENC28J60_Init(unsigned char *ucPMAC)ENC28j60WriteOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET);/系统复位/直接检查 CLKRDY 好像没用,用延时代替Delay_ms(5);NextPacketPtr = RXSTART_INIT;ENC28J60Write(ERXSTL, RXSTART_INITENC28J60Write(ERXSTH, RXSTART_INIT8);/下面设置接收缓冲开始地址ENC28J60Wri
11、te(ERXRDPTL, RXSTART_INIT长沙学院毕业设计ENC28J60Write(ERXRDPTH, RXSTART_INIT8);/下面设置接收缓冲结束地址ENC28J60Write(ERXNDL, RXSTOP_INITENC28J60Write(ERXNDH, RXSTOP_INIT8);/下面设置发送缓冲开始地址ENC28J60Write(ETXSTL, TXSTART_INITENC28J60Write(ETXSTH, TXSTART_INIT8);ENC28J60Write(MACON1,(MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAU
12、S);/MACENC28J60Write(MACON2, 0x00);ENC28j60WriteOp(ENC28J60_BIT_FIELD_SET,MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN);/使能自动 CRC 校正ENC28J60Write(MAIPGL, 0x12);ENC28J60Write(MAIPGH, 0x0C);/ set inter-frame gap (back-to-back)ENC28J60Write(MABBIPG, 0x12);/ Set the maximum packet size which the
13、 controller will acceptENC28J60Write(MAMXFLL, MAX_FRAMELENENC28J60Write(MAMXFLH, MAX_FRAMELEN8);/下面设置 MAC 地址,具有唯一性ENC28J60Write(MAADR5, ucPMAC0);ENC28J60Write(MAADR4, ucPMAC1);ENC28J60Write(MAADR3, ucPMAC2);ENC28J60Write(MAADR2, ucPMAC3);ENC28J60Write(MAADR1, ucPMAC4);ENC28J60Write(MAADR0, ucPMAC5);
14、/ ENC28J60Write(MAADR5, UIP_ETHADDR0);/ ENC28J60Write(MAADR4, UIP_ETHADDR1);/ ENC28J60Write(MAADR3, UIP_ETHADDR2);/ ENC28J60Write(MAADR2, UIP_ETHADDR3);/ ENC28J60Write(MAADR1, UIP_ETHADDR4);/ ENC28J60Write(MAADR0, UIP_ETHADDR5);ENC28J60_Write_PHYReg(PHCON1, PHCON1_PDPXMD); / no loopback of transmitt
15、ed framesENC28J60_Write_PHYReg(PHCON2, PHCON2_HDLDIS);/ switch to bank 0ENC28J60SetBank(ECON1);/ enable interrutpsENC28j60WriteOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE);/ enable packet reception长沙学院毕业设计ENC28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN);#define ETHERNET_MIN_PACKET_
16、LENGTH 0x3C#define ETHERNET_HEADER_LENGTH 0x0E#define IP_TCP_HEADER_LENGTH 40#define TOTAL_HEADER_LENGTH (IP_TCP_HEADER_LENGTH+ETHERNET_HEADER_LENGTH)void ENC28J60_Send_Packet(unsigned int uiPacketLen, unsigned char *ucPacketData)/ Set the write pointer to start of transmit buffer areaENC28J60Write(
17、EWRPTL, TXSTART_INITENC28J60Write(EWRPTH, TXSTART_INIT8);/ Set the TXND pointer to correspond to the packet size givenENC28J60Write(ETXNDL, (TXSTART_INIT+uiPacketLen)ENC28J60Write(ETXNDH, (TXSTART_INIT+uiPacketLen)8);/ write per-packet control byteENC28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, 0x00);if(
18、 uip_len 8);/ read the next packet pointerNextPacketPtr = ENC28J60ReadOp(ENC28J60_READ_BUF_MEM, 0);NextPacketPtr |= ENC28J60ReadOp(ENC28J60_READ_BUF_MEM, 0)uiPacketLen)uiRecvlen=uiPacketLen;/ copy the packet from the receive bufferENC28J60_Read_Buffer(uiRecvlen,ucPacketData);unsigned int rs,re;rs = ENC28J60Read(ERXSTH);rs re)ENC28J60Write(ERXRDPTL, (re);ENC28J60Write(ERXRDPTH, (re)8);