【国产虚拟仪器】基于 ZYNQ 的电能质量系统高速数据采集系统设计
随着电网中非线性负荷用户的不断增加 , 电能质量问题日益严重 。 高精度数据采集系统能够为电能质
量分析提供准确的数据支持 , 是解决电能质量问题的关键依据 。 通过对比现有高速采集系统的设计方案 , 主
控电路多以 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 数据采集系统的整体设计
图 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 , 按照输入到输出倍增的方式设
置时钟 , 可有效防止缓存模块的数据溢出 。

2
数据采集系统的硬件设计
2.1 ZYNQ 简介
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 的内部时钟 , 能够实现硬件加速和可扩展性 , 充分满足了系统设计的实时性和高精度 。
2.2 AD7606 控制器设计
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 数据转换为 AX
IS 流数据 。 由于 ADC 时钟与 AXIS 的时钟频率不同 , 需要在 ADC 中添加 FIFO 进行跨时钟域处理 ,起到缓冲
的作用 , AXIS 时钟频率是 ADC 时钟的两倍 , 所以不会发生数据溢出的情况 。 ARM 配置 adc_clk 时钟端口 ,
adc_rst 和复位端完成采集的时序及复位控制 。

2.3
采集系统通信
系统分为内部通信和外部通信 。 内部通过 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 电平转换芯片实现电平匹配 。

2.4 DDR 高速存储
图 4 为 DDR3 DRAM 硬件连接示意图 , DDR 是双倍速率同步动态随机存储器 , 数据在工作时钟的
上升沿和下降沿都会进行采样 , 有效提升了存储速率 。 系统配有两颗 4 Gbit 的 DDR3 芯片 , 型号为
H5TQ4G63ARFR-PBC 。 DDR 总线位宽为 32 bit , 最高运行速度可以达到 533 MHz 。 DDR3 存储器直接与
ZYNQ 处理器的 BANK502 存储接口相连 。 ZYNQ-Processing System 核配置存储器时 , 必须确保 DDR 接口型
号一致或者兼容 。

3
数据采集系统的软件设计
Xilinx IDE 套件中 , 在 vivado 完成硬件工程设
计的基础上 , SDK 会自动配置一些重要的参数 , 分
为 3 个模块 : 硬件定义 ( hardware definition ) 包含定
义的寄存器类型 、 地址映射以及当前设计包含的 IP
块信心 ; 板级支持包 ( board support package ) 包含支
持 IP 块的驱动程序和变量参数头文件 ; 应用程序
( application ) 用于测试不同的功能 。 据此完成系统
软件部分设计 。
3.1 ADC-DMA 控制
ADC-DMA 控制是系统软件核心模块 , 程序运
行前对 ADC 和 DMA 相关参数进行初始化设置 , 如
ADC 的括基地址 、 偏移地址 、 采集长度 、 系数 、 字节
数 、 位数和通道数 。 DMA 最大传输字节数 、 设备 ID 、
中断 ID 和中断触发源 。 ADC 数据写入 FIFO 中是
按照 1 至 8 通道顺序存储 , 程序定义了二维数组 ,
将每个通道的数据独立出来 , 并调整了通道顺序 。
为了在屏幕上显示所有通道数据 , 系统将每个通道
的系数进行了微调 , 使各通道波形形成错位 。 DMA
的中断触发类型为完成触发 , 此中断属于 ZYNQ 的
共享中断 , 触发机制为当任务执行完成后触发 , 硬
件设计中 DMA 只开起了写通道接口 , 中断函数只
打开 Streams 到 Memery Map 中断 。 SDK Terminal
的接口 、 波特率和数据位配置后 , 应用 printf 函数驱
动串口通信完成终端数据显示 。 同时可以通过
HDMI 接口与显示器相连 , 实现波形的实时显示 。
ADC 控制流程图如图 5 。

3.2 DMA-SG 模式应用设计
DMA-SG 模式相对简单模式有着更高效的数据传输特性 , 允许一次单一 DMA 传输访问多个内存空间 ,
所有任务结束后才触发中断 。 硬件工程开启 SG 模式后引出 M_AXI_SG 接口 , 用于读写链表 。 链表以 13 个寄
存器组成的描述符为基本单元 。 描述符中包含下一个描述符指针地址 、 数据缓存地址 、 控制存储信息等 。 写
通道 SG 模式驱动设计流程如图 6 所示 , 需要在内存中开辟缓存空间和链表制作 。 将第一个描述符写入当前
地址寄存器 。 启动 DMA 并建立中断系统 , 传输结束后会触发中断 。 将最后一个描述符写入结尾结存器 , 触发
DMA 通过总线抓取链表描述符 , BD 包传输完成后读取下一个描述符 。 将最后一个描述符指针只指向第一
个描述符的地址 , 匹配回环模式 。 数据处理完成后 , 清除链表状态 。
3.3
显示控制模块
该模块提供了易于使用的 API , 控制显示器通过 VGA 或 HDMI 连接到系统开发板上 。 根据显示器分辨
率大小设置画布大小 、 背景和颜色 。 在画布中取长方形区间作显示波形的幅值和传播时间 。 区间内设计 32 ×
32 像素点的小方格作为量化单位 , 水平和垂直方向每隔 4 像素点显示一次 , 网格显示为灰色 , 背景显示为
黑色 。 设计网格叠加函数和波形叠加函数对画布缓存区的数据进行实时读取 , 实现波形的不间断显示 。
Catch 中读取的数据在图像上显示为离散点 , 将数据与前一个数据进行比较 , 得出差值并在同一列描点 , 使
波形显示更为平滑 。 可以通过修改波形起始位置参数改变波形区域的大小 , 但列起始位置加上波形高度必
须小于显示器分辨率 , 否则无法正常显示 。 系统屏幕以彩条作为显示背景 , 设计了无缝帧缓冲器区 , 可实现
无痕动画 。
图像驱动流程如图 7 所示 。 首先要创建一个显示对象 , 并对其初始化设置 。 调用 DisplaySetMode 函数设
置传输模式 。 调用 DisplayStart 函数将数据传输到显示器上 。 要实现无缝动画 , 需要先将一张图像绘制到当
前未显示的帧缓存区 , 后调用 DisplayChangFrame 函数显示此帧 , 重复操作显示图像 。 若更改分辨 , 需调用显
示模式函数设置模式 , 然后 , 从新开始传输数据 。

4
实验结果分析
采用 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% 。

针对电能质量检测领域的高速数据采集要求 , 利用 Xilinx 提供的 Vivado 开发套件在 ZYNQ SoC 上完成
高速数据采集系统的设计 。 该设计在硬件方面 , 借助 ZYNQ 的 FPGA 部分实现系统的采集控制 , ARM 部分
完成数据传输 、 存储和结果显示 , 其中基于自定义 ad7606_sample IP 实现了 AD7606 的采集控制 , 利用 AXI
HP 高速接口 、 AXI-DMA 硬核 IP 、 DMA-SG 模式加快了系统的数据传输和处理速度 。 在软件方面 , 完成了 SG
模式下的 BD 包建立 、 波形显示设计及 DMA 数据传输控制 。 通过测试的实验结果表明 , ARM 端驱动 HDMI
接口实现了采集信号的实时在线显示 。 通过对串口终端打印出来的数据进行分析 , 确定系统的采集误差可
达到 0.02% 。 系统具备体积小 、 功耗低 、 精度高 、 实时性强 、 稳定性强等特点 。