基于FPGA的数据采集系统-程序员宅基地

技术标签: fpga开发  FPGA  FPGA数据采样  其他  

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

      数据采集是指将模拟量采集转换成数字量后,再由计算机进行存储、处理、显示或打印的过程,相应的系统称为数据采集系统。随着科技进步,人们对数据采集的要求也越来越高,比如采样频率,分辨率等等。基于单片机的数据采集系统数据处理能力比较低,已经无法达到某些要求。科技的不断创新及半导体工业的发展使得我们将可编程逻辑器件的技术应用到数据采集系统的研究上。同时利用CPLD 强大的数字处理功能和高密集成的特点,降低了硬件的成本,简化了电路设计,具有很好的经济效益和社会效益。有此看出,数据采集系统日趋成熟,应用越来越广泛,发展前景是相当广阔的。

       在计算机广泛应用的今天,数据采集的重要性是十分显著的。它是计算机与外部物理世界连接的桥梁。在工业,工程,生产车间等部门,尤其是在对信息实时性能要求较高或者恶劣的数据采集环境中更突出其应用的必要性。这就要求数据采集系统必须具备更高的采样频率,更高的分辨率,来提供更多的原始数据。以前的数据采集系统一般都是以单片机为核心的,随着数据采集要求的不断提高,单片机为核心的数据采集系统已经不能满足要求了。科技进一步发展,就出现了现在的高速数据采集系统,本课题我们将设计基于CPLD的数据采集系统。

       设计一个基于FPGA的数据采集系统,以上述信号为主,其中上路信号的周期为117.6ms。采集计算出t1 t2 t3 t4后,然后计算:

m1=-0.5*(cos((6.2831*t1)/117.6)- cos((6.2831*(t1+t2)/117.6)+ cos((6.2831*(t1+t2+t3)/117.6)- cos((6.2831*(t1+t2+t3+t4)/117.6))

m2=-0.5*(sin((6.2831*t1)/117.6)- sin((6.2831*(t1+t2)/117.6)+ sin((6.2831*(t1+t2+t3)/117.6)- sin((6.2831*(t1+t2+t3+t4)/117.6))时间单位是ms,并记录m1m2的值,得到一系列数据。

       时间单位是ms,并记录m1,m2的值,得到一系列数据,这个信号很短,最多30s就停止了。仿真时我认为可以给系统指定信号,用来验证系统是否准确。

      数据采集是指将模拟量采集转换成数字量后,再由计算机进行存储、处理、显示或打印的过程,相应的系统称为数据采集系统。随着科技进步,人们对数据采集的要求也越来越高,比如采样频率,分辨率等等。基于单片机的数据采集系统数据处理能力比较低,已经无法达到某些要求。科技的不断创新及半导体工业的发展使得我们将可编程逻辑器件的技术应用到数据采集系统的研究上。同时利用FPGA 强大的数字处理功能和高密集成的特点,降低了硬件的成本,简化了电路设计,具有很好的经济效益和社会效益。有此看出,数据采集系统日趋成熟,应用越来越广泛,发展前景是相当广阔的。

      在计算机广泛应用的今天,数据采集的重要性是十分显著的。它是计算机与外部物理世界连接的桥梁。在工业,工程,生产车间等部门,尤其是在对信息实时性能要求较高或者恶劣的数据采集环境中更突出其应用的必要性。这就要求数据采集系统必须具备更高的采样频率,更高的分辨率,来提供更多的原始数据。以前的数据采集系统一般都是以单片机为核心的,随着数据采集要求的不断提高,单片机为核心的数据采集系统已经不能满足要求了。科技进一步发展,就出现了现在的高速数据采集系统,本课题我们将设计基于FPGA的数据采集系统。

      由于数字信号的抗干扰性和精度等方面都比模拟信号信号优越,所以在现代信号处理中,一般都是将模拟信号采样、量化、编码成为数字信号之后再处理。奈奎斯特(Nyquist)采样定理告诉我们:对于一个频带有限信号x(t),其频带限制在内,如果以不小于的采样率对x(t)进行等间隔采样,得到时间离散的采样信号x(n),原信号x(t)就能被采样信号x(n)完全恢复。

      从数学上可以进一步证明Nyquist采样定理,也就是推导用离散采样值x(n)表示带限信号x(t)的数学表达式,多种文献对此有详细推导,故这里不再赘述,只给出结果。

       AD芯片型号比较多,但是工作原理基本一致,本章节,我们以最常见的AD0809为例子来介绍AD芯片的工作原理。

       ADC0809 是8位逐次逼近型A/D转换器。它由一个8路模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。三态输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平时,才可以从三态输出锁存器取走转换完的数据。

       其中,IN0-IN7为8 条模拟量输入通道;电压范围是0-5V;地址输入和控制线:4条。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输。

         数字量输出及控制线:11条,ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ。

       算法的具体步骤如下所示:

        步骤一:边沿检测

        步骤二:计数器计数

       当系统接收到质量信号的时候,则计数器开始技术,当系统检测到F的第一个高电平的时候,则检测时间t1的计算公式如下所示:

        将N1的值通过上述的公式进行计算,得到t1,然后计数器同时清零,然后计数器重新开始计数,当检测第二个F的高电平的时候,依次类推,计算对应的时间t2,t3,t4。

        根据上述的原理,可以得到四个时间如下所示:

       步骤三:计算值得量化处理

       由于数字信号处理过程中,其对应的值都是二进制整数数值,而公式3.8的计算结果往往是带小数的。这里以一个实际例子来分析在CPLD中的处理过程。

二、核心程序

always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  cnt1 <= 16'd0;
	  cnt2 <=  4'd0;
	  o_t1s<= 16'd0;
	  o_t2s<= 16'd0;	  
	  o_t3s<= 16'd0;
	  o_t4s<= 16'd0;	  
	  end
else begin
	  if(i_command==1'b1 | o_edge==1'b1)
	  cnt1 <= 16'd0;
	  if(i_command==1'b0 & o_edge==1'b0)
	  cnt1 <= cnt1+16'd1;	  
     if(i_command==1'b0 & o_edge==1'b1)
	  cnt2 <=  cnt2 + 4'd1;
     if(i_command==1'b1 & o_edge==1'b0)
	  cnt2 <=  4'd0;  	  
	  if(cnt2 == 0 & o_edge==1'b1)
	  o_t1s <= cnt1;
	  if(cnt2 == 1 & o_edge==1'b1)
	  o_t2s <= cnt1;
	  if(cnt2 == 2 & o_edge==1'b1)
	  o_t3s <= cnt1;
	  if(cnt2 == 3 & o_edge==1'b1)
	  o_t4s <= cnt1;	  
     end
end
assign o_t1_cur = i_t0    +o_t1s+1;
assign o_t2_cur = o_t1_cur+o_t2s+1;
assign o_t3_cur = o_t2_cur+o_t3s+1;
assign o_t4_cur = o_t3_cur+o_t4s+1;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  o_t1 <= 16'd0;
	  o_t2 <= 16'd0;
	  o_t3 <= 16'd0;
	  o_t4 <= 16'd0;
	  end
else begin
	  if(cnts == i_T)
	  begin
	  o_t1 <= 16'd0;
	  o_t2 <= 16'd0;
	  o_t3 <= 16'd0;
	  o_t4 <= 16'd0;
	  end 
	  if(cnts < i_T & cnt2 == 3 & o_edge==1'b1)
	  begin
     o_t1 <= o_t1_cur+i_cycle*cnt0;
     o_t2 <= o_t2_cur+i_cycle*cnt0;
     o_t3 <= o_t3_cur+i_cycle*cnt0;
     o_t4 <= o_t4_cur+i_cycle*cnt0;
     end	  

三、测试结果

A28-10

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ccsss22/article/details/127760534

智能推荐

[STM32F1]如何使用stm32快速建立tcp和udp连接?_stm32 udp-程序员宅基地

文章浏览阅读179次。使用w5500或者esp8266做mqtt的话,还需要自己移植相关的mqtt代码过来,或者下载mqtt的固件才能使用。MQTT是一种轻量级的、基于发布/订阅模式的通讯协议,它能够在带宽有限和延迟敏感的网络环境中提供可靠的消息传输服务。stm32使用NT1-B实现了远程的tcp和UDP的连接。之前都是使用w5500或者esp8266来做网络配置,需要实现的代码比较复杂,而且会占用比较多的内存。W5500的官方SDK通常提供网络协议栈的支持,但MQTT协议的实现可能需要用户自己完成或使用第三方的库。_stm32 udp

golang适合做什么_golang语言适合做什么-程序员宅基地

文章浏览阅读536次。Golang(Go语言)是一种开源的编程语言,由Google开发并于2009年首次发布。作为一门现代化的编程语言,Golang在性能、并发性和可靠性方面具有显著的优势,因此被广泛应用于构建高性能、可伸缩、并发和可靠的服务器端应用程序。本文将深入探讨Golang适合做什么,并介绍它在不同领域的应用。_golang语言适合做什么

如何优化LOG FILE SYNC_log file sync 优化-程序员宅基地

文章浏览阅读617次。在一个提交十分频繁的系统中,我们经常会看到LOG FILE SYNC等待事件排在TOP EVENTS中。这种情况下,我们可能就需要针对LOG FILE SYNC等待事件进行优化了。 首先我们会看一下这个等待事件平均的等待时长,正常情况下这个等待事件的平均等待时间不会超过10毫秒,如果等待时间太长,那说明LOG WRITER每次写入的时间过长,如果能够优化一下REDO LOG文件_log file sync 优化

第一个android程序——贷款计算器-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏12次。第一个android程序比较简单,具体的要求是,编写一个简单的贷款计算器,根据输入的贷款金额、期限和利率,显示每月应还款的金额。要求合理的使用布局进行界面设计,对输入的数据错误使用toast通知机制显示。 &lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;GridLayout ="http://sc..._银行贷款计算器android课设

接口自动化入门:Jmeter的多组数据测试、JDBC驱动及数据断言!-程序员宅基地

文章浏览阅读914次,点赞8次,收藏7次。在进行接口测试时,我们经常需要对接口进行多组数据测试,以验证接口在不同输入条件下的表现。同时,我们也需要对接口返回的数据进行断言,以确保接口返回的数据符合预期结果。JMeter正是一个强大的工具,可以帮助我们实现这些需求。

RuoYi-Vue-Plus(登录流程-验证码生成)_ruoyi-vue-plus百度网盘-程序员宅基地

文章浏览阅读135次。1- 进入登录页面,调用 com.ruoyi.web.controller.common.CaptchaController 类中的captchaImage 方法,2- 提交 登录信息 + 验证码 + uuid 比对错误:返回错误信息,删除缓存的验证码,加入缓存。_ruoyi-vue-plus百度网盘

随便推点

TensorFlow实操:自定义损失函数_tensorflow自定义损失权重优化-程序员宅基地

文章浏览阅读756次。书本:《TensorFlow实战Google深度学习框架(第2版)》介绍:此处的程序是没有隐含层的两层的网络,两个输入结点,一个输出结点,之所是全部手敲走一遍,是小白为了深刻的理解和熟悉TensorFlow的代码风格和函数意义。备注:小白请import tensorflow as tffrom numpy.random import RandomState#模型描述和讲解:#此处是回..._tensorflow自定义损失权重优化

JavaScript数组对象去重的几种方法-程序员宅基地

文章浏览阅读234次。JavaScript数组对象去重的几种方法

【蓝桥杯选拔赛真题42】C++切蛋糕 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析-程序员宅基地

文章浏览阅读483次,点赞9次,收藏5次。​C++切蛋糕第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现有一块矩形蛋糕,小明从蛋糕的正上方横向和纵向各切 N 刀(1

claude3 如何注册以及如何收费,新注册可以免费试用14天_claude3 注册-程序员宅基地

文章浏览阅读2.4k次,点赞14次,收藏9次。订阅是 Claude3 最经济实惠的付费方式。每月支付固定费用,即可获得一定数量的 API 调用次数。这对于经常使用 Claude3 的用户来说是一个不错的选择。按需付费是 Claude3 最灵活的付费方式。您只需根据使用的 API 调用次数付费。这对于偶尔使用 Claude3 的用户来说是一个不错的选择。获取海外手机号或虚拟手机号后,您可以按照上述步骤进行注册。注册成功后,您就可以登录 Claude3 并使用其功能了。等服务获取海外手机号。等服务获取虚拟手机号。_claude3 注册

vscode使用python类型标注后,高亮异常_vscode python # type: 不高梁-程序员宅基地

文章浏览阅读1.4k次。一般是因为同时安装了python, python for vscode插件,卸载python for vscode,再重新启动vscode即可参考vscode中python使用类型标注后语法高亮不正常如何解决? - Ghost指鹿为马的回答 - 知乎_vscode python # type: 不高梁

yolov5分割_一文读懂YOLO V5 与 YOLO V4-程序员宅基地

文章浏览阅读1.9k次。YOLO之父Joseph Redmon在今年年初宣布退出计算机视觉的研究的时候,很多人都以为目标检测神器YOLO系列就此终结。然而在4月23日,继任者YOLO V4却悄无声息地来了。Alexey Bochkovskiy发表了一篇名为YOLOV4: Optimal Speed and Accuracy of Object Detection的文章。YOLO V4是YOLO系列一个重大的更新,其在CO..._yolov5图像分割原理