传感器驱动系列之震动传感器

一、传感器原理

        震动传感器是将接收到的机械量转换成与其成正比的电压值的一种机电转换装置,所以我们有时也称它为换能器、振动拾音器等。

        震动传感器并不直接将原始的被测机械量转换为电信号,而是将原始的被测机械量作为震动传感器的输入量,再由机械接收部分接收,形成另一个适合的机械量为转型。最后由机电转换部分转换成电能。因此它的工作性能取决于机械接收部分和机电转换部分的工作性能。震动传感器实物图如图1所示。

        该模块的工作参数如下:

  1. 采用LM393比较器输出,信号干净,波形好,驱动能力强;
  2. 工作电压3.3V~5V;
  3. 输出形式: 输出数字量开关0和1;
  4. 产品用途:各种震动触发作用,比如防盗报警等;
  5. 产品不震动时开关闭合输出低电平,震动时输出高电平;

        震动传感器的内部构造如下图2所示。

        工作原理说明:在传感器没有震动时,震动轴静止,导针A和导针B处于导通状态,平时任何角度开关都是接通状态,受到振动或移动时,震动轴会产生移动或振动,从而导致导针A和B会出现断开。

        这种开关的特点是平时一般处于导通状态耐振动时会短暂断开,所以它的灵敏度很高,同时没有震动时电路导通,所以他是常闭式震动传感器。

二、传感器驱动

        当我们需要驱动震动传感器时,一般只需要监测传感器模块DO(Digit Output)输出的电平信号,因此我们只需要编写代码读取传感器的电平信号,驱动代码如下:

驱动C源文件:

/**********************************************************************
* 文件名称: shock.c
* 作    者: JJ-KING
* 版 本 号: V1.0.0
* 创建日期: 2023-02-07
* 模块描述: 震动传感器模块配置
* 其他说明:  
* 修改记录: <作者>  <时间>  <版本号>  <描述>
**********************************************************************/
/*----------------------------------------------------------------------------
  更新日志:
  2023-02-07 V1.0.0: 初始版本
  ----------------------------------------------------------------------------*/
/* 包含的头文件 --------------------------------------------------------------*/
#include "shock.h"

/* -------------------------- 传感器引脚定义 ----------------------- */
#define         SHOCK_GPIO_CLK          RCC_APB2Periph_GPIOC
#define         SHOCK_GPIO_PORT         GPIOC
#define         SHOCK_GPIO_PIN          GPIO_Pin_0

#define         SHOCK_PIN_STATUS        GPIO_ReadInputDataBit(SHOCK_GPIO_PORT, SHOCK_GPIO_PIN)

/* 定义软件延时 */
static void delay_ms(unsigned short time)
{    
   unsigned short i=12000;
   while(time --){ while(i--); }
}

/* 震动传感器 IO初始化 */
void shock_init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(SHOCK_GPIO_CLK, ENABLE);          /* 使能端口时钟 */

    GPIO_InitStructure.GPIO_Pin     = SHOCK_GPIO_PIN;        /* 端口配置 */
    GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_IN_FLOATING; /* 浮空输入 */
    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
    GPIO_Init(SHOCK_GPIO_PORT, &GPIO_InitStructure);         /* 根据设定参数初始化GPIO */
}

/* 震动检测 */
unsigned char shock_check(void)
{
    if(SHOCK_PIN_STATUS == 1) {
        delay_ms(10);
        if(SHOCK_PIN_STATUS == 1)
            return SHOCK_STA_EN;
    }
    return SHOCK_STA_NO;
}

驱动H源文件:

/**********************************************************************
* 文件名称: shock.h
* 作    者: JJ-KING
* 版 本 号: V1.0.0
* 创建日期: 2023-02-07
* 模块描述: 震动传感器模块配置
* 其他说明:  
* 修改记录: <作者>  <时间>  <版本号>  <描述>
**********************************************************************/
#ifndef _SHOCK_H
#define _SHOCK_H

#include "stm32f10x.h"

typedef enum {
    SHOCK_STA_NO,   /* 未震动 */
    SHOCK_STA_EN    /* 震动中 */
} ENUM_SHOCK_STA_TYPEDEF;

/* ---------------------- 函数清单 -------------------------- */
void            shock_init              (void);
unsigned char   shock_check             (void);

#endif

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值