项贤军,王才峄
(上海工程技术大学高等职业技术学院,上海 200437)
气相色谱法是20 世纪50 年代出现的一项重大科学技术,是一种新的分离、分析技术。目前,色谱分析是最活跃的分析化学分支学科之一,也是物质分离分析的一种重要手段。[1]
在气相色谱仪的研制和开发中,温度控制系统是整个色谱检测系统的核心,对色谱峰的分布和形状有直接影响。文中的温控系统设计中,需对色谱柱温箱、热导池,以及水蒸气温箱这3路对象进行恒温控制,以便被测对象组份在色谱柱上有适当保存,得到较理想的色谱峰,对称且均匀分布[2]。
根据色谱仪的性能指标,要求对3路被控对象的温度控制达到±0.5 ℃ 的精度,因此需要采用精度较高的温度传感器,采样信号经过放大滤波电路和 A/D 转换送入ARM系列芯片Cortex-M3的STM32F107VCT6,根据实测值与设定值的偏差,通过PID控制算法来控制变量,通过调整加热机构的加热时间,使温度稳定在设定点上。上位机在Windows平台下采用VC++编写控制和监控软件,设计良好的人机交互界面,用于设定温度以及预热、分析校正时间。采用JTAG 接口进行系统仿真调试以及最终程序的烧录。系统结构框图如图1所示。
图1 系统结构图
系统对温度采集的精度要求高,结合实际需求和性价比综合考虑,选用高精度铂电阻Pt100作为温度传感器,其性能稳定、重复性好,测量温度高,广泛用于精密测量。铂电阻在0~850 ℃范围,电阻与温度的关系为
Rt=R0(1+At+Bt2)
式中:Rt为t℃时的电阻值;R0为0 ℃时的电阻值;A、B为常数,A=3.908 02×10-3℃-1,B=-5.802×10-7℃-1。
在使用过程中,只要测得阻值,便可从分度表上查出对应的温度值。由于传感器采样电路采集的信号微弱,需要设计一个稳定可靠放大电路将电信号放大。文中采用精密运放OPA2235与LF35lM构成多级放大电路,具有低噪声、零漂小的特点。可以通过低通电路对采样信号中的高频成分进行滤波处理,再通过ARM的软件滤波方法剔除低频干扰,可有效提高A/D的采样精度。系统通过串口通讯传输数据,处理器输出的是TTL/COMS电平,而PC串口为RS232电平,所以需要使用一个电平转换芯片MAX3232实现双向电压转换,其原理图如图2所示。
图2 串口原理图
3.1PID温控算法的设计
PID调节器是一种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的比例(P)、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进行控制。
(1)PID调节器的微分方程
式中e(t)=r(t)-c(t).
(2)PID调节器的传输函数
(3)增量型PID算法的算式
ΔU(n)=U(n)-U(n-1)=a0e(n)+a1e(n-1)+a2e(n-2)
利用控制软件实现PID控制算法,并输出变量U(n)。
3.2下位机程序设计
系统采用实时操作系统μC/OS-Ⅱ,因此第一步在STM32F107VCT6上移植操作系统。操作系统根据各个任务的要求,进行资源管理、消息管理、任务调度及异常处理等工作。系统移植完成后,就可以开发应用程序。系统下位机的主要任务:系统参数的初始化;串口数据传输;温度PID调节。主程序如下:
void main(void)
{
BSP_IntDisAll();
TimerTicks = 0;
Timer1Init();
ConfigureWatchDog();
OSInit();
OSTaskCreate(ProcessTask,(void*)&i,(void*)&ProcessStk[OS_TASK_IDLE_STK_TOP],22);
OSTaskCreate(CommunicationTask,(void*)&i,(void*)&CommunicationStk[OS_TASK_IDLE_STK_TOP],23);
OSTaskCreate(ConsoleTask,(void*)&i,(void *)&ConsoleStk [OS_TASK_IDLE_STK_TOP],29);OSStart();
}
main()函数中首先调用BSP_IntDisAll()[3]。此函数的代码在bsp_int.c中实现。OSInit()用于初始化μC/OS-Ⅱ,OSTaskCreate()的作用是创建一个应用任务。系统共有3个任务,因此需要调用3次。OSStart用来启动多任务调度,它将启动创建的最高优先级任务。
在串口数据传输过程中,除了对常用的波特率、奇偶校验位和数据位等常规参数之外,还需要定义一个上下位机能互相识别的通讯协议。系统需要传输的数据较多,文中以温度值的协议为例,其他数据方法相同,具体格式如表1所示。
表1 串口通讯协议
起始符:当收到“fe fe”2个字节,表示此次通讯开始。节点地址:当有多个节点时,根据此字节判断该次通讯的是哪个节点,系统只有1个节点,则为“1”。功能代码:判断该次接收的数据是哪个功能块,比如温度值的功能代码为“01”。数据:该次通讯需要发送的数据,温度值需要3个数据,因此就发送D1,D2,D3 3个数据。其中D1为炉温值,D2为柱温值,D3为油温值。
根据以上协议接收和发送数据,就可以判断此次接收到的数据代表的实际意义,然后根据需要对数据进行分类和处理。下位机接收到数据后进行转换和存储,以便在后续运算中使用;上位机接收到数据,经过适当转换后在人机界面的对应位置实时显示,以便用户即时了解系统的运行状况和状态。温度控制流程图如图3所示。
图3 温度控制程序流程图
3.3上位机软件设计
上位机程序采用Visual C++开发,利用MFC中的控件开发人机交互界面,开发周期短、人机界面友好。上位机程序的有以下几种功能:3路温度值的设定及实际值的实时监控;分析过程压力和时间的设定及实际值的监控;运行模式选择以及手动操作按钮。上下位机之间利用串口通讯进行数据的传输,该程序是利用MSComm控件实现串口通讯的功能。串口的初始化程序如下:
m_Serial.SetCommPort(2); //指定串口号
m_Serial.SetSettings("9600,N,8,1 ");//参数设置
m_Serial.SetInBufferSize(1024);//接收缓冲区大小
m_Serial.SetInBufferCount(0); //清空缓存区
m_Serial.InputMode(1);//设置数据获取方式,1为二进制方式
m_Serial.SetInputLen(0); //设置读取方式
在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用 OnComm事件和CommEvent属性捕捉并检查通讯事件和错误的值。发生通讯事件或错误时,将触发OnComm事件,CommEvent属性的值将被改变,应用程序检查CommEvent属性值并作出相应的反应。在程序中,用ClassWizard为CMSComm控件添加OnComm消息处理函数:
Void CSepuKongzhiDlg::OnComm()
{……
switch(m_Serial.GetCommEvent())
{
case 2:∥串行口数据接收,处理;} }
硬件平台和软件编程都完成后,下位机程序通过JTAG接口下载到目标板子上,将下位机和上位机通过串口通讯线连接好之后,可以进行测试。
参考文献:
[1]刘虎威.气相色谱方法及应用.2版.北京:化学工业出版社,2007.
[2]刘乐善.微型计算机接口技术及应用.武汉:华中科技大学出版社,2000.
[3]何小庆.嵌入式实时操作系统μC/OS-Ⅲ应用开发.北京:北京航空航天大学出版社,2012.