轮转调度通用实时热电偶测温序列设计
2019-10-14王子权周小超
王子权,周小超,林 华
(合肥工业大学机械工程学院,安徽合肥 230009)
0 引言
热电偶是应用广泛的一类测温器件,具有构造简单,测量范围大的特点[1],在测量锅炉温度、管道流体温度、切削温度[2-4]等高温场合应用广泛。分布式多路热电偶测温系统既能节约测量成本,又能保证测量精度,为多点温度采集提供了便利[5]。李文涛等[6]通过FPGA实现了30路温度数据同步采集,但没有考虑到其中一路可能损坏或有时并不需要其中一路的温度数据等情况。刘小群等[7]基于STC90C516RD+单片机,实现了多路热电偶测温过程化处理,当测温路数较多时,使用该种类型的单片机时则会略显迟缓,且实时性较差。黄琦等[8]在STM32单片机上移植了FreeRTOS操作系统,并使用STemWin制作了交互界面,满足了针对分布式光纤拉曼测温系统中定标光纤和雪崩光电二极管(APD)的温控要求,该测温系统的测温精度较高,数据采集与处理的实时性较好,但该装置的通用性较差,当某一路热电偶发生故障或断开时没有故障处理机制或向操作人员表明该热电偶已经离线。
本文基于UCOSIII操作系统,在STM32F4单片机上创建测温序列任务,根据UCOS操作系统的特点,对于不同优先级的任务实行抢占式调度,对于相同优先级的任务实行时间片轮转调度,对每一个测温点任务来说,应设置相同的任务优先级。基于STemWin设计制作测温序列的GUI人机交互界面,并使用电容触摸屏实现数据显示与人机交互。将测温点的MAX6675芯片连接在同一组SPI总线上,节约了单片机的引脚使用并降低能耗,通过SPI总线读取热电偶测出的温度数据。
1 测温序列硬件设计
1.1 系统整体组成
系统整体组成如图1所示,系统由热电偶采集模块1和主控制器模块2组成。在热电偶采集模块上集成有MAX6675芯片[9-10],共20个,测温序列指示灯包括采集模块通电指示灯和20个SPI片选指示灯,片选指示灯分别对应MAX6675芯片序号,当某个MAX6675被片选时,所对应的片选指示灯就会点亮,当不被片选时,指示灯熄灭。
图1 系统整体组成
主控制器模块包括STM32单片机、复位电路、LCD显示与触摸、系统工作LED指示灯和USB转串口,其中USB转串口是预留的与上位机通信的接口,系统工作LED指示灯周期性亮灭表明主控制器已开始工作。
系统采用双电源设计,目的是保证热电偶采集模块和主控制器模块能够在额定功率附近工作,电源2为使用广泛的USB(5 V)供电电源,电源1通过USB转串口电路为主控制器供电,电源1和电源2都可接入通用USB口。
1.2 MAX6675测温电路
以其中一个MAX6675芯片为例,如图2所示。T+ 、T-分别表示K型热电偶的正极和负极。NV引脚保留,不进行电路连接。SO为SPI总线的从机输出信号线(MISO),在配置STM32时,应配置STM32单片机为SPI总线的主机。SCK为SPI总线的时钟线。CS表示片选引脚,当该引脚为低电平时,表示选中该器件,片选引脚连线与电源正极VCC之间连接一个LED指示灯和470 Ω的限流电阻,当选中该芯片时,LED将被点亮,操作人员可通过LED的亮灭判断此时的SPI总线正在与哪个MAX6675进行通信。
图2 MAX6675电路
1.3 片选引脚配置
根据图2设计有片选指示灯,配置测温序列的片选引脚序列为:MAX6675_1~MAX6675_10为PG12、PC6、PC7、PH8、PD3、PG10、PG13、PG14、PA15、PB9;MAX6675_11~MAX6675_20为PC13、PB7、PB8、PB6、PE2、PE4、PI11、PA6、PH2、PH3。在程序设计中,片选引脚的功能均配置为高速、上拉和推挽输出模式。
1.4 USB转串口
CH340G芯片可实现USB总线的转接的功能,实现USB转接打印口、USB转接串口等,其硬件电路如图3所示。CH340G芯片可以提供通用的MODEM联络信号,以便为计算机扩展异步串口,或者将传统的设备串口直接升级到USB总线。所以CH340G可以实现USB转串口的功能[11]。实验配置串口波特率115 200 Hz,无奇偶校验位,8位数据帧格式,1位停止位,数据传输为收发模式,并且使能串口中断。
图3 USB转串口电路
2 软件设计
2.1 系统软件架构
测温序列软件架构包括3个部分:底层软件(C)、库软件(B)、用户软件(A)。底层软件包括UCOSIII操作系统软件、EMWIN界面设计软件、标准HAL库软件(HALLIB和CORE)、SYSTEM软件、STM32F4的DSP库软件。其构成关系如图4所示。库软件是用户定义的方法库和与EMWIN相关的界面软件库。用户软件是在底层软件和库软件的基础上,由用户所编写的供用户所使用的软件,如LED闪烁、任务的创建、LCD字符显示、按键操作等。
图4 系统整体架构
2.2 系统任务分配
系统任务分配包括创建任务start_task、触摸任务touch_task、系统工作指示灯任务led0_task、STemWin界面显示任务emwin_task、测温序列任务tem1_task~tem20_task。任务参数设置如表1。
表1 系统任务分配参数
start_task任务用于在任务函数中创建其他任务,任务函数执行完毕后挂起start_task任务。touch_task用于执行屏幕触摸任务。led0_task用于执行系统工作指示灯闪烁任务,闪烁周期为2 s。emwin_task用于执行GUI人机交互界面任务,由于执行代码与变量较多,故应增大其堆栈容量。tem1_task~tem 20_task是热电偶测温序列任务,用于完成热电偶的测温过程与数据处理。
2.3 互斥信号量与任务标志寄存器
根据图1可知,MAX6675_1~MAX6675_20共用一组SPI总线,故测温序列任务执行的时候会出现多片选情况,而SPI总线在同一时刻只允许点对点通信,即每次只能采集一个MAX6675芯片转换后的温度数据,所以应在测温序列任务里加入信号量请求操作,为了防止优先级翻转情况发生,应创建一个互斥信号量OS_MUTEX TEMS_MUTEX。
定义一个任务标志寄存器TEMS_FLAG,其位逻辑功能如表2所示。根据任务标志寄存器可判断测温任务是否全部开始、是否全部挂起、某个测温点任务是否挂起等,TEMS_FLAG默认值为0。
表2 任务标志寄存器位逻辑功能
2.4 GUI人机界面
GUI人机界面设计如图5所示,温度单位指示出该系统的温度单位为℃(Celsius),“START”按钮用于创建或恢复测温序列任务。“STOP”按钮用于挂起测温序列任务。测温点按钮Ti(i=1,2,…,20.)用于挂起或恢复测温点任务。
图5 GUI人机交互界面设计
温度显示框用于温度值的显示,如果测温点没有连接热电偶或测温点电路断路时,温度显示框显示OFFi(i=1,2,…,20.)。TEMS_ON_OFF工作点用于显示系统都有哪些测温点已经连接了热电偶并开始了测温工作,测温点没有连接热电偶或断路时,显示符号“*”,否则显示1,2,…,20,分别对应第1,2,…,20测温点。
2.5 系统整体程序流程
系统整体程序流程如图6所示,整体流程包括系统初始化(系统时钟初始化、HAL库初始化、延时函数初始化、UCOSIII操作系统初始化等);任务创建、GUI界面与操作人员的交互等。在任务池中,操作系统任务调度器在不同任务之间进行切换,在不同优先级任务间进行抢占式调度,在相同优先级任务间进行时间片轮转调度。
图6 系统整体程序流程
在人机交互界面,操作人员如果按住并释放“开始”按钮,STM32单片机通过TEMS_FLAG的位0逻辑值判断测温序列任务是否已经创建或开始,如果已经创建或开始,则执行任务恢复操作,并执行标志寄存器TEMS_FLAG=0X7FFFFFFD赋值操作,如果还未创建,则执行任务创建操作,并执行标志寄存器赋值操作TEMS_FLAG=0X7FFFFFFD。按住并释放“停止”按钮,STM32单片机通过TEMS_FLAG的位0逻辑值判断测温序列任务是否已经开始,如果还未开始,则不执行任何操作,如果已经开始,通过TEMS_FLAG的位1逻辑值判断任务是否已经挂起,如果任务已经挂起,则不执行任何操作,如果任务还未挂起,则将测温序列任务挂起,并执行TEMS_FLAG=0X00000003赋值操作。按住并释放Ti(i=1,2,…,20.)按钮,STM32单片机通过判断TEMS_FLAG的相应位的逻辑值来判断某个测温点任务是否已经恢复或挂起,从而完成对单个测温点任务的恢复与挂起操作。如按住并释放T1按钮,STM32单片机通过TEMS_FLAG的位1逻辑值判断测温序列任务是否已经停止,如果已经停止,则不执行任何操作,如果没有停止,则判断TEMS_FLAG的位30判断测温点任务1是否已经开始或恢复,如果测温点任务1处于挂起状态,则执行测温点任务1的恢复操作,并执行赋值操作TEMS_FLAG|=1<<30,如果测温点任务1已经恢复,则执行测温点任务1的挂起操作,并执行赋值操作TEMS_FLAG&=~(1<<30)。
2.6 测温点任务流程
图7 测温任务流程
测温点任务流程如图7所示。程序中的变量err为UCOSIII操作系统存储错误信息的变量;i为SPI总线读出的原始数据;t为存储12位温度数据的变量;c为从SPI总线读出的数据,数据长度为8位;flag为热电偶连接标志寄存器,值为0表明有热电偶连接;num为LCD要显示的数据,使用LCD数字显示函数将num值显示在触摸屏上。
执行测温点任务时,要请求互斥信号量,避免不同测温点任务间产生数据对流,导致温度数据读取错误。在执行LCD温度数据显示操作后,释放互斥信号量,避免由于任务调度器执行任务调度工作导致数据显示滞后问题。MAX6675芯片的数据转换间隔为0.17~0.22 s左右,所以执行2次转换的时间间隔不能太小,在测温点任务结束前进行200 ms的延时,并发起任务调度,保证MAX6675芯片已经准备好下一次数据转换。
3 系统调试与实验
实验装置如图8所示,装置组成主要包括热电偶测温序列PCB板、STM32F4开发板、LCD显示器、热电偶、片选排针、LED指示灯等。
图8 实验装置
实验完成了以下操作和功能:
(1)热电偶测温序列的检测功能。通过测温点任务可自动检测哪些测温点已经连接了热电偶并开始了温度转换工作,并将温度数值显示在相应的文本框内。没有连接热电偶或测温点断路时,在相应的文本框内显示OFFi(i=1,2,…,20.)。
(2)通过“START”按钮实现测温序列任务的创建或恢复。通过“STOP”按钮实现测温序列任务的挂起。通过“Ti”(i=1,2,…,20.)按钮实现测温点任务的挂起或恢复。
(3)实现了测温任务的可视化与诊断。操作人员通过TEMS_ON_OFF可视地判断系统中都有哪些热电偶采集点工作正常,便于发现有故障或离线的热电偶采集点,供操作人员及时处理。
(4)预留的USB转串口接口,实现了与PC机的通信,便于设计上位机进行温度数据的处理。
4 结束语
本文基于STM32F4单片机与UCOSIII操作系统设计实现了时间片轮转调度的通用实时热电偶测温序列。设计制作了测温序列的人机交互界面。实现了人机友好操作,并能够实现序列的自检测功能,可根据需要恢复或挂起某个测温点任务,并根据界面显示及时发现有故障的测温点,通过预留USB转串口接口,方便后序的上位机开发与数据处理,克服了一些专用分布式多路热电偶测温的缺陷,使得测温应用范围更加广泛,操作更加方便。