高速AD板如何利用FIFO做连续采集? 点击:2639 | 回复:6



jacov

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 5回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2004年9月07日
发表于:2004-09-07 15:39:00
楼主
我需要采集一个实时的时域信号,利用采集到的数据把被采集的时域信号完全复制出来。我所采用的板卡采样频率最大6M,FIFO最大只有10K。我想采集到的数据并利用其完全复制的时域信号足够的密集,以便我进一步的分析计算。通过初步计算。大概需要100K的数据来复制整个时域信号,其密集程度才能满足我的工程要求。 但板卡的FIFO最大只有10K,每次也最多只能读取10K个数据。我如何能连续采集到100K数据而中途没有数据丢失? 拜托大虾们赐教!不胜感激!!!!



GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-09-08 13:33:00
1楼
以 6MHz 而言, 不使用 FIFO 时, CPU 必须很精确的每 1/6M 秒 (0.167 us)的时间去作 AD 及抓数据, 这在多工系统的切换下通常会丢失大量的数据. 加入 10K 的 FIFO, 则您必须在每次 FIFO overflow 之前将据取出即可. 这 10K 的 FIFO, 可为您的 CPU 争取到 10K/6M = 1.66667ms = 1666.67us 的缓冲时间. 数据丢失的机会就小很多了! 所以, FIFO 的用意在于为您争取时间, 而不是要一次把它填满.

jacov

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 5回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2004年9月07日
发表于:2004-09-08 16:06:00
2楼
谢谢,Garylin 我通过外接信号的触发方式来采集数据,也就是当被采集的信号出现波峰段时,开始采集数据以保证所采集信号的完整性。 但我读取数据时必须先调用启动触发采样函数,才能读取数据。每次也只能读取最多FIFO容量大小的数据。 有否其他方式?既能采集到大量数据而不丢失数据。使信号能被完全复制,又能保证每次复制的信号是一个完整的信号。 请各位大虾指教!

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-09-08 17:23:00
3楼
很接近了; 理想的程序大概是... 1. 出现波峰时, 启始数据的采样. 2. 用 loop, 每批次读取 FIFO 中的数据, 直到您要的 100K 为止. 您用的软件应该是能支持这样的功能的, 建议您向原厂家问问.

jacov

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 5回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2004年9月07日
发表于:2004-09-09 14:36:00
4楼
TO GaryLin 现在我问题是,如何确定波峰时刻开始启动采样? 我原先用的是触发采样方式,利用一个同步信号就可以解决这个问题.但是采用触发采样方式,读取数据前必须先调用触发采样函数然后才能调用读取数据函数,这样每次也只能读取FIFO最大容量的数据.最好的方式是,同步信号出现下降沿(既被测信号波峰到时)启动采样然后连续读取数据直到100K.但是采用触发采样做不到这样,每次必须触发-读取数据-触发-读取数据...(可能是厂家提供的底层函数就是这么定义的) 利用连续采样方式可以启动连续采样后,连续读取数据.但是这种方式没有办法确定在波峰来临时准确启动采样. 除非通过数据口接同步信号,但在软件中如何识别下降沿时刻? 我是利用Delphi做二次开发的. 请大虾赐教!

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-09-09 15:05:00
5楼
简单的说, 您的问题是在于... 软件限制一次只能取 10K. 这问题应该可以找厂家解决. (应该是软件的限制)

jacov

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 5回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2004年9月07日
发表于:2004-09-10 10:20:00
6楼
好的,谢谢GaryLin

热门招聘
相关主题

官方公众号

智造工程师