基于STM32的多功能模拟量输入输出系统设计
2018-03-06夏好广
夏好广
(中国铁道科学研究院 机车车辆研究所, 北京 100081)
现代化高速动车组普遍采用列车网络控制管理系统对车辆进行检测、控制和诊断,其中,网络系统中经常会用到模拟量输入输出模块,如一些温度传感器需要模拟输入模块来采集电压信号或电流信号。然而,对车辆侧的一些控制则需要模拟输出模块来实现,即通过将中央控制器或司机室指令转换为模拟信号来对一些传感器进行控制。模拟信号可以是电压信号也可以是电流信号,其中,电压信号一般应用于短距离传输,电流信号用于远距离传输(常用4~20 mA的电流环[1-2])。目前,大多数模块或系统只针对某一种信号类型进行了设计,而现场设备往往具有多种需求,特别需要通用性更强的模拟量模块。
针对模拟量模块多功能化的需求,设计了一种基于STM32的便携式、多功能模拟量模块。该模块可提供两通道输入信号采集(电流电压模式可切换),四通道输出(电流电压模式可切换),电流范围-20~20 mA连续可调,电压范围-10~10 V可调。
1 系统整体设计
该系统整体结构框图如图1所示。主要由电源模块、INTERBUS模块[3]、控制模块、采样输入、驱动输出及RS485接口电路组成。电源模块主要完成系统所需几种电压的转换; INTERBUS模块工作与从站模式,通过RS485接口与外部通信。控制模块采用基于Cotex-M3的STM32为核心控制器,主要负责控制输入输出以及INTERBUS模块通信。系统工作时通过INTERBUS接收外部指令后由STM32根据指令对输入输出做出控制,完成模拟量采集和输出。
图1 输入输出模块系统示意图
2 硬件设计
2.1 电源模块
系统外部供电采用直流5 V,输入电压先经过带隔离功能的电压变换芯片REC5-0515DRW得到±15 V,然后通过LM317LIPK芯片得到系统内部需要的5 V电压,使用LT1521CS8得到输出通道需要的12 V 工作电压,通过AMS1117-3.3得到核心控制器需要的3.3 V工作电压。电源芯片的输入和输出端加滤波电容和磁珠进行适当的隔离,用于调整电源输出的电阻采用0.1%精度元器件。
2.2 采样输入设计
输入通道设计既能采集压信号又可以采集电流信号,当采集对象为电流的时候,通过一个模拟开关切换到串联的高精度采样电阻以实现电流到电压的转化。输入通道原理图如图2所示,Rm2将电流转换为电压信号。当输入为电压信号时,断开开关,电压信号不经过电阻。电压信号经过AD8253进行放大后送入ADC进行采集。AD8253是一款数字可编程增益仪表放大器,具有高输入阻抗、低输出噪声、低失真特性,可通过A0、A1根据采集对象选择一定的放大比例。ADC转换芯片选用ADI公司推出的针对工业应用的模数转换器AD7606,16位ADC, 标准SPI接口,其输入阻抗均为1 MΩ,采用单电源工作方式,可处理±10 V和±5 V双极性输入信号。8通道同时200 kHz频率采集, 非常适合用于高速、高精度数据采集。AD7606的基准电压通过外部REF引脚获得,为了提高稳定性,选用ADR421 作为AD5062 的基准电压芯片,ADR421利用温度漂移曲线校正专利技术和XFET技术,可以使电压随温度变化的非线性度降至最小。为了便于校正系统误差,利用ADR421的TRIM引脚来在±0.5%范围内调整输出电压,而不影响温度系数。
图2 输入通道电路原理图
2.3 控制模块
STM32系列控制器在各种传感器及信号采集设计中有广泛的使用[4-5],系统选用32 位STM32F103VCT6 作为控制核心,它采用32位Cortex -M3的处理器,主频可达72 MHz,内置256 kB内存,具备丰富的外设资源,可提供睡眠、停机和待机3种省电模式。可靠性高、封装尺寸小而且价格较低,满足该系统功能需求。控制器最小工作电路包括复位电路、下载JTAG接口、外部晶振电路。其他引脚用于控制整个系统,主要有:(1)输入采集模块接口,输入通道ADC的数据引脚及控制引脚,控制器通过FSMC引脚(PD0~PD15)连接到ADC的数据引脚;(2)输出模块接口,控制器通过SPI和片选引脚对输出模块进行控制。(3) INTERBUS通信引脚,控制器通过FSMC引脚(PE0~PE15)与INTERBUS从芯片的MFP引脚连接。
2.4 驱动输出设计
驱动输出电路如图3所示,输出调理电路采用AD5750-2驱动器芯片,该芯片为单通道、低成本、精密电压/电流输出驱动器,电压输出范围可以进行编程:0~5 V、0~10 V、-5~+5 V和-10~+10 V,还提供了20%的超范围设置。电流输出可以编程为以下范围:4~20 mA、0~20 mA、-20~+20 mA。单极性范围具有2%的超范围设置。电流输出既可以是源电流,也可以是吸电流,因此它能与广泛的传感器或执行器接口。我们将电压和电流输出引脚连在一起,根据实际需求选择输出模式。输出电流或电压的数值通过输入电压(VIN)来调节,系统采用AD5660 DAC芯片作为调节输出的芯片。AD5660是一款低功耗(2.8 mW @ 5 V)、轨到轨输出、16位nanoDAC ,可通过标准SPI接口进行控制。两个芯片结合具有全功能、灵活、可编程的模拟输出,可提供所有典型的电流和电压输出范围、16位分辨率且无失码,可满足编程逻辑控制器(PLC)和分布式控制系统(DCS)应用的大部分要求。
图3 驱动输出电路原理图
2.5 INTERBUS模块电路
INTERBUS模块功能可以使得该系统可直接与INTERBUS总线进行通信,采用SUPI3 为INTERBUS从模块通信芯片,可通过软件进行相关寄存器的配置,芯片类型配置为模拟量输入输出,不同的板卡可以通过类型和数据长度来区分。对内可以与系统的控制模块通信,对外则通过RS485差分信号进行数据通信。差分信号接口原理图如图4所示,INTERBUS采用SP490差分收发器进行数据收发。R83、R79分别将正线负线上拉和下拉,主要作用是在电路驱动器关闭时给线路一个固定的电平关闭时给线路以一个固定的电平。
图4 差分信号原理图
3 系统软件设计
模拟量输入输出系统软件部分主要是控制模块内的软件设计,软件主要完成3个功能,(1)INTERBUS初始化及数据通讯工作;(2)模拟输入配置和采集;(3)驱动输出控制。
INTERBUS初始化工作主要用于配置从板卡 属性(类型和数据宽度),INTERBUS协议芯片内部封装了完善的通讯协议,微控制器通过FSMC总线发送操作指令,配置为模拟输入输出类型,数据宽度设置为8字节。在完成初始化后要根据协议将采集到的数据存放到INTERBUS寄存器中,同时将远程数据从INTERBUS寄存器中读取出来。模拟输入采集部分主要完成根据指令设置采集电压电流类型、设置放大倍数、ADC的数据读取。驱动输出部分全部通过SPI接口完成,控制器读取INTERBUS寄存器指令后要根据自定协议解析出输出电流或电压的模式及模拟量值,然后根据AD5662和AD5750的协议要求写入对应的控制字。为了提高控制效率,控制器读取指令后先与上一包的指令进行对比,对于没有变化的指令不再重复写入。
主逻辑流程设计如图5,程序开始先进行系统初始化工作,包括GPIO、时钟及中断等工作,然后进行INTERBUS初始化,初始化通信相关的参数后执行INTERBUS读写,得到的数据进行解析,根据数据执行通道的读取和输出,每个部分如果操作错误,设置一个故障位。随后将数据buffer整合后返回执行INTERBUS读写更新数据。
图5 输入输出模块软件框图
4 系统测试
为了验证系统的可行性,对第一路输入通道和第一路输出通道进行测试。利用某一款INTERBUS主站模块与此系统进行通信测试,下面分别以系统0~5 V输入、±10 V输出和±20 mA输出模式为例给出实际测试结果。表1为电压输入采集测试,相对误差绝对值≤0.3%。表2为电压输出测试,相对误差绝对值≤0.41%。表3为电流输出测试,相对误差绝对值≤0.5%。
表1 电压采集测量数据
表2 电压输出测量数据
表3 电流输出测量数据
5 结束语
设计了基于STM32 的多功能模拟量输入输出系统,利用STM32微控制器控制ADG1434模拟开关来切换输入信号是否经过采样电阻,输入信号经过大后进入ADC实现模拟输入的采集。通过控制AD5662和AD5750驱动器实现电流和电压的连续输出。由实验可知,该系统采集和输出精度≤0.5%,它能与广泛的传感器或执行器接口,可用于列车网络输入输出模块,都具有非常大的实用价值。
[1] 孙刚,郑文刚,申长军等. 基于MODBUS协议的4~20 mA电流输出智能模块[J].仪表技术与传感器,2010(3):78-82.
[2] 鲍康贵,秦会斌.两线制4~20 mA液压变送器的设计[J].机电工程,2011,28 (10):1234-1236.
[3] 王立文,闫迷军. 基于INTERBUS总线技术的输入输出工作站的实现[J].铁道机车车辆,2016,36(6):9-13.
[4] 刘卿卿,俞强,赵毛毛,等.基于stm32的光电式太阳跟踪系统设计[J].仪表技术与传感器,2017(3):123-125.
[5] 王晨辉,吴悦,杨凯. 基于STM32的多通道数据采集系统设计[J].电子技术应用,2016,42(1):51-53,57.