通知设置 新通知
单片机ADC采样常用的十大滤波算法
laoguo 发表了文章 • 0 个评论 • 676 次浏览 • 2022-11-16 09:16
假定从 8 位 ADC 中读取数据(如果是更高位的 ADC 可定义数据类型为 int) ,子程序为get_ad();
一.限幅滤波法(又称程序判断滤波法)
A.方法:
根据经验判断,确定两次采样允许的最大偏差值(设为 A)
每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次数值
B.优点
能有效克服因偶然因素引起的脉冲干扰
C.缺点
无法抑制那种周期性的干扰
平滑度差
D.示例
#define A 10
char value;
char filter()
{
char new_value;
new_value = get_ad();
if (( new_value - value > A ) || ( value - new_value > A )
return value;
return new_value;
}
二.中位值滤波法
A.方法:
连续采样 N 次(N 取奇数)
把 N 次采样值按大小排列
取中间值为本次有效值
B.优点:
能有效克服因偶然因素引起的波动干扰
对温度、液位的变化缓慢的被测参数有良好的滤波效果
C.缺点:
对流量、速度等快速变化的参数不宜
D.示例
/* N 值可根据实际情况调整排序采用冒泡法*/
#define N 11
char filter()
{
char value_buf[N];
char count,i,j,temp;
for ( count = 0; count < N; count++)
{
value_buf[count] = get_ad();
delay();
}
for (j = 0; j < N-1; j++)
{
for (i = 0; i < N - j; i++)
{
if ( value_buf > value_buf[i + 1] )
{
temp = value_buf;
value_buf = value_buf[i + 1];
value_buf[i + 1] = temp;
}
}
}
return value_buf[(N-1)/2];
}
三.算数平均滤波法
A.方法:
连续取 N 个采样值进行算术平均运算
N 值较大时:信号平滑度较高,但灵敏度较低
N 值较小时:信号平滑度较低,但灵敏度较高
N 值的选取:一般流量, N=12;压力: N=4
B.优点:
适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动
C.缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费 RAM
D.示例
#define N 12
char filter()
{
int sum = 0;
for ( count=0;count<N;count++)
{
sum + = get_ad();
delay();
}
return (char)(sum/N);
}
四.递推平均滤波法(又称滑动平均滤波法)
A.方法:
把连续取 N 个采样值看成一个队列
队列的长度固定为 N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的 N 个数据进行算术平均运算,就可获得新的滤波结果
N 值的选取:流量, N=12;压力: N=4;液面, N=4~12;温度, N=1~4
B.优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统
C.缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费 RAM
D.示例
char value_buff[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buff[i++]=get_data();
if(i==N)
i=0;
for(count=0;count<N;count++)
sum+=value_buff[count];
return (char)(sum/N);
}
五.中位值平均滤波法(又称防脉冲干扰平均滤波法)
A.方法:
相当于“中位值滤波法”+“算术平均滤波法”
连续采样 N 个数据,去掉一个最大值和一个最小值
然后计算 N-2 个数据的算术平均值
N 值的选取: 3~14
B.优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差
C.缺点:
测量速度较慢,和算术平均滤波法一样
比较浪费 RAM
D.示例
#define N 12
char filter()
{
char count,i,j;
char value_buf[N];
int sum=0;
for (count=0;count<N;count++)
{
value_buf[count] = get_ad();
delay();
}
for (j=0;j<N-1;j++)
{
for (i=0;i<N-j;i++)
{
if ( value_buf>value_buf[i+1] )
{
temp = value_buf;
value_buf = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}
for(count=1;count<N-1;count++)
sum += value[count];
return (char)(sum/(N-2));
}
六.限幅平均滤波法
A.方法:
相当于“限幅滤波法”+“递推平均滤波法”
每次采样到的新数据先进行限幅处理,
再送入队列进行递推平均滤波处理
B.优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰, 可消除由于脉冲干扰所引起的采样值偏差
C.缺点:
比较浪费 RAM
D.示例
略 参考子程序 1、 3
七.一阶滞后滤波法
A.方法:
取 a=0~1
本次滤波结果=(1-a) 本次采样值+a上次滤波结果
B.优点:
对周期性干扰具有良好的抑制作用
适用于波动频率较高的场合
C.缺点:
相位滞后,灵敏度低
滞后程度取决于 a 值大小
不能消除滤波频率高于采样频率的 1/2 的干扰信号
D.示例
/* 为加快程序处理速度假定基数为 100, a=0~100 */
#define a 50
char value;
char filter()
{
char new_value;
new_value = get_ad();
return (100-a)*value + a*new_value;
}
八.加权递推平均滤波法
A.方法:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低
B.优点:
适用于有较大纯滞后时间常数的对象
和采样周期较短的系统
C.缺点:
对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
不能迅速反应系统当前所受干扰的严重程度,滤波效果差
D.示例
/* coe 数组为加权系数表,存在程序存储区。 */
#define N 12
char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buf[N];
int sum=0;
for (count=0,count<N;count++)
{
value_buf[count] = get_ad();
delay();
}
for (count=0,count<N;count++)
sum += value_buf[count]*coe[count];
return (char)(sum/sum_coe);
}
九.消抖滤波法
A.方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限 N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器
B.优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
C.缺点:
对于快速变化的参数不宜
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统。
D.示例
#define N 12
char filter()
{
char count=0;
char new_value;
new_value = get_ad();
while (value !=new_value);
{
count++;
if (count>=N)
return new_value;
delay();
new_value = get_ad();
}
return value;
}
十.限幅消抖滤波法
A.方法:
相当于“限幅滤波法”+“消抖滤波法”
先限幅,后消抖
B.优点:
继承了“限幅”和“消抖”的优点
改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统
C.缺点:
对于快速变化的参数不宜
D.示例
参考 1、 9
————————————————
原文链接:https://blog.csdn.net/u011852186/article/details/126484032
关于一款All sensor 的压力传感器ELVH的引脚定义问题
laoguo 回复了问题 • 1 人关注 • 2 个回复 • 368 次浏览 • 2022-10-15 18:08
双极霍尔元件原理
laoguo 发表了文章 • 0 个评论 • 325 次浏览 • 2022-09-21 07:47

双极霍尔需要两个磁极分别控制高低电平,利用磁场NS极交替来输出信号。如S极靠近时输出低电平,N极靠近时输出高电平。如果磁场被移除,则是随机输出,有可能是打开,也有可能是关闭。
双极霍尔有一种特殊形式叫锁存霍尔或锁定霍尔:如S极靠近时开启,磁场离开继续保持开启;当靠近N极时才会关闭,磁场移除后继续保持关闭状态,直到下次磁场改变,这种保持上次状态的特性即锁存特性,这种类型的霍尔就是双极锁存型霍尔.
双极性霍尔传感器设计为灵敏开关。双极型开关有一致的迟滞性,但是,不同的器件对发生在正极或者负极的开关点的范围是不同的。因为需要改变磁场的极性,来确保开关点的切换,并且需要一致的迟滞性来确保周期,所以需要磁信号改变幅度ΔB,故而这些器件紧密排列,南北两极交替使用。
双极霍尔一向使用于电机换相或者计圈数应用场景!最常见的是霍尼韦尔的SS41F,应用于电动自行车轮毂电机上。
SMI的SM7331-BCE-S-001-001,SM7331-BCE-S-001-000,这两个有什么差别?
回复laoguo 回复了问题 • 1 人关注 • 1 个回复 • 333 次浏览 • 2022-08-25 16:41
All Sensors压力传感器常见术语
laoguo 发表了文章 • 0 个评论 • 973 次浏览 • 2021-09-27 17:19
绝对压力:相对于真空测量的压力。通常以磅每平方英寸绝对值 (psia) 表示。
高度压力传感器:一种气压传感器,用于根据压力高度剖面确定高度。
自动参考:一种通过采样一个或多个参考压力来消除错误的技术,然后校正输出信号函数。
大气压力传感器:测量当地环境压力的绝对压力传感器。
基本输出:既未放大也未通过校准补偿的压力传感器的原始输出。
最佳直线 (BSL):选择的最佳直线使得真实传感器响应曲线包含三个最大偏差相等的点。
爆破压力:可以施加到传感器上而不会导致传感器灾难性故障的最大压力。
共模误差:与主要输入变量(输入压力)无关的误差。对于 All Sensors 传感器,所有偏移误差都是共模误差。
共模压力:可同时施加到隔膜两侧的压力。
补偿输出:对一个或多个性能参数进行补偿的压力传感器的输出,例如偏移、跨度、温度对偏移和跨度的影响、非线性、位置灵敏度、前后线性和预热偏移。
性能参数的补偿可以通过设计或校准来实现。可以通过设计实现各种补偿,例如,所有 A-Package 产品都固有地补偿了 Front to Back Linearity 和位置灵敏度误差。通过校准补偿的一些参数的示例是偏移、跨度和温度对偏移和跨度的影响。
压差:两个压力源之间测得的压差。通常以磅每平方英寸差值 (psid) 表示。当一个源是完美真空时,压力差称为绝对压力。当一个来源是当地环境时,压力称为表压。
压差传感器:一种测量通过管道连接到其输入端的两个压力源之间的压差的设备。
数字输出:压力传感器的输出,以离散量(量化)表示,通常使用标准接口(如 I2C 或 SPI)进行通信。数字输出信号的好处是与主机微处理器 (uP) 的直接接口、改进的抗噪性和更少的组件数量。
误差带:传感器响应与其 BSL 的偏差,由其 BSL 两侧的线定义,包括针对给定正常模式或共模误差测量的最大偏差。
满量程:端点之间的代数差异。其中一个端点是实际偏移电压,另一个端点是范围的上限。
满量程偏移:传感器输出电压灵敏度在指定温度范围内对压力的偏移。这相当于灵敏度的温度系数。该传递曲线的特性非常接近于基本压阻传感元件的二阶方程。对于毫伏输出设备,这是通过无源电阻来补偿的;对于放大输出设备,它是 ASIC 补偿的,使用二阶曲线拟合每个部件在指定的压力和温度范围内获取的数据。该传递曲线的特性不随任何其他条件而改变。
表压:相对于环境压力 (psig) 测量的压力。
压力滞后:压力滞后被测量为压力循环前后参考条件下输出之间的最大差异。
互换性:当一个传感器被具有相同压力输入和温度范围的任何其他相同类型的传感器替换时,由最大信号偏差定义的误差带。
线性度:恒温 (25°C) 下测量输出与“最佳直线”的最大偏差,由三个点(偏置压力、满量程压力和二分之一满量程压力)确定,其中 Y= 测量值每个设备
线性、滞后误差:相对于理想输出电压响应,在整个工作压力范围内,输出电压对压力的响应误差;输出信号对压力的一阶传递曲线响应的偏差。该误差是压力的函数而不是温度的函数。这个误差是通过测量三个压力点的压力来计算的;零压力。全量程压力和二分之一全量程压力,并根据与测量数据拟合的“最佳直线”曲线计算。
最小值/最大值:是规范的保证限值。这些限制通常在测试限制和规格限制之间使用保护带进行 100% 测试。
最可能的误差:通过计算为换能器指定的所有适用误差的平方和的平方根获得的误差带。
标称 值:它是第一次生产运行期间制造的产品规格的平均值。
正常模式误差:是主要输入变量(输入压力)的函数(通常假设成正比)的误差。对于 All Sensors 传感器,所有量程误差都是正常模式误差。
偏移校准:由校准偏移电压时的最大误差定义的误差带。
失调误差:由失调电压与其指定值的最大偏差定义的共模误差带。它可能包括校准、温度、可重复性和稳定性误差。
偏移长期漂移:在指定时间内可能发生的偏移电压变化。几十年来,人们一直在研究压阻式压力传感器出现这种特性的可能原因。迄今为止,错误没有决定性的单一原因或主要原因。由于大多数 All Sensors 低压传感器使用双芯片电气交叉耦合补偿,因此存在固有的偏移长期漂移补偿。产品 All Sensors 的预热换档测试通常会识别任何偏移长期漂移问题,并且会被拒绝。
偏移位置灵敏度:由于传感器位置的变化而引起的偏移电压的变化。用于测量超过 15 psi 压力的传感器几乎没有位置灵敏度。因为传感器的膜片有质量,而且质量与膜片厚度的比率随着压力范围的减小而增加,所以对位置的灵敏度随着压力范围的减小而增加。由于大多数 All Sensor 低压传感器使用双芯片电气交叉耦合补偿,因此即使是最基本的传感器也具有固有的偏移位置灵敏度补偿。
偏移可重复性:误差带表示传感器在 25°C 下测量并暴露于指定范围内的任何其他温度和压力后重现偏移电压的能力。
偏移稳定性:误差带表示传感器在恒定压力和温度下保持偏移电压的能力。
失调温度系数:误差带定义为温度从 25°C 变化到指定范围内的任何其他温度时失调电压的最大偏差。
偏移温度偏移:输出偏移电压在指定温度范围内的变化。对于非放大传感器,规格限制在三个温度点进行测试;25°C,最高温度,最低温度,然后回到 25°C。对于放大压力传感器,测量的数据点更多,并且补偿在数学上适合数据点。通常没有一致的方程来描述偏移温度偏移特性。由于大多数 All Sensor 低压传感器使用双芯片电气交叉耦合补偿,因此即使是最基本的传感器也具有固有的偏移温度偏移补偿。
偏移电压:当传感器在膜片上的压差为零时的输出电压。对于绝对压力传感器,当传感器的绝对压力为零时,膜片上的压差为零。对于表压或差压传感器,当隔膜两侧承受相同压力时,差压为零。
Offset Warm-up Shift : 在运行的第一个小时内,当传感器通电时可能发生的输出偏移电压的变化。所有传感器针对此参数测试所有低压传感器。由于大多数公司的低压传感器使用双芯片电气交叉耦合补偿,因此即使是最基本的传感器也具有固有的偏移预热偏移补偿。
工作范围:传感器已被测试的压力范围。对于具有毫伏输出的传感器,该范围通常可以扩展到规定范围的至少两倍,而对规格的降级幅度很小。对于放大输出传感器,在输出“轨”到输出电压限制之前,范围只能扩展 10%。
输出跨度:是指定工作压力范围的输出电压。对于没有内部电压参考的传感器,跨度与传感器的电源电压成比例。传感器电源电压的变化会导致所施加压力的输出范围发生变化。跨度是满量程压力下输出电压与偏移电压的差值。
过压 – 最大值:可以施加的最大正常模式(测量)压力,而不会改变传感器的性能或超出指定限制的精度。这将应用于差分传感器的任一端口。这也称为“证明压力”。
总体精度 - 校准:相对于 BSL 的组合误差带,强制参考对一个特定传感器而言是唯一的。它不包括偏移和灵敏度校准误差。它包括所有其他偏移和跨度误差:温度、重复性、稳定性、线性度和滞后。
总体精度 - 可互换:相对于理想传感器响应特性的组合误差带。它排除了稳定性误差,因为稳定性误差已经包含在指定的校准误差中。它包括所有其他偏移和量程误差:校准、温度、重复性、线性和滞后。
耐压:是可以施加到传感器上而不会导致性能指标发生任何变化的最大压力。
参考压力:在测量传感器误差时用作参考的压力。
参考温度:用作测量传感器误差的参考温度。
重复性:表示传感器在指定压力和温度下,在指定范围内的任何其他压力和温度下再现输出信号参数(例如偏移或跨度)的能力的误差带。
灵敏度:输出信号电压变化与相应输入压力变化的比值。灵敏度是通过计算量程与指定输入压力范围的比率来确定的。
灵敏度校准:由校准灵敏度的最大误差定义的误差带。
量程:在指定的最小和最大工作压力下测得的传感器输出信号的算术差异。
量程误差:由量程与其指定值的最大偏差定义的正常模式误差带。它可能包括灵敏度校准温度、线性度、滞后、可重复性和稳定性偏差。
量程重复性:误差带表示传感器在 25°C 下测量并暴露于指定范围内的任何其他压力和温度后重现其量程的能力。
跨度温度系数:由跨度的最大偏差定义的误差带,当温度从 25°C 变化到指定范围内的任何其他温度时。
量程稳定性:误差带表示传感器在温度保持恒定的情况下在指定范围内的任何压力下保持量程电压的能力。
稳定性:误差带表示传感器在恒定温度和压力输入下保持输出参数值(例如偏移或量程)的能力。
电源电压:施加在压力传感器输入端子上的电源电压。
温度系数 (TC):当温度从 25°C 变化到指定范围内的任何其他温度时,由传感器输出参数(例如偏移或量程)的最大偏差导致的误差带。它通常以 (ppm/°C 或 µV/V/°C) 为单位进行测量。
温度补偿输出:压力传感器的输出被补偿以抵消与温度相关的误差,特别是对跨度和偏移的温度相关性进行补偿。
压力传感器输出参数对温度变化很敏感,特别是压力响应(Span)和零压差输出(Offset)表现出温度依赖性。为了抵消这种温度依赖性,All Sensors 为传感器产品提供了内部电路,可在指定的温度范围内补偿跨度和偏移的温度变化。温度补偿输出产品提供模拟(非放大 mV、放大 4V)和数字(SPI 和 I2C)输出。
真空:完美的真空是指没有气态流体。
真空范围:完美真空 (0 psia) 和一个标准大气压 (14.697 psia) 之间的绝对压力范围。
真空传感器:为真空范围内的压力测量而定标的传感器。这通常是一个绝对传感器,但有时是一个仪表传感器。
最坏情况误差:通过简单添加为传感器指定的所有适用误差而获得的误差带。(总误差)
转自:http://www.allsensors.com/engineering-resources