当前位置 博文首页 > 小幽余生不加糖的博客:手机APP物联网远程控制开关

    小幽余生不加糖的博客:手机APP物联网远程控制开关

    作者:[db:作者] 时间:2021-06-17 12:18

    附带下载链接:里面有硬件软件和论文资料
    https://download.csdn.net/download/qq_41600018/12018989
    作者:Xiou

    摘 要

    随着物联网技术应用到了楼宇自动化建设和工业现场控制之中,远程控制开关有着十分广阔的应用前景,因此物联网开关成为了智慧楼宇的核心组成部分。在工业4.0的推动下,这就要求普通的开关不仅只用于控制开关,还要对现场或者恶劣环境的数据进行采集和上传。因此,本设计在物联网的基础技术上设计一款远程开关实现对工业远程控制和智能家居远程控制的研究工作。
    本设计将在传统RTU远程终端单元的基础上,另行设计一款可以有线直连、无线连接、远程公网访问、带采集功能的一组开关设备。结合RTU优点使其可以应用于物联网行业,包括工业测控、智慧家居、智慧农业
    目 录
    1 绪论 1

    1.1 课题背景 1
    1.2 国内外研究情况 1
    1.3 研究意义 2 2 系统总体方案设计 3
    2.1 设计主要工作及基本要求 3
    2.2 方案论证与选择 3
    2.3 系统框图分析 5
    2.4 系统总体方案设计 7 3 系统的硬件设计及系统流程 9
    3.1 单片机核心电路 9
    3.2 电源模块电路 10
    3.3 模拟输入电路 11
    3.4 数字输入电路 12
    3.5 安信可A9模块 13
    3.6 485通信模块 14
    3.7 数字输出模块 14
    3.8 串转并和扩展模块 15
    3.9 串口转以太网模块 16 4 系统的软件设计及其流程 19
    4.1 下位机主要程序 19
    4.2 上位机和web网页 26 5 设计过程中遇到的问题和解决方案 36
    5.1 硬件问题和解决方案 36
    5.2 软件问题和解决方案 37 6 结论 39

    1 绪论

    跟随着物联网的发展,物联网无线传输技术和产品在智能电网领域、民用商用公共计量领域、工业现场控制领域、智能家居和智慧农业领域得以应用和发展。其可以作为物理系统信息本地数据采集、传输和分析的载体,联网而实现数据的物联网化。并且新兴的物联网产业链则是受到了全世界各个国家和各个技术领域的高度重视,并作为战略性新兴产业关注和发展。基于物联网的智慧服务和产品将成为下一代互联网时代的特征。物联网远程开关的设计诞生在这个物联网潮流下,其可以实现跨空间对设备进行开关控制,有利于快速及时对设备进行开关控制、提高设备控制效率和节省人力。除了对现场设备的开关控制,在作为智慧楼宇,智慧家居中也起到智能远程控制的作用。同样,基于这种开关设备,对于轻量级的工业现场还具备数据采集传输的功能。这种物联网设备成功应用于智慧楼宇、工业控制和智慧农业等各个领域。本次设计通过设计一款物联网远程控制开关,为今后工业4.0,智慧楼宇的兴起都起到了一些推动作用。
    1.1 课题背景
    物联网远程开关作为一种联网数据采集控制设备,在其设计及制造过程需要的技术理论知识涵盖了数字电路、模拟电路、传感器、控制算法、滤波算法、电磁兼容、通信技术和计算机科学等众多学科[1]。其联网控制及数据采集上传的方案作为工业控制领域和今后智慧楼宇的发展有着较为广泛的应用前景,会逐渐成为国内外高科技术企业和众多高校院所的研究方向和热点。
    1.2 国内外研究情况
    全球的物联网市场发展势头迅猛,随着2020工业4.0概念的提出,全球各个发达国家包括德国、美国、俄罗斯等国的远程控制技术和物联网技术的标准、应用、服务都还处于初步发展阶段。其中德国工业4.0概念与国内相近,成竞争趋势。在21世纪亦或者未来几年,物联网技术的应用市场规模会出现快速增长,包括其分支工业控制、智慧农业、智慧楼宇等等也相继普及。到2023年预计全球物联网市场规模将会达到2.8万亿美圆。对此,全球各个发达国家相继出台政策对于物联网的研究进行战略布局,抢占新一轮信息技术革命的先机。例如,美国就有了“智慧地球”计划以物联网技术为核心、欧盟的十四点行动计划、日本的“U-Japan计划”、韩国的“IT839战略”和“u-Korea”战略、新加坡的“下一代I-Hub”计划、台湾的U-Taiwan计划等等都将物联网技术作为当前的战略目标;前瞻产业研究院发布的《2018-2023年中国物联网行业细分市场需求与投资机会分析报告》大致预计,2017年全球物联网设备的数量到达84亿,比2016年的64亿增长了31%,预计2020年全球物联网设备数量将达到204亿[2]。
    我国国内方面,得到技术和人才引进的受益和政府企业资金的响应支持,在互联网+和双创等带动下,国内物联网虽然起步较晚,在工业控制领域和智慧楼宇方面的物联网技术应用和研究也取得了一定的成果。在企业、高校、科研院所各界共同努力之下,国内逐步形成了一套芯片、元器件、软件、电器、物联网服务业等较为完善的物联网产业链,能够基本实现基于移动通信网络部署到机器。生态体系逐渐完善。截至到如今,国内的电信企业也开始启动NB-IoT网络建设即窄带物联网,截至2017年全国网络基站数量规模远超40万站,商用网络也进入了部分省市。很多地方政府都支持NB-IoT发展,例如江西鹰潭等地,都在推进超过十万台的基于NB-IoT的智能水表的安装;西藏还将尝试将NB-IoT物联网技术引进到牦牛市场。在工业级远程控制领域,有人物联网、大唐电信等公司也相继设计了一系列GPRS远程控制器[3]。
    1.3 研究意义
    物联网远程开关的设计可以应用在智慧楼宇的建设当中,实现对灯具,动力,插座的控制[4]。不仅仅用在智慧楼宇当中,同样这种控制方案及方法可以应用于工业控制领域、智慧农业的建设当中,实现了对工业操作现场的数据进行采集和远程传输,实现直连、局域网、远程都得以应用,解放大量人力资源,减少了生产成本,而且设计的电路板体积小,便于安装和操作。物联网远程控制开关是物联网应用的一个分支,其发展对将对国内外物联网技术和产业,工业控制领域起到推动的作用,完整的控制技术最终将实现互联网、物联网服务行业的智能化,同时也能奠定一个国家在该领域的地位。

    2 系统总体方案设计

    2.1 技术指标 本次毕业设计的主要任务是通过设计软硬件以及相应手机app程序、上位机软件和网页实现一款物联网远程终端控制开关系统,针对较长距离和工业现场环境恶劣,增加远程数据采集和通信的功能。其中,包括对设备的数字量或开关量的输出与输入,模拟量的输入还有远程通讯模块的设计,以及设备运行状态指示灯,预留出响应扩展口用以应对工业现场复杂环境。
    主要工作包括:硬件部分主要包括:主控芯片单片机、网络通信芯片、稳压芯片、串口通信芯片、GPRS通信芯片、隔离芯片以及其它元器件的选型;原理图和PCB的设计和绘制;元器件检测和焊接;软件部分包括:手机APP的编写;GPRS通信调试;继电器算法编写;ADC采集算法编写;串口通信算法编;上位机软件编写;网页制作及其相应参数调试;最后整体测试联调。
    基本要求: (1)手机APP、上位机; (2)网络通信带网口、GPRS或NB_IoT通信[5]; (3)内置8路数字输入、8路数字输出;
    (4)一路RS485/232接口,通信协议为标准MODBUS; (5)四路420mA或者05V模拟输入;支持外部IO接口扩展。

    2.2 方案论证

    2.2.1 GPRS模块 方案一:SIM800C模块,可做TCP/UDP客户端与服务器端[6];支持Unicode,UTF8;可以发送JPG图片;接收彩信的标题、文本和图像数据时我,可以自建一个MMS文件,用户可以通过设置MMS目的地是电话号码或是电子邮件;软件支持录音、DTMF检测、SSL、蓝牙3.0.根据需求,SIM公司的SIM800C模块完全满足设计性需求。
    方案二: 安信可A9,是安信可公司最新出的 GPRS
    数据传输模块,主要应用于物联网、车载、电力环境检测等工业现场和领域。主要功能有:具有标准的AT和TCP/IP命令接口;数字音频和模拟音频以及语音编码;支持GSM/GPRS四个频段,包括850/900/1800/1900MHz;GPRS
    Class 10;支持SMS短信和语音通话。
    在方案一和方案二两种不同模块进行对比之后,发现从功能上两者都能满足设计开发需求。通过调研发现SIM800C的单价普遍比安信可A9高出12元;从功耗方面比较,SIM800C多了个蓝牙功能,普通功耗将会上升100200mA。所以最终考虑选择国产安信可A9模块。模块54个引脚,比之前42脚的A和SIM800C多出12个引脚,对后期二次开发奠定了硬件基础。
    2.2.2串口转以太网模块 由于STM32F103C8T6内部没有串口转以太网外设,完成设计功能需要一个串口转以太网模块。 方案一:卓岚1003物联网芯片,单芯片设计方案,能够把TTL/USART串口单片机连接至以太网;支持自动协商功能,支持自动交叉线检测;并且ZLAN1003内部固化TCP/IP协议栈,不需要我们再做TCP/IP协议移植的二次开发;支持发送连接上的芯片或者设备的MAC地址功能。ZLAN1003内部具有一个10M/100M的以太网接口,并且芯片内部已经集成PHY功能,应用的时候不需要外加PHY芯片,完全满足设计需求。
    方案二:
    W5500,其拥有全球唯一的全硬件TCP/IP协议栈专利技术,能解决部分嵌入式以太网的接入网络的难题,开发简单好用,安全和性能稳定,是物联网设备的主要解决方案。同样具有TCP/IP协议栈;支持以太网MAC。支持嵌入式操作系统:Linux和RTOS等等实时操作系统。
    尽管方案一方案二功能都能实现,方案二的W5500芯片性价比高。但我们选择了方案一的卓岚1003.同样从成本考虑,卓岚1003的成本,开发成本相对于W5500来说低一点。ZLAN1003的产品公司已经开发出一套自定义的web,可以通过web的方式设置IP地址和波特率等参数,还具有Modbus网关功能,更加适合应用于工业现场。
    2.2.3继电器驱动 方案一:通过STM32管脚直接控制输出继电器 方案二:利用串口转并口芯片74H164驱动继电器 方案一用单片机管脚直接控制输出继电器方便程序开发,软件容易实现,但是会过分占用单片机资源。本设计输出八个继电器,用方案一就会占用单片机八个引脚。而使 用串转并芯片,有效的避免了单片机管脚的资源浪费。通过两个引脚就可以控制74H164输出八位并行信号,从而控制继电器吸合。物联网远程控制开关采用方案二作为驱动继电器的工作方式。
    2.2.4下位机开发工具 方案一:使用德国Keil公司的Keil5 for ARM 方案二:使用IAR Systems的IAR Embedded Workbench
    作为主流的嵌入式软件开发环境KEIL和IAR都具备各自的优点和缺点,本次设计主要采用KEIL来编译程序。主要是由于IAR生成的工程文件用其它版本或者低版本的IAR打开会出现一些意想不到的错误,存在相当严重的版本不兼容问题,KEIL虽然编译速度与IAR相比稍逊一筹,但是KEIL不存在这种版本不兼容的严重问题,因此,考虑到下位机程序后期不断的更新和迭代过程出现程序频繁移植的情况,所以程序编译环境选择KEIL。并且keil5学习资料较为丰富,因此选用方案一。
    2.2.5库函数 方案一:使用标准库函数开发 方案二:使用HAL库函数开发 ST公司为其STM32系列单片机开发提供以上两种开发库。对比而言,标准库较HAL库出现的更早,两者结构和调用接口的方式大致相似但是却不兼容;由于标准库出现较早,因此标准库使用者更多,并且广泛使用与STM32F1系列的单片机的开发中;使用和学习资源丰富。HAL库,需要搭配ST公司最新推出的STM32
    CubeMX图像化代码编辑生成软件,为开发者提供了很大程度上的方便,其能够实现大跨度的不同产品之间的移植性问题。但主要原因是在程序初期开发阶段,HAL会对开发程序员存在一些小问题,出于设计的稳定安全可靠,此次设计使用标准库函数开发。
    2.3 系统框图分析 物联网远程控制开关的系统硬件框图如图2-1所示。电源模块由外部+12V电源输入直接给继电器供电,一路经过LDO芯片将电压转化为+5V,给485芯片、串转并芯片提供电压;另一路经过低功耗大电流驱动的电压转换芯片MIC29302将电压转化为+4V,为GPRS模块提供电压;+5V再经过LDO芯片转化为+3.3V为单片机和串口转以太网芯片提供电压;还有一路+3.3V转化为+1.8V为串口转以太网芯片提供外部电压。通信模块主要是安信可A9模块、485/232模块和串口转以太网模块。下载和调试模块为SWD模式,节省了不少硬件成本。输入模块有按键复位、八路光耦输入和四路模拟输入,全部直接由单片机管脚输入。板载输出部分是继电器输出,相应做了输入保护和输出隔离电路,防止漏电事故发生。
    物联网远程控制开关系统的主要功能框图如图2-2所示,由单片机作为控制器通过IO组件采集到设备的数据并通过485进行传输,通过GPRS通信或者TCP/IP协议上传到云端服务器,用户端可以通过云下设备对控制器发送指令来控制远端的设备和仪器。

    2.4 总体方案设计

    > 2.4.1 芯片 主控芯片:主控制器选择STM32F103C8T6这款32位单片机,该单片机是一款基于ARM Cortex-M3内核的32位控制器,工作电压为+3.3V,速度72MHz,具有三个串口,2路12位的AD转换器,功能齐全,完全满足设计需求。并且资源相当丰富,便于开发。比起其他同类型的32位单片机成本更低。非常适合工业领域[7]。
    > RS485通信芯片:选用的是美信公司的一款市面上最常见的RS485芯片,MAX485。开发简单,只需要一个滤波电容和两个保护二级管就可构成完整模块。可以直接接入单片机管脚控制和收发数据。经过大量实验测试,其抗干扰能力比较强,适合作为工业领域的远程传输芯片。
    > RS232通信芯片:美信公司的MAX3232,它是具有两路输出驱动器和两路输出接收器的芯片,意味着拥有两路输出RS232信号电平,具有低压差发送器输出及,硬件电路简单,仅需要四个104电荷泵电容即可,其功耗比MAX232低,一般用于工业和航空领域,而MAX232一般用于商用或者民用级别的产品开发。
    > 2.4.2 电源 电源芯片:具体电路主要采用的是1117系列芯片,低压差线性电压调节器系列芯片,在LDO系列芯片中占据主要地位。例如,ASM1117、BL1117、LM1117等。输出电流一般都在1~1.5A之间。体积小,成本低,方案选择ASM1117系列。选用ASM1117-5.0,ASM1117-3.3,ASM1117-1.8作为主要电源芯片。对于有功率要求的GPRS模块,选择主流的GPRS供电方案,用MIC29302芯片提供电源转换。GPRS模块要求输入电压在3.6V~4.2V之间,电流峰峰值可达2A。MIC29302也是一款低压差稳压器,与1117系列不同的是其输出电压可调,能够稳定输出电流3A,到达了驱动GPRS模块的能力。
    > 电源供电方案主要由四部分组成:一是+12V电压直接供给继电器,另一部分+12V电压经过ASM1117-5.0转化为+5V给485芯片、232芯片和74H164供电;二是+5V经过ASM1117-3.3将电压转化成+3.3V供给单片机和串口转以太网芯片ZLAN1003;三是一路+12V经过MIC29302转换成+4V供给GPRS模块;四是+3.3V经过ASM1117-1.8转化成+1.8V给串口转以太网芯片ZLAN1003提供外部电压。
    > 2.4.3 下载调试电路 作为STM32单片机的主要几种下载方式:ISP下载(即串口下载)、JLINK和STLINK。但是串口下载不能在线仿真和调试。其调试方式主要有J-TAG和SWD两种。由于串口下载方式不能在线调试和仿真,因此会对后期的调试造成不便,所以不选择它作为主要下载方式。JLINK下载方式和STLINK下载方式都支持在线仿真调试且支持市面上的大部分ARM内核芯片,而且都支持和具备J-TAG和SWD两种调试模式。但是两者存在不同的是J-TAG仿真需要下载工具有20个引脚,而SWD只需4个引脚,对成本控制的考虑,选择使用SWD调试模式对主芯片进行程序下载和仿真调试。
    > 2.4.4 模拟信号采集 为降低成本和增加设备的稳定性,电流信号由大功率采样电阻将其转化成电压信号,再经过分压电阻输入单片机管脚。
    > 2.4.5 数字信号采集 数字信号采集方案用的是光耦隔离的特性,用两组光耦芯片作为数字输入,输入范围为0~10V,并带输入保护功能,光耦芯片通过输出开关量判断导通与否,单片机直接判断开关量的输入。
    > 2.4.6数字信号输出 输出采用继电器方案,利用继电器小电流可以控制大电流的特性来控制输出开关量,本次设计采用的是+12V 5A的八组常闭继电器,输出用TVS做阴极和阳极之间的保护,可以直接控制功率小的电器设备。成本低,而且自带隔离功能,非常适合开关场景设备的开发。
    

    3 系统的硬件设计

    > 3.1 单片机核心电路 整个硬件部分核心电路是以ARM公司推出的 Cortex-M 系列微处理器 STM32F103C8T6及其最小系统作为核心电路。该芯片性能稳定,开发简单,芯片制造厂商ST公司提供了相当丰富的标准库函数,大大缩减了开发工作量,该单片机的工作环境符合工业级芯片标准,环境温度-40~+105℃,非常适合工业领域的开发。它的最小系统电路主要由以下电路组成:
    > 复位电路:由阻容器件组成阻容复位方式,高电平复位,通过复位按键接入单片机复位脚,按键复位。
    > BOOT模式选择电路:STM32单片机的每块芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的高低电平状态决定了芯片复位后程序开始从哪个区域执行。这里我们将B00T0置低,BOOT1用作指示灯控制。
    > 外部晶振电路:晶振选用8MHz,用1M电阻做阻抗匹配。
    > 单片机电源的滤波电路:简单滤波电路就是在单片机的每个VCC管脚接上0.1uF的滤波电容。要注意的是,电容在电路上尽可能的接近电源脚,否则会失去滤波效果,导致单片机运行效果不佳。
    > 下载与调试电路:下载和调试模块选择的是四线SWD下载模式,该模式支持在线仿真,比J-TAG模式节省硬件资源。
    > 运行灯电路:两组电源指示灯,一组状态指示灯。
    

    3.2 电源模块电路
    电源电路如下图所示,+12V供电分成两路,一路经过MIC29302转换成+4V,一路经ASM1117-5.0转换成+5V,再经过ASM1117-3.3转化成+3.3V,再经过ASN1117-1.8转化成+1.8V。参考相应数据手册可以计算出滤波电容和带负载电容大小。MIC29302输出可调电压公式为:
    Vo=1.24*(1+R7/R8) 式(3-1)
    本设计中R7选为750欧,R8选为330欧,对应输出+4V电压。

    图3-2  电源模块电路

    3.3 模拟输入电路
    板载四路模拟输入原理图如下所示,阻容搭建模拟采集电路转换成STM32单片机可以识别出来的电压信号,再进行解码转换。当输入模拟电压信号0+5V时,电压不会被采样电阻分压,经过后面两个精密分压电阻分压,转换成0+3.3V电压,直接送给单片机,单片机由12位ADC转换器转换解码。当输入的是电流信号4~20mA时,经过大功率的采样电阻转换成电压信号,再由分压电阻转换成电压。不管什么信号都必须经过滤波电容滤波才能进入分压电路,当电流信号进入时,在单片机输入管脚接入1uF的电容,处理掉输入电流信号带来的干扰信号[8]。

    图3-3 模拟输入电路电路

    3.4 数字输入电路
    数字输入电路如下图所示,由外部输入0~10的逻辑电平送给光耦芯片,通过光耦隔离的特性判断是否有信号输入。光耦隔离芯片选用的是东芝公司的TLP532-4。电路之间的信号输出,使输入端与负载完全隔离。输入模式为AC/DC输入,适合应用于工业现车。有输入电压时二极管端发光三极管被导通,上拉+3.3V电压经过限流电阻直接给单片机,单片机接收到高电平信号便完成一次数字式输入。此处应该注意的是三极管两端必须加上1uF电容,防止电路电压突变直接进入单片机,烧毁芯片。

    图3-4 数字输入电路

    3.5安信可A9模块
    此模块电路在整个系统中其着主要的通讯作用,模块主要由A9芯片、GPRS天线、开关电路、状态指示灯电路和SIM卡座电路组成。原理图如下所示。
    1)天线:作为高速信号的输出,在进行天线的PCB设计时要求考虑阻抗匹配,天线单层走线,用地线包围,防止外部信号进行干扰。也可以与地接入0.1F的滤波电容和0欧电阻。
    2)开关模块:该部分电路参考安信可A9用户手册A9开关的方案设计,将其设计为软件进行开关操作。此电路用的是NPN三极管8050,主要利用三级管的开关特性搭载开关电路。当三极管基极输入低电平时,A9模块V_IO和IO29输入电平信号,使三极管导通,导通信号进入A9模块PW脚,PW脚高电平2秒以上A9开机。
    3)SIM卡座:安信可A9模块支持SIM卡,不需要外加驱动电路,设计采用Nano卡座,减少了电路板的体积,节省成本。
    4)状态指示灯:模块上分别设置两组状态指示灯,一组指示A9模块运行状态,另一组指示A9模块通讯模式。分别接在A9芯片的IO27和IO28。

    图3-5   安信可A9模块电路

    3.6 485通讯模块
    该电路模块为串行通信接口电路,RS485通信方式为半双工通讯方式[9],模块采用MAX485芯片构成简单的自动收发电路,MAX485芯片只需要在电源处加上滤波电容就可以构成两线制的485通讯模块。通过切换PC15-OSC32_OUT的电平的方式来达到485收发状态的切换。PC15-OSC32_OUT低电平时作为接收状态,PC15-OSC32_OUT高电平时作为发送状态。在输出差分线上用TVS做保护,如果工业现场需要远距离布线,则将120欧电阻R2焊接在电路板上,如果实验室短距离测试,则不用焊接R2。485差分信号线匹配电阻为120欧。原理图如下所示。

    图3-6 485通讯模块电路

    3.7 数字输出模块
    板子上设计有八路数字输出模块,原理如下图示。用一组常开继电器作为大电流触电输出器件。通常选择三极管做驱动器件,MOS管是驱动电压器件,我们这里用功率型NMOS,当Ug>Us时,MOS管导通,即继电器阴极被导通,电流流过线圈,继电器吸合,实现控制目的。注意的是阴极和阳极用二极管保护器起来。这里二极管用1N4001即可。继电器的控制是通过74H164这个串转并芯片扩展IO,单片机通过控制74H164,从而实现控制继电器。实现了仅使用两个单片机管脚实现控制八路继电器,节省了六个单片机IO资源。

    图3-7 数字输出模块电路

    3.8 串转并和扩展模块
    1)串转并电路模块:74H164芯片是串行输入数据,然后并行输出,数据由两个输入端A,B其中一个输入,控制其时钟信号脚,便可以输出8位并行数据[10]。输出的八个数据口直接接在8个继电器驱动的MOS管上,通过软件可实现任意控制。这个方案节省了单片机的六个管脚资源,使用两个管脚别可以控制8个继电器。
    2)扩展模块:设计中将没有用到的单片机管脚资源,分别通过排针引出来,一共九个,PA和PB可做ADC通道采集通道。扩展口留在板子接口处,以方便后续功能升级开发,测试使用,无需配置,方便使用。

    图3-8 串转并和扩展模块电路

    3.9 串口转以太网模块
    ZLAN1003是一款针对物联网应用设计的芯片。他内部集成PHY功能,因此该模块不需要单独添加PHY芯片。芯片的主要功能就是实现单片机的串口到TCP/IP的协议转化,即能将USART收到的数据传到云端/服务器,云端/服务器下发的数据发送到USART。实现这些功能,不用在额外开发底层驱动程序,ZLAN1003已经固化好TCP/IP协议栈程序,通过配置就可以使用。物联网远程控制开关串口转以太网的电路原理图如下所示:

    图3-9串口转以太网模块电路

    1)复位电路:芯片的核心电路之一,官网手册上给的最新参考电路为芯片复位,考虑到成本和PCB板面积大小问题,复位电路采用阻容复位。经过多次实验,在模块上电之前只需手动复位一次即可,模块便可以长期工作。
    2)电源滤波:同大多数芯片一样,先要对电源进行滤波处理。ZLAN有两个电源,可以外部提供+3.3V和+1.8V电压。+1.8V电压也可以芯片自给,但是这种供电方案会导致芯片发热严重,于是便采取外部提供+1.8V电压的方案。即通过一个 ASM1117-1.8 稳压芯片将 VCC3.3V 转化为+1.8V,然后接入芯片的+1.8V引脚供芯片使用。此时,VCC33VI 和 VCC18O 都接外部 ASM1117-1.8 出来的 +1.8V 电源即可。
    3)网口模块电路:我们选择的是集成好的带有网络变压器的HR911105A接口,它的 LINK 和 ACT 引脚连接到 RJ45 的发光LED灯上,用来指示 TCP 连接状态。这里 4 个 49.9 电阻为%1 精度的精密电阻。
    4)速度选择电路:该模块一般有两个工作速度,高速和低速。高速设置方法:SPD0 和 SPD1上拉。图3-9中焊接R79电阻,不焊接 R80电阻。此时模块最高波特率能够达到 115200bps。模块选择高速设置,如原理图所示,方案选择高速。
    5)布线及其降低功耗设计:因芯片内部集成PHY芯片,工作起来后会产生大量的热,为加快散热做以下处理:
    外部供电:即采用外部 ASM1117-1.8 的稳压芯片提供 +1.8V 电源,而不用芯片内部稳压器。原因在于 ASM1117-1.8 的散热性能好于内部带有PHY芯片的模块。但是这个方式将会增加设计一个 +1.8V 稳压器的成本。
    PCB布线时注意晶振应该尽量靠近芯片引脚,并且晶振原理电路板的边沿。不要将网络线 RX-、RX+、TX-、TX+通过晶振附近;RX-、RX+为一对差分线,TX-、TX+为一对差分线,一对差分线应该一起走线,避免以分离走不通的路线;ZLAN1003芯片PCB设计时,如果条件允许可以在底下增加 5 个大的导孔,这样可以增加散热。如下图所示:

    4 系统的软件设计

    4.1 下位机主要程序
    下位机即STM32单片机嵌入式的开发使用的工具是Keil Software公司的MDK5 for ARM;开发语言是C语言;使用标准库函数开发,BOOT模式选择位为BOOT0置低,BOOT1不配置,后面将他扩展成IO口,即程序是从从主闪存存储器区域启动;使用的下载工具是STLINK-V2。
    下位机中主要的程序是:STM32F103C8T6对外部输入420mA、05V信号的采集;A9的开关机和初始化,以及拨打电话和收发短信,GPRS联网操作;ZLAN1003的配置与联网;RS485/232通信操作;控制八路继电器输出的操作。其中单片机的主要作用是:处理ADC采集的数据将其通过A9、串口转以太网上传至服务器或者上位机;判断逻辑输入,读取被控制设备的状态并上传;解析通过RS485/232或者网络传过来的协议,从而控制继电器输出。
    4.1.1 下位机主要程序流程图
    下位机程序是不带操作系统的STM32官方标准库函数程序,主要包括各个模块的初始化:A9初始化、ZLAN1003串口转以太网模块初始化、STM32ADC初始化、USART串口初始化、时钟初始化、GPIO初始化、定时器初始化等。首先A9模块、ZLAN1003模块、时钟、GPIO、定时器在主函数while(1)外面初始化一次即可。在主循环while(1)中主要运行:ADC等待中断程序,一直等待外部信号输入触发ADC中断;光耦模块输入请求程序,将光耦模块程序封装在Data_8number()函数中,用来检测外部是否有数字信号的输入;USART串口中断触发和处理程序,A9、ZLAN1003和RS485/232都是串口通信,实时监测串口是否接受到信号,然后采取,断帧,解析协议处理,通过串口将接收到的上位机信号处理完成之后再做出相应回复或者控制动作,通信协议为标准Modbus协议;状态指示灯驱动程序,指示灯实时显示板子运行状态。
    所有的控制都在串口中断程序里面进行处理,串口中断全部由串口接收事件触发。各个模块具体流程图及其功能如下所示:
    ?74H164驱动程序:
    这部分程序主要实现将驱动信号转换成驱动电平驱动继电器,单片机将信号比如0x55发送给74H164芯片,程序判断是否从高位开始拆解,这块可以人为设置; 下面以大数开始拆解为例,信号到来芯片DA脚拉高,等待时钟跳变,说明一位数据被164内部寄存器处理完成,开始移位进行下一位,直到八位全部输出,大数据在前移位方向向小数据移位,小数据在前处理,移位向前移位。

    ?A9模块程序:
    此模块的功能是GPRS收发,单片机通过串口发送AT指令与模块通信,该模块内部集成TCP/IP、GPRS不需要做单独的驱动,单片机直接通过AT指令控制即可。上电初始化检测是否存在SIM卡,然后主动请求TCP连接,连接上TCP服务器后发送测试指令,然后等待单片机指令,或者等待服务器指令。该模块的开关机和复位都由单片机软件控制。

    ?串口转以太网模块程序:
    此模块是集成好的串口转以太网通信模块。单片机通过USART串口与该模块通信为主要程序,该模块同样支持AT指令。以太网模块上电之后需要配置,可以手动通过串口或者WEB配置,配置完成后向TCP服务器发送数据包检测通讯,完成后向虚拟发送指令测试,最后通过指令测试Modbus TCP。如果上述步骤出现问题则需要重新配置参数。完成后,等待服务器发送数据包或者等待单片机串口发送指令。

    ?数字输入模块程序:
    数字输入模块程序在主循环中已经封装好,直接调用等待触发即可,有信号输入,单片机管脚直接检测到电平变化,做出判断与处理,并上传至服务器或者上位机。

    图4-1-4  数字输入模块程序流程图

    ?模拟输入模块程序:
    模拟输入不用软件判断是否电压输入,硬件将其处理完成直接送给单片机ADC采集通道,然后单片机通过处理,分析上传到服务器或者上位机。

    图4-1-5  模拟输入模块程序流程图
    4.1.2 主要算法和指令介绍
    断帧处理算法:断帧的意思是在串口收到一帧数据后,发生的中断处理。一帧数据可以理解为给单片机一次发来的数据,一个字节或者八个字节,这一个字节或者八个字节的数据就叫做一帧数据。判断一帧数据是否结束就是断帧处理。
    常用如下两种断帧处理方法:时间断帧和协议断帧,设计主要采用时间断帧,主要介绍一下时间断帧法。
    时间断帧法,通过在定时器里对两帧数据的时间进行比较,在一帧数据里面前后的两个数据之间的时间差很短,通过判断这个时间,如果在一个时间段内或者超过一定时间没有数据被接收,基本上可以判断为一帧数据已经结束。定时器处理函数如下:
    串口中断处理函数

    
    ```c
    void USART3_IRQHandler(void)							
    	{
      	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) 
      	  {
         	USART_ClearITPendingBit(USART3, USART_IT_RXNE); //清除空闲中断标志
         	USART3_RBuf[USART3_RBuf_CNT]=USART_ReceiveData(USART3);
         	USART3_RBuf_CNT++;
         	if(USART3_RBuf_CNT>=100) USART3_RBuf_CNT=0;
        	    MBMasterTimersEnable(1);                //开启定时器断帧
        }
      if(USART_GetFlagStatus(USART3, USART_FLAG_ORE) != RESET) 
       {
         USART_ClearFlag(USART3,USART_FLAG_ORE);    //读SR
         USART_ReceiveData(USART3);     
       }
       } 
    定时器中断处理函数
    void TIM3_IRQHandler(void)  
    {
       if (RESET != TIM_GetITStatus(TIM3, TIM_IT_Update))
        {
         TIM_ClearITPendingBit