王曉君,孫梓林,王雁
(1.河北科技大學,河北石家莊,050000;2.河北科技大學,河北石家莊,050000;3.國藥集團威奇達藥業有限公司,山西大同,037000)
青霉素發酵是青霉素生產中的關鍵環節。在工業生產中,青霉素發酵反應在罐體中進行。由于發酵反應影響,罐體內液位會不斷上升,當罐內液位上升到一定程度時,需要向內部添加化學物質使其液位下降,往復進行此過程,最終形成最初狀態的可食用青霉素[1]。由于在發酵反應過程中,液體性質會發生改變,并且液位會產生波動,現有的液位檢測技術不能精確地對其液位進行測量。目前工廠以人工觀測的方式進行液位檢測,這種方式效率低且容易判斷失準,對青霉素產量有著很大的影響。
針對此種情況,本文基于Xilinx 的ZYNQ-7000 平臺,以視覺傳感系統為核心設計了一種液位檢測系統。ZYNQ-7000 平臺采用ARM+FPGA 的異構架構,將雙核ARM Cortex-A9 處理系統(PS)和Artix-7 可編程邏輯(PL)結合在一起。系統采用軟硬協同的方法,在PL 端搭建視覺傳感系統的硬件環境,對圖像數據進行采集與緩存。在PS 端對圖像數據進行算法處理,實時采集液位高度,并實現視頻傳輸與圖像存儲功能。PL 和PS 兩部分的互聯由AXI(高級外設接口)實現,這種片內互聯的形式大大降低了ARM 和FPGA 之間的通信開銷[2]。與傳統的液位檢測系統相比具有傳輸實時性高、靈活性高、可重構、低功耗等優點,能夠較好地完成罐體內液位檢測的工作。
系統設計與驗證采用依元素的EES-288 板卡作為開發平臺,該平臺采用XC7Z010CLG400-1 作為主控芯片。主芯片內部含有集成處理器系統和可編程邏輯資源,在集成處理器系統中集成了兩顆ARM Cortex-A9 核心,同時還包含片上存儲器,外部存儲接口和一組豐富的I/O 外設,并提供了SD 接口、UART 接口以及USB2.0 接口,并提供了一個Ethernet 接口,支持10/100/100M 傳輸速率,能夠實現高速數據傳輸。液位檢測系統的圖像傳感器選用OV5640 芯片,并設計了外圍電路模塊。該傳感器具有高性能、高靈敏度和低噪聲等優點,能較好地實現圖像數據的采集。
整體系統由圖像采集模塊、圖像傳輸存儲模塊以及液位檢測算法處理模塊三部分構成。在圖像采集模塊中,首先OV5640 驅動IP 核將采集到的圖像數據轉為視頻流數據,將視頻流數據傳 入Video in to AXI4-stream IP 核中完成AXI-Stream 格式的數據流轉換,然后通過VDMA將AXI-Stream 格式數據流轉為AXI4 Memory Map 格式,SmartConnect IP 核將VDMA 與ZYNQ 中AXI_HP 端口相連,實現PS 端對PL 端的數據訪問。在圖像傳輸存儲模塊中,采用UDP 協議完成視頻實時傳輸,然后通過PS 端SD卡控制器將算法處理后的圖像數據以BMP 圖像文件格式存入Micro SD 卡中,實現圖像數據的存儲。液位檢測算法處理模塊對DDR3 中緩存的圖像數據進行圖像處理,完成液位測量,并通過串口與上位機通信,實時顯示目前罐體內部的液位高度。液位檢測系統總體設計如圖1 所示。

圖1 液位檢測系統總體設計
OV5640 電路供電設計采用RT9166A/18、RT9166A/28與RT9166A/15 作為電壓轉換芯片,將外部3.3V 電壓轉為OV5640 芯片所需的1.8V、2.8V 以及1.5V 電壓。OV5640電路板中兼容MIPI 輸出接口和DVP 輸出接口,當選取MIPI 模式時,AVDD 與 DOVDD 分別采用2.8V 和1.8V 供電,DVDD 則由內部穩壓器供電。當選取DVP 模式時,AVDD與 DOVDD 均采用2.8V 供電,DVDD 由外部1.5V 電壓供電,此時斷開電阻R3,短接R1 與R2。電路時鐘設計采用24MHz 有源晶振作為芯片基本工作時鐘的來源。OV5640電路板采用20 PIN 的插排與開發板進行連接。OV5640 電路設計如圖2 所示。

圖2 OV5640電路設計
基于ZYNQ 液位檢測系統的PL 硬件平臺通過Xilinx 公司的Vivado 開發工具,以液位檢測系統總體設計為框架,進行系統硬件平臺的搭建。整體硬件平臺由圖像采集、圖像數據存儲模塊兩部分組成。液位檢測系統硬件平臺設計如圖3 所示。

圖3 液位檢測系統硬件平臺
2.2.1 圖像采集模塊
圖像采集模塊主要實現將OV5640 的圖像數據轉換為視頻流數據。由于Xilinx 公司并沒有驅動OV5640 芯片的IP 核,因此需要單獨編寫驅動程序,形成相應的硬件電路,滿足攝像頭的時序要求[3]。本次設計中自定義OV5640 驅動IP 核如圖4 所示。

圖4 自定義OV5640 驅動IP 核
OV5640 驅動IP 核將OV5640 采集到的圖像數據轉為了符合Video in to AXI-Stream IP 核輸入端的數據格式。本次設計OV5640 選取DVP 接口,IP 核在輸入端接收OV5640 發來的VSYNC(場同步信號)、HREF(行同步信號)、PCLK(數據像素時鐘)以及采集到的圖像數據。IP核內部設計中,將OV5640 數據像素時鐘PCLK 作為整體IP 核的工作時鐘。復位信號采用ZYNQ 輸出的異步復位信號FCLK_RESET0_N,來實現此IP 核的復位功能。
在IP 核輸出端口包含24 bit RGB888 數據輸出、場同步信號(RGB_vsync)、時鐘信號(RGB_clk)、時鐘使能信號(RGB_ce),以及數據有效信號(RGB_active_video)。本次設計將OV5640 攝像頭輸出的像素數據配置為RGB565 格式,由于在RGB565 格式中OV5640 在一個像素周期內傳輸8 bit 數據,所以將兩次PCLK 時鐘上升沿采集到的8 bit 圖像數據進行拼接,并采取低位補0 的方式,將RGB565 格式轉換為RGB888 格式,通過RGB_data[23:0]端口將數據輸出。在行同步有效期間,每個RGB888 格式數據的傳輸需兩個像素時鐘周期,所以輸出數據是否有效需要RGB_ce 與RGB_active_video 的共同控制。IP 核硬件系統設計如圖5 所示。

圖5 OV5640 驅動IP 核硬件系統設計
總體設計由同步信號延遲模塊、8 bit 轉24 bit 模塊、場同步計數模塊三部分組成。在同步信號延遲模塊中,對同步信號進行延遲處理。8 bit 轉24 bit 模塊在HERF 為高電平時對數據進行采集,首先將數據從8 bit 轉為16 bit,并輸出標志位RGB_flag 信號作為數據有效信號。場同步計數模塊對VSYNC 的上升沿計數,當計數器為10 時,給出RGB_start 信號。當該信號到來時,各個模塊會輸出相應的接口信號。延遲模塊將延遲后的VSYVC、HREF 信號分別在RGB_vsync、RGB_active_video端口進行輸出,并通過RGB_active_video與計數模塊發出的RGB_start 控制RGB_ce信號。8 bit 轉24 bit 模塊將16 bit 數據轉換為24 bit 數據并連接到數據輸出端,完成輸出數據流到視頻數據流格式的轉換。
2.2.2 圖像緩存模塊
圖像緩存模塊采用Video in to AXI4-Stream 以及VDMA IP 核,將視頻流數據轉為AXI4 Memory Map 格式,通過AXI SmartConnect IP 核與ZYNQ 中AXI_HP 接口相連,實現對圖像數據的緩存。PS 端對VDMA 的配置則是由ZYNQ 上AXI_GP 接口通過AXI SmartConnect IP 核與VDMA 上的AXI4_Lite 接口相連實現。圖像緩存模塊如圖6 所示。

圖6 圖像緩存模塊設計
2.2.3 時鐘及復位設計
ZYNQ 上采用兩個時鐘端口FCLK_CLK0 和FCLK_CLK1,時鐘頻率分別為100MHz 以及150MHz。FCLK_CLK0 為AXI_GP 接口的全局時鐘信號,并作為整體系統中AXI4_Lite 接口時鐘。FCLK_CLK1 為AXI_HP 接口的全局時鐘信號,并為Video in to AXI4-Stream IP 核中AXI4-Stream 時鐘(ack)接口以及VDMA 中AXI VDMA S2MM以及AXI VDMA S2MM AXIS 接口提供時鐘信號。
系統復位設計采用兩個Processor System Reset IP核用來控制同域的AXI 接口復位以及AXI_Lite 接口的外設復位。攝像頭OV5640 的復位設計采用GPIO IP 核,通過AXI4_Lite 接口實現PS 對攝像頭復位的控制。
系統軟件設計通過Xilinx SDK軟件實現,由初始化配置、Micro SD 卡存儲、以太網數據傳輸以及液位檢測算法四部分組成。首先對攝像頭以及VDMA 進行初始化配置,其次利用UDP 協議實現圖像數據的網絡傳輸,實現對罐體內的監測。然后每間隔10 s 對圖像數據進行液位檢測算法處理,并將處理后的圖像以BMP 圖像文件格式存入Micro SD 卡中,實現圖像算法處理的可視化。
本次設計中,攝像頭的初始化配置采用ZYNQ 自帶的I2C接口進行配置[4],所以需對I2C 進行初始化,并根據手冊對OV5640 的寄存器進行配置,攝像頭輸出分辨率太大會影響著算法的處理速率,太小則會影響視頻的清晰度,經測試將其輸出分辨率設置為524×348 時,實驗效果較好。
VDMA IP 核數據緩存地址和VDMA的工作模式由相關寄存器負責控制[5],需要在ARM 端初始化VDMA。在程序中,首先啟動VDMA寫通道;其次分別設置3 幀緩存的起始地址;然后設定幀延遲以及一行的字節數;最后設定水平方向字節數以及豎直方向行數[6]。
本次設計采用UDP 協議對視頻數據進行傳輸,UDP 位于OSI 模型中的傳輸層,其傳輸速度比TCP 協議快,占用資源比TCP 協議少[7],很適合視頻實時傳輸這種對輕微數據差不敏感的應用場景。以太網數據傳輸流程圖如圖7 所示。

圖7 以太網數據傳輸流程圖
首先通過LWIP初始化函數對開發板MAC地址、IP地址、子網掩碼、網關信息的設置;然后對UDP 的應用函數進行設計。在應用函數中利用函數庫中udp_new 創建一個協議控制塊結構體并利用udp_bind 函數綁定地址和端口給結構體,最后利用udp_recv 函數綁定回調函數。回調函數對上位機UDP 命令進行接收,并判斷與自定義的協議是否一致,當上位機發送控制命令時,發出攝像頭啟動信號。圖像發送函數在收到攝像頭啟動信號后,判斷VDMA 是否寫完一幀圖像,若寫完則開始進行數據分包并為每組數據加入圖像頭發送給上位機,完成實時視頻顯示。
圖像存儲模塊將圖片數據轉化為BMP 圖像文件格式并存儲到Micro SD 卡中,實現了算法處理后圖像的可視化。整體程序設計分為FATFS 文件系統掛載與BMP 圖像存儲兩個部分。
3.3.1 FATFS 文件系統掛載
FATFS 是一個完全開源免費的FAT 文件系統模塊,專門為小型的嵌入式系統而設計。它完全用標準C 語言編寫,所以具有良好的硬件平臺獨立性,可以很方便地移植到各種嵌入式處理器中。程序首先對FATFS(文件系統)、FIL(文件對象)以及FRESULT(文件操作結果)進行實例化,為之后的函數調用提供相對應的指針以及獲取返回值,之后通過f_mount 函數注冊一個工作區,從而對FATFS 系統提供的API 函數進行使用。
3.3.2 BMP 圖像存儲
BMP 是Windows 操作系統中的標準圖像文件格式。存儲BMP 圖像時,首先調用f_open 接口函數創建一個文件對象,并將f_open 函數中參數mode 設置為FA_WRITE與FA_CREATE_ALWAYS模式,來實現對指定對象的寫訪問。之后通過f_write 函數將讀寫指針指向的文件偏移量處,將BMP 頭文件以及圖像數據寫入文件中,完成BMP 圖像格式的存儲。
3.4.1 液位測量原理
本次液位檢測采用圖像處理技術對標桿像素數量進行提取,由于成像平面與物體真實長度呈線性關系,通過對標桿長度測量,可實現對罐內液位的高度計算。本章將現場拍攝的青霉素發酵罐液位圖作為算法測試的圖片,通過對該圖像進行算法處理,并將處理后圖像存入Micro SD 卡中,實現液位檢測算法的測試工作。
3.4.2 液位檢測算法
罐內液位檢測系統最重要的是對罐內液位圖像的處理與提取,整體液位檢測算法由圖像預處理、邊緣檢測、形態學操作、標桿測量四個步驟組成。液位檢測算法流程圖如圖8 所示。

圖8 液位檢測算法流程圖
3.4.2.1 圖像預處理
圖像預處理部分首先采用加權平均法對圖像進行灰度化處理,之后進行光照補償算法,該算法首先將圖像分割為24 塊區域,分別計算出每塊區域的平均灰度值,將其與整體平均灰度值相減并存入數組中,然后采用雙線性插值將數組擴大到原圖數據長度得到光照補償矩陣。最后將原圖像數據與光照補償矩陣數據相減,完成光照補償處理。程序中可通過修改圖像分割塊數,適應不同的光照場景。
3.4.2.2 邊緣檢測
邊緣檢測算法采用Canny 檢測算法。Canny 算子是一類具有優良性能的邊緣檢測算子[8],它在許多圖像處理領域得到廣泛應用。程序中首先對圖像進行高斯濾波處理,對圖像進行降噪,其次使用Sobel 算子對圖像的梯度幅值以及方向進行計算,之后將各點的梯度方向近似量化到0、45、90、135 四個梯度,將當前像素的梯度強度與正負梯度方向上梯度插值點進行比較,若當前像素大于兩個插值點中最大值,則將該點作為邊緣點,完成非極大值抑制。然后進行雙閾值邊緣連接,經測試選取最小閾值為20,最大閾值為100 時,可實現本次環境下邊緣檢測的最優處理。最后將標桿附近區域進行提取,提高后續測量的準確性。
3.4.2.3 形態學處理
形態學處理可對標桿位置進行突出,提高后續檢測的準確率。在程序設計中,首先對遍歷所有像素點,對圖像進行膨脹與腐蝕算法處理,并將膨脹與腐蝕處理后的數據相減,實現圖像的形態學算法處理。
3.4.2.4 標桿測量
標桿測量采用霍夫變換原理實現對標桿長度的檢測。程序設計中通過霍夫變換將直線從正常坐標系轉為極坐標系再與參數空間的坐標點進行轉換,然后遍歷每個像素點,找出最大投票值,其中投票值即為最長直線的像素個數,并將這些像素點灰度值設為100 對直線進行標記,最后通過串口將直線長度發送給上位機。液位檢測算法測試如圖9 所示。

圖9 液位檢測算法測試
液位檢測系統基于ZYNQ-7000 平臺,在EES-288 板卡上實現了視頻流的采集、傳輸、存儲以及液位的實時檢測。其中系統以太網傳輸視頻的頻率為每秒33 幀且沒有撕裂效果,實現了視頻實時高清顯示,液位檢測算法的測試采用攝像頭現場拍攝的青霉素發酵罐液位圖進行算法檢測,根據圖14 可得,測試得到液位圖中標桿像素點為164,液位的高度為469.1 cm,實驗結果與實際液位的高度大約存在2 cm 的誤差值,可穩定實現液位的精準檢測。系統測試如圖10 所示。

圖10 系統測試結果
整體系統的功耗僅有1.75 W,其中系統的動態消耗為1.625 W,靜態消耗僅為0.126 W,系統滿足低功耗的要求。
本文提出了一種基于ZYNQ 的罐內液位檢測系統,通過軟硬結合的方式,在PL 端搭建出液位檢測的硬件系統,在PS 端完成了軟件系統設計,實現了圖像數據的傳輸和存儲以及液位測量功能。本文設計的液位檢測系統可通過調整液位檢測算法的參數和閾值,以適應不同光照下的場景,測量精度雖有限,但大幅提升了液位測量的效率以及系統的靈活性,為罐內液位檢測系統提供了一個可行的設計方案。