基于STM32的多路模拟量输出模块的设计
2022-01-20陈富周梓发涂虬方小红
陈富,周梓发,涂虬,方小红
(1.上饶师范学院 物理与电子信息学院,江西 上饶 334001;2.江西省电动汽车部件智能化工程研究中心,江西 上饶 334001)
在控制领域,集中控制设备要向现场执行器输出控制信号,如调节阀、变频器等,需要有模拟量信号持续、稳定,高精度的输出。模拟输出信号可能是电压信号,也可能是电流信号。其中,电压模拟量输出信号大小一般为0~10 V,主要用于短距离传输;电流模拟量输出信号大小一般为0~20 m A或者4~20 m A,主要用于远距离传输[1]。目前,市场上大多数模块只针对某一种信号类型进行了设计,而现场设备往往具有多种需求,特别是需要更多通道、通用性更强的模拟量输出模块[2]。针对模拟量输出模块多通道多功能化的需求,本文设计了一种基于STM32的便携式、多功能模拟量输出模块,可同时提供4通道电流或电压的模拟量输出。模块采用模块化,抗干扰硬件设计,具有结构简单、高精度、可靠性高、低成本等优点。
1 系统整体设计
该模块的功能框图如图1所示,电源电路、晶振电路和复位电路确保控制芯片STM32工作的稳定性。模拟量信号由控制芯片STM32的SPI接口发出,经过光耦电气隔离并转换驱动电压后,控制AD5623芯片,完成DA变化和处理。通过LM358D组成的电压运放调理电路,完成0~10 V的电压持续输出给现场信号。通过INA132和LM358D组成电流输出运放调理电路,完成(0~20)m A/(4~20)m A的电流连续输出。同时,由接线端子输入外部24 VDC电压,通过TPS5410和ICL7600组成的电压变换电路,给相关的电路模块供电。该模块还集成了RS485通讯模块,可以通过标准Modbus协议进行远程信号通信。模块也可通过按键设置模拟量输出并由LCD显示。
图1 系统功能框图
2 电路原理分析
2.1 单片机控制电路
模块的单片机控制电路如图2所示。综合性能、成本等各方面考虑,采用STM32系列的32位RISC架构ARM CortexTM-M3内核STM32F101C6T6为控制芯片,其最高工作主频可达36 MHz,内部含有32 Kb Flash存储器及6 Kb SRAM[3]。提供标准通信接口(一个I2C、一个SPI和两个USART)、一个12位ADC和最多两个通用16位定时器,具备丰富的外设资源[4]。可提供睡眠、停机和待机3种省电模式。具有可靠性高、封装尺寸小而且低成本等特点,满足该模块功能需求。
模块中单片机STM32工作电源为+3.3 V,因此需要将+5 V电源转换为+3.3 V电压。模块采用Sipex公司的LDO电源芯片SPX1117M3-L-3.3产生+3.3 V电压,其输出电流能达0.8 A,最大峰值电流可达1 A。
采用12 MHz晶振为STM32提供外部时钟。其中电容C3起去耦作用;磁珠L1将+3.3 V电源与晶振的供电隔离,用于抑制信号线、电源线上的高频噪声和尖峰干扰,还具有吸收静电脉冲的能力;电容C13起到旁路及储能作用;R2、C2构成低通滤波器,平滑时钟信号的边沿,抑制高频干扰的产生。
复位芯片选用MICROCHIP公司的TCM809。该芯片是一款用于数字系统的低成本电压监控芯片,它用于监视+3.3 V电源电压,可防止由外部干扰产生的电源瞬变引起的系统复位,外围电路无需过多器件,功能实现简单。其中C20为旁路去耦电容,R3、C1构成低通滤波器,平缓化复位信号的边沿,避免产生高频干扰。
2.2 RS485收发器电路
基于性能、成本等因素考虑,RS485通信芯片选用ZT13085LEEN,其通讯速率最高可达2.5 Mbps。图3为RS485收发器电路图,ZT13085LEEN的收发控制端T/R通过电阻R10下拉,将ZT13085LEEN初始状态置为接收,防止在多节点网络中,上电时冲击RS485总线状态;C10为去耦电容,抑制干扰通过电源网络传输;R11、R12为RS485差分信号线上的匹配电阻,抑制信号反射产生振铃。
图3 RS485收发器电路图
2.3 DA电路设计
为了完成4通道的模拟量信号输出,模块采用2片AD5623RBRMZ数模转换器。AD5623RBRMZ属于nanoDAC系列,是具有低功耗、双通道、12缓冲电压输出的数模转换器,采用2.7 V至5.5 V单电源供电,通过设计保证电路单调性[5]。STM32通过控制AD5623RBRMZ完成0~2.5 V的输出。
如图4所示,电压输出驱动电路完成0~2.5 V到0~10 V的转换。其中运算放大器LM358D、三极管FCX493TA等组成了电压串联负反馈放大电路,对输出电压进行精确的放大、实现0~2.5 V到0~10 V电压信号的转换。电路中R16用于短路保护,0.1%精密电阻R13和R14用于决定放大倍数,R17、C12组成滤波电路,双向瞬变电压抑制二极管SMBJ10CA可用于端口的浪涌保护。
图4 电压输出驱动电路原理图
如图5所示,电流输出驱动电路完成电流输出0~2.5 V到0~20 m A的转换。该电路选用TI的低功耗单电源差分放大器INA132,该芯片用+24 V单电源供电。将INA132的2端接地,3端接DA芯片电压输出端,精密电阻R31两端的电压等于3、2两端的电压之差,可计算输出电流为输入电压与R31之商。选用运算放大器LM358D组成电压跟随电路,可以使得该电路精度满足设计要求。用晶体管FCX493TA扩流,电流输出电路可以最大外接电阻负载600Ω以上。R33为输出限流电阻,C33、C34组成输出滤波电路。二极管D7可以确保输出为正值,还可以起输出端误接保护作用[6]。
图5 电流输出驱动电路原理图
3 软件系统设计
模拟量输出模块的软件系统主要通过RS485端口接收上位机的配置信息,并完成模拟量信号的输出。系统初始化包括硬件初始化、变量初始化。其中硬件初始化包括系统时钟、GPIO引脚、定时器、中断配置、串口初始化、SPI口初始化、LCD初始化等;变量初始化主要是上电后从FLASH中读取配置参数和模拟量校准数据。驱动输出通过控制器读取上位机通过标准Modbus协议发送的指令后要根据自定协议解析出输出电流或电压的模式及模拟量值,然后根据AO函数按模数转换芯片AD5623RBRMZ的协议要求,通过SPI口写入对应的控制字。为了提高控制效率,控制器读取指令后先与上一包的指令进行对比,对于没有变化的指令不再重复写入[7]。
RS485通讯主要通过UART2和定时器TIM2中断配合来完成,当有上位机有数据下发时,系统触发UART2中断,接收上位机下发的相关指令。同时STM32的定时器TIM2开始计时,设置定时器TIM2的定时常量为T1=72μs,用于帧检测。当时间超过T1时,则认为数据为下一帧。并在定时器TIM2中断中对得到的数据进行解析,提取出相关的功能码,针对不同的功能码,在主程序中完成不同的AO功能函数,其流程图如图6所示。
图6 TIM2中断函数流程图
4 实验结果
基于STM32的多通道、多功能模拟量输出模块,同时实现4路0~10 V电压连续输出或(0~20)m A/(4~20)m A电流连续输出。对模块的4路通道进行大量数据测试,通过实验表明模块电压电流输出误差均<0.5%F.S。电压稳定时间在输出外接电阻时<300μs,在输出外接1μF电容时<750μs。电流稳定时间在输出外接1 m H电感时<600μs,在输出外接10 m H电感时<2 ms。电压驱动能力最小2 000Ω,电流驱动能力最大600Ω。表1为对第一路输出通道的测试数据。
表1 通道1的精度测试数据
通过对模块的环境测试,证明模块可以在不同的工业环境中均能正常工作。其判断依据为功能通讯及指示灯状态正常、AO通道输出功能正常、三次低温启动正常;性能判据为AO通道输出误差<0.5% FS。其中隔离方式(现场和模块间)为500 VAC@1min,漏电流5 m A。其测试结果如表2所示。
表2 环境测试结果
通过EMC的测试,证明模块可以工作于复杂的电磁环境。其测试判据是通讯及指示灯状态正常和AO通道输出功能正常,性能要求为AO通道输出误差<0.5%FS;其测试结果如表3所示。
表3 EMC测试结果
5 结语
本文设计了基于STM32的多通道、多功能模拟量输出模块,由STM32微控制器控制数模转换芯片AD5623,通过电压电流输出驱动电路实现4路0~10 V电压连续输出或(0~20)m A/(4~20)m A电流连续输出。实验表明,该模块具有高精度、响应快、高可靠性等特点。本模块可以与大多数执行器接口,应用于自动化控制系统的模拟量输出场合,可增加系统的总体可靠性,具有较大的实用价值。