张雪皎,陈剑云
(华东交通大学电气与自动化工程学院,江西 南昌330013)
随着电网中非线性负荷用户的不断增加,电能质量问题日益严重。 高精度数据采集系统能够为电能质量分析提供准确的数据支持,是解决电能质量问题的关键依据。 通过对比现有高速采集系统的设计方案,主控电路多以ARM 微控制器搭配AD 转换芯片、ARM+DSP 搭配转换芯片以及FPGA+DSP 搭配AD 转换芯片的架构方式[1-5]。 ARM 有着良好的决策控制特性,在工业控制领域被广泛应用,但其数据处理速度慢,不能满足系统的实时性。 由于DSP 的串行指令流特性,复杂数据处理只能在低速系统中进行。 FPGA 的全可编程和并行数据处理特性使其在数字信号处理领域越来越受到青睐,但是对系统的决策能力较弱[6-10]。 同时,ARM 和DSP,FPGA 与DSP 之间通过低速工业通信接口(SPI、Mcbsp 等)或者采用处理器外部总线接口连接多芯片的结构,复杂化了板级电路设计,芯片间频繁通信难以保证系统的稳定性[11-12]。
对此,设计一种基于ZYNQ 的数据采集系统,ZYNQ SOC 整合了ARM 双核cortext-A9 处理器和Xilinx7系列FPGA 架构。 片内集成高度定制的AXI 互联和接口形成两个部分之间桥梁,加速了各模块间的通信且加强了系统的稳定性。利用FPGA 的硬件可编程特性设计出与高速AD 连接的接口控制器,调用AXI_DMA官方硬核IP 可直接将采集数据搬运至ARM 的DDR 中进行存储。 ARM 驱动串口或者HDIM 口完成数据显示,执行系统的整体决策。 经过对某变电所电能质量分析,发现稳态下电网高次谐波为60 次左右,系统选用的AD7606 采集卡采样频率为200 kHz,8 通道同步采集,分辨率为16 位,采集精度和速度都能满足数据采集系统设计要求,实现信号的模数转换。 相对ZYNQ 自带XADC 的12 位位宽、1 MHz 采样率AD7606 有着更高的转换精度。
图1 为系统的整体设计简图,AD7606 采集卡输入端引出了16 针接口, 分别用于8 通道连接外部模拟信号线路的VP 和VN。 模拟信号进入AD 采集芯片内,经过模拟多路复器输入转换电路完成模拟信号到数字信号的转换。系统通过40 针扩展口实现AD7606 与ZYNQ 的高速通信。接口位于ZYNQ 的PL 部分,采用Verilog 代码编写接口控制器程序实现AD 采集控制功能后封装为IP 核,主要设计包括AD 的复位、时钟、采样率、片选、FIFO 数据缓存器以及AXI 协议例化。 调用Xilinx 官方IP 核AXI-DMA 将PL 数据传输至PS 的DDR 存储器中。ARM 驱动URAT 或者HDMI 端口将数据传输给终端显示出来。AD 控制器先将采集数据缓存到FIFO 中,从FIFO 中读出数据后转换为AXI-stream 流数据格式,如此可以加快数据处理速度,降低数据对时序的影响,系统采用AXI-stream register slice 模块提升接口时序。 系统采用异步时序设计,ADC 配置时钟频率为50 MHz,AXI 总线时钟为100 MHz,数据显示时钟为150 MHz,按照输入到输出倍增的方式设置时钟,可有效防止缓存模块的数据溢出。
图1 数据采集系统整体设计图Fig 1 The overall design of the data acquisition system
ZYNG 是Xilinx 推出的新一代(all-programmable system-on-chip,SoC)全面可编程片上系统。 本质特征是组合了一个双核ARM Cortex-A9 处理器,简称PS 和一个传统的现场可编程门阵列(field programmable gate array,FPGA)逻辑部件简称PL[13]。 芯片集成了AMBA AXI4 互联,内部存储器,外部存储器和外设。 外设主要包括USB 总线、以太网、SD 接口、UART 接口、HDMI 口、GPIO 口等[14-15]。具有高达6.25 MHz 的逻辑单元以及766 MHz 的内部时钟,能够实现硬件加速和可扩展性,充分满足了系统设计的实时性和高精度。
AD7606 采用+5 V 单电源供电,片内集成输入放大器、过电压保护、二阶模拟抗混叠滤波器、模拟多路复用器、16 位200 kbps SAR ADC 和一个数字滤波器,2.5 V 基准电压缓存以及高速串行口和并行口,可实现8 通道同步采样,所有通道均以高达200 kbps 的吞吐率采样[16]。 AD 控制器如图2 所示,外部信号通过ad_data[15∶0]端口进入AD 控制器。 未连接的端口采用Verilog 代码编程控制,根据时序特性设计转换过程,ad_convstad 端口信号上升沿启动时8 通道同步采样,端口ad_busy 为高电平时表示信号正在转换,当端口ad_busy 信号为下降沿时表示ad_rdd 读信号端口可以启动,控制器可读取数据总线中8 个通道的采集数据。ad_cs 端口控制数据读片选。 ad_os 为AD 内部数字滤波器采样倍率选择端口,共有8 种倍率选择,控制器可以通过此端口选择是否使用滤波器,以达到更高的测量精度。 系统通过DMA 将ADC 采集数据传输到DDR中,端口M00_AXIS[15:0]为数据输出通道接口,传输数据为流式数据,在设计时需要将ADC 数据转换为AXIS 流数据。由于ADC 时钟与AXIS 的时钟频率不同,需要在ADC 中添加FIFO 进行跨时钟域处理,起到缓冲的作用,AXIS 时钟频率是ADC 时钟的两倍,所以不会发生数据溢出的情况。 ARM 配置adc_clk 时钟端口,adc_rst 和复位端完成采集的时序及复位控制。
图2 AD7606 控制器设端口连接图Fig.2 AD7606 controller set port connection diagram
系统分为内部通信和外部通信。 内部通过AX4 总线进行通信,包含5 个独立的传输通道读地址、读数据、写地址、写数据、写回复,这些通道都支持单向传输,包括AXI4、AXI-Stream、AXI-lite 3 种接口,系统数据从AD 到ZYNQ 单向传输;因此只开启了写通道。 DMA 采用的AXI-Stream 接口,主从设备间能够直接进行数据的读取,数据传输不需要地址,提高了系统的实时性。 AXI 协议中主设备和从设备通过握手信号建立连接。 如图3 所示, 使用UART 接口与外部通信系统采用Silicon Labs CP20102GM 芯片实现USB 接口转UART 接口的功能, 并采用micro USB 线与终端进行串行通信。 UART 接口的TX/RX 信号与ZYNQ PS 的BANK501 信号相连,BANK501 的VCCMIO 电平为1.8 V,而CP2102GM 的数据电平为3.3 V,系统中间接入TXSOQ02DCUR 电平转换芯片实现电平匹配。
图3 串口通信连接图Fig 3 Serial communication connection diagram
图4 为DDR3 DRAM 硬件连接示意图,DDR 是双倍速率同步动态随机存储器,数据在工作时钟的上升沿和下降沿都会进行采样, 有效提升了存储速率。 系统配有两颗4 Gbit 的DDR3 芯片, 型号为H5TQ4G63ARFR-PBC。 DDR 总线位宽为32 bit, 最高运行速度可以达到533 MHz。 DDR3 存储器直接与ZYNQ 处理器的BANK502 存储接口相连。ZYNQ-Processing System 核配置存储器时,必须确保DDR 接口型号一致或者兼容。
图4 DDR3 DRAM 硬件连接图Fig.4 DDR3 DRAM hardware connection diagram
Xilinx IDE 套件中,在vivado 完成硬件工程设计的基础上,SDK 会自动配置一些重要的参数,分为3 个模块:硬件定义(hardware definition)包含定义的寄存器类型、地址映射以及当前设计包含的IP块信心;板级支持包(board support package)包含支持IP 块的驱动程序和变量参数头文件; 应用程序(application)用于测试不同的功能。 据此完成系统软件部分设计。
ADC-DMA 控制是系统软件核心模块,程序运行前对ADC 和DMA 相关参数进行初始化设置,如ADC 的括基地址、偏移地址、采集长度、系数、字节数、位数和通道数。DMA 最大传输字节数、设备ID、中断ID 和中断触发源。 ADC 数据写入FIFO 中是按照1 至8 通道顺序存储, 程序定义了二维数组,将每个通道的数据独立出来, 并调整了通道顺序。为了在屏幕上显示所有通道数据,系统将每个通道的系数进行了微调,使各通道波形形成错位。 DMA的中断触发类型为完成触发,此中断属于ZYNQ 的共享中断, 触发机制为当任务执行完成后触发,硬件设计中DMA 只开起了写通道接口, 中断函数只打开Streams 到Memery Map 中断。 SDK Terminal的接口、波特率和数据位配置后,应用printf 函数驱动串口通信完成终端数据显示。 同时可以通过HDMI 接口与显示器相连, 实现波形的实时显示。ADC 控制流程图如图5。
图5 ADC 控制器设计流程图Fig.5 ADC controller design flow chart
DMA-SG 模式相对简单模式有着更高效的数据传输特性,允许一次单一DMA 传输访问多个内存空间,所有任务结束后才触发中断。硬件工程开启SG 模式后引出M_AXI_SG 接口,用于读写链表。链表以13 个寄存器组成的描述符为基本单元。 描述符中包含下一个描述符指针地址、数据缓存地址、控制存储信息等。 写通道SG 模式驱动设计流程如图6 所示,需要在内存中开辟缓存空间和链表制作。将第一个描述符写入当前地址寄存器。启动DMA 并建立中断系统,传输结束后会触发中断。将最后一个描述符写入结尾结存器,触发DMA 通过总线抓取链表描述符,BD 包传输完成后读取下一个描述符。 将最后一个描述符指针只指向第一个描述符的地址,匹配回环模式。 数据处理完成后,清除链表状态。
该模块提供了易于使用的API,控制显示器通过VGA 或HDMI 连接到系统开发板上。根据显示器分辨率大小设置画布大小、背景和颜色。在画布中取长方形区间作显示波形的幅值和传播时间。区间内设计32×32 像素点的小方格作为量化单位,水平和垂直方向每隔4 像素点显示一次,网格显示为灰色,背景显示为黑色。 设计网格叠加函数和波形叠加函数对画布缓存区的数据进行实时读取, 实现波形的不间断显示。Catch 中读取的数据在图像上显示为离散点,将数据与前一个数据进行比较,得出差值并在同一列描点,使波形显示更为平滑。 可以通过修改波形起始位置参数改变波形区域的大小,但列起始位置加上波形高度必须小于显示器分辨率,否则无法正常显示。 系统屏幕以彩条作为显示背景,设计了无缝帧缓冲器区,可实现无痕动画。
图像驱动流程如图7 所示。首先要创建一个显示对象,并对其初始化设置。调用DisplaySetMode 函数设置传输模式。 调用DisplayStart 函数将数据传输到显示器上。 要实现无缝动画,需要先将一张图像绘制到当前未显示的帧缓存区,后调用DisplayChangFrame 函数显示此帧,重复操作显示图像。 若更改分辨,需调用显示模式函数设置模式,然后,从新开始传输数据。
图6 SG 模式驱动流程图Fig.6 SG mode driving flow chart
图7 图像显示流程图Fig.7 Image display flow chart
采用digilent 的Analog Discovery 2 任意函数发生器提供所需的信号进行实验。 图8(a)为信号发生器设置页面,实验对正弦信号、20 kHz、2 V 信号进行采集显示,AD 采样频率为200 kHz,8 个采集通道全部开启,由于硬件条件限制,只进行了单通道实验。HDMI 显示结果以及试验平台如图8(b)所示,图形界面显示的正弦波即为系统采集信号,纵向分析,相邻虚线间距表示一个度量单位,波峰到波谷共经过4 个单位表示从+2 V 到-2 V 信号,分析得出实验结果和原始信号波形相同。 为了进一步验证采集精度,实验进行了8 通道4 个模拟电压值的测试,测试结果通过串口打印出来,如表1 所示,第一列基准电压为信号发生器发出值,后面8 列为系统测量结果。 根据式(1),计算出采集误差为0.02%。
图8 实验结果图Fig.8 Experimental results
表1 数据采集结果Tab.1 Data collection results mV
针对电能质量检测领域的高速数据采集要求,利用Xilinx 提供的Vivado 开发套件在ZYNQ SoC 上完成高速数据采集系统的设计。 该设计在硬件方面,借助ZYNQ 的FPGA 部分实现系统的采集控制,ARM 部分完成数据传输、存储和结果显示,其中基于自定义ad7606_sample IP 实现了AD7606 的采集控制,利用AXIHP 高速接口、AXI-DMA 硬核IP、DMA-SG 模式加快了系统的数据传输和处理速度。在软件方面,完成了SG模式下的BD 包建立、波形显示设计及DMA 数据传输控制。 通过测试的实验结果表明,ARM 端驱动HDMI接口实现了采集信号的实时在线显示。 通过对串口终端打印出来的数据进行分析,确定系统的采集误差可达到0.02%。 系统具备体积小、功耗低、精度高、实时性强、稳定性强等特点。