资讯详情

STM32下拉输入模式与振动传感器的使用

写内容的目的:

在这两天学习振动传感器点灯的实验时,对于GPIO为什么口腔输入模式选择下拉输入不太理解,搜索文章的内容很少,所以他们整理知识点,希望帮助你,或嵌入式小白色,如果文章有缺点或可以优化,请给予更多的建议。


解决的问题:

这边做的是一个通过震动传感器来点灯的实验,敲代码的时候是没有什么问题的,初始化使用到的外设GPIO接收振动传感器传输的电平,LED相应的变化。问题是设置振动传感器GPIO为什么选择时选择的输入模式是下拉输入?


振动传感器:

使用:振动时输出低电平,不振动时输出高电平。

本次实验使用的传感器模块是SW-18015P振动传感器通过红框内的振动传感器DO把电平发给我们STM32开发板对应IO口。当产品不振动时,振动开关断开,输入端输出高电平;振动时,振动开关立即导通,输出端输出低电平。


GPIO口初始化:

使用:这边直接调用库函数来进行GPIO口的配置

void Relay_Init(void) {     GPIO_InitTypeDef shake_init;  ///置结构体       /*使能 APB2 - PA端口时钟*/  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟    shake_init.GPIO_Mode   = GPIO_Mode_IPD;      ///输入类型下拉输入  shake_init.GPIO_Pin    = GPIO_Pin_1;         //引脚 PA.1  shake_init.GPIO_Speed  = GPIO_Speed_10MHz;   //频率为10MHz    GPIO_Init(GPIOA, &shake_init);               //初始化 }

在这里注意GPIO我们选择的下拉输入口模式。

读取引脚电平

 while(1)  {   if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0) ///返回值高电平为1,低电平为0   {    GPIO_ResetBits(GPIOC,GPIO_Pin_13);     delay(1000);    GPIO_SetBits(GPIOC,GPIO_Pin_13);    }   else   {       GPIO_SetBits(GPIOC,GPIO_Pin_13);      }     }


问题点:

振动传感器传输低电通常触发我们LED灯,应该是下降沿触发器,此时不设置为上拉输入,对吗?上拉输入将管脚拉到高电平作为引脚输入电压的默认值,但为什么实验使用下拉输入呢?

经过这两天的数据阅读和战友们的热情帮助,现将思路整理如下:

首先要知道有两种状态:初始化和有效瞬间:

  • 初始化的时候,就是震动传感器在不震动时,输出高电平。
  • 有效时刻,即当我们的振动传感器振动时,输出为低电平。

此外,在数字电路中,用逻辑电平表示电压:

逻辑电平分为高电平和低电平。这两种电平在电路中体现为有或无,没有中间值,与不同电路上的电压值不同。

  • 高电平表示高电压状态,一般规定高电平为3.5~5V。
  • 低电平表示低电压, 记为0,低电平为0~2.5V。
  • 不定电压:高低电平之间的电压属于不定电压。在此电压下,设备将不稳定工作。例如,有时计算机启动后会出现异常现象,但重新启动后没有问题。这是因为数字电路有时无法识别故障,因为设备遇到此不定电压。

总结:

初始状态输入高电平,箭头标记的电阻点和VSS之间形成电位差,这个点的电平会变成外部高电平,所以单片机会得到高电平信号。

振动输入处于低电压状态,但由于瞬时产生,瞬时低电平和正常高电平将成为低于正常高电平的信号,因此电压值不一定在低电平范围内,也可能在低电平和高电平之间。此时,我们的下拉电阻起作用,立即降低电压,下拉电阻通常不在高电平范围内Vss拉动方向,进一步下拉电压,通过下拉电阻将不确定信号转换为低电平。此时,单片机可以获得一个确定的低电平信号,并读取0。

参考文章:深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入、泄漏输出、推拉输出的区别STM32为例)

标签: 0050振动传感器振动传感器输出44200205010振动传感器4200250108振动传感器40振动传感器4

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台