如果您需要对按钮、光电
开关、旋转
变压器、压力、化学或其他
传感器进行实时采样,您应该以多快的速度对输入进行采样?每 10 毫秒?每 30 毫秒?您怎么知道惠的价格是多少?在之前的一篇文章(“如何选择合理的采样率”,2002 年 7 月,第 20 页)中,我讲述了我与一位工程师的对话。我问他的特定应用的采样率是多少。
他的回答是“5毫秒”。
“为什么?” 我问。
“因为它有效,”他说。“我们花了几天时间测试各种采样率,这就是有效的。”
在另一个应用中,规范列出了仅根据其在类似应用中的使用而制定的采样率。将此值包含在规范中,给系统设计者带来了任何灵活性。如果该速率实际上不是该应用程序的采样率怎么办?如果新软件似乎可以在指定的采样率下工作,那么该采样率将在应用程序的生命周期内保持固定,并且该值永远不会受到质疑。只有当采样软件不起作用时,采样率才会受到质疑。
在我之前的文章中,我解释了一种科学地确定数字输入采样率的方法。在本文中,我将回顾这些信息并讨论它如何应用于模拟传感器。
选择多个
选择采样率的临时方法会带来几个问题。
首先,不应该花费数天的试错测试来确定给定应用程序的正确采样率。相反,对当前的应用和问题进行系统工程分析只需进行几次实验就可以得出正确的答案。
其次,“”的定义是什么?一个应用程序的答案不一定是另一应用程序的答案。通常,使用试错法来确定采样率,并且测试是在仅包含传感器采样代码(而不是整个应用程序)的系统上执行的。还记得对我的问题回答“5ms”的工程师吗?他的代码是为需要一些去抖的
按钮开关创建的。通过测试,他终选择了 5 毫秒的轮询时间,因为它似乎不会将单次推送错误地记录为两次,并且速度足够快,不会将故意的两次推送误解为弹跳。
实际上,5 毫秒的轮询时间对于该系统来说可能是可以接受的,但如果不考虑其他因素(特别是系统的实时响应),很难说这是否是答案。
例如,如果处理器过载并且 5ms 采样使用了 CPU 容量的 40%,该怎么办?将采样间隔增加到 10 毫秒将使 CPU 利用率减半。另一种选择可能是以一半的速度执行控制代码。从系统的角度来看,哪个更好?或者更重要的是,用于采样的资源、采样对处理器使用的影响以及实时可调度性和优先级反转等其他因素之间是否存在良好的折衷?
选择采样率时,通常有几个相互竞争的目标,例如:
尽可能快地采样以获得的准确性。
尽可能慢地采样以节省处理器时间。
采样速度足够慢,噪声不会在输入信号中占主导地位。
采样速度足够快以提供足够的响应时间。
以控制算法频率的倍数进行采样,以限度地减少抖动。
事实上,通常没有适用于所有系统的答案,但当考虑特定应用程序和目标硬件的特殊性时,通常有一个答案比大多数其他答案都更好。在本文中,我将展示如何系统地识别一个解决方案。通过实验和数学分析相结合,确定一组良好的采样率,并讨论如何根据应用程序的实时要求从该组中选择正确的值。以下是确定采样率的系统方法:
测量应用的传感器特性。
如果输入中存在噪声,请选择用于过滤数据的算法。
仅根据函数计算采样率的下限和上限。
确定使用下限利率和上限利率之间的权衡。
优先考虑权衡,以确定计算的下限和上限之间的合适采样率。
该方法将实验测量与对应用需求的分析理解相结合,以便设计出良好的解决方案。虽然该方法可用于大多数类型的传感器,但在本文中我们仅关注模拟输入。
模拟输入
模拟输入通过模数转换器 (ADC) 向处理器提供数据。采样率是指从 ADC 读取数据并将其传递到使用该数据的其他应用程序组件的次数。采样率直接影响输入信号的时间分辨率,就像 ADC 中的分辨率位数影响空间分辨率一样。
误差是采样率的函数。我们将误差 ε( t ) 定义为实际传感器值与控制算法在任何时间使用的值t 之间的差值。 请注意,t 是连续的,因此随着采样率T s 的增加,输入值恒定,误差通常会增加。如图 1 所示。
图 1:模拟信号采样产生的误差示例 ε( t )=|y-Ksin(ω t )|
在信号处理中,奈奎斯特准则用于确定采样率。具体来说,奈奎斯特准则规定采样率必须至少是输入信号中频率分量的两倍。给定这样的采样率,就可以重建原始输入信号。
不幸的是,在读取模拟传感器时,奈奎斯特准则不能用于大多数嵌入式控制应用。重建原始信号需要强大的计算能力;因此需要数字信号处理器。另一方面,在嵌入式控制系统中,模拟输入不需要重构。相反,输入通常用于提供感觉输入作为反馈控制的基础。因此,只需要的数据。因此,问题是该数据必须有多“新”才能将误差保持在应用程序指定的范围内。