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

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.lryc.cn/news/495183.html

相关文章:

  • 我们来学mysql -- 事务之概念(原理篇)
  • 基于特征子空间的高维异常检测:一种高效且可解释的方法
  • 看不见的彼方:交换空间——小菜一碟
  • YOLO模型训练后的best.pt和last.pt区别
  • Pareidoscope - 语言结构关联工具
  • GPT(Generative Pre-trained Transformer) 和 Transformer的比较
  • 软件无线电(SDR)的架构及相关术语
  • Python将Excel文件转换为JSON文件
  • 排序算法之选择排序篇
  • sizeof和strlen区分,(好多例子)
  • A050-基于spring boot物流管理系统设计与实现
  • [自然语言处理] NLP-RNN及其变体-干货
  • Elasticsearch ILM 索引生命周期管理讲解与实战
  • 重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!
  • 联想Lenovo SR650服务器硬件监控指标解读
  • 二十一、QT C++
  • 微服务上下线动态感知实现的技术解析
  • 指针与引用错题汇总
  • 短视频账号矩阵系统源码--独立saas技术部署
  • leaflet 介绍
  • 总结贴:Servlet过滤器、MVC拦截器
  • 鸿蒙开发:自定义一个任意位置弹出的Dialog
  • 在Windows下编译支持https的wsdl2h
  • PHP和GD库如何根据像素绘制图形
  • webpack(react)基本构建
  • 《Opencv》基础操作<1>
  • Oracle 11g R2 RAC 到单实例 Data Guard 搭建(RMAN备份方式)
  • HTTPS 加密
  • 泛微e9开发 编写前端请求后端接口方法以及编写后端接口
  • Linux —— 《线程控制》