摘要:基于STM32实现了电流型、电压型以及数字IO型传感器接口模块;进行了接口模块的软件设计,说明了详细的固件代码设计。除传统串口外,提供以太网接口,嵌入UDP协议,提供后期开发的便利接口。
关键词:信号接口;传感器接口模块;UDP协议
0 引言
物联网将会是未来很长一段时间内IT产业的发展趋势,一个完整的物联网系统的构成或产业链的划分,目前业界比较统一的观点基本都认为应该包括三个层面:末端设备或子系统、通信连接系统、以及管理和应用系统。即Device-设备、Connect-连接和Manage-管理。由于数字整合的需求日益增长,对作为感知层核心组成元素的传感器数据融合提出了更高要求。如何将传感器连入网络成为一个尤其重要的问题。
传感器通过接口模块接入到相应网络。传感器通过信号接口连接到接口模块,节点以相应的适配模块接收和处理传感器输出信号,并将传感器原始数据转换为网络用户可以识别的信息,最后通过网络通信接口连接到上位机或者任何网络。
传感器感知外部环境,某种敏感变量如电阻、电荷之类参量发生变化,然后经过信号处理,产生可供AD转换的电压或电流信号(目前ADC应用主要还是电压输入,电流模式ADC尚未大规模应用),而后经AD转换为可供处理的数字信号。由于在不同应用场合中会使用到针对上述不同层次接口的传感器,故信号接口标准针对不同层次设计:
层次1:需经过信号调理然后才能输入AD处理,如热电阻、4~20mA电流输出;
层次2:直接符合AD输入要求的,如0~5V电压输出;
层次3:数字信号输出,如开关量、RS232接口输出;如图2所示。
直接输出可以连入网络的接口,比如现场总线接口(如CAN、Profibus、工业以太网)、无线通信接口(如Zigbee、WI-FI)等一般无需考虑信号接口的问题,如需连入不同网络可以使用相应的网关(如CAN转以太网)。
基于此分类依据,传感器输出信号一般有电压信号、电流信号、电阻信号、频率信号、脉冲信号、数字电平信号等。
1 传感器接口模块设计概述
从功能上来讲,接口模块需要完成传感器与应用网络之间的连接,解决传感器的异构性带来的诸多问题,完成从原始信号到数据的数据流过程。总的来说包括传感器接入及激励、信号调理、AD转换/数字滤波、数据处理和网络通信。不同信号输入类型的接口模块在整体功能上是类似的,主要不同在于信号调理部分,以及AD转换的不同要求。接口模块整体功能如图3所示。
信号调理针对不同信号类型设计。传感器原始输出的标准信号接入后,经过信号调理后生成可供ADC处理的信号。有的传感器还需提供激励源。
ADC依据不同应用需求所需的通道数、精度、速度进行选择。可选择外置ADC,系统要求不高或者在一些特殊场合也可使用SOC片上系统的内置ADC(比如TI的MSC1210系列MCU内置24bit sigma-delta ADC,尤其适合处理微弱信号)。
另外需要外扩存储器存储与传感器或者接口模块相关的描述信息,一般可使用EEPROM。鉴于此功能,存储模块芯片的选取就得考虑总线读写速度以及可编程性。由于需要在标准化接口模块正常工作的同时修改Flash中的电子表单,所以存储芯片得支持IAP(在应用编程)功能。
整个模块的核心处理器为MCU或者FPGA,负责对整个模块的逻辑进行控制,可根据不同应用要求选择8位单片机或者高性能ARM处理器或者FPGA可重配置芯片。
网络通讯采用可根据不同应用场合选取不同接口,比如RS485总线、CAN总线、Ethemet、WiFi等。可支持多个接口模块,主机可对从模块进行配置,可自由添加模块。
2 基于STM32的传感器接口模块设计
2.1 电流接口模块设计
以STM32F103系列处理器为核心,外挂ADC采样芯片、以太网接口芯片、RS-232/485接口芯片。模拟电流信号经电流-电压转换电路、电压放大电路、电平匹配电路输入至ADC采样芯片后由处理器采集。ADC芯片采用5V的外置参考电压,提高精确度。EEPROM芯片通过IIC接口与处理器通信。处理器经由串口以及以太网接口与上位机进行数据和控制信息交换。调试接口为20针标准JTAG接口。
电源部分设计为输入24V直流,经线性稳压电路和电压反转电路生成模拟部分需要的5V电压和数字电路需要的3.3V电压。电源输入的24V电压可以直接供给工业上常用的二线制电流输出传感器做激励。
整体结构如图4所示。
下面介绍具体电路设计。电源部分为+24V-DC输入经LM2596(IC1)开关电源芯片产生+5V-DC电压,+5V电源直接供给模拟部分电路。IC2为LM1117—3.3线性稳压芯片,将5V电源变换为3.3V供给数字电路。数字地与模拟地隔离,通过10 μH电感或者磁珠连接,可以抑制数字电路对于模拟电路部分的干扰。LED1和LED2分别用来指示两部分的电源接通状况。
输入的电流由100Ω精密负载电阻变换为电压信号,由同向放大电路放大至AD转换所需要的电平,增益可以由电位器来进行微调。运放采用AD8551(U$3),其在低压差单电源情况下表现完美,具有极低失调电压(5 μV)、极低的温漂(0.03μV/℃)以及轨对轨输入输出的特性。
+24V电压经过78L12Z(IC4)稳压产生12V电源供给AD586(U52)芯片产生高精度5V基准信号,输入到AD采样芯片ADS8344(U$1)的参考输入端。AD586的trim端连接10k电位器,可以对输出的基准电压进行精密调节。四路电流采样信号经前级放大后直接输入到AD芯片CH0-3通道,ADC由数字SPI接口连接MCU进行控制采集。
EEPROM存贮芯片采用241c64(IC5)芯片,具有64kbit存储容量,外部接口为I2C与MCU相连。ARM芯片的IO口经MAX3232电平转换芯片,将3.3V逻辑电平转换为RS-232标准的电平信号,接入DB-9插头。MAX3232采用3.3V供电,具有低功耗、高数据速率、增强型ESD保护等特性。 ENC28J60是SPI接口的以太网控制器,其SPI接口与MCU的SPI对应IO口相连,输入和输出分别为一组差分信号,接入带有1:1脉冲变压器的10BASE-T RJ-45插座。时钟由外部提供,使用25M晶振。
2.2 电压/数字IO接口模块设计
电压接口模块与数字开关量接口模块基本沿用电流接口模块的设计。不同之处在于模拟输入部分无需经过电流一电压转换,直接经运放输入ADC。数字量接口直接由MCU的IO端口引出。传感器输出的电压直接输入同向放大电路至AD转换所需要的电平。此处运放就相当于一个电压跟随器,显著特点就是,输入阻抗高,而输出阻抗低,可以提高驱动能力。
2.3 接口模块硬件实现
整个板子尽量使用紧凑布局。电源以及传感器接口布置于左侧,使用螺丝接线端子引出。串口以及以太网口布局在右侧。整个模拟与数字部分基本分开而设,有效避免干扰。布局基本没什么变化,左边螺丝接线端子往外移了一些,主要是考虑到外壳封装上后螺丝端子可能不够外露的问题。
3 基于STM32的标准化接口模块固件设计
标准化接口模块的固件程序包括主程序、配置程序、ADC数据采样程序、EEPROM读写程序、以太网网口驱动程序、UDP协议栈的嵌入。
接口模块中共用到三种通信总线。ADC以及以太网控制器与MCU间为SPI总线,EEPROM与MCU间为IIC总线,另外接口模块提供UART串口对外通信。以外网嵌入UDP协议。
3.1 AD数据采样
AD数据采样是整个系统接口模块固件设计的核心工作,也是实现传感器信息获取的关键所在。该模块负责将采集到的传感器信息转化为数字信号。
AD数据采样主要完成如下的几个功能:
(1)初始化。该工作主要完成对一些物理器件的引脚功能、工作模式等进行预定义;
(2)AD转换。通过软件启动模数转换芯片,完成模拟信号到数字信号的转换;
(3)数据接收和发送。实时采集转换后的信息,同时发送相应的控制命令,以切换采集通道。
在数据采集过程中,我们可能需要切换不同通道,从而实现对多个传感器信息的获取。实际设计中,控制器会在采集本次通道转换结果的同时,发送下次采集通道的编号。详细操作步骤如下:
(1)需采集的通道地址(Ch)通过SPI接口写入ADS8344的相应寄存器,应用设定的波特率来设置接口传输速度;
(2)通过MCU设置GPIOB12(作为AD的CS信号)为低来启动ADS8344进行数据采样和转换,数据传输方式为SPI发送模式;
(3)当数据发送完毕后,设置GPIOB12为高电平,ADS8344结束数据传输,进入空闲模式并等待MCU的指令。此外,固件代码中设置了对ADC进行软标定的程序。这样可以通过精密信号源对ADC进行标定,提高采样精读。标定信息存储于EEPROM中。功能实现代码如下:
3.2 以太网口驱动
同样需要先进行SPI接口和GPIO端口初始化,与之前ADC类似,只不过这里用SPI1口。GPIO初始化也不再多说。以太网驱动部分主要是数据包的发送/接收,缓冲区的读写,物理层的写等函数。SPI口的发送/接收函数如下:
3.3 控制指令
串口指令格式
[起始标志][指令][指令参数1]<指令参数2>…[结束标志]
指令示意:
00 01 01 FF读取通道1的电流值
00 04 C0 A8 89 03 FF设置IP地址为192(0xC0).168(0xA8).137(0x89).3(0x03)
00 05 2E E0 FF设置UDP端口为12000(0x2EE0)00 07 10 11 11 10 14 19 FF往EEPROM的地址0x0110写入数据0x49
00 09 19 18 FF将数字IO1设为输出,高电平,IO2/3输入,IO4输出,低电平以太网支持串口的指令0x01-0x03及0x07-0x0a,其参数、功能和返回值与串口一致。不支持用以太网口配置网络参数。
4 结果与总结
4.1 调试结果
在串口助手环境下调试。以太网参数设置:
发送指令00 04 C0 A8 89 03 FF设置接口模块IP地址为192(0xC0).168(0xA8).137(0x89).3(0x03)
发送指令00 05 55 66 FF设置接口模块UDP端口为21862(0x5566)
发送指令00 06A1 B2 C3 D4 E5 06 FF设置接口模块MAC地址
Ping接口模块:cmd ping 192.168.137.3(串口已经设置好ip和端口号)
以太网采样和读写EEPROM:发送类似同样指令完成采样以及读写操作
4.2 总结
本文以传感器的输出信号类型为分类依据,基于该信号接口分类给出了基于STM32的传感器接口模块的硬件设计,并实际设计实现了电流型、电压型以及数字IO型模块,给出了相应的硬件选型以及电路设计与实现;进行了接口模块的软件设计,说明了详细的固件代码设计。除传统串口外,提供以太网接口,嵌入UDP协议,提供后期开发的便利。