上期介绍了“地”的实际意义,我们讲述了“地”本身只是一种参考,用来确认电路中参考0电势的存在。
本期我们介绍一个嵌入式开发中常见的电路结构:按键电路
按键电路的目的:我们能通过按键,使得按键电路能够输出高电平和低电平的一种电路。 按键输入,电压输出 。
首先我们探讨一下这种电路,左边的是常见的按键电路。右边的是某抽象按键电路。
毫无疑问的是,按键按下的时候,这个电路的输出点都可以输出低电平。
但是右边的电路,当按键松开时,此时电阻R2没有和我们的电路隔离开来(这里认为单片机内部是很理想的虚无!)R2找不到一个任何可以参考的电位,在他的回路上!!!
所以这时候你知道输出电压是多少嘛?
单片机:啊,你以为我知道啊???
这就构成了一个很忌讳出现的错误:悬空
电路除了高电平和低电平,还出现了一个未知电平! 为了避免这种情况的出现,我们在按键电路中引入一个电阻,如右图所示,当开关断开的时候,这个电阻从电压源中
引入了一个确定的高电平作为按键电路的输出 !
由于我们的电路绘图习惯将电源置于上方,地置于下方,所以习惯的称这个电阻为: 上拉电阻
那么既然有上拉电阻,同样的还会有下拉电阻。
诸位自行体会。
但是通常我们的单片机,尤其是STM32这样子集成度比较高的单片机,可以配置内部上下拉电阻和 输出模式(这里会单独出一期)
,因此我们的可以只需要一个开关?真的嘛?
事实上,光有开关和上下拉电阻还不是一个完善的按键电路。通常我们的电路上需要加一个 滤波电容 !!
C1的大小通常取常用的104电容/105电容。
由于按键的机械结构以及人体的不知名鬼畜抖动,我们按键按下的时候会发生许多抖动,这些 抖动有可能会被单片机误认为高电平
,因此极有可能造成单片机的误判。
而这些抖动本质上是高频信号,可以利用电容隔直通交的性质将高频信号导通到地(电容具有平滑波形的作用)(事实上是RC构成了低通滤波器对高频信号起到了抑制的作用)
当然我们也可以通过软件上面检测到按键之后等待一段时间按等待按键稳定的方式实现软件延时的 ** 消抖。 **
所以其实无论是软件上的延时,还是硬件上的延时都告诉我们,实际设计电路的时候需要考虑很多特殊情况,不能将电路太过于理想化。否则就会出现许多问题。而这些问题的解决方法和造成原因就是我们在不断试错的过程中经验积累所得。