APP下载

基于ZYNQ 的罐内液位检测系统设计

2023-11-19王晓君孙梓林王雁

电子制作 2023年21期
关键词:液位时钟模块

王晓君,孙梓林,王雁

(1.河北科技大学,河北石家庄,050000;2.河北科技大学,河北石家庄,050000;3.国药集团威奇达药业有限公司,山西大同,037000)

0 引言

青霉素发酵是青霉素生产中的关键环节。在工业生产中,青霉素发酵反应在罐体中进行。由于发酵反应影响,罐体内液位会不断上升,当罐内液位上升到一定程度时,需要向内部添加化学物质使其液位下降,往复进行此过程,最终形成最初状态的可食用青霉素[1]。由于在发酵反应过程中,液体性质会发生改变,并且液位会产生波动,现有的液位检测技术不能精确地对其液位进行测量。目前工厂以人工观测的方式进行液位检测,这种方式效率低且容易判断失准,对青霉素产量有着很大的影响。

针对此种情况,本文基于Xilinx 的ZYNQ-7000 平台,以视觉传感系统为核心设计了一种液位检测系统。ZYNQ-7000 平台采用ARM+FPGA 的异构架构,将双核ARM Cortex-A9 处理系统(PS)和Artix-7 可编程逻辑(PL)结合在一起。系统采用软硬协同的方法,在PL 端搭建视觉传感系统的硬件环境,对图像数据进行采集与缓存。在PS 端对图像数据进行算法处理,实时采集液位高度,并实现视频传输与图像存储功能。PL 和PS 两部分的互联由AXI(高级外设接口)实现,这种片内互联的形式大大降低了ARM 和FPGA 之间的通信开销[2]。与传统的液位检测系统相比具有传输实时性高、灵活性高、可重构、低功耗等优点,能够较好地完成罐体内液位检测的工作。

1 系统总体设计

系统设计与验证采用依元素的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 液位检测系统总体设计

2 系统硬件设计

■2.1 OV5640 电路设计

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电路设计

■2.2 硬件平台设计

基于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 对摄像头复位的控制。

3 系统软件设计

系统软件设计通过Xilinx SDK软件实现,由初始化配置、Micro SD 卡存储、以太网数据传输以及液位检测算法四部分组成。首先对摄像头以及VDMA 进行初始化配置,其次利用UDP 协议实现图像数据的网络传输,实现对罐体内的监测。然后每间隔10 s 对图像数据进行液位检测算法处理,并将处理后的图像以BMP 图像文件格式存入Micro SD 卡中,实现图像算法处理的可视化。

■3.1 初始化配置

本次设计中,摄像头的初始化配置采用ZYNQ 自带的I2C接口进行配置[4],所以需对I2C 进行初始化,并根据手册对OV5640 的寄存器进行配置,摄像头输出分辨率太大会影响着算法的处理速率,太小则会影响视频的清晰度,经测试将其输出分辨率设置为524×348 时,实验效果较好。

VDMA IP 核数据缓存地址和VDMA的工作模式由相关寄存器负责控制[5],需要在ARM 端初始化VDMA。在程序中,首先启动VDMA写通道;其次分别设置3 帧缓存的起始地址;然后设定帧延迟以及一行的字节数;最后设定水平方向字节数以及竖直方向行数[6]。

■3.2 以太网数据传输

本次设计采用UDP 协议对视频数据进行传输,UDP 位于OSI 模型中的传输层,其传输速度比TCP 协议快,占用资源比TCP 协议少[7],很适合视频实时传输这种对轻微数据差不敏感的应用场景。以太网数据传输流程图如图7 所示。

图7 以太网数据传输流程图

首先通过LWIP初始化函数对开发板MAC地址、IP地址、子网掩码、网关信息的设置;然后对UDP 的应用函数进行设计。在应用函数中利用函数库中udp_new 创建一个协议控制块结构体并利用udp_bind 函数绑定地址和端口给结构体,最后利用udp_recv 函数绑定回调函数。回调函数对上位机UDP 命令进行接收,并判断与自定义的协议是否一致,当上位机发送控制命令时,发出摄像头启动信号。图像发送函数在收到摄像头启动信号后,判断VDMA 是否写完一帧图像,若写完则开始进行数据分包并为每组数据加入图像头发送给上位机,完成实时视频显示。

■3.3 SD 卡图像存储

图像存储模块将图片数据转化为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 液位检测算法测试

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 液位检测算法测试

4 实验结果分析

液位检测系统基于ZYNQ-7000 平台,在EES-288 板卡上实现了视频流的采集、传输、存储以及液位的实时检测。其中系统以太网传输视频的频率为每秒33 帧且没有撕裂效果,实现了视频实时高清显示,液位检测算法的测试采用摄像头现场拍摄的青霉素发酵罐液位图进行算法检测,根据图14 可得,测试得到液位图中标杆像素点为164,液位的高度为469.1 cm,实验结果与实际液位的高度大约存在2 cm 的误差值,可稳定实现液位的精准检测。系统测试如图10 所示。

图10 系统测试结果

整体系统的功耗仅有1.75 W,其中系统的动态消耗为1.625 W,静态消耗仅为0.126 W,系统满足低功耗的要求。

5 结语

本文提出了一种基于ZYNQ 的罐内液位检测系统,通过软硬结合的方式,在PL 端搭建出液位检测的硬件系统,在PS 端完成了软件系统设计,实现了图像数据的传输和存储以及液位测量功能。本文设计的液位检测系统可通过调整液位检测算法的参数和阈值,以适应不同光照下的场景,测量精度虽有限,但大幅提升了液位测量的效率以及系统的灵活性,为罐内液位检测系统提供了一个可行的设计方案。

猜你喜欢

液位时钟模块
28通道收发处理模块设计
“选修3—3”模块的复习备考
别样的“时钟”
古代的时钟
基于STM32燃气热水锅炉液位控制系统设计与实现
石油储罐液位开关的应用分析
有趣的时钟
时钟会开“花”
选修6 第三模块 International Relationships
宝马530车冷却液液位过低报警