基于国产MCU的电流输出装置的设计与实现
2020-07-14叶蓓,何强
叶 蓓,何 强
(上海船舶运输科学研究所 舰船自动化系统事业部,上海 200135)
0 引 言
国产芯片产业起步较晚,目前还不能满足国内市场的需求,且芯片产业与信息安全有着紧密的联系,因此其战略高度不容忽视。当前在我国船舶自动化系统领域,设计人员往往选用国外先进的芯片来获得较高的性能,但国外芯片在市场供应和安全性上存在一定的不确定性,会带来国家军工安全方面的隐患,因此将国产芯片应用到船舶自动化系统领域中迫在眉睫[1]。
在船舶自动化领域,4~20 mA电流是一个非常重要的参数,某些应用场景对其输出装置有非常高的要求。4~20 mA电流输出装置常用于对现场仪表进行控制,当前仪表控制正朝着高精度、高稳定性和高可靠性的方向快速发展。目前使用的基于CAN(Controller Area Network)现场总线的4~20 mA电流输出装置的软件程序已固化,只能适用于单一的自动化控制系统,移植性和可维护性较差,若该装置直接在新的自动化控制系统中使用,需更改软件程序。本文提出一种以CAN现场总线为基础,以国产芯片GD32F407为主控芯片,外部设备(以下简称“外设”)配合多通道数模转换器(Digital to Analog Converter, DAC)MAX5306,输入CAN报文和输出4~20 mA电流均可现场配置的电流输出装置设计方案,以该装置的工作原理为基础,分别从硬件和软件2方面探讨该装置的实现过程。
1 工作原理
该4~20 mA电流输出装置系统结构框图见图1,主要由上层CAN现场总线网络、MCU(Micro Control Unit)微控制器单元、数模转换单元和仪表单元组成。在上层CAN现场总线网络与MCU微控制器单元之间采用CAN通信隔离单元,以减少CAN现场总线网络中不同测量装置之间的电磁干扰。MCU微控制器单元是4~20 mA电流输出装置的主控单元,主要完成对上层CAN现场总线网络中相关CAN报文的解析和数模转换单元的控制。根据4~20 mA电流输出装置的CAN报文协议的要求,MCU微控制器单元对接收到的CAN报文进行解析。数模转换单元主要完成数字量到模拟量的转换,并通过SPI(Serial Peripheral Interface)接口和MCU微控制器单元进行通信;该单元根据预先设定的量程将解析到的相应通道数值转换成4~20 mA电流,继而输出4~20 mA电流驱动相应的仪表单元[2-3]。
图1 4~20 mA电流输出装置系统结构框图
2 硬件设计与实现
图2 装置硬件接口框图
该4~20 mA电流输出装置由核心板和基板组成,其对外接口主要由电源输入接口、8路4~20 mA电流输出接口、2路CAN通信接口和4个LED(Light-Emitting Diode)指示灯输出组成,电流输出范围在4~20 mA,4~20 mA电流输出装置硬件接口框图见图2。
2.1 MCU单元
MCU芯片选用兆易创新的基于Cortex®-M4内核的GD32F407微控制器芯片。该芯片具有功耗低、功能强、效率高和成本低等优点,最高主频可达 168 MHz,并提供完整的DSP(Digital Signal Processing)指令集、并行计算能力和专用浮点运算单元;为满足多个外设同时运行和嵌入式软件协议栈资源开销的需求,配备3 072 KB容量的内置Flash和192 KB容量的SRAM(Static Random-Access Memory)。GD32F407微控制器芯片上集成有丰富的外设资源,包括12个定时器、6路UART、3路SPI总线、3路I2C总线、2路CAN控制器和1路10/100 M快速以太网控制器等外设资源,无需外接其他专用芯片即可满足该装置的各项功能和性能指标的要求。
虽然GD32F407微控制器芯片内部集成有2路CAN控制器,但不能对系统外部的电源和干扰信号进行有效抑制,因此在GD32F407微控制器与CAN现场总线网络之间增加ADM3053芯片作为CAN现场总线收发器的CAN通信隔离单元。ADM3053是一款隔离式控制器区域网络(CAN)物理层收发器,集成隔离DC/DC转换器,能有效抑制外部干扰。
2.2 数模转换单元
MAX5306是12位、8通道、低功耗、电压输出的DAC,采用节省空间的16引脚TSSOP封装,电源电压范围较宽(+2.7~+5.5 V),电源电流每通道小于215 μA(最大),更适于在低功耗和低电压情况下应用。MAX5306具有软件关断功能,关断时能将电源电流降低至1 μA;具有加载DAC(/LDAC)功能,可同时更新所有DAC的输出,允许通过单个软件命令,分别或同时更新输入和DAC寄存器。
3 软件设计与实现
3.1 装置软件总体结构
该4~20 mA电流输出装置软件由基于时间触发设计模式的软件架构编写的调度器构成,通过调度器能获取最简单的协作式多任务操作系统。调度器是不同任务之间共享的定时器中断服务程序,当运行多项任务时,可使用同一台调度器来完成。调度器中断响应函数是时间间隔为10 ms的“事件”,当调度器被任务中的“事件”触发之后,遍历任务块链表,根据任务的优先级执行需被调度执行的任务[4]。
图3 装置软件总体结构
图4 主程序流程
4~20 mA电流输出装置的软件总体结构见图3,软件设计分为以下3部分:
1)软件平台层与底层硬件相关的驱动,主要为芯片GD32F407的驱动,如CAN驱动、SPI驱动、TIMER驱动、WDT驱动和MAX5306驱动等;
2)协作式多任务调度器,主要完成调度器初始化、多任务创建、多任务执行、多任务销毁和调度器启动等;
3)4~20 mA电流输出装置应用程序设计,如读写铁电、4~20 mA电流输出信号处理、CAN报文接收与发送和装置标定等。
3.2 主程序
主程序流程见图4。4~20 mA电流输出装置首先需完成一系列初始化工作,随后进入标定过程,从铁电中读取标定状态标志位。若标志位提示已标定,从铁电中读出标定值;若标志位提示未标定,则需标定下限4 mA和上限20 mA。在标定下限4 mA时,按标定协议发送CAN报文,采用万用表电流档测量该通道的电流值,直至测量电流值为4 mA,继而将CAN报文标定值存储到铁电中。同理,可标定上限20 mA。参数设定包括CAN报文参数设定和各通道参数设定,在首次使用该装置时必须对其进行参数设定。最后,创建数据发送任务SendMsgTask、状态显示任务ErrStateTask和数据处理任务MsgProcessTask,启动调度器,按设定的调度时间遍历任务链表。
3.3 参数设定流程
该4~20 mA电流输出装置最大的优点是首次完成程序烧写之后,应用到后续其他场景时无需再进行程序烧写,仅需按参数设定协议配置参数,灵活方便,能大大缩短开发周期。因此,参数设定流程是4~20 mA电流输出装置的核心,对该装置烧写程序之后,需首先进入参数设定流程,否则装置无法正常工作。CAN通信接口是该装置对外的唯一通信接口,装置只有通过对接收到的CAN报文进行解析,按参数设定协议将其转换为相关通道的工作参数,并存储到相应地址的铁电中,才能正常工作。参数设定流程主要由CAN报文参数设定流程和各通道输出参数设定流程组成。
3.3.1 CAN报文参数设定
CAN报文参数设定主要由该装置的心跳CAN报文输出设定和各通道4~20 mA输出参数设定组成。装置周期性地发送CAN报文信号,向CAN现场总线网络中的其他节点通告本节点的状态。定义CAN报文结构体CanFrame,包括CAN报文的ID(Identity Document)号、类型、格式、长度、数据字节数组和发送周期。CAN报文参数设定流程见图5。
1)判断读到的CAN报文是否符合该CAN报文参数设定协议的要求,若不符合,跳转到步骤11);否则跳转到步骤2);
2)参照制订的CAN报文参数设定协议,判断是心跳CAN报文输出设定,还是各通道输出4~20 mA参数设定,由此初始化铁电的首地址,跳转到步骤3);
3)判断命令字是否为写命令字,若是,则跳转到步骤4),否则跳转到步骤7);
4)参照制订的CAN报文参数设定协议解析CAN报文,判断CAN报文是否符合设定的CAN报文的ID号、类型、格式、长度、数据字节数组和发送周期中的一种,将写铁电的地址与相应类型的偏移量相加,跳转到步骤5);
5)将解析到的CAN报文参数写入铁电相应的地址中,跳转到步骤6);
6)返回写CAN报文参数设定的状态值,跳转到步骤7);
7)判断命令字是否为读命令字,若是,则跳转到步骤8),否则跳转到步骤11);
8)参照制订的CAN报文参数设定协议对CAN报文进行解析,判断解析的CAN报文为设定CAN报文的ID号、类型、格式、长度、数据字节数组和发送周期中的哪一种,将读铁电的地址与相应类型的偏移量相加,跳转到步骤9);
9)从铁电的相应地址中读取所需内容,跳转到步骤10);
10)返回读CAN报文参数设定的状态值,跳转到步骤11);
11)CAN报文参数设定过程结束,进入创建任务过程。
图5 参数设定流程
3.3.2 各通道输出参数设定
通道输出参数设定流程与CAN报文参数设定流程基本上一致,各通道参数都是可配置的,具体可参照CAN报文参数设定流程。定义通道输出参数结构体AoParam,其变量及说明见表1,假设定义通道1的结构体变量为AO1,其所有变量都需通过CAN报文配置,配置完成之后通道1才能正常工作。AO1.revCan为通道1设定的接收的自定义CAN报文;AO1.inVal为通道1接收的初始值。
表1 结构体AoParam解析
图6 数据处理任务流程
按通道输出参数设定的协议要求,通道接收的输入数值上下限和输出数值上下限已确定,在已知通道接收的初始值的情况下,可根据线性关系计算出该通道初始值转换之后的4~20 mA输出值,计算式为
outVal=send[0]+(inVal-rev[0])×(send[1]-
send[0])/(rev[1]-rev[0])
(1)
式(1)中:rev[0]≤inVal≤rev[1];send[0]≤outVal≤send[1];rev[0] 通过式(1)可得出通道1接收到的初始值转换之后的输出值AO1.outVal。先将AO1.outVal转换为MAX5306相应的寄存器值AO1.regVal,再将AO1.regVal写入MAX5306,即可输出相应的4~20 mA值,依照此步骤可完成其他通道的4~20 mA值的输出。 数据处理任务流程见图6,该任务主要是接收通道设定的相应CAN报文并输出相应的4~20 mA值。首先,判断CAN报文接收缓冲区是否有CAN报文:若没有CAN报文,则通知Schedule OS 1 Ticks,调度器等待10 ms结束该任务;若有CAN报文,则根据通道判断该报文是否是该通道设定的CAN报文。若该报文不是该通道设定的CAN报文,则依次判断是否是下一通道设定的CAN报文参数,当i≥8时,通知Schedule OS 1 Ticks,调度器等待10 ms结束该任务;若该报文是该通道设定的CAN报文,则按该通道的参数设定流程读取CAN报文中该通道相应的通道值。其次,将读取的通道值转换为相应的MAX5306通道输出值。最后,将通道输出值写入MAX5306中,输出相应通道的4~20 mA驱动仪表。按上述过程依次判断下一通道,不再赘述。 将该4~20 mA电流输出装置应用到某主动力系统中,使用周立功USBCAN-II模块配合CANTest软件向该装置发送各通道的输入CAN报文,同时使用万用表电流档测量各通道的电流输出值,试验数据统计见表2。 表2 试验数据统计 由表2可知,误差几乎无差异,符合该装置的设计要求。试验结果表明,该装置的输出电流误差小于0.1 mA,输入与输出多样化,且二者呈线性关系,配置灵活方便,可满足实际应用需求。 本文以CAN现场总线为基础,以国产芯片GD32F407为主控芯片,外设配合数模转换器MAX5306,设计实现了一种输入CAN报文、输出4~20 mA均可现场配置的电流输出装置。该装置测量精度高,测量误差小,运行稳定可靠,抗干扰能力强,误差在0.1 mA以内,能满足各类对仪表控制要求较高的船舶应用场景的需求。该装置的设计方案做到了软件程序固化,后续开发无需重新编写软件程序,能大大缩短开发周期,可供后续船舶自动化系统国产化相关装置的开发和改进参考。3.4 数据处理任务
4 试验数据结果分析
5 结 语