2.6 GPIO输入

按键介绍

按键按下后抖动比较快,通常在5~10ms之间,人眼是分辨不出来的,但是对于高速运行的单片机而言,5~10ms的时间还是很漫长的,所以我们要对这个抖动进行过滤,否则就会出现按键按一下,单片机却反应了多次的现象。另外,在按键松手的时候,也会有一小段时间的抖动,这个我们在程序中也要注意过滤一下。

最简单的过滤方法就是加一段延时,把这个抖动时间耗过去,这样就没问题了。

传感器模块介绍

传感器模块元件的电阻会随外界的模拟量变化而变化,比如光线越强,光敏电阻的阻值就越小;温度越高,热敏电阻的阻值就越小;红外光线越强,红外接收管的阻值就越小。但是电阻的变化不容易直接被观察,所以我们通常将传感器元件与定值电阻进行串联分压,这样就可以得到模拟电压的输出了,对电路来说,检测电压就非常容易了。

另外,这个模块还可以通过电压比较器,来对这个模拟电压进行二值化,这样就可以得到数字电压输出了。

分压电路

这个N1就是传感器元件所代表的可变电阻,它的阻值可以根据环境的光线、温度等模拟量进行变化。上面的R1是和N1进行分压的定值电阻,R1和N1串联,一端接在VCC正极,一端接在GND负极,这就构成了基本的分压电路。

左边这个C2是个滤波电容,它是为了给中间的电压输出进行滤波,用来滤除一些干扰,保证输出电压波形的平滑。一般我们电路里遇到这种一端接在电路中,另一端接地的电容,都可以考虑一下这个是不是滤波电容的作用。如果是滤波电容的作用,那这个电容就是用来保证电路稳定的,并不是电路的主要框架,这时候我们在分析电路的时候,就可以先把这个电容抹掉,这样就可以是我们的电路分析更加简单。

分压原理,指的是在 串联电路 中,各电阻上的电流相等,各电阻两端的电压之和等于电路总电压。 分压原理的公式为R1:R2=U1:U2。

我们把滤波电容去掉,整个电路的主要框架就是定值电阻和传感器电阻的分压电路了,在这里可以用分压定理来分析一下传感器电阻的阻值变化对输出电压的影响(也可以用上下拉电阻的思维来分析)。

上下拉电阻思维分析电路

当这个N1阻值变小时,下拉作用就会增强,中间的AO端的电压就会拉低,极端情况下,N1的阻值为,AO输出被完全下拉,输出0V;当N1阻值变大,下拉作用就会减弱,中间的引脚由于R1的上拉作用,电压就会升高,极端情况下,N1的阻值无穷大,相当于断路,输出端AO的电压被R1拉高至VCC。

可以举个例子来说明上下拉电阻的工作逻辑,AO这个输出端你可以把它想象成一个放置在屋子里水平杆子,R1上拉电阻相当于拴在屋顶的弹簧,将杆子往上拉,N1下拉电阻相当于拴在地面上的弹簧,将杆子往下拉,这个电阻的阻值越小,弹簧的拉力越强,这个杆子的高度就相当于电路中的电压,如果只有上拉弹簧或者下拉弹簧,那杆子肯定被拉到了屋顶或者地面,在电路中就相当于中间点的电压为VCC或者GND,当两个弹簧相互拉扯的时候,中间的输出端就会向拉力强的一端偏移,至于偏移多少,就取决于两个弹簧的弹力之差了,如果上下拉弹簧的弹力一致,则杆子会处于剧中的位置,也就是电路输出VCC/2的电压,如果上面的阻值小,拉力强,那输出电压就会变高,反之下面的阻值小,输出电压就会变低,如果阻值为0,在电路中就是短接的状态,那就相当于拉力无穷大了,如果上下拉电阻都为0,就是两个无穷大的力在对抗,在电路中呈现的状态就是电源短路,所以这种情况应该避免。

这个上拉电阻和下拉电阻,在单片机电路中会经常出现,比如弱上拉、弱下拉、强上拉、强下拉等,这里强和弱就指电阻阻值大小,也就是这个弹簧的弹力大小,上拉和下拉就是指接到VCC还是GND,也就是这个杆子是拉向屋顶还是拉向地面。

在R1和N1电阻的分压下,AO就是我们想要的模拟电压输出了,所以看到,这个AO电压就直接通过这个排针输出了,这就是AO电压的由来,仅需两个电阻分压即可得到。

电压比较器芯片(二值化)

那接下来这个模块还支持有数字输出,这个数字输出就是对AO进行二值化的输出,这里的二值化是通过这个芯片LM393来完成的,这个LM393是个电压比较器芯片,里面有两个独立的电压比较器电路,C1电容是一个电源供电的滤波电容。

运算放大器基础知识

电压比较器:

当IN+电压比IN-电压高一点点,就会输出VCC,当IN-电压比IN+电压高一点点就会输出GND。

反向放大器:

虚断:两输入端是几乎没有电流输入的,可以看作断开,所以是虚断。

虚短:正输入端和负输入端电位是相等的,就好像是短路了一样,所以叫做虚短。

当输出电压稳定后,称为虚短状态,因为正负极电压相同。

虚断的性质,电流不会流入也不会流出,电流只能通过R2。

通过调节R1和R2的电阻可以灵活的调节放大倍数,而且输出具有驱动能力,可以接一些负载。

同向放大器:

通过调节R1和R2的电阻可以灵活的调节放大倍数,而且输出具有驱动能力,可以接一些负载。

电压跟随器:

作用:在电路中,使用电压跟随器可以提高信号的驱动能力,因为运算放大器内部是有功率放大器的,当它放大倍数是1的时候,它虽然没有电压放大的特性,但是它还有功率放大的特性。

 

运算放大器补充知识

运算放大器是一个集成器件,它是由诸多晶体器件(如晶体管)所构成的,从外部特性来看,运算放大器是一个具有三个信号端子和两个电源端子的器件。

它有两个具有高输入电阻的电压信号输入端,一个具有低输出电阻的电压信号输出端,以及正负两个电源端。这里值得注意的是,并不是所有运算放大器的输入端都具有高输入电阻,电流反馈运放就是一种特例。

它会检测两个输入端之间的电压差,如果检测到正输入端的电压大于负输入端的电压,运算放大器就会尽可能地抬高自己的输出,直到正负输入端电压相等或者输出电压无法被继续抬高为止。

如果检测到负输入端的电压大于正输入端的电压,运算放大器就会尽可能的压低自己的输出,知道正负输入端电压相等或者输出电压无法被继续压低为止。

输出端流出的电流由正电源端子提供,输出端流入的电流经过负电源端子流出,这也意味着运放输出端的抬升和降低都会收到电源的限制。

运放的供电一般有两种方式,单电源和双电源。

单电源一般指的是运放的一个电源接正电压,另一个接地。

双电源一般指的是运放的一个电源接正电压,一个电源接负电压。不同的供电方式给运放带来了不同的频率性能和输入输出范围。

根据运放的工作逻辑,只要正负输入端之间存在细微的电压差,输出就会持续飙升,直到达到极限,这显然不是我们想要的结果。因为如果这样,运算的输出将与输入不成数学运算关系。

为了使运放在正常状态下工作,我们就必须引入反馈,比如加这个电阻,使得输出的电压能影响输入,由于正负输入点之间任何细小的误差都会引起输出的持续升高和降低,任何正负输入点之间的细小误差都会被输出经过反馈电阻补偿掉,这就导致运算放大器始终处于两个输入端电压相等的状态,我们把这种状态称为虚短路状态,这样就构成了一个具有电压输入端和一个电流输入端的电路。

由于虚拟短路的存在,电流输入端输入的电流变化并不会引起该端子电压的变化,也就是说,电流输入端的输入阻抗为0,这是因为输出端的电压变化会补偿这个引脚的电压变化,也就是因为这样的补偿,使得电流输入端的电流可以影响输出电压,输出电压与正输入电压的差就等于电流输入端电流与反馈电阻的乘积。

当电压输入端电压为恒定值,电流信号经过电流输入端输入时,输出电压是输入电流的线性函数,输出除以输入的单位是欧姆,此时这个电路叫做跨阻放大电路,在此电路中,输入电阻为0,Rf的大小就是跨阻(也就是跨阻放大器的增益)

硬件电路

按键

下接按键方式:

一般来说,按键都是用下接按键方式,是电路设计的习惯和规范。

第一个图:当按键被按下,PA0接地,当按键松开,PA0会被悬空,悬空会导致输入的数值不确定,所以需要给PA0引脚设置成上拉输入模式。

第二个图:相比于第一个图,第二个图在外部接入了一个上拉电阻,当按键松手时,引脚由于上拉作用,自然保持为高电平,当按键按下时,引脚直接接到GND。

上接按键方式:

第一个图:当按键被按下,PA0接3.3V,当按键松开,PA0会被悬空,悬空会导致输入的数值不确定,所以需要给PA0引脚设置成下拉输入模式。

第二个图:相比于第一个图,第二个图在外部接入了一个下拉电阻,当按键松手时,引脚由于下拉作用,自然保持为低电平,当按键按下时,引脚直接接到3.3V。

传感器模块

C语言相关知识

在STM32中,数据的类型被重定义了一下,以下是重定义后的名称: