Artix-7 FPGA DPLL 实现 50Hz 工频同步 ADC 采样完整方案

发布时间:2026/7/3 1:21:05
Artix-7 FPGA DPLL 实现 50Hz 工频同步 ADC 采样完整方案 目录核心需求说明一、整体系统架构框图模块划分二、关键参数设计50Hz 工频标准配置1. 系统主时钟MMCM 生成2. 采样点数配置电力标准 256 点 / 周波3. DPLL 环路参数Type2 二阶三、分模块 Verilog 完整实现Artix-7 通用模块 1输入同步打拍消除亚稳态模块 2PFD 鉴频鉴相器提取相位误差 Δφ模块 3二阶数字 PI 环路滤波器DSP48 定点乘加模块 432 位 NCO 数控振荡器生成 50Hz 反馈 同步相位模块 5同步采样脉冲生成256 点 / 工频周期模块 6锁定检测模块稳定后开启 ADC 采样模块 7DPLL 顶层集成四、ADC 同步对接方案AD4134/AD7768-41. AD4134 同步模式2. AD7768-4 同步模式3. 多片 ADC 级联同步五、Artix-7 资源占用评估XC7A35T六、时序约束xdc 关键约束七、工程调参与故障优化1. 捕获速度慢2. 锁定后相位抖动大3. 无法锁定 50Hz4. ADC 采样频谱泄漏八、核心优势对比固定晶振采样核心需求说明互感器校验仪 / 电力采集设备核心诉求以电网 50Hz 工频为基准产生同步采样时钟ADC 每个采样点严格对齐工频相位消除晶振频偏带来的采样相位漂移保证多通道 ADCAD4134/AD7768同步采集、角差测量高精度采用 FPGA 内部数字 DPLLType-II 二阶 DPLL锁定外部 50Hz 工频信号输出同步采样时序给 ADC适配 Artix-7XC7A35T/XC7A10T使用 DSP48 做滤波乘加、BRAM 做 NCO 相位表无模拟 PLL 依赖。一、整体系统架构框图工频输入调理 → 施密特整形 → 同步两级寄存器消除亚稳态→ DPLL鉴相器PFD ↓ NCO反馈方波 ← 数字PI环路滤波器 ← 相位误差Δφ ↓ 同步采样时钟分频器 → ADC SPI时序/同步触发信号同步AD4134/AD7768模块划分工频同步输入同步器两级打拍跨时钟域亚稳态抑制PFD 鉴频鉴相器检测 50Hz 输入与 NCO 反馈相位差二阶数字 PI 环路滤波器Type2无稳态相位误差32 位 NCO 数控振荡器输出 50Hz 基准反馈 高频采样时钟采样时序分频模块按每周期采样点数输出同步采样脉冲Lock 锁定检测模块连续多周期误差接近 0 输出同步使能二、关键参数设计50Hz 工频标准配置1. 系统主时钟MMCM 生成外部晶振 50MHz → MMCM 倍频输出200MHz 系统时钟 clk_sys系统时钟周期5nsNCO 相位累加器位宽32bitNCO 频率分辨率fres​fsys​/232≈0.046566Hz足够锁定 50Hz 微小频偏2. 采样点数配置电力标准 256 点 / 周波工频周期 Tgrid​20ms单采样间隔 Ts​20ms/25678.125μs同步采样脉冲由 NCO 分频生成保证每 256 点严格对齐工频过零点3. DPLL 环路参数Type2 二阶传递函数离散域 F(z)Kp​Ki​⋅1−z−1z−1​ 工程定点参数200MHz 系统时钟KP 16’d128比例系数加快捕获速度KI 16’d2积分系数消除稳态相位差 环路带宽≈5Hz兼顾锁定速度与工频噪声抑制。三、分模块 Verilog 完整实现Artix-7 通用模块 1输入同步打拍消除亚稳态工频整形后为 50Hz 方波属于异步信号两级寄存器同步到 200MHz 系统时钟域module grid_sync_two_ff( input wire clk_sys, input wire rst_n, input wire grid_50hz_in, // 外部整形后50Hz方波 output reg grid_sync_out ); reg sync_r1; always (posedge clk_sys or !rst_n) begin if(!rst_n) begin sync_r1 1b0; grid_sync_out 1b0; end else begin sync_r1 grid_50hz_in; grid_sync_out sync_r1; end end endmodule模块 2PFD 鉴频鉴相器提取相位误差 Δφ检测参考 50Hz 与 NCO 反馈时钟上升沿输出有符号误差计数module pfd_phase_detector( input wire clk_sys, input wire rst_n, input wire ref_clk, // 同步后50Hz参考 input wire fb_clk, // NCO输出50Hz反馈方波 output reg signed [15:0] phase_err ); reg ref_r, fb_r; always (posedge clk_sys or !rst_n) begin if(!rst_n) begin ref_r 1b0; fb_r 1b0; phase_err 16sd0; end else begin ref_r ref_clk; fb_r fb_clk; // 参考上升沿反馈滞后误差1 if(ref_r 1b0 ref_clk 1b1) begin phase_err phase_err 16sd1; end // 反馈上升沿参考滞后误差-1 if(fb_r 1b0 fb_clk 1b1) begin phase_err phase_err - 16sd1; end end end endmodule模块 3二阶数字 PI 环路滤波器DSP48 定点乘加Artix-7 DSP48E1 原生支持 32 位乘累加无 LUT 资源浪费module pi_loop_filter( input wire clk_sys, input wire rst_n, input wire signed [15:0] err_in, output reg signed [31:0] freq_word_out // NCO频率控制字 ); localparam KP 16d128; localparam KI 16d2; reg signed [31:0] integral_acc; wire signed [31:0] prop_term; assign prop_term $signed(err_in) * KP; always (posedge clk_sys or !rst_n) begin if(!rst_n) begin integral_acc 32sd0; freq_word_out 32sd0; end else begin integral_acc integral_acc $signed(err_in) * KI; freq_word_out prop_term integral_acc; end end endmodule模块 432 位 NCO 数控振荡器生成 50Hz 反馈 同步相位输出两路信号fb_clk50Hz 方波反馈给 PFD 形成闭环phase_addr相位索引用于分频产生 ADC 同步采样脉冲module nco_dco_50hz( input wire clk_sys, input wire rst_n, input wire signed [31:0] freq_word, output reg fb_clk, // 50Hz反馈方波 output wire [15:0] phase_addr ); reg [31:0] phase_acc; always (posedge clk_sys or !rst_n) begin if(!rst_n) begin phase_acc 32d0; fb_clk 1b0; end else begin phase_acc phase_acc freq_word[31:0]; fb_clk phase_acc[31]; // 最高位输出50Hz方波 end end assign phase_addr phase_acc[31:16]; // 取高16位相位 endmodule模块 5同步采样脉冲生成256 点 / 工频周期基于 NCO 相位均匀分频每个工频周期输出 256 个同步采样触发送给 ADC 同步启动引脚module adc_sync_sample_gen( input wire clk_sys, input wire rst_n, input wire [15:0] phase_addr, output reg adc_sync_trig // ADC同步采样脉冲 ); localparam SAMPLE_POINT_PER_CYC 256; localparam PHASE_STEP 16hFFFF / SAMPLE_POINT_PER_CYC; reg [15:0] last_phase; always (posedge clk_sys or !rst_n) begin if(!rst_n) begin last_phase 16d0; adc_sync_trig 1b0; end else begin last_phase phase_addr; // 相位跨过采样间隔产生1拍同步脉冲 if((phase_addr - last_phase) PHASE_STEP) begin adc_sync_trig 1b1; end else begin adc_sync_trig 1b0; end end end endmodule模块 6锁定检测模块稳定后开启 ADC 采样连续 4096 个时钟相位误差极小判定锁定未锁定禁止 ADC 采集避免相位乱码module dpll_lock_detector( input wire clk_sys, input wire rst_n, input wire signed [15:0] phase_err, output reg dpll_locked ); reg [12:0] lock_cnt; always (posedge clk_sys or !rst_n) begin if(!rst_n) begin lock_cnt 13d0; dpll_locked 1b0; end else if(phase_err -8 phase_err 8) begin lock_cnt lock_cnt 1b1; if(lock_cnt 13d4095) dpll_locked 1b1; end else begin lock_cnt 13d0; dpll_locked 1b0; end end endmodule模块 7DPLL 顶层集成module top_grid_dpll_adc_sync( input wire clk_50m_ext, // 外部50M晶振 input wire rst_n_ext, input wire grid_50hz_raw, // 调理后50Hz工频输入 output wire adc_sync_pulse,// ADC同步采样触发 output wire dpll_lock_flag // 锁定标志给MCU/ADC使能 ); // 1. MMCM生成200MHz系统时钟 wire clk_sys, rst_sys_n; clk_wiz_200m mmcm_inst( .clk_in1(clk_50m_ext), .reset(!rst_n_ext), .clk_out1(clk_sys), .locked(rst_sys_n) ); // 2. 工频信号两级同步 wire grid_sync_50hz; grid_sync_two_ff sync_inst( .clk_sys(clk_sys), .rst_n(rst_sys_n), .grid_50hz_in(grid_50hz_raw), .grid_sync_out(grid_sync_50hz) ); // 3. PFD鉴相 wire signed [15:0] err_w; wire fb_50hz_w; pfd_phase_detector pfd_inst( .clk_sys(clk_sys), .rst_n(rst_sys_n), .ref_clk(grid_sync_50hz), .fb_clk(fb_50hz_w), .phase_err(err_w) ); // 4. PI环路滤波 wire signed [31:0] fw_w; pi_loop_filter lf_inst( .clk_sys(clk_sys), .rst_n(rst_sys_n), .err_in(err_w), .freq_word_out(fw_w) ); // 5. NCO本振 wire [15:0] phase_addr_w; nco_dco_50hz nco_inst( .clk_sys(clk_sys), .rst_n(rst_sys_n), .freq_word(fw_w), .fb_clk(fb_50hz_w), .phase_addr(phase_addr_w) ); // 6. ADC同步采样脉冲生成 adc_sync_sample_gen sample_gen_inst( .clk_sys(clk_sys), .rst_n(rst_sys_n), .phase_addr(phase_addr_w), .adc_sync_trig(adc_sync_pulse) ); // 7. 锁定检测 dpll_lock_detector lock_inst( .clk_sys(clk_sys), .rst_n(rst_sys_n), .phase_err(err_w), .dpll_locked(dpll_lock_flag) ); endmodule四、ADC 同步对接方案AD4134/AD7768-41. AD4134 同步模式AD4134 支持外部 SYNC 同步输入将adc_sync_pulse接入 AD4134SYNC引脚DPLL 锁定后每一个同步脉冲触发 4 通道同步转换所有通道采样点严格对齐工频同一相位消除通道间相位偏移满足 0.02 级互感器角差测量。2. AD7768-4 同步模式AD7768-4SYNC_IN全局同步引脚FPGA 输出同步脉冲同步所有调制器配合 DPLL 50Hz 基准FFT 谐波分析无频谱泄漏21 次谐波测量精度达标。3. 多片 ADC 级联同步多片 AD4134/AD7768 共用同一路adc_sync_pulse全局同步采样标准 CT 与被测 CT 采样时刻完全一致无分时 MUX 固有相位误差。五、Artix-7 资源占用评估XC7A35T模块LUTFFDSP48E1BRAMDPLL 顶层全套1802403PI 滤波乘加0200MHz MMCM0000CMT 硬核采样脉冲分频304000总资源极低剩余大量逻辑用于 ADC SPI、数据缓存、FFT 运算。六、时序约束xdc 关键约束# 外部50M晶振输入时钟 create_clock -name clk_50m -period 20 [get_ports clk_50m_ext] # MMCM生成200MHz系统时钟 create_generated_clock -name clk_sys_200m -source [get_ports clk_50m_ext] -multiply_by 4 [get_pins mmcm_inst/clk_out1] # 异步工频输入约束虚假路径两级同步消除亚稳态 set_false_path -from [get_ports grid_50hz_raw] -to [get_regs {sync_r1}] # 同步输出到ADC引脚IO约束 set_output_delay -max 3 -min 0 -clock clk_sys_200m [get_ports adc_sync_pulse]七、工程调参与故障优化1. 捕获速度慢增大 KP 比例系数环路带宽加宽快速锁定工频缺点是噪声变大。2. 锁定后相位抖动大减小 KP、KI降低环路带宽抑制电网谐波噪声。3. 无法锁定 50Hz工频整形电路幅值不足方波畸变NCO 初始频率字偏移过大修改 NCO 初始累加值PFD 输入同步打拍失效亚稳态导致相位误差错乱。4. ADC 采样频谱泄漏DPLL 未锁定时禁止 ADC 采集锁定后 256 点均匀等分工频周期无截断误差。八、核心优势对比固定晶振采样消除晶振频偏不受 FPGA 内部晶振温漂影响始终跟随电网真实 50Hz相位同步精度 ns 级多通道 ADC 同一时刻采样0.02 级互感器角差测量基础纯数字逻辑无模拟 PLL 漂移全温稳定性强可灵活配置每周期采样点数128/256/512适配谐波、电能计量不同场景Artix-7 资源占用极小可和 ADC 数据采集、FFT、串口逻辑共存。