设计与开发

单片机输入输出实验 自学单片机第十八篇:信号的输入检测

小编 2024-10-06 设计与开发 23 0

自学单片机第十八篇:信号的输入检测

通过前段时间的学习,我们基本上已经掌握了关于单片机的端口控制,可以通过控制端口的电位变化来实现一些功能。有时间也可以练习一些复杂的变化,来熟悉自己的所学知识。

输出是说的差不多了,那么接下来的一段时间,就要开始叨叨输入的哪些事情了。

如果说输出是向世界发出声音,那么输入就是聆听世界的声音,婴儿刚出生的一声啼哭,就是通过向外界输出自己的力量,来证明自己的降生,慢慢到了婴儿时期,就会通过聆听周围的声音,观察周围人的动作,来学习这个世界的生存技能。我们学习单片机也是一样,先展示自己的力量,然后再去感受周围的力量,这个过程需要漫长的磨砺,不断的练习和付出。

单片机的输入和输出是使用的同一个引脚,所以我们之前说51的引脚为IO口,意思是既可以作为IN输入端口,也可以作为OUT输出端口,所以简写为IO端口,属于复用端口,有利于节省空间。我们先来看下输入端口的结构,大致了解下。

这个是P1的端口结构,我们暂且不用理会左边那一大堆东西,只看右边这一部分,首先看到的是一个上拉电阻,然后是我们的针脚,接着是一个三极管(实际上是一个场效应管,我们简单理解就好),还有一路单独引出来了,这部分电路看似简单,但却承担着内部与外界的所有数据交换,可谓地位之重。我通过模拟器来简单实现端口的控制,直观的了解下端口是如何读取输入的数据的。

电路尽可能的与原理图一致,我们分为了电源部分、输入输出部分、端口部分、和外部电路,首先我们来说下当输出部分输出高电位时,电路的状态。

注:接下来的解释,需要用到三极管的部分知识,这个需要高中以上的物理知识,如果不理解,我们可以在留言中讨论。我尽量通俗的说,如果真的听不懂,也不影响接下来的学习。

从图中可以看出,当三极管基极(也就是左边横着那个电极),电位为5V高电位,那么三极管就处于截止状态,相当于上下电路是断开的,好比我打差号的部分断开,所以下方的输入电路就读取到了一个高电位,这个高电位是通过上拉电阻送过来的,如果此时外电路接的有小灯泡,那么小灯泡就会点亮了。

当我们让单片机输出0时,三极管的基极(图中b)就会处于低电位,于是三极管导通,图中的a和c就导通了,相当于通过导线直接相连在了一起,所以a点就也是0V低电位了,外部电路也是0V低电位,输入读取电路f也是0V低电位。

通过控制基极的电位,我们就可以让外电路出现与控制器相同的高低电位状态,同时驱动能力也有了很大的提升。但是由于内电路的导线很细,所以驱动功率也是很小的,不要尝试大功率设备,会烧坏芯片内部电路的。我们了解了输出的控制。那么,如果此时我在IO口上接一个SW1开关,人为的给引脚设置高低电位,情况又会是什么样呢?

当我们把SW1设置为0V低电位时,我们会发现,电路状态从接近0V降到了完全的0V,这主要是因为在三极管中存在电阻,而外接的电路不存在电阻,所以电压被拉低到了完全的0V。我们通过时间调整,看下实际情况下当内部电路输出0时,外电路切换高低电位对IO口的电位影响。

我们反复的切换外电路的状态,发现输入电路f读取的a点的状态如上图波形,当SW1切换到5V高电位,此时a点电位是494mV,完全达不到3V高电位的最低电压,所以控制器输入电路读取到的电位就是0.494V,认为输入的是低电位,当SW1切换到0V低电位时,此时a点电位是0V,低于低电位1V的标准,所以控制器输入电路就读取到0V,认为输入的是低电位,通过这个实验,我们发现,不论外电路如何变化,内电路都是读取的低电位,这还怎么知道我输入的是低电位还是高电位,怎么知道我的按键什么时间按下了?

所以我们把控制器的输出从0改为1再试一下,我们还是对SW1进行反复的切换,观察a点的电位和输入电路的波形变化。

此时可以直观的看出,上方的波形已经从几毫伏的变化,变成了现在的0到5V,当SW1切换到5V高电位,由于三极管截止了,所以a点就是5V高电位,f读取到的就是5V高于3V,于是控制器认为输入的是一个高电位,当SW1切换到0V低电位,还是因为三极管截止的原因,a点相当于通过SW1直接与负极相连,所以a点就是0V低电位,f读取到的就是0V低于1V,于是控制器就认为输入的是一个低电位,这样外部的信号与控制器读取的信号就一致了。

所以,我们就有一个要求,在你需要读取外部信号时,除了程序中需要做出读取的相应操作,你的需要读取的引脚在控制器中要先输出一个高电位,也就是置1.不然你就读不到东西。

有人会说了,在前边当控制器输出0时,你如果把SW1连接5V的电阻取消,那么控制器不就可以读取到5V的高电位了吗?实际情况并不这么理想,

我们可以看到,此时芯片的IO口电流已经达到了3A,这对芯片来说就是毁灭的灾难。所以是不允许这么做的,如果你这么做了芯片依然坚持了过来,感到幸运吧。不是每次都有这么好运的。在IO口外接电路时,我们是不允许直接毫无控制直连正负极的,计算好自己的功耗和电流,然后匹配相应的电阻才是最佳的选择。

好了通过以上的解释,我们知道了IO口需要读取外部信息时,是需要内部对IO口提前置1的。下篇我们就尝试读取P1口的信号来看看。

你觉得一个IO口,单片机最大可以带动多大的电流?欢迎留言讨论。

测量单片机IO输入输出电阻

➤ 01背景

电子小帮手电路中电源开关电路分析 中介绍测量模块电路实验原理的时候,对于ATmega系列的 单片机的输出端口进行了内部描述 。特别是对于端口做为IO输出口的时候,它可以等效为通过电阻19Ω和22Ω分别上拉到VCC,或者下拉的GND。

电子小帮手电路中电源开关电路分析:https://zhuoqing.blog.csdn.net/article/details/109242259单片机的输出端口进行了内部描述:https://zhuoqing.blog.csdn.net/article/details/109238622

▲ ATMEGA单片机IO口等效电路

那么就会出现一个新的问题,对于ATmega单片机,这个IO口的内阻究竟有多大呢?

通过实验来确定单片机输出IO口的实际电阻阻值,这为将来使用单片机进行测量工作提供数据基础。

利用在 ATMEGA8 DIP-28面包板实验 中可以下载程序的实验方式,对于ATmega8单片机搭建在面包板上的测试芯片。通过实验来测量对应的IO端口在作为输出端时相对于GND,VCC的电阻阻抗。

ATMEGA8 DIP-28面包板实验:https://zhuoqing.blog.csdn.net/article/details/109245968

➤ 02测量方案

1.测量端口电阻

测量电阻阻抗的方式可以通过以下三种方式来进行:

通过V-A方法检测,也就是通过测量IO口输入、输出电流一项相对应的IO口电压的变化,来获得端口的等效串联点租。使用万用表直接测量;使用手持LCR表来测。

2.测量过程

通过软件编程,使得单片机的PB4,PB3,PB2,PB1分别处于输出高电平,和输出低电平的情况,然后按照上面三种方法来测量对于端口的内部等效阻抗。

▲ ATMEGA8 DIP-28封装

➤ 03测量数据

1.使用V-A方法测量IO内阻

(1) IO低电平内阻

▲ 测量电路图示意图

使用在 低价电阻箱-阻值测试 中的9999Ω电阻箱,分别改变IO端口的输出负载,记录不同电阻下输出端口的电压,进而可以进行获得内部电阻。

低价电阻箱-阻值测试:https://zhuoqing.blog.csdn.net/article/details/107112157

Current(mA) 3.068900 1.900500 1.376000 1.078700 0.889500 0.754900 0.655700 0.579500 0.519100 Voltage(V) 0.086651 0.055485 0.041959 0.034435 0.029279 0.025946 0.023526 0.021161 0.019959

▲ 端口电流与电压

通过线性拟合,可以建立输入电流(i,单位mA)与端口电压之间的线性关系。

通过上述线性方程,可以得到端口的输入电阻为:

(2) IO高电平内阻

测量不同输出电流下输出电压的变化。

Current(mA) 3.066000 1.897700 1.373900 1.077000 0.888000 0.753500 0.654500 0.578400 0.518200 Voltage(V) 0.077972 0.050410 0.038025 0.031065 0.026657 0.023490 0.021160 0.019415 0.018024

▲ 端口电压与电流

对上述电压电流线性拟合:

由此可以得到单片机高电平下输出内阻大约为:

通过实际测量,可以看到ATmega的IO口在输出状态下,内阻分别是26.15Ω(低电平)以及23.56Ω(高电平)。

2.使用万用表测量IO内阻

使用DM3068数字万用表,直接测量ATmega的输出低电平的IO对GND之间的电阻:

测量ATmega8输出高电平的IO对VCC(+5V)之间的直流电阻:

注意:由于存在输出静态电压,不能够测量输出高电平的IO对GND之间的电阻,或者输出低电平IO对VCC之间的电阻。

3.使用LCR表测量IO内阻

为了避免单片机端口的静态电压对于LCR表的测量影响,使用100uF的电解电容进行隔直之后,然后在使用Smart Tweezers进行测量相应端口的内阻。

▲ 使用隔直电容之后测量端口的内阻

低电平IO内阻:

高电平IO内阻:

➤ ※ 结论

单片机的IO如果作为输出端口,它可以等效一个内部穿有内阻的电压源。由于它内部是通过MOS管完成IO端口与VCC,GND的相连,所以内阻实际上是这些MOS管导通内阻。

通过对ATmega8单片机端口的内阻测量,可以看到这些内阻的大小在20欧姆到30欧姆之间。这与它的数据手册上相关的数值基本上是在同一数量级之内。

上文中使用了三种方法测量单片机IO口的内阻,它们的取值基本相似。因此上,在未来实际上应用中,可以根据具体情况来选择相应的测量方式。

相关问答

单片机 输入 输出 的都是什么?

单片机的输入和输出的是因为它的输出结构类似于推挽结构,它是一种由两个三极管(或者其他管等)分别受到一个信号的控制,这信号的互补的,就是说只有一个三极管...

单片机 有几个 输入输出 接口,分别叫什么?

经典51系列的I/O口(输入输出接口)一般是四组,分别P0~P3,其中每组8个端,如P0.0~P0.7。(具体的你可以查相应的器件手册)经典51系列的I/O口(输入输出接口)一般...

51 单片机 可以控制多少 输出输入 ?

答:51单片机有4个I/O端口,每个端口都是8位双向口,共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输入驱动器和输入缓冲器。通常把4个端...

io口的 输入输出 是什么意思?

单片机的IO口(输入/输出口),是相对单片机本身而言的,就是单片机IO口往外输出信号1或者0(1的输出电圧=VCC,0的电圧=0V)或者单...

树莓派的针脚可以像 单片机 一样 输入输出 吗,我可以用树莓派完成 单片机 的功能吗,要怎么做?

可以,它的GPIO就是一组串口的输入接口。这方面的教程很多。我自己没有试过。不过有人用这组接口控制各种传感器。同时还能向屏幕输入信号。不过似乎电压是3.3...

plc中继电器怎么判断 输入 还是 输出 ?

通过外观标识区分。DC/DC/DC:第一个DC指供电是直流24V,第二个是指PLC的数字量输入是直流24V,第三个指数字量输出也是直流24V(晶体管)的,AC/DC/Relay:Re...

MCS51 单片机输入 / 输出 端口中,常用于第二功能的是?

我感觉较常用于第二功能的主要是P3口,中间四个最为常用。第二功能如下:P3.0串行输入口(RXD)P3.1串行输出口(TXD)P3.2外中断0(INT0)P3.3外中断1(INT1)P3.4定时/.....

89C52 单片机输出 输入 电压?

高电平>2.4V,输出低电平<0.4V。在室温下,一般输出高电平是3.5V,输出低电平是0.2V。最小输入高电平和低电平:输入高电平>=2.0V,输入低电平<=0.8V,噪声容...

52 单片机 怎么测试io口有 输出 ?

向端口写1,这样有输入时读取的数据才正确。向端口写1,这样有输入时读取的数据才正确。

8051 单片机 只能 输出 模拟量?

1、普通I/O口输入输出没有说是模拟还是数字之分,只是高低电平的说法,当然如果是你要说他是数字量,也是可以的;2、至于模拟量,那要特殊的单片机,他的管教可...

猜你喜欢