数字滤波 - 振动传感器滤波处理

一、创作思路

        二维振动传感器工作原理类似于一个开关,当磁珠滚向左边时输出高电平,滚向右边时输出低电平(也可能反过来,看采集结果而定)。由于工作环境会存在一些微小振动,可能会出现高低电平的不断输出,影响采样结果,所以对采样结果做一个滤波处理。

 二、代码编写

#include "user_shock.h"

#define SHOCK_SENSITIVITY    15    //150ms,输出电平的时间持续时间大于150ms,认定状态稳定。

unsigned char old_state = 0;//定义一个变量存放老的状态,用来对比。
unsigned char new_state = 0;//定义一个变量存放新采集到的状态,用来与老状态对比。
unsigned int shock_high_cnt = 0;//低电平的持续时间
unsigned int shock_low_cnt = 0;//高电平的持续时间


void shock_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin    = GPIO_Pin_0;
  GPIO_InitStruct.GPIO_Mode   = GPIO_Mode_IN;
  GPIO_InitStruct.GPIO_Ctrl  = GPIO_Control_DIG;
  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_NOPULL;//不进行上下拉,电平取决于外部电压
	GPIO_Init(GPIO_PORT12, &GPIO_InitStruct);
	old_state = GPIO_ReadInputDataBit(GPIO_PORT12,GPIO_Pin_0);//读取一个状态作为老状态。
	new_state = old_state;//将新老状态同步,作为一个判断标准。
}




//10ms扫描一次
//返回稳定状态
unsigned char shock_scan(void)
{
	unsigned char state = 0;
	if(GPIO_ReadInputDataBit(GPIO_PORT12,GPIO_Pin_0) == 0)//获取状态
	{
		//滤波处理
		if(shock_low_cnt < SHOCK_SENSITIVITY)   
		{
			shock_low_cnt++;
		}
		else                       
		{
			shock_low_cnt = 3000;//表示稳定
			shock_high_cnt = 0;
		}
	}
	else //获取状态
	{
		//滤波处理
		if(shock_high_cnt < SHOCK_SENSITIVITY)   //高电平的时间超过了预设值,认定稳定。
		{
			shock_high_cnt++;//高电平的时间自增
		}
		else                       	
		{
			shock_high_cnt = 3000;//表示稳定
			shock_low_cnt = 0;
		}
	}
	
	//判断滤波后的状态
	if(shock_high_cnt >= SHOCK_SENSITIVITY)  state = 1;
	if(shock_low_cnt  >= SHOCK_SENSITIVITY)  state = 0;
	
	//输出结果
	return state;
}


//10ms获取一次传感器状态
unsigned char shock_state(void)
{
	unsigned char state = 0;
	new_state = shock_scan();//获取滤波后的状态
	if(new_state != old_state) state = 1;//如果状态与初状态不一样,表示设备移动。
	else                       state = 0;//设备没动
	return state;//输出判断结果。
}







三、程序说明

        传感器函数初始化后,要将shock_state()函数放到10ms轮询一次的代码中,以确保稳定。shock_state()的输出结果是状态有没有进行反转。

        优势:过滤掉一些短时间的振动,避免误报。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 801s振动传感器是一种常用的振动监测设备,其原理图主要包括传感器、信号放大器和信号处理器。 传感器部分包括振动传感器和信号调理模块。振动传感器通常采用压电陶瓷或电磁式的原理来实现振动信号的转换。当振动发生时,传感器会感应到这些振动,并将其转化为电信号。 信号放大器部分主要是对传感器输出的微弱电信号进行放大,以增强信号的强度和稳定性。该部分通常由电路和放大器组成,可以将传感器输出的电压信号进行增益处理。 信号处理器部分主要是对放大后的信号进行处理和分析。该部分通常由滤波器、频率分析器、模数转换器等组成,可以将振动信号转换为数字信号,并对信号进行滤波、分析和数据转换。 总之,801s振动传感器原理图中包含了振动传感器、信号放大器和信号处理器三个主要部分,通过对振动信号的转换、放大和处理,实现了对振动数据的监测和分析。这种传感器在工业、航空航天和交通等领域具有广泛的应用。 ### 回答2: 801s振动传感器是一种常见的机械振动监测设备,其原理图如下: 801s振动传感器由三个主要部分组成:弹簧负载体、质量块和感应线圈。 首先,弹簧负载体被设计用于将机械振动引入传感器系统。当被监测的物体或设备发生振动时,弹簧将传递这些振动至质量块。 质量块是传感器的一个重要组成部分,它负责对振动力进行负载和测量。当振动力传递至质量块时,质量块将开始振动,并试图保持相对于固定位置的静态平衡。 感应线圈是振动传感器的核心。当质量块振动时,感应线圈将随之产生感应信号。感应线圈是由线圈和磁场组成的,当振动使质量块和线圈之间的距离发生变化时,这种变化将导致感应信号的改变。 通过测量感应线圈的输出信号,我们可以获得被监测物体的振动信息。这些信号可以被放大、分析和记录,从而得出关于振动强度、频率和方向的详细数据。 总而言之,801s振动传感器的原理图显示了弹簧负载体、质量块和感应线圈之间相互关联的结构。当被监测的物体发生振动时,传感器将通过感应线圈产生相应的输出信号,从而实现对振动的监测和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值