当前位置: 首页 > article >正文

FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现

FPGA存在的意义:为什么adc连续采样需要fpga来做,而不会直接用iic来实现

  • 原因
  • ADS111x连续采样实现
    • 连续采样功能说明
    • iic读取adc的数据速率 VS adc连续采样的速率
      • adc连续采样的速率
      • iic读取adc的数据速率
      • 结论分析
    • FPGA读取adc数据
      • 问题一:读取adc数据过快造成数据多余
      • 问题二:fpga没有那么多空间存储取回来的全部数据

原因

每次调用iic驱动的时间间隔太长了,adc连续采样的速率高且没有多的寄存器缓存数据,所以用户得及时取数据,否则就会产生数据丢失;于是就需要一个快速的取数据方式,而fpga的时间以8ns为单位,它可以做到快速取数据;但是用户没法这么快的从fpga那边取数据,于是就需要用DMA,给fpga存放数据,最后用户再从DMA中取数据。

下面将来介绍一个实际的案例详细说明。

ADS111x连续采样实现

连续采样功能说明

ADS111x 数据手册关于连续采样功能说明
主要获取信息:

  • 在连续转化模式中,ADC 一旦上一个转化完成了 就会自动开始下一个转化;
  • 连续转化的速率 等于 编程的数据速率;数据能在任意时刻被读取 并且 数据总是对应着最近完成的转化(也就是数据会不断得刷新成新的)
    • 编程(可理解为设置)的数据速率。下图就是ads111x可编程(可理解为设置)的数据速率:
      ads111x Data rate

结论:

所以就是我们要实现连续采样(即及时得把adc每次转化的数据取出来)的话,我们读取adc的数据速率 就得跟得上 adc连续采样的速率,这样才不会丢失adc转换的数据。

iic读取adc的数据速率 VS adc连续采样的速率

adc连续采样的速率

ads111x Data rate

从上图可以看到最高的转化速率是860SPS(即每秒钟采集860个电压点),转换电压间隔是 1s / 860个 * 1000ms/s= 1.16279ms/个

iic读取adc的数据速率

iic通讯时间验证打印
根据试验,两次iic通讯操作间隔时间是3ms左右;意味着iic取数据的速率大概 3ms/个。

结论分析

  1. 用iic去取数据的速率时 3ms/s (间隔3ms才取1个数据),ads 在860SPS的转换速率下 3ms / 1.16279ms/个 = 2.58个,这样子的话每次都会丢1.58个数据,即用iic取数据的话,流失数据率是 1.58 / 2.58 = 61.2%。

  2. 假如在860SPS速率下,每秒860个,iic成功获取只有 860 * (1- 0.612) = 333.68 个,将近流失了 2/3 的数据点

  3. 所以得用一种跟得上860sps 速率的取数据方式:FPGA

FPGA读取adc数据

fpga读取数据的速率可以高于adc的连续采样速率。

问题一:读取adc数据过快造成数据多余

但是取数据的速度太快的话也会出现问题:同一个数据会被多次获取,造成数据错误多余

解决方案
就是在取数据的速率 高于 adc转换速率时,FPGA并不是一直取数据,而是当得知adc每次转换完成后,fpga再去取数据

如何得知adc转换完成了呢?adc正好有这个功能
ads111x 转换完成引脚触发

  1. 就是adc可以配置功能:使得一个特定的芯片引脚 空闲时得外部接上拉电阻进行上拉,每当adc转换时会拉低这个引脚,转换完成会释放(就会有一个上升沿,检测这个上升沿就可以知道adc转换完成)引脚。
  2. FPGA只要检测adc的这个引脚(相当于触发中断) 得知转换完成后 进行 取数据就好了

问题二:fpga没有那么多空间存储取回来的全部数据

开辟内存空间,FPGA就把取回来的数据存放在dma当中,通过dma存放到内存空间,最后用户再从内存空间中获取全部数据即可。


http://www.kler.cn/a/417929.html

相关文章:

  • 量化交易系统开发-实时行情自动化交易-8.3.开拓者TBQuant平台
  • 如何使用Python进行下载对应的视频地址
  • Ubuntu24.04初始化教程(包含基础优化、ros2)
  • Python语法基础(四)
  • 一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单
  • Flink四大基石之Time (时间语义) 的使用详解
  • sentinel使用手册
  • 基于java注解实现websocket详解
  • 如何更好地设计SaaS系统架构
  • MATLAB期末复习笔记(上)
  • 基于Java Springboot 求职招聘平台
  • 爬虫框架快速入门——Scrapy
  • QT 实现组织树状图
  • flutter底部导航栏中间按钮凸起,导航栏中间部分凹陷效果
  • Cursor AI快捷键的使用场景及作用
  • 【机器学习】机器学习算法与模型:逻辑回归算法
  • 电销卡风险管理系统
  • springboot358智慧社区居家养老健康管理系统(论文+源码)_kaic
  • 【大数据学习 | Spark调优篇】数据序列化(kryo序列化)
  • 鸿蒙学习使用模拟器运行应用(开发篇)
  • 深度学习基础03_BP算法(下)过拟合和欠拟合
  • 工程设计与总承包行业数字化转型:现状洞察、挑战突围与前景展望
  • 基于Java Springboot学生信息管理系统
  • asyncio.ensure_future 与 asyncio.create_task:Python异步编程中的选择
  • 汉字笔画分割959张图片带注释的YOLO,COCO,VOC格式的数据集
  • Vue-指令-案例