項賢軍,王才嶧
(上海工程技術(shù)大學(xué)高等職業(yè)技術(shù)學(xué)院,上?!?00437)
氣相色譜法是20 世紀(jì)50 年代出現(xiàn)的一項重大科學(xué)技術(shù),是一種新的分離、分析技術(shù)。目前,色譜分析是最活躍的分析化學(xué)分支學(xué)科之一,也是物質(zhì)分離分析的一種重要手段。[1]
在氣相色譜儀的研制和開發(fā)中,溫度控制系統(tǒng)是整個色譜檢測系統(tǒng)的核心,對色譜峰的分布和形狀有直接影響。文中的溫控系統(tǒng)設(shè)計中,需對色譜柱溫箱、熱導(dǎo)池,以及水蒸氣溫箱這3路對象進(jìn)行恒溫控制,以便被測對象組份在色譜柱上有適當(dāng)保存,得到較理想的色譜峰,對稱且均勻分布[2]。
根據(jù)色譜儀的性能指標(biāo),要求對3路被控對象的溫度控制達(dá)到±0.5 ℃ 的精度,因此需要采用精度較高的溫度傳感器,采樣信號經(jīng)過放大濾波電路和 A/D 轉(zhuǎn)換送入ARM系列芯片Cortex-M3的STM32F107VCT6,根據(jù)實測值與設(shè)定值的偏差,通過PID控制算法來控制變量,通過調(diào)整加熱機(jī)構(gòu)的加熱時間,使溫度穩(wěn)定在設(shè)定點上。上位機(jī)在Windows平臺下采用VC++編寫控制和監(jiān)控軟件,設(shè)計良好的人機(jī)交互界面,用于設(shè)定溫度以及預(yù)熱、分析校正時間。采用JTAG 接口進(jìn)行系統(tǒng)仿真調(diào)試以及最終程序的燒錄。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)對溫度采集的精度要求高,結(jié)合實際需求和性價比綜合考慮,選用高精度鉑電阻Pt100作為溫度傳感器,其性能穩(wěn)定、重復(fù)性好,測量溫度高,廣泛用于精密測量。鉑電阻在0~850 ℃范圍,電阻與溫度的關(guān)系為
Rt=R0(1+At+Bt2)
式中:Rt為t℃時的電阻值;R0為0 ℃時的電阻值;A、B為常數(shù),A=3.908 02×10-3℃-1,B=-5.802×10-7℃-1。
在使用過程中,只要測得阻值,便可從分度表上查出對應(yīng)的溫度值。由于傳感器采樣電路采集的信號微弱,需要設(shè)計一個穩(wěn)定可靠放大電路將電信號放大。文中采用精密運放OPA2235與LF35lM構(gòu)成多級放大電路,具有低噪聲、零漂小的特點??梢酝ㄟ^低通電路對采樣信號中的高頻成分進(jìn)行濾波處理,再通過ARM的軟件濾波方法剔除低頻干擾,可有效提高A/D的采樣精度。系統(tǒng)通過串口通訊傳輸數(shù)據(jù),處理器輸出的是TTL/COMS電平,而PC串口為RS232電平,所以需要使用一個電平轉(zhuǎn)換芯片MAX3232實現(xiàn)雙向電壓轉(zhuǎn)換,其原理圖如圖2所示。
圖2 串口原理圖
3.1PID溫控算法的設(shè)計
PID調(diào)節(jié)器是一種線性調(diào)節(jié)器,它將給定值r(t)與實際輸出值c(t)的偏差的比例(P)、積分(I)、微分(D)通過線性組合構(gòu)成控制量,對控制對象進(jìn)行控制。
(1)PID調(diào)節(jié)器的微分方程
式中e(t)=r(t)-c(t).
(2)PID調(diào)節(jié)器的傳輸函數(shù)
(3)增量型PID算法的算式
ΔU(n)=U(n)-U(n-1)=a0e(n)+a1e(n-1)+a2e(n-2)
利用控制軟件實現(xiàn)PID控制算法,并輸出變量U(n)。
3.2下位機(jī)程序設(shè)計
系統(tǒng)采用實時操作系統(tǒng)μC/OS-Ⅱ,因此第一步在STM32F107VCT6上移植操作系統(tǒng)。操作系統(tǒng)根據(jù)各個任務(wù)的要求,進(jìn)行資源管理、消息管理、任務(wù)調(diào)度及異常處理等工作。系統(tǒng)移植完成后,就可以開發(fā)應(yīng)用程序。系統(tǒng)下位機(jī)的主要任務(wù):系統(tǒng)參數(shù)的初始化;串口數(shù)據(jù)傳輸;溫度PID調(diào)節(jié)。主程序如下:
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()函數(shù)中首先調(diào)用BSP_IntDisAll()[3]。此函數(shù)的代碼在bsp_int.c中實現(xiàn)。OSInit()用于初始化μC/OS-Ⅱ,OSTaskCreate()的作用是創(chuàng)建一個應(yīng)用任務(wù)。系統(tǒng)共有3個任務(wù),因此需要調(diào)用3次。OSStart用來啟動多任務(wù)調(diào)度,它將啟動創(chuàng)建的最高優(yōu)先級任務(wù)。
在串口數(shù)據(jù)傳輸過程中,除了對常用的波特率、奇偶校驗位和數(shù)據(jù)位等常規(guī)參數(shù)之外,還需要定義一個上下位機(jī)能互相識別的通訊協(xié)議。系統(tǒng)需要傳輸?shù)臄?shù)據(jù)較多,文中以溫度值的協(xié)議為例,其他數(shù)據(jù)方法相同,具體格式如表1所示。
表1 串口通訊協(xié)議
起始符:當(dāng)收到“fe fe”2個字節(jié),表示此次通訊開始。節(jié)點地址:當(dāng)有多個節(jié)點時,根據(jù)此字節(jié)判斷該次通訊的是哪個節(jié)點,系統(tǒng)只有1個節(jié)點,則為“1”。功能代碼:判斷該次接收的數(shù)據(jù)是哪個功能塊,比如溫度值的功能代碼為“01”。數(shù)據(jù):該次通訊需要發(fā)送的數(shù)據(jù),溫度值需要3個數(shù)據(jù),因此就發(fā)送D1,D2,D3 3個數(shù)據(jù)。其中D1為爐溫值,D2為柱溫值,D3為油溫值。
根據(jù)以上協(xié)議接收和發(fā)送數(shù)據(jù),就可以判斷此次接收到的數(shù)據(jù)代表的實際意義,然后根據(jù)需要對數(shù)據(jù)進(jìn)行分類和處理。下位機(jī)接收到數(shù)據(jù)后進(jìn)行轉(zhuǎn)換和存儲,以便在后續(xù)運算中使用;上位機(jī)接收到數(shù)據(jù),經(jīng)過適當(dāng)轉(zhuǎn)換后在人機(jī)界面的對應(yīng)位置實時顯示,以便用戶即時了解系統(tǒng)的運行狀況和狀態(tài)。溫度控制流程圖如圖3所示。
圖3 溫度控制程序流程圖
3.3上位機(jī)軟件設(shè)計
上位機(jī)程序采用Visual C++開發(fā),利用MFC中的控件開發(fā)人機(jī)交互界面,開發(fā)周期短、人機(jī)界面友好。上位機(jī)程序的有以下幾種功能:3路溫度值的設(shè)定及實際值的實時監(jiān)控;分析過程壓力和時間的設(shè)定及實際值的監(jiān)控;運行模式選擇以及手動操作按鈕。上下位機(jī)之間利用串口通訊進(jìn)行數(shù)據(jù)的傳輸,該程序是利用MSComm控件實現(xiàn)串口通訊的功能。串口的初始化程序如下:
m_Serial.SetCommPort(2); //指定串口號
m_Serial.SetSettings("9600,N,8,1 ");//參數(shù)設(shè)置
m_Serial.SetInBufferSize(1024);//接收緩沖區(qū)大小
m_Serial.SetInBufferCount(0); //清空緩存區(qū)
m_Serial.InputMode(1);//設(shè)置數(shù)據(jù)獲取方式,1為二進(jìn)制方式
m_Serial.SetInputLen(0); //設(shè)置讀取方式
在接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯誤,所以事件驅(qū)動是處理串行端口交互作用的一種非常有效的方法。使用 OnComm事件和CommEvent屬性捕捉并檢查通訊事件和錯誤的值。發(fā)生通訊事件或錯誤時,將觸發(fā)OnComm事件,CommEvent屬性的值將被改變,應(yīng)用程序檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。在程序中,用ClassWizard為CMSComm控件添加OnComm消息處理函數(shù):
Void CSepuKongzhiDlg::OnComm()
{……
switch(m_Serial.GetCommEvent())
{
case 2:∥串行口數(shù)據(jù)接收,處理;} }
硬件平臺和軟件編程都完成后,下位機(jī)程序通過JTAG接口下載到目標(biāo)板子上,將下位機(jī)和上位機(jī)通過串口通訊線連接好之后,可以進(jìn)行測試。
參考文獻(xiàn):
[1]劉虎威.氣相色譜方法及應(yīng)用.2版.北京:化學(xué)工業(yè)出版社,2007.
[2]劉樂善.微型計算機(jī)接口技術(shù)及應(yīng)用.武漢:華中科技大學(xué)出版社,2000.
[3]何小慶.嵌入式實時操作系統(tǒng)μC/OS-Ⅲ應(yīng)用開發(fā).北京:北京航空航天大學(xué)出版社,2012.