常见传感器的原理 和 常见滤波算法实现

2025年4月2日 4点热度 0人点赞

阅读引言: 分析常见的传感器的电路原理、向大家提供一些ADC常见的滤波算法的实现, 介绍声、光、热、电、力、气和磁传感器的大致工作原理。

目录

一、常见传感器工作原理

1.声音传感器-动圈&电容咪头

2.光传感器-光敏电阻

3.热传感器-热电偶

4.电传感器-电压互感器

5.力传感器-电阻薄膜压力传感器

6.气体传感器

7.磁传感器

二、常见的滤波算法

​编辑

1.限幅滤波法(又称程序判断滤波法)

2、算术平均滤波法

3、递推平均滤波法(又称滑动平均滤波法)

4、中位值滤波法

6、加权递推平均滤波法

7. 一阶滞后滤波

8、消抖滤波法


一、常见传感器工作原理


1.声音传感器-动圈&电容咪头

参数:

1、灵敏度 : 单位应变所引起相应值的变化

2、频率响应

3、指向性

4、输出阻抗

5、动态范围

6、瞬态响应

动圈式传声器:
动圈式传声器和动圈扬声器类似,优点是使用简单,可靠,不需要前置放大器和极化电压,但瞬态响应特性和高频特性不如电容式传声器。声波驱动振膜振动,从而切割磁感线,在振
膜两侧产生感生电动势,进而产生电流,将声音转换为对应的电信号。效率一般较低。

大致工作原理总结如下: 声波驱动振膜, 导致振膜发生震动,在震动的同时切割磁感线,产生感应电动势, 接着产生电流, 声音越大, 所产生的电流越大。

电容式传声器/静电传声器:
其拾音头(极头)是一个平板电容器。声波驱动振膜振动,改变两极板之间的距离,使得电容量发生变化,导致电回路中的电流 变化,从而产生一个交流变化的输出电压。 极头的电容C很小,输出阻抗很高,所以一般需要前置放大器电路,形成阻抗转换器,将高阻抗转变为低阻抗输出。

题外话: 什么是阻抗匹配

图片来源: 【什么是阻抗匹配?这样理解真的太简单了!】https://www.bilibili.com/video/BV1Um4y1J7QGvd_source=c32ad168c898f4f780941817d2987885

阻抗匹配的概念: 阻抗匹配是指信号源, 传输线, 负载之间的一种搭配方式。

在低频电路中, 如图所示:

假如电源和内阻的大小是固定的, 当RL变大的时候, RL上的电压会增大, 电路上的整体电流就会减小,反之, 当RL变小的时候, 负载上的电压会减小, 电路中的电流会增大,聪明的伙伴会发现当负载和电源的内阻相等的时候, 负载可以会的最大的功率, 此时就是一种阻抗匹配。

而在高频电路中, 由于存在传输线效应, 当信号的频率很高的时候, 信号的波长就会很短, 波长 = 光速 / 频率。当信号的波长和信号线的长度可以比拟的时候, 就会存在信号的失真。

就是两个反射信号和电源信号二者叠加在一起, 就引起了信号的失真。在实际的电路中我们总是希望信号在传输的过程中阻抗处处相等, 这样就会让传输到负载的信号和反射的信号相互抵消。

反射系数为0, 消除干扰。

典型的声音传感器的测量电路

2.光传感器-光敏电阻

光敏电阻或光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降

总结: 因为光敏电阻的材料特性, 当光强发生变化的时候, 其电阻值会发生变化。

题外话: 什么是零点漂移

对一个放大电路, 不叫信号输入的时候, 让其工作在静态工作点, 也就是只加直流电压, 输出端也就是Uce的电压会随着电源的波动、以及温度的影响而改变, 如果是直接耦合的多级放大电路,这种现象会被逐级放大, 导致得到的结果逐渐偏离预期。最简单的抑制方法就是使用差分电路抑制, 使用差分电路之后, 结果等于两个管子的输出电压相减, 因为两个管子都会受到温度的影响,二者相减消除掉不正确的结果。

光照强度的典型测量电路:

3.热传感器-热电偶

热电偶是一种测量温度的传感器。热电偶是温度测量仪表中常用的测温元件,它直接测量温度,并把温度信号转换成热电动势信号,通过电气仪表(二次仪表)转换成被测介质的温度。热电偶有很多型号和分度号,每个都有自己独特的特点、温度范围、耐久性、抗振性、耐化学性和应用程序的兼容性。分度号有K、T、J、N、E是基本金属热电偶,热电偶的好常见的类型。

4.电传感器-电压互感器

电压互感器又称仪用变压器,是一种电压变换装置。电压互感器一种电压变换装置它将高电压变换为低电压,以便用低压量值反映高压量值的变化。因此,通过电压互感器可以直接用普通电气仪表进行电压测量。

描述:匝数比:1:1 额定输入电流:2mA频率范围:0.02kHz~10kHz -

测量电路:

题外话: 为什么这些测量电路中经常出现电压跟随器

电压跟随器是一种电路或设备,用于将输入信号的电压以相同的幅度和形状输出,但输出信号的电流能够适应和跟随输入信号的变化。其主要作用包括:

1. 输出阻抗匹配:当输入信号源的输出电阻与负载的输入阻抗不匹配时,电压跟随器可以提供低输出阻抗,以确保信号能够有效传输到负载,保持信号的稳定性和准确性。

2. 缓冲放大:电压跟随器可以提供高输入阻抗和低输出阻抗,使得能够将低输入阻抗的信号源连接到高负载阻抗的设备或电路中,保持信号传输的准确性和功率传递的有效性。

3. 信号隔离:电压跟随器可以将输入信号和输出信号电路隔离,避免负载对信号源的影响,保持信号传输的稳定性,防止电路或设备之间的相互干扰。

4. 电平转换:电压跟随器可以将输入信号的电平转换成适合负载的电平,例如将低电平驱动的信号转换成高电平输出,以满足负载的工作要求。

总的来说,电压跟随器主要用于信号放大、阻抗匹配和信号隔离等应用,可以提高信号传输的质量和性能。

5.力传感器-电阻薄膜压力传感器

电阻薄膜压力传感器模块是基于新型纳米压敏材 料辅以舒适杨式模量的超薄薄膜衬底一次性贴片而成,兼具防水和压敏双重功能。当传感器感知到外界压力 时,传感器电阻值发生变化,我们采用电路将传感器 感知压力变化的压力信号转换成相应变化强度的电信号输出。这样我们就可以通过检测电信号变化就可以 得到压力变化情况。

典型测量电路:

题外话: 分析运算放大器的时候, 虚短和虚断的条件

运算放大器(Operational Amplifier,简称Op-Amp)的虚短和虚断是基于理想运算放大器的假设条件得出的。

虚短的成立条件是:

1. 输入电阻(Rin)无限大:假设运算放大器的输入电阻趋近于无限大,那么输入端的电压可以被视为相等,从而使得输入电流几乎为零。

2. 输出电阻(Rout)趋近于零:假设运算放大器的输出电阻趋近于零,那么输出电压可以直接反映输入信号的变化,而不受负载影响。

虚断的成立条件是:

1. 输入电流(Iin)无限小:假设运算放大器的输入电流趋近于零,那么输入端的电位可以被视为相等,从而输入电压被视为相等。

2. 输出电压(Vout)趋近于零:假设运算放大器的输出电压趋近于零,那么输出端的电位被视为相等。

需要注意的是,虚短和虚断的成立只是在理想运算放大器的假设条件下成立。在实际应用中,由于运算放大器的内部结构和外部影响因素的存在,虚短和虚断并不完全成立,但在一些特定条件下,可以近似地使用这些条件进行分析和设计。

6.气体传感器

MP-2 烟雾检测气体传感器采用多层厚膜制造工艺,在微型 Al2O3陶瓷基片的两面分别制作加热器和金属氧化物半导体气敏层,封装在金属壳体内。当环境空气中有被检测气体存在时传感器电导率发生变化,该气体的浓度越高,传感器的电导率就越高。采用简单的电路即可将这种电导率的变化转换为与气体浓度对应的输出信号。

典型测量电路:

7.磁传感器

霍尔效应是指在导体中通过的电流受到磁场影响时,电子受到洛伦兹力的作用,导致电子在导体中沿着一定方向运动。这种运动引起了电子的累积,从而在导体的两侧产生了电势差。这个现象被称为霍尔效应

ES3144 是基于双极半导体(Bipolar)工艺设计和生产的霍尔器件,器件内部集成了霍尔效应片、电压调节器、反向电压保护器、信号放大处理电路、施密特触发器和一个开集电极输出驱动三极管。

典型测量电路:

二、常见的滤波算法


1.限幅滤波法(又称程序判断滤波法)

A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)。每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效。如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。
B、优点:能有效克服因偶然因素引起的脉冲干扰

C、缺点:无法抑制那种周期性的干扰、平滑度差

#define EXPERIENCE_VALUE 10 int limits_range_fliter() { static int oldvalue; int newvalue; newvalue = GetAdc(); /* GetAdc模拟读取adc的值 */ if(newvalue - oldvalue > EXPERIENCE_VALUE || oldvalue - newvalue > EXPERIENCE_VALUE) return oldvalue; return newvalue; } 

2、算术平均滤波法

A、方法:连续取N个采样值进行算术平均运算, N值较大时:信号平滑度较高,但灵敏度较低,N值较小时:信号平滑度较低,但灵敏度较高 N值的选取:一般流量,N=12;压力N=4
B、优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM。

#define N 12 /* N = 12, 4, 5看选择 */ int average_fliter() { int i, sum = 0; for(i = 0; i < N; i++) { sum += Getadc(); /* Getadc为伪函数 */ delay(10); /* for hardware prepare time */ } return (sum / N); } 

3、递推平均滤波法(又称滑动平均滤波法)

A、方法:把连续取N个采样值看成一个队列、队列的长度固定为N、每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)。
把队列中的N个数据进行算术平均运算,可获得新的滤波结果;流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4
B、优点:对周期性干扰有良好的抑制作用,平滑度高、适用于高频振荡的系统
C、缺点:灵敏度低、对偶然出现的脉冲性干扰的抑制作用较差、不易消除由于脉冲干扰所引起的采样值偏差、不适用于脉冲干扰比较严重的场合、比较

#define N 10 int recursion_average() { static int index; int count; int squence_queue[N] = 0; squence_queue[index++] = Getadc(); if(index == N) { index = 0; } for(count = 0; count < N; count++) { sum += squence_queue[count]; } return (sum / N); } 

4、中位值滤波法

A、方法:
连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值
B、优点:
能有效克服因偶然因素引起的波动干扰
对温度、液位的变化缓慢的被测参数有良好的滤波效果
C、缺点:
对流量、速度等快速变化的参数不宜

#define N 5 /* 冒泡排序, 嫌弃慢的也可以换成快速排序 */ void bubling_sort(int *arr, int len) { int i, j; for(i = 0; i < len; i++) { for(j = 0; j < len - 1 - i; j++) { if(arr[j] > arr[j + 1]) { arr[j] ^= arr[j + 1]; arr[j + 1] ^= arr[j]; arr[j] ^= arr[j + 1]; } } } } int middle_fliter() { int sum[N] = {0}, i; for(i = 0; i < N; i++) { sum[i] = GetAdc(); delay(10); } bubling_sort(sum, N); return sum[N / 2]; } 

6、加权递推平均滤波法

A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权,通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。
B、优点:适用于有较大纯滞后时间常数的对象,和采样周期较短的系统。
C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号,不能迅速反应系统当前所受干扰的严重程度,滤波效果差

int weighting_filter() { static int weigh[] = {1, 2, 3, 4}; static int weigh_sum = 1 + 2 + 3 + 4; int count, sum; for(count = 0; count < 4; count++) { sum += Getadc() * weigh[count]; delay(10); } return (sum / weigh_sum); } 

7. 一阶滞后滤波

A、方法:取a=0~1,本次滤波结果=(1-a)*本次采样值+a*上次滤波结果
B、优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合
C、缺点:相位滞后,灵敏度低,滞后程度取决于a值大小.

实际上可以看作是对本次的滤波结果进行了一个加权和,如果是滤波的系数越大,对本次采集的结果加权越重,上次的滤波结果加权也就没有那么重了。

例:
假设上次的滤波结果是10,这次的采集结果是20,产生了一个10的突变,如果使用一阶滞后滤波后,假设滤波系数是a = 0.7,本次的滤波值= 0.7*20 + 0.3

#define A (0.7) int fisrt_oder_filter() { static int newValue = 10; newValue = GetAdc(); return A * newValue + (1 - A)newValue; } 

8、消抖滤波法

A、方法:
设置一个滤波计数器,将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否
>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器

B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
C、缺点:对于快速变化的参数不宜,如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统.

#define F_NUM 12 #define VALID 10 int del_shake_filter() { static int ValidValue = VALID; static int i = 0; int newValue; newValue = Getadc(); if(newValue != ValidValue) { i++; if(i == F_NUM) { ValidValue = newValue; i = 0; } } else { i = 0; } return ValidValue; }