在数据采集应用中怎样选择合适的采样率

发布者:AngelicHeart最新更新时间:2009-02-03 来源: 工业控制关键字:采样率  试错测试  状态机 手机看文章 扫描二维码
随时随地手机看文章

     在具体数据采集用中,试错测试可能使用得最为普遍,但它既不是最快的也不是最好的确定抽样率的方法。采用系统工程分析并通过一系列预先设计好的试验,可以帮助快速找到适合的采样率。本文以弹球开关为例,介绍选择采样率时应考虑的一些因素。

      最近我问一个工程师他系统所使用的采样率是多少,他回答说:“5毫秒”。我接着问他为什么,“因为它合适,”他说道。“我们花了很多天来测试不同的采样率,只有这个最合适。”

      他的系统是一个按钮开关,要求去除掉一些反弹效应。他和他的试验小组最后选择5ms作为间隔是因为在测试过程中,采用这样的采样率既不会将一个信号错误地认为是两个信号,且由于速度快,也不会将有用的双击误认为是反弹。图1:带有反弹效应的机械开关响应波形。

     5毫秒也许是一个可以接受的数值,但由于没有考虑系统其它因素,尤其是实时反应时间,我们确实无法知道这是不是最好的答案。

      假设处理器过载,例如5ms采样时间造成40%过载,情况会怎样呢?可以将采样时间间隔增加到10ms而把代码占用的CPU资源降低到20%,另外一种方法是保持采样率不变,而将控制码执行的速度降低一半。那么从系统的角度来看哪一种方法更好呢?在采样资源和处理器利用率以及其它实时因素(如调度与优先级调换)间有没有一种好的折衷方法呢?下面让我们具体来看一看。

选择标准

       在选择采样率时,有几个对立的因素要考虑,这些因素包括:

      ·采样应尽可能快,这样精度才高

      ·采样应尽可能慢,以节约处理器的时间

      ·采样应快到能提供足够的响应时间

     ·采样应慢到输入信号不受噪声的影响

     ·采样率应为控制算法频率的倍数,以减少抖动

      由于没有一个答案能满足所有的要求,所以在考虑具体应用特性时只能找到一种比其它都更好的采样率,本文介绍的技术将有助于确定这个采样率,包括下面几个步骤:

     1. 测量传感器的特性。

     2. 如果输入有噪声,应选择合适的算法将其滤掉。

     3. 只在满足功能的基础上计算采样率的最高和最低界限。

     4. 在最高和最低界限之间确定均衡点。

     5. 按均衡点优先次序在最高和最低界限间确定采样率。

      这种方法适用于所有传感器,下面我们以实例集中讨论数字开关的情形。

数字开关

     数字输入最简单的形式是开关,当开关合上时,开关的值是1,打开时值为0,如果是负逻辑,结果刚好相反。很多嵌入式系统都有一个或多个开关,如果开关很少,少于纯数字输入/输出(DIO)端口数量时,它们通常直接接到DIO端口上;开关数量多的时候则由一个开关矩阵来控制,这个以后另文再述。图3:测量σmin和τmax的电路。

     一个理想的开关在合上时的信号为1,打开时信号是0,从一种状态到另一种状态的转换是瞬时完成的。但实际上,还有上升和下降时间需要考虑,由于这些时间和电路电容成正比,所以通常只有几个纳秒。在我们的分析中,只要传感器数据读取速度慢过每秒10万次,就可以将上升和下降时间忽略不计,因为读取速度慢,有些开关如光开关和结构紧固的瞬态开关其特性还是非常理想的。

      然而大多数机械开关都有反弹效应。当开关合上时,从0到1的转换不是在瞬间完成或者说不是连续上升的。图1a显示了从示波器上看到的一个机械开关输出转换过程的波形,图1b是开关输出的数字信号波形。主脉冲前后多余的脉冲就是所谓的反弹,它产生于开关内部机械弹片发生接触的时候。如果反弹会造成不良的影响,就必须对其进行滤波,这个过程通常称为去反弹。

测量关闭时间

      要决定采样率,就需要知道最小开关关闭时间,我们用σmin表示,它也是确保采样软件探测到开关状态的最短时间。有时候系统会具体规定,在没有规定的情况下,就需要通过实验,在具体系统需求和硬件特性的基础上确定。

      最小开关时间一般用来作为数据噪声的阈值使用,而不是实际开关打开或关闭的时间。如果在输入端检测到脉冲的持续时间小于最小关闭时间,软件就可能把它漏过,我们不把这个看作是故障。另一方面,如果脉冲时间等于或大于σmin,软件将保证检测到开关的状态。

     下面是我和一些工程技术人员对弹球机的研究经验分析,弹球机是一种很好的实验工具,因为它具备好几种类似于数字输入开关的机构,每种都有不同的特性,图2显示了其中的一些。 图2a中的开关必须经常监测,因为弹球运行速度很快,对于这类开关,我们测量得到它的σmin大概是10ms。(实际测量值带有小数位,我们分析时也是使用带小数的实际测量值,但为讨论方便起见本文中我们都四舍五入取为整数。)这个值根据环境不同而有所不同,改变环境特性可能会得到不同的最快开关关闭时间。也可以通过测量和分析来确定弹球通过开关的最快速度,如果这样的话,σmin可通过数学方法推导出来,它是最大球速和开关尺寸的函数。

      图2b是一个中速开关。由于弹球方向改变,球通过开关时的速度值范围比最高速度要慢很多。在这个实验中,我们测得这些开关的最短开关关闭时间是50ms。

      慢速开关是指在软件检测到之前它总是关闭的,直到发出重新打开的命令,图2c就是这样一种开关。在上面一个图中,球落在装有开关的洞里,当软件检测到有球存在以后,再触发电磁阀将球弹出去;在下面图中,球打在挡片上使弹簧将挡片拉下来,然后电磁阀再启动将挡片重新推上去。

      对于慢速开关,最短开关闭合时间是触发电磁阀的控制软件的函数,在我们实验中电磁阀触发频率是10Hz。 一般我们假定开关闭合后没有被锁住,采用锁住的方法通常不现实,有时候根本不可能,如像开关矩阵。如果把开关锁住,结果就如图2c中的开关一样,其速度是发出解除锁存信号任务的函数。

      如果开关不是理想的,还必须测量它的稳定时间,我们用τ来表示,它指达到正确反映开关状态的稳定值之前,开关可能弹起的时间。图4:滚球开关的输出波形图。

     我们发现图2a中左边的滚轮开关并不理想,但右边的光电开关却非常理想,它没有任何反弹。出于分析的目的,我们对最坏情况稳定时间τmax特别感兴趣。

     通过实验我们可得到σmin和τmax。测量时我们把开关放在Vcc和GND之间,并通过一个限流下拉电阻,Vout接在逻辑分析仪上,然后将逻辑分析仪设定为上升沿触发(图3)。

     用最快的速度将开关闭合后再打开。如果是一个理想的或接近理想的开关,你可以看到开关很平滑地从0变为1,再从1变为0;如果是一个有反弹的开关,输出的波形跟图4就有点类似。将这个实验反复几十次,记录下每次的σmin和τmax

     在进行这些实验的时候,必须要考虑最终应用中开关的工作情况。在弹球机上,球通过开关的速度比人按下再放开的速度要快,也比人用手将球滚过开关的速度要快,正因为此,在测试过程中我们采用电磁阀来触动推杆将球推过开关,而不是用手指来触动开关或用手将球滚过开关。

      设计为手工操作的开关要经历各种按压,因此应针对不同情况重复进行实验。例如轻轻按下时开关稳定时间快,但闭合时间也短;而使劲按下开关闭合时间长,但也许由于反弹其稳定时间也长,实验时要记录下最小、平均及最大σmin和τmax。为了使采样数据真实,可以在工休场所进行实验,要求进来休息的每一个人很快地按几下开关,再慢慢地按几下,再几次连着按两下,其目的是为了能得到尽可能接近使用者的数据。如果是小孩用的东西,就叫小孩来按开关;如果使用者是18至80岁的人,就让这个年龄段的人来试。多收集数据或许可以防止灾难性的结果,不会使生产出来的产品有些人根本就不能正常使用。

[page]

 

理想开关

      理想开关的稳定时间永远是0,采样率要保证所有开关的闭合都检测到,因此比最小闭合时间短。虽然看起来简单,但也有一个取舍的问题,如果σmin是10μs,我们是否要每10μs就检测一次?这样做肯定会耗尽CPU所有的可用资源。

     克服这种问题的最好方法是考虑实际应用状况然后再做取舍。假如10μs的闭合时间确实是有可能的,但在每一千次闭合中才会出现一次(0.1%),由于99.9%的时间里σmin都大于10μs,那么5ms最小闭合时间更加切合实际,而且比10μs最小闭合时间使用的CPU资源要少很多。但漏掉一个10μs开关闭合对于一个具体的应用来说是不是可以接受呢?图5:去反弹算法的状态图和布尔函数。

      答案取决于实际的应用。如果开关闭合是由人来操纵,我们可以假设按开关时太轻了,使用者只要按重一点就可以了;如果闭合是弹球机中的一个开关,我们可以认为开关没有真正闭合,结果也就是玩的人得不到分;但是如果开关的闭合与有毒气体的释放有关,那么我们就要把它测出来,在这种情形下,我们要将开关锁住,或者由一个专门的小处理器每隔10μs读取一次数据。

     我们假设只有检测到σmin大于5ms的开关闭合是可以接受的,这时精度也有99.9%,但如果此时CPU过载了又怎么办?可不可以用10ms来代替5ms从而进一步使CPU负载减半呢?根据实验,这样精度会降到99.0%。如果在实际应用中没有问题,那么这种取舍还是值得的。但是如果采样率改为10ms后精度降到了85%,这种取舍就有点危险了。记录下所有σmin的实验结果能有助于你正确评估如何在精度和CPU的利用率间找到平衡。

    到现在为止所提到的开关都是理想状态下的开关,开关反弹对选择合适采样率又增加了一些影响。非理想开关 我们来看一下图2a中的滚球开关。该开关的输出如图4a,过滤后的波形如图4b。输出通过去反弹算法过滤,以给应用处理代码提供一个纯净的信号,表示开关的闭合状态。已有很多文献介绍了多种硬件和软件去反弹算法。下面分析中所用到的算法如图5所示,它是一个同步状态机,需要对同一数值进行两次连续采样,以记录开关的状态改变。对不同的算法,采样率分析和结果会有所不同。

     在嵌入式处理器中可以直接用布尔代数执行这种算法,该方法的另一个优点是可对多个开关同时去反弹。例如表1中的代码显示了图5去反弹算法执行情况,这里同时对8个独立的输入进行处理,假设每个输入都用输入变量x的一位来表示。

      如果硬件设计可以灵活改变,也可采用FPGA在硬件中执行状态机逻辑。在这种情形下,不需要再用软件对开关进行去反弹,可以认为开关是理想的,硬件状态机的时序和我们下面的分析没有太大区别。

     如果开关关闭后在最小关闭时间内采样少于两次,开关的动作就会被过滤掉,这也就决定了采样周期的上限是σmin/2。

     现在我们来看看采样周期的下限,我们将去反弹算法的最低要求看作是不能将两次连续的开关动作搞错。例如我们得到两个为1的样本,后面是两个0,然后又是两个1。假定只有最后两个1是稳定状态,此时过滤后的输出在稳定时间内至少有4个样本。为防止出现误判断,在开关关闭瞬间我们必须最多取三次样,所以采样周期要大于τmax/3。

     将上限和下限合在一起,对于图5所示的状态机数字输入去反弹输入驱动器我们可得采样周期Ts(采样率fs=1/Ts)的条件:







有可能出现的值表明了采样率可接受取舍范围。假设τmax是3ms,σmin是10ms,那么由等式1可得1mss<5ms。为了尽量减少采样占用的CPU时间资源,我们把采样时间定在5ms附近。

       采取快速采样(如1ms)的另一个理由是试验获得的关闭时间也许不是最小值。如果希望采集到99.0%的开关闭合,快一些的采样率也许能将这个数值提高一点。但为了避免系统将反弹误认为是开关闭合,采样率绝不要小于1ms。

      当然,也可能采样率范围都不可接受。我们以一个特殊的反弹开关作为例子,它的稳定时间是6ms,最小关闭时间是4ms。此时,式1得到一个空集,没有一个采样率可以保证捕获到开关的闭合且确保反弹不会误认为是好几次开关闭合。

      要解决这个问题,设计人员就必须考虑其它的方法。有一种办法是采用不同的去反弹算法,如在三个1而不是两个连续的1中找出两个1;另一种办法是考虑开关闭合时的内部到达时间;第三种办法是要么提高σmin,偶尔错过开关的闭合,要么减少τmax,偶尔将一次开关闭合当作两个事件。不管选择哪一种,这些方法都要容易记录下来,如果选择被证明不好,更变设计仅仅只需改变采样率就可以了,或者改变有限状态机定义的算法。

本文结论

      归纳起来,我们用试验和分析得到输入的采样率有效范围,当范围确定以后,再考虑实际应用的其它因素,在可接受范围内选择一个最佳采样率。采用这种方法可以相对较快地得到合适采样率,因其它应用和系统问题进行调节也只要几分钟就可以了,不需要用几天或几个星期的时间进行试错测试和微调。

      虽然本文中提到的数字开关代表了很多嵌入式系统器件,但是它们还很不全面,不过我的目的是证明组合式分析实验方法的有效性,而不是提供对所有可能存在的传感器都适用的解决办法。该方法依具体使用的传感器、使用场合以及通过简单试验获得合理数据的能力的不同而需要作不同程度的修正。

关键字:采样率  试错测试  状态机 引用地址:在数据采集应用中怎样选择合适的采样率

上一篇:分析高可用性系统的硬件和软件设计模式
下一篇:分析讨论嵌入式系统电源的设计与调试

推荐阅读最新更新时间:2024-03-30 22:07

基于FT245BM和FPGA的USB接口设计
一、引言         USB总线因其传输速度快、占用资源少以及真正的即插即用等诸多优点,受到了广大开发者的青睐,已经成为很多计算机设备的一种基本配置。目前被广泛采用的USB设备开发方案主要有以下两种(1)利用USB设备端接口芯片加微控制器结构。如国内用的比较多的Philips公司的PDIUSBD12/ISP1581等。(2)采用USB单片机。采用这两种方案要求开发者彻底理解USB协议的细节,并编写出固件程序。固件的运行要占用微控制器的时间和空间资源,实际通信效率不会很高。也有人用FPGA实现固件的功能,但这种方案开发和调试的难度很大。本人在实际工作中用FPGA外部直接连接一片USB协议芯片FT245BM,实现了FPGA与PC机
[嵌入式]
MSP430 ADC12 最高采样率测试
使用的MSP430型号为MSP430F5529LP(Lauchpad) MSP430x5xx and MSP430x6xx Family User's Guide 给出:其内置12位ADC的 最高采样率约为200ksps 下面详述ADC设置过程。 目录 1.设置ADC转换模式为Repeat-single-channel; 2.设置ADC的转换时钟sample-and-hold source (SHI) 3.设置定时器A为输出输出模式 4.设置输入通道 5.设置ADC12SHP位 6.设置采样保持时间 1.设置ADC转换模式为Repeat-single-channel; 请通过
[单片机]
MSP430 ADC12 最高<font color='red'>采样率</font><font color='red'>测试</font>
STM32 状态机实现按键消抖处理源码
key.h #ifndef __KEY_H__ #define __KEY_H__ #include stm32f10x.h #ifdef KEY_GLOBALS #define KEY_EXT #else #define KEY_EXT extern #endif //IO定义 #define down() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) //PA1 KEY_EXT void key_down(void); #endif key.c /****************************************Copy
[单片机]
德国Spectrum发布采样率为5GS/s的PCIe高速数据采集卡
德国Spectrum首次推出频率范围介于DC至1GHz区间的PCIe高速数据采集卡,以满足工程师与科学家在捕获及分析快速电子信号时的需求。此次,实时采样率高达5GS/s的9款全新型号的数字化仪将加入M4i系列,使德国Spectrum公司基于PCIe的产品性能得到极大的扩展。此外,高宽带使用户在测量信号、边缘以及脉冲时可精确到亚纳秒。 此次推出的PCIe高速数据采集卡分为单通道、双通道及四通道。当诸如数字示波器和频谱分析仪等传统的测量仪器在测量速度、灵活性、尺寸或通道密度方面遭遇问题时,新产品将能够取而代之。 新产品的设计是基于最受行业认可的PCIe总线,最高的数据传输速度可达3.4GB/s。德国Spectrum的全
[嵌入式]
stm32 adc 采样率
STM32的ADC的采样时间及模拟信号的最大带宽。 请看STM32技术参考手册的16.2节,和STM32F103xx数据手册的5.3.17节表44。可以在ST的中文网站下载到上述2个手册: http://www.stmicroelectronics.com.cn/stonline/mcu/MCU_Pages.htm 前面所说 STM32的ADC的采样及转换时间最小为1us ,实际上STM32的ADC采样及转换时间可以通过程序编程进行调整,共有8种选择,按 ADC模块的驱动时钟算分别为: 1.5 ADC时钟周期 7.5 ADC时钟周期 13.5 ADC时钟周期 28.5 ADC时钟周期 41.5 ADC时钟周期 55.5 ADC时钟
[单片机]
DPO4000B系列示波器的性能特点及应用
DPO4000B系列高性能荧光示波器提供高达 1 GHz 的带宽和 5 GS/s 采样率,为您观看快速变化信号细节提供所需性能。通道数多达 20 个,您只需一台设备即可分析模拟和数字信号。结合自动串行和并行总线分析、创新的 Wave Inspector® 控件以及自动功率测量,DPO4000B 系列带给您功能丰富的工具来简化和加快对复杂设计的调试。 产品特点: ◆最高带宽1GHz; ◆记录长度:20M样点所有通道; ◆最高采样率:5GS/s所有通道 ◆波形捕获速率:50000波形/秒; ◆显示器:10.4英寸XGA; ◆电源分析选项; ◆可应用USB/FlexRay/Ethernet分析; ◆最大总线显示数:4; ◆最高定时分
[测试测量]
RIGOL紧凑型示波器又出新系列,350MHz带宽+5GSa/s采样率
近日,普源精电(RIGOL)在原DS8104-R和DS8204-R的基础上,推出最新型号的DS8034-R紧凑型示波器,为客户提供该系列产品的2GHz/1GHz/350MHz三种带宽选择。DS8034-R是为满足更广泛的工业自动化测试的需求而开发,350MHz带宽,采样率5GSa/s,为工程师提供适用于更多场景应用的选择。 DS8034-R示波器 轻薄小巧,机架设计 DS8000-R系列数字示波器仅1U高度,半机架宽,支持机柜集成和工作台两种工作模式。其中,单机提供脚垫和提手,而多机集成提供机架安装套件,多台机器则可安装在一个机柜中,紧凑型高密度封装能够节省大量空间。 DS8000-R示波器紧凑型设计
[测试测量]
RIGOL紧凑型示波器又出新系列,350MHz带宽+5GSa/s<font color='red'>采样率</font>
测试手机摄像头模组,采样率为何不对
上周在微信上收到一位小伙伴的求助信息,其实是一个很简单的问题,但是就是这么简单的问题,却是很多工程师经常会犯错的地方。今天就和大家一起来分享下这个问题。 背景介绍: 一位手机研发工程师在测试手机摄像头模组的的I2C信号时,得到的波形如下图所示: 很显然波形已经失真,与I2C的规范不一致,I2C的规范的波形如下图所示: 分析问题: 看到这个问题的时候,很自然的想到是不是测试出了问题,因为手机方案是比较成熟的设计,对于这类低速的信号,即使出问题也不会很严重。 I2C的信号在快速模式下的速率只有400Kbps,测量所使用的示波器为是德科技的MSO-X 2024A,带宽为200MHz,采样率为2GSa/s。按照民
[测试测量]
<font color='red'>测试</font>手机摄像头模组,<font color='red'>采样率</font>为何不对
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
最新测试测量文章
更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved