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

news2024/11/28 2:54:41

阅读引言: 分析常见的传感器的电路原理、向大家提供一些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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8改进 | 主干篇 | 利用图像分割网络UNetV2改善图像分割检测性能(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用图像分割网络UNetV2的主干来改进我们的YOLOv8分割模型&#xff08;本文的内容虽然YOLOv8所有的功能的用户都能使用&#xff0c;但是还是建议分割的用户使用&#xff09;&#xff0c;U-Net v2 旨在改进医学图像分割的性能&#xff…

Spring-Gateway服务网关

一、网关介绍 1. 为什么需要网关 Gateway网关是我们服务的守门神&#xff0c;所有微服务的统一入口。 网关的核心功能特性&#xff1a; 请求路由 权限控制 限流 架构图&#xff1a; 权限控制&#xff1a;网关作为微服务入口&#xff0c;需要校验用户是是否有请求资格&am…

Zerotier 异地组网方案初探

前言 我之前想要异地组网的话&#xff0c;一般都采用内网穿透的方法&#xff0c;但是这个内网穿透有弊端就是都是要通过公网服务器转发流量&#xff0c;对于大流量的传输就比较不方便&#xff0c;我发现了Zerotier 这个工具非常的好用&#xff0c;是基于p2p的 这是一个类似于…

【SpringBoot3+Mybatis】框架快速搭建

文章目录 GitHub 项目一、依赖二、 配置文件三、启动类四、SpringBoot3兼容Druid报错五、工具类5.1 结果封装类5.2 解决枚举类5.3 MD5加密工具类 GitHub 项目 springboot-part——springboot-integrate-07 Mybatis-plus版完整CRUD项目文档记录&#xff1a; 【SpringBoot3Myba…

【项目实践Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求

什么是同步和异步 同步 在主线程上排队执行的任务&#xff0c;只有前一个任务执行完毕&#xff0c;才能继续执行下一个任务。也就是一旦调用开始&#xff0c;就必须等待其返回结果&#xff0c;程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…

【保姆级】前端使用node.js基础教程

文章目录 安装和版本管理&#xff1a;npm 命令&#xff08;Node 包管理器&#xff09;&#xff1a;运行 Node.js 脚本&#xff1a;调试和开发工具&#xff1a;其他常用命令&#xff1a;模块管理&#xff1a;包管理&#xff1a;调试工具&#xff1a;异步编程和包管理&#xff1a…

kafka2.x版本配置SSL进行加密和身份验证

背景&#xff1a;找了一圈资料&#xff0c;都是东讲讲西讲讲&#xff0c;最后我还没搞好&#xff0c;最终决定参考官网说明。 官网指导手册地址&#xff1a;Apache Kafka 需要预备的知识&#xff0c;keytool和openssl 关于keytool的参考&#xff1a;keytool的使用-CSDN博客 …

【漏洞复现】正方教学管理信息服务平台ReportServer存在任意文件读取

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

wireshark数据捕获实验简述

Wireshark是一款开源的网络协议分析工具&#xff0c;它可以用于捕获和分析网络数据包。是一款很受欢迎的“网络显微镜”。 实验拓扑图&#xff1a; 实验基础配置&#xff1a; 服务器&#xff1a; ip:172.16.1.88 mask:255.255.255.0 r1: sys sysname r1 undo info enable in…

HCIP作业

实验要求&#xff1a; 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能再对其进行任何配置&#xff1b; 2、R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合理分配&#xff1b; 3、R1、R2、R4&#x…

java数据结构与算法刷题-----LeetCode135. 分发糖果

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 左右遍历2. 进阶&#xff1a;常数空间遍历&#xff0c;升序降…

LabVIEW NV色心频率扫描

LabVIEW NV色心频率扫描 通过LabVIEW软件开发一个能够实现对金刚石氮空位&#xff08;Nitrogen-Vacancy&#xff0c;NV&#xff09;色心的频率扫描系统。系统通过USB协议与硬件设备通信&#xff0c;对NV色心进行高精度的频率扫描&#xff0c;满足了频率在2.6 GHz到3.2 GHz范围…

使用DMA方式控制串口

本身DMA没什么问题&#xff0c;但是最后用GPIOB点灯&#xff0c;就是点不亮。 回到原来GPIO点灯程序&#xff0c;使用GPIOB就是不亮&#xff0c;替换为GPIOA就可以&#xff0c;简单问题总是卡得很伤。

微信小程序的配置文件使用说明:

在上一文中学习开发小程序的起航日记&#xff0c;我们准备好了开发小程序时所需的环境和准备工作&#xff0c;同时也简单的了解了一下小程序的项目结构组成。 这一章&#xff0c;我们主要对小程序的配置文件进行学习。 文章目录 小程序_配置文件1.json2.app.jsonpages 属性wind…

C++:类和对象(上篇)

目录&#xff1a; 一&#xff1a;面向对象和过程的介绍 二&#xff1a;类的引入 三&#xff1a;类的定义 四&#xff1a;类的访问限定符以及封装 五&#xff1a;类的作用域 六&#xff1a;类的实例化 七&#xff1a;类对象大小的计算 八&#xff1a;类成员函数的this指…

DolphinScheduler运维-页面加载缓慢

一、问题描述 DolphinScheduler调度平台的UI界面加载缓慢,项目中的任务实例加载时间过长,需要解决这个问题,提高DolphinScheduler平台UI页面的加载速度。 二、原因分析 经过分析发现,任务实例过多是导致UI加载缓慢的主要原因。由于任务实例无法直接删除,根据文档了解到需…

基于docker+rancher部署Vue项目的教程

基于dockerrancher部署Vue的教程 前段时间总有前端开发问我Vue如何通过docker生成镜像&#xff0c;并用rancher上进行部署&#xff1f;今天抽了2个小时研究了一下&#xff0c;给大家记录一下这个过程。该部署教程适用于Vue、Vue2、Vue3等版本。 PS&#xff1a;该教程基于有一定…

UART动态调整接收时钟

文章目录 一、UART接收模块误码率二、接收时钟动态纠正方法2.1、过采样2.2、上板效果 一、UART接收模块误码率 由于发送端和接收端存在一定的频率误差&#xff0c;随着时间的推移&#xff0c;累计误差不断增加&#xff0c;从而产生亚稳态现象&#xff0c;会导致误码&#xff0…

【Vue3】组件通信以及各种方式的对比

方式一&#xff1a;props 「父」向「子」组件发送数据 父组件&#xff1a; 定义需要传递给子组件的数据&#xff0c;并使用 v-bind 指令将其绑定到子组件的 props 上。 <template><child-component :message"parentMessage" /> </template><sc…

3.19网络编程

select实现的TCP并发服务器 #include <myhead.h> #define SER_IP "192.168.141.134" #define SER_PORT 8888 int main(int argc, const char *argv[]) {// 1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0);if (sfd -1){perr…