唐大衛,胡鋼,王建斌
(河海大學物聯網工程學院,江蘇常州213022)
在纖維織物生產的過程中,織物緯斜的檢測是十分重要的。目前國外的檢測裝置價格很高而且技術也被封鎖,國內一般主要靠人工視覺來完成,首先人眼會存在一定程度上的視覺偏差,而且也會受到光線、溫度、濕度等外部因素的影響,這都會對檢測結果造成影響。鑒于以上的這種情況,嵌入式纖維織物在線檢測系統是近年來國內外研究人員共同關注的課題[1]。
本系統硬件采用旋轉式光電檢測方法,將纖維織物緯斜角度信息轉換成電信號,再經過信號處理單元對信號進行分析,并計算出織物緯斜角度的實時數據,為整緯器提供相應的數據信息。軟件設計的主要工作集中在系統移植和各個功能模塊的定義,整個系統在uC/OS-II嵌入式系統平臺上實現。最后調試中驗證了該方法能在完成原本系統需求的情況下,擁有抗干擾能力強,精度高,便于調試等優點,可以推廣到紡織工業中,具有良好的應用前景。
纖維織物在線檢測節點主要由3部分組成:織物緯斜信號檢測模塊、紅外溫度檢測模塊和主控制器模塊。其中,織物緯斜信號檢測模塊由旋轉光電探頭和光電信號處理模塊組成。紅外溫度檢測模塊采用非接觸式紅外溫度傳感器MLX90164。主控制器模塊的CPU采用LPC4357微控制器。數據匯總節點由主控制器模塊、LCD顯示模塊、以太網接口和CAN總線接口組成。LCD顯示模塊實時顯示各個檢測節點的工作狀態。數據匯總節點通過以太網接口將打包好的檢測數據傳送到上位機監控軟件。系統硬件結構框圖如圖1所示。
步進電機驅動電路的主要作用是驅動步進電機,使安裝在電機轉軸上的檢測探頭在固定角度內微步旋轉,本系統采用步進電機驅動芯片A3981可實現最大十六細分驅動,步進機驅動電路如圖2所示,該電路同時實現微控制器對A3981的串行接口控制與并行控制方式[2]。當使用串行接口時,微控制器將STEP引腳、DIR引腳、MS0引腳、MS1引腳和ENABLE引腳拉為低電平。而當使用并行接口時,需要將SDI引腳、SDO引腳、SCK引腳和STRn引腳拉為高電平。

圖1 系統硬件結構框圖

圖2 步進機驅動電路
本系統采用MELEXIS公司推出的MLX90614型紅外非接觸式溫度計實現對纖維織物表面溫度的檢測。MLX90164由兩部分組成:MLX81101和MLX90302[3]。其中,MLX81101為紅外熱電堆2傳感器,MLX90302為信號處理專用芯片。MLX90614通過集成的紅外熱電堆傳感器將溫度信號轉換為電信號,經過低噪聲放大器和17位數模轉換模塊對信號進行放大、A/D轉換后送入信號處理模塊進行處理,最后通過PWM模式或SMBus模式輸出溫度值。
LPC4357芯片內部集成了兩個CAN總線控制器,控制器符合CAN 2.0 A&B協議版本,支持最大1Mbit/s的比特率。控制器由CAN內核、消息RAM、消息處理器、控制寄存器和APB接口等組成。CAN收發器電路如圖3所示,RXD、TXD引腳分別接LPC4357的CAN_RD0和CAN_TX0引腳。

圖3 CAN收發器電路
LPC4357芯片內部集成了LCD控制器,支持單面板和雙面板彩色STN顯示器和薄膜晶體管(TFT)彩色顯示器的驅動,提供可編程顯示分辨率。觸摸屏控制器選用TSC2406芯片,采用SPI接口與微控制器進行通信。TSC2406通過一個A/D轉換器將觸摸信號進行轉換,當有觸摸事件產生時,PENIRQ引腳觸發微控制器的外部中斷,通過中斷程序實現觸摸事件的處理,并將觸摸屏幕的坐標位置信息通過SPI總線送到微控制器進行處理。
LPC4357集成的以太網控制器符合IEEE802.3-2005標準[4],提供10 Mbps/100 Mbps的MAC控制器,實現以太網數據的收發。控制器提供了DMA硬件支持,實現自動收發數據的功能,減輕了CPU的數據處理負擔。以太網控制器通過AHB總線與系統的存儲器件,如外部RAM或SRAM進行訪問連接。控制器支持MII接口或RMII接口協議與外部PHY芯片連接。
μC/OS-II是一款嵌入式實時操作系統內核,最早由Jean J.Labrosse于1992年在《嵌入式系統編程》雜志上發表[5]。本系統采用V2.92版本的μC/OS-II系統內核,最多支持256個任務,對應0-255個任務優先級。要將μC/OS-II移植到ARM Cortex-M4/M0內核,需要對μC/OS-II Port部分代碼進行改寫,即以下 3個 文 件 :OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C。這里我們著重分析在Cortex-M4內核下的移植過程。
1)OS_CPU.H
①與編譯器相關的數據類型
μC/OS-II系統可以移植到8位、16位或32位處理器中,對于不同位數的處理器,相應的數據類型也有所區別。因此,在編譯器對程序進行編譯之前應定義相應的數據類型。
②開關中斷
為了保護臨界區代碼和數據,系統在進入臨界段之前,須先關閉中斷,防止在執行臨界區代碼時中斷進入,破壞代碼的執行以及對數據的修改[6]。其中,OS_CPU_SR_Save函數和OS_CPU_SR_Restore函數在os_cpu_a_asm中通過匯編代碼實現,具體代碼如下:

③堆棧生長方向
μC/OS-II系統可以根據處理器的工作方式,設置堆棧增長方向。通過定義OS_STK_GROWTH的值來設置,Cortex-M4采用“向下生長的滿棧”模型,即堆棧向低地址方向生長,堆棧指針指向堆棧的最低地址處。定義堆棧生長方向的代碼如下所示:
#define OS_STK_GROWTH 1u//設置堆棧增長方向為向下生長
④任務切換宏
任務切換函數對于實時操作系統來說是至關重要的,系統在進行任務調度過程中,最重要的一項操作就是進行任務的切換。下面的代碼對任務切換函數進行定義,具體切換過程由OSCtxSW函數實現。
#define OS_TASK_SW()OSCtxSw()
2)OS_CPU_A.ASM
在這個匯編文件中,主要實現與處理器相關的函數,包括任務切換函數的實現、寄存器的入棧和出棧操作等。這里著重介紹任務切換函數的實現。
①任務切換函數
任務級的任務切換函數是在任務調度函數進行任務調度時調用的函數,而中斷級任務切換函數則是在中斷服務完成后需要切換到另一個任務時調用的函數。任務切換函數具體代碼如下所示:

②PendSV中斷函數
PendSV(可懸起系統調用)中斷是Cortex-M4為操作系統提供的中斷服務,常用于任務的上下文切換。PendSV中斷異常會在其他中斷處理完成之后才開始執行[7],因此,需要將PendSV中斷優先級設為最低。
3)OS_CPU_C.C
OS_CPU_C.C文件主要包括任務堆棧初始化函數、系統節拍中斷函數和一些鉤子(HOOKS)函數。
①任務堆棧初始化
系統在調用OSTaskCreate()函數進行任務創建時,需要通過OSTaskStkInt()函數對任務堆棧進行初始化。任務堆棧的建立與CPU的寄存器密切相關,因為在任務堆棧中不僅存放著與任務相關的信息,如任務代碼入口、程序狀態字、中斷返回地址,同時也包括CPU寄存器的值。Cortex-M4處理器有14個通用寄存器,還有作為浮點運算單元的32個浮點寄存器。
②系統節拍中斷
系統時鐘節拍在μC/OS-II系統中主要用于定時功能,如任務的掛起等待、延時等時間的定位,是操作系統時間管理的基礎。Cortex-M4內核集成了系統滴答定時器(SysTick)作為μC/OS-II系統時鐘節拍,通常時鐘節拍間隔設定為10~100ms,即每秒鐘時鐘節拍中斷10~100次。系統節拍中斷函數代碼如下:

鉤子(HOOKS)函數
鉤子函數用于用戶對μC/OS-II系統移植后的功能擴展,μC/OS-II系統提供了6個鉤子函數。
LwIP是一套用于嵌入式系統的精簡TCP/IP協議棧,由瑞典計算機科學院的Adam Dunkels等人開發完成[8]。在實現TCP/IP協議棧基本功能的同時,LwIP的運行只需要幾十KB的RAM和40KB大小的ROM空間,適用于內存十分有限的嵌入式系統的網絡通信的應用。
1)相關數據類型定義
LwIP協議棧根據不同編譯器和處理器平臺,需要定義不同的數據類型。具體數據類型在LwIP協議棧文件的cc.h等文件中定義,包括數據類型的字長、大小端定義。
2)底層網絡驅動函數
LwIP協議棧需要通過相應的底層網絡驅動函數來訪問硬件。在LwIP協議棧文件ethernetif.c中提供了硬件抽象層訪問的相應函數[9],其軟件結構框架如圖4所示,底層網絡驅動由以太網控制器的驅動函數實現。LPC4357芯片中集成了以太網控制器,因此只需實現以太網控制器的驅動函數即可。

圖4 LWIP軟件結構框架
底層驅動在ETH_LPC43xx.c文件中實現,主要有以下幾個關鍵函數:
①以太網控制器初始化函數:使能以太網控制器時鐘、配置以太網I/O接口、配置以太網模塊PHY芯片、配置MAC地址、初始化以太網收發數據的DMA描述數組并使能以太網數據收發。
②接收包函數:ETH_RxPkt_ChainMod()。
③發送包函數:ETH_TxPkt_ChainMod()。
④以太網中斷處理函數
3)操作系統模擬層函數
操作系統模擬層(sys_arch)是LwIP與操作系統的接口,移植到不同操作系統下只需修改操作系統模擬層的接口函數即可。操作系統模擬層主要實現以下函數[10]:
①LwIP信號量操作函數
LwIP的信號量操作函數是對μC/OS-II系統的信號量函數進行封裝實現的。具體需要實現四個函數:建立一個信號量sys_sem_new(),發送信號量sys_sem_signal(),釋放信號量 sys_sem_free(),等待信號量sys_arch_sem_wait()。
②LwIP郵箱操作函數
郵箱操作函數與信號量操作函數類似,通過對μC/OS-II系統的消息隊列函數封裝實現。郵箱操作有以下4個函數:建立一個郵箱sys_mbox_t(),發送消息sys_mbox_post(),釋放郵箱sys_mbox_free(),等待郵箱sys_arch_mbox_fetch()。
③LwIP超時函數
在LwIP協議棧運行過程中,會有任務等待事件發生,比如等待信號量、郵箱,而等待時間不可能為無窮大,任務不能一直阻塞在等待狀態[11],超過一定時間后,需要調用超時函數進行處理,超時函數在sys_arch_timeouts()中實現。
④LwIP進程建立函數
LwIP既可單進程運行也可多進程運行,一般的LwIP應用系統會創建3個進程:上層應用程序進程、LwIP協議棧進程和底層數據包收發進程[12]。LwIP的進程建立是基于μC/OS-II系統的任務創建函數OSTaskCreat()或 OSTaskCreatExt()實現的,進程建立函數在sys_thread_new()函數中實現。
步進電機控制模塊實現檢測探頭的周期性旋轉,在電機步進過程中與織物緯斜數據處理任務進行協調,實現檢測探頭在不同角度下對光信號幅值的檢測。本課題采用PWM并行方式對步進電機進行控制。PWM波通過LPC4357中集成的電機控制PWM模塊(MCPWM)產生,輸入到電機驅動芯片的STEP端口。步進電機的細分分辨率由微控制器的兩個GPIO口連接驅動芯片的MS1和MS2端口進行控制。
步進電機控制程序首先對MCPWM模塊進行初始化并配置相關寄存器,使對應的輸出通道輸出PWM脈沖信號。分為以下幾個步驟:MCPWM模塊時鐘配置、PWM波輸出通道選擇、輸出PWM波周期和占空比配置等,具體配置代碼如下所示:

微控制器的A/D轉換模塊將前端信號采集模塊的織物緯斜信號轉換為數字信號[13]。LPC4357中集成了兩個10位的逐次逼近型數模轉換器,電壓測量范圍為0~3.3 V,轉換時間為2.45 μs。我們采用中斷方式實現織物緯斜信號的A/D轉換。首先需要對A/D轉換器進行配置,具體配置過程如下:
①配置ADC0模塊的時鐘和ADC轉換精度以及轉換頻率,具體配置通過ADC初始化函數實現:

②配置A/D轉換輸入通道。每個ADC模塊有8個模擬信號輸入通道,使用ENAIO0/1寄存器對相應的引腳進行配置。
③配置ADC中斷及中斷程序的實現。首先設置允許ADC模塊中斷,并配置ADC中斷的優先級。通過ADC中斷程序獲取A/D轉換采樣值并清除中斷[14]。
紅外溫度傳感模塊MLX90614與微控制器LPC4357通過SMBus實現通信,其中,LPC4357作為主控制設備(Master Device),MLX90614作為從屬設備(Slave Device)。MLX90614的RAM有32個17位的存儲單元,其中TA是環境溫度值,TOBJ1和TOBJ2為被測物體溫度值[15]。對于物體溫度來說,其數據范圍在0x27AD-0x7FFF之間,對應溫度范圍-70.01~+382.19℃。因此,溫度T的換算公式為:

LCD液晶顯示模塊用于數據匯總節點對系統運行狀態的監測,在LCD顯示界面上實時顯示每個檢測節點的工作狀態,操作人員通過界面顯示的信息判斷系統的故障,并進行處理。
LCD液晶顯示任務程序主要實現對檢測節點的工作狀態的監測。數據匯總節點每隔特定的時間,通過CAN總線向檢測節點發送相應的指令,檢測節點根據自身的運行狀態向數據匯總節點返回相應的狀態信息,數據匯總節點根據這些狀態信息通過LCD顯示各個節點的工作狀態[16]。LCD顯示任務流程如圖5所示。

圖5 LCD顯示任務流程圖
上位機監控軟件在Microsoft Visual Studio 2010集成開發環境下,采用C#編程語言實現。主要由UDP通信模塊程序設計、織物在線檢測數據分析程序設計以及上位機界面及曲線圖繪制程序設計等部分組成系統。
UDP通信模塊主要實現一個UDP服務器端程序設計,用于接收來自數據節點的纖維織物緯斜檢測數據和織物表面溫度數據。纖維織物質檢數據分析程序主要實現對織物緯斜數據的分析,得出織物的緯斜角度大小,從而給整緯裝置的控制部分提供調整參數。上位機界面及曲線圖繪制程序主要實現對織物緯斜參數和織物表面溫度的實時顯示,并繪制織物緯斜檢測數據。纖維織物在線檢測上位機界面如圖6所示。

圖6 纖維織物在線檢測上位機界面
本文基于LPC4375研究了纖維織物的緯斜參數和檢測方法,提出了采用旋轉式光電檢測法提取織物緯斜參數。設計了基于旋轉式光電法的纖維織物緯斜參數檢測的硬件電路,實現了對織物緯斜參數的提取和信號處理。采用MLX90614紅外溫度傳感器實現纖維織物表面的溫度檢測。采用ARM Cortex-M4/M0微控制器LPC4357作為主控制器CPU,實現了通信模塊、電源模塊的硬件電路設計。在系統移植和軟件設計方面,完成了μC/OS-II系統在節點微控制器中的移植,分析了ARM Cortex-M4/M0雙核微控制器的核間通信以及核間任務分配,完成了LwIP協議棧在μC/OS-II系統下的移植。由于織物緯斜檢測技術在紡織工業中應用十分廣泛,本文為該系統的優化升級提供了新的方法與思路。
參考文獻:
[1]陸豪洋,馬蘇揚,廖萍,等.印染拉幅定型機的研究進展[J].印染,2015,41(22):41-44.
[2]趙奇志,朱亦軍.論整緯器在染整行業的作用與前景[J].輕紡工業與技術,2011,40(4):112-113.
[3]Zhen,Liping.Si,shanowei.Infrared temperature measurement system based on MSP430[C]//Proceedings-3rd International Conference on Measuring Technology and Mechatronics Automation,2011(2):421-424.
[4]李娜娜,馬游春,李錦明.基于MLX90615和MSP430的紅外測溫系統的設計[J].傳感器與微系統,2011,30(9):115-120.
[5]朱輝波.論整緯設備在染整機械中的功用及前景[J].輕紡工業與技術,2012,41(4):59-60.
[6]金守峰.面向機器視覺的織物緯斜檢測方法[J].天津工業大學學報,2011,30(2):40-42.
[7]羅成娥,任海強.基于CAN總線的在線升級系統設計與實現[J].數字通信,2013,40(6):28-32.
[8]Dorian Schneider,Yves-Simon Gloy,Dorit merhof.vision-based on-loom measurement of yarn densities in woven fabrics[J].IEEE Transactions on Instrumentation and Measurement,2014,64(4):1063-1074.
[9]高建陽,鄭永軍,李文軍,等.一種紅外測溫系統的設計與實現[J].測控技術,2015,34(11):1-4.
[10]田偉,李從飛.基于ZigBee的電纜頭溫度監測系統[J].電子設計工程,2013,21(13):94-96.
[11]Zhichao Dai,Ying Xiang.Design of remote upgrade of equipment monitoring system software[C]//Information Technology and Computer Science(ITCS),2010 Second International Conference on,IEEE,2010:462-465.
[12]李娜娜,馬游春,李錦明.基于MLX90615和MSP430的紅外測溫系統的設計[J].傳感器與微系統,2011,30(9):115-120.
[13]文中偉,秦飛.常州宏大紡織印染智能裝備新突破[J].紡織機械,2015,6(6):62.
[14]李志遠,趙元富,蘭利東.嵌入式非對稱多核并行軟件設計[J].微電子學與計算機,2013,30(8):107-111.
[15]張齊,勞熾元.輕量級協議棧LWIP的分析與改進[J].計算機工程與設計,2010,31(10):2169-2171.
[16]鄧玉,張冬梅.基于AVR單片機的新型光電整緯檢測設備的研制[J].天津工業大學學報,2010,29(5):85-88.