news 2026/8/13 23:53:17

嘿,今天来跟大家分享一下我做的 FPGA 以太网多通道实时同步采集系统,这可是个挺实用且有趣的项目呢

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嘿,今天来跟大家分享一下我做的 FPGA 以太网多通道实时同步采集系统,这可是个挺实用且有趣的项目呢

fpga以太网多通道实时同步采集系统 下位机:FPGA AD7606 UDP 上位机:QT5.13 ad7606八通道同步采集最高采样率200khz,上位机发送指令开始采样和改变采样频率,下位机和上位机之间通过千兆以太网udp进行数据传输。 qt udp上位机接收数据绘制采样数据波形和存储数据(.txt) 整套系统,已验证可正常使用。 采样率可以从20kHz以10kHz递进至200kHz,通道可多样选择。

系统整体概述

这个系统主要分为下位机和上位机两部分。下位机采用 FPGA 和 AD7606 来完成数据的采集,并且使用 UDP 协议进行数据传输。上位机则是基于 QT5.13 开发的,负责接收下位机传来的数据,绘制采样数据波形,还能把数据存储成 .txt 文件。

下位机部分

FPGA 与 AD7606

AD7606 是一个八通道同步采集的芯片,最高采样率能达到 200kHz。FPGA 就像是整个下位机的“大脑”,负责控制 AD7606 进行数据采集。下面是一段简单的 Verilog 代码示例,用于控制 AD7606 启动采集:

module ad7606_control ( input wire clk, input wire rst_n, output reg convst, // 启动转换信号 input wire busy // AD7606 忙信号 ); always @(posedge clk or negedge rst_n) begin if (!rst_n) begin convst <= 1'b0; end else begin if (!busy) begin convst <= 1'b1; // 当 AD7606 不忙时,启动转换 end else begin convst <= 1'b0; end end end endmodule

代码分析:这段代码定义了一个名为ad7606control的模块,有时钟信号clk、复位信号rstn、启动转换信号convst和 AD7606 的忙信号busy。在时钟上升沿或者复位信号有效时,会进行相应的操作。当复位信号有效时,convst置为低电平;当 AD7606 不忙时,convst置为高电平,启动一次数据采集。

UDP 数据传输

FPGA 采集到数据后,要通过千兆以太网以 UDP 协议把数据发送给上位机。下面是一段简单的 UDP 发送代码示例(这里只是简化示意):

module udp_send ( input wire clk, input wire rst_n, input wire [15:0] data_in, // 采集到的数据 output reg [7:0] tx_data, // 发送的数据 output reg tx_valid // 发送有效信号 ); reg [3:0] state; always @(posedge clk or negedge rst_n) begin if (!rst_n) begin state <= 4'b0000; tx_data <= 8'b0; tx_valid <= 1'b0; end else begin case (state) 4'b0000: begin tx_data <= data_in[15:8]; // 先发送高 8 位 tx_valid <= 1'b1; state <= 4'b0001; end 4'b0001: begin tx_data <= data_in[7:0]; // 再发送低 8 位 tx_valid <= 1'b1; state <= 4'b0000; end default: begin tx_data <= 8'b0; tx_valid <= 1'b0; state <= 4'b0000; end endcase end end endmodule

代码分析:这个udp_send模块用于将采集到的 16 位数据分成高 8 位和低 8 位依次发送。通过一个状态机来控制发送过程,状态 0 发送高 8 位,状态 1 发送低 8 位,然后回到初始状态。

上位机部分

上位机是用 QT5.13 开发的。它主要有两个功能,一是接收下位机传来的 UDP 数据,二是绘制采样数据波形并存储数据。下面是一段简单的 QT 代码示例,用于接收 UDP 数据:

#include <QUdpSocket> #include <QDebug> class UdpReceiver : public QObject { Q_OBJECT public: UdpReceiver(QObject *parent = nullptr) : QObject(parent) { socket = new QUdpSocket(this); if (socket->bind(QHostAddress::Any, 1234)) { // 绑定端口 1234 connect(socket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); } else { qDebug() << "Failed to bind socket"; } } private slots: void readPendingDatagrams() { while (socket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(socket->pendingDatagramSize()); QHostAddress sender; quint16 senderPort; socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); qDebug() << "Received datagram:" << datagram; // 这里可以添加绘制波形和存储数据的代码 } } private: QUdpSocket *socket; };

代码分析:这个UdpReceiver类继承自QObject,在构造函数中创建了一个QUdpSocket对象,并绑定到端口 1234。如果绑定成功,就连接readyRead()信号到readPendingDatagrams()槽函数。在readPendingDatagrams()函数中,会不断读取接收到的 UDP 数据报,并打印出来。后续可以在这个函数里添加绘制波形和存储数据的代码。

系统特点

这个系统的采样率可以从 20kHz 以 10kHz 递进至 200kHz,而且通道可以多样选择。上位机还能发送指令来控制下位机开始采样和改变采样频率,非常灵活。经过验证,整套系统可以正常使用,能很好地完成多通道实时同步采集的任务。

fpga以太网多通道实时同步采集系统 下位机:FPGA AD7606 UDP 上位机:QT5.13 ad7606八通道同步采集最高采样率200khz,上位机发送指令开始采样和改变采样频率,下位机和上位机之间通过千兆以太网udp进行数据传输。 qt udp上位机接收数据绘制采样数据波形和存储数据(.txt) 整套系统,已验证可正常使用。 采样率可以从20kHz以10kHz递进至200kHz,通道可多样选择。

总的来说,这个 FPGA 以太网多通道实时同步采集系统结合了硬件和软件的优势,在数据采集和处理方面有不错的表现,希望我的分享能给大家一些启发!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:52:21

昆仑通泰锅炉燃烧控制程序案例:触摸屏程序升级至Pro版本

昆仑通泰锅炉燃烧控制程序案例 由于文件具有可复制性&#xff0c; 触摸屏程序用昆仑通泰7.7软件可以打开&#xff0c;&#xff0c;也可以升级最终Pro版本&#xff0c;昆仑通泰的触摸屏编程在工控圈子里算是老熟人了&#xff0c;最近调试锅炉燃烧控制项目时遇到了个挺有意思的案…

作者头像 李华
网站建设 2026/7/14 15:52:22

AudioSeal Pixel Studio实战教程:直播语音流实时水印注入方案

AudioSeal Pixel Studio实战教程&#xff1a;直播语音流实时水印注入方案 1. 引言&#xff1a;音频水印技术的重要性 在数字内容爆炸式增长的今天&#xff0c;音频版权保护面临着前所未有的挑战。AI生成语音的普及让音频伪造变得异常容易&#xff0c;而传统的水印技术往往会影…

作者头像 李华
网站建设 2026/7/14 15:52:34

直接上代码先看效果,再聊原理。Matlab搞GPR时序预测这事儿,说难不难,但新手容易在核函数选择上栽跟头。咱这次用的平方指数核,适合多数时序场景

高斯过程回归GPR时序预测&#xff0c;单输入输出 基于高斯过程回归GPR时间序列区间预测 实现平台&#xff1a;Matlab&#xff0c;中文注释清晰&#xff0c;非常适合科研小白。 替换数据集直接使用 评价指标包括:R2、MAE、MSE、RMSE和区间覆盖率和区间平均宽度百分比等&#xff…

作者头像 李华
网站建设 2026/7/14 15:52:33

技术解析:基于JAX的Brax可微分物理引擎如何重塑大规模刚体仿真

1. 为什么我们需要可微分物理引擎&#xff1f; 想象一下你在玩一个虚拟的积木游戏&#xff1a;每次推倒积木塔后&#xff0c;系统需要重新计算所有积木的位置、旋转和碰撞效果。传统物理引擎就像个固执的会计——它只会告诉你"积木倒了"这个结果&#xff0c;却拒绝解…

作者头像 李华