云计算百科
云计算领域专业知识百科平台

GPIO输出电路详解

GPIO硬件电路详解

  • 一、GPIO电路图
  • 二、GPIO硬件电路拆分
    • 1. I/O保护电路
      • 1.1 IO保护电路了解
      • 1.2 IO保护电路原理
    • 2. 输出电路:
      • 1.1 输出电路了解
      • 1.2 输出电路的原理
        • 1.2.1 输出数据寄存器
        • 1.2.2 复用器
        • 1.2.3 输出控制
        • 1.2.4 P-MOS和N-MOS
  • 三. 输出模式
    • 3.1 GPIO的输出工作模式
    • 3.2 通用推挽输出 (Push-Pull Output)
    • 3.3 通用开漏输出:
      • 3.3.1 上拉电阻
  • 四、总结

一、GPIO电路图

我们了解完GPIO的基本概念后, 来对一个针脚所对应的GPIO硬件电路进行展开介绍. 我们知道ARM-CPU可以直接控制GPIO来输出更好地电平, 同样的其他片上外设也可以使用复用GPIO的模式. 但本质上不管是ARM-CPU还是其他片上外设. 使用GPIO的本质就是使用下面这个硬件电路 在这里插入图片描述 输入部分 电路图在这里插入图片描述 输出部分电路图


二、GPIO硬件电路拆分

1. I/O保护电路

1.1 IO保护电路了解

这个IO保护电路又叫双二极管钳位电路 引脚的上下两侧,一边接的高电平VDD, 一边接的低电平VSS. 且各接了一个保护二极管. 这些元件共同构成了一个双二级管钳位电路.

二极管代价应该都了解: 有单向导电性,电流只能从阳极流向阴极. 如果阳极电压与阴极电压的电压差大于导通电压, 二极管处于连通状态. 在这里插入图片描述

1.2 IO保护电路原理

这个双二极管钳位保护电路是保护什么的呢:

我们给定一个输入电压, 会产生一个电流流入电路. 如果电流过大. 那么电流流经的元器件就会被烧坏. 这个保护电路就是只有当我们给的输入电压在一个安全范围内的时候, 才会进入到内部电路.

举个例子: 二极管导通电压位0.7v, 当我们输入电压为3.5v的时候. 二极管阳极阴极电压差为0.2v, 上钳位二极管不导通, 输入电压正常流入电路内部. 当我们输入电压为4v的时候, 二极管阳极印记电压差为0.7v 上钳位二极管导通, 输入电压从钳位电路上钳位溜走了(看图片的蓝色线条), 输入电压不会走到内部电路. 这样保证了进入MCU内部电路的电压不会超过4v, 产生的电流也不会形成过载. 这样就保护了内部电路.

再举个例子: 二极管导通电压位0.7v, 当我们输入电压为-0.3V的时候. 下钳位二极管阳极阴极电压差为0.3v, 下钳位二极管不导通, 输入电压正常流入电路内部. 当我们输入电压为-0.7V的时候. 下钳位二极管阳极阴极电压差为0.7v, 下钳位二极管导通, 形成另一个回路(看图片的红色线条). 输入很大的负电压也不会进入到回路中.

也就意味着, 凡是能进入到MCU内部的输入电压范围只能是-0.7V到4V. 在这里插入图片描述

2. 输出电路:

1.1 输出电路了解

GPIO的输出工作模式有四种: 通用推挽输出, 通用开漏输出, 复用推挽输出, 复用开漏输出.

所谓通用: 就是ARM-CPU直接控制GPIO输出, 就叫通用开漏/推挽输出 所谓复用: GPIO电路被片上外设(IIC, SPI等等),就叫复用开漏/推挽输出 在这里插入图片描述

1.2 输出电路的原理

我们把上面的输出电路再简化一下: 在这里插入图片描述

1.2.1 输出数据寄存器

老铁们把可以看到我只保留了输出数据寄存器. 这是因为站在输出角度: GPIO输出电路中包含一个输出数据寄存器, 这个寄存器未来是被arm-cpu进行写入的, 从而实现控制引脚输出高低电平的目的.

1.2.2 复用器

从多组输入信号中, 选择一个作为有效输入. 也就是说GPIO是被ARM-CPU直接使用还是被其他片上外设使用达到服用效果就有复用器锁了算.

1.2.3 输出控制

接受复用器选择的信号的逻辑电平, 直接驱动MOS管的栅极,控制MOS管的通断. 实现将弱信号转换为具有足够驱动能力的外部输出电平.

1.2.4 P-MOS和N-MOS

P-MOS: P Channel Metal-Oxide-Semiconductor , P沟道金属氧化物半导体 P代表Positive: 正向的

N-MOS: N Channel Metal-Oxide-Semiconductor , N沟道金属氧化物半导体 N代表Negative: 反向的

P-MOS和N-MOS本质上是一种开关, 通过给栅极施加一个小电压控制对应MOS管的开关闭合,从而实现控制大电流的目的. 在这里插入图片描述 G: (Gate 栅极) D: (Drain 漏极): S: (Source 源极) 没有给G–栅极施加一个导通电压, 就默认MOS管是断开的. 给P-MOS管的G–栅极施加一个导通电压, 导通P-MOS管. 电流方向是从S–源极流到D–漏极. 给N-MOS管的G–栅极施加一个导通电压, 导通N-MOS管. 电流方向是从D–漏极流到S–源极.

对任意MOS管的导通电压, 被称为Vth Voltage Threshold(阈值电压). 一般为0.3V-1V. P-MOS管导通的条件是: 源极S和栅级G的电压差要大于阈值电压Vth. 即 Vs-Vg>Vth. N-MOS管导通的条件是: 栅级G和源极S的电压差要大于阈值电压Vth. 即 Vg-Vs>Vth.

在这里插入图片描述 GPIO输出电路的两个MOS管相连就是下图这种情况. 将两个MOS管的D–漏极接在一起, 并连接一个外部引脚.F

由此可以看出GPIO输出的本质就是: 输出控制根据写入寄存器的值来控制这两个MOS管的闭合问题.

如果我们用输出控制给P-MOS管的G–栅极施加导通电压, 闭合P-MOS.N-MOS管处于断开状态. 电流会从S–源极流向D–漏极. 此时漏极已经接通外部针脚, 这个针脚输出的就是高电平. 如果P-MOS管持续闭合, 引脚处的高电平也会一直持续下去.

如果我们用输出控制给N-MOS管的G–栅极施加导通电压, 闭合N-MOS. P-MOS管处于断开状态. 电流会从N-MOS管的S–源极流向D–漏极. 此时外部引脚走到MCU内部通过N-MOS管直接接地了. 此时这个针脚就输出低电平.

在这里插入图片描述

三. 输出模式

3.1 GPIO的输出工作模式

GPIO有四种输出工作模式: 通用推挽输出, 通用开漏输出, 复用推挽输出, 复用开漏输出. 在这里插入图片描述

3.2 通用推挽输出 (Push-Pull Output)

如果是推挽模式输出: 如参考手册的图所示, 输出寄存器上写"0", 输出控制定向激活N-MOS, 输出寄存器上写"1", 输出控制定向激活P-MOS. 即: 如果我们往输出寄存器写1, 定向闭合P-MOS, 断开N-MOS, 引脚输出为高电平.

所以我们得到结论: 在推挽输出模式下: 写0就输出低电平, 写1就输出高电平.

什么叫推挽: 根据以上的例子: 引脚输出的高电压的过程, (向外部提供电流)就相当于推. 引脚输出的低电压的过程, (向内部拉去电流)相当于挽. 因为引脚通过N-MOS直接在MCU内部接地.

说到这里肯定由老铁问了: P-MOS和N-MOS不能同时打开吗? 是的, 不能同时打开. 假如P-MOS和N-MOS同时导通, 电流直接从P-MOS的S–源级(VDD)流向N-MOS的S–源极(GND). 等于一个电池直接把正负极连接起来了, 会造成严重的短路问题, 烧毁电路.

在这里插入图片描述

3.3 通用开漏输出:

开漏输出核心思想: 让P-MOS管永远断开, 只使用N-MOS管.

开漏输出: 无法输出高电平, 只能输出低电平和高阻抗.

如果我们在输出寄存器上写"0", N-MOS管导通; 在输出寄存器上写"1", N-MOS管断开.

在输出寄存器上写"0", N-MOS管导通, 外部引脚直接通过N-MOS管接地. 输出表现为低电平. 在输出寄存器上写"1", N-MOS管断开, 此时外部引脚与MCU断开连接, 引脚处于悬空状态. 我们称之为输出高阻抗.

(高阻抗: 只是一种说法, 真实情况是MCU与外部针脚彻底断开, 相当于开路了. 而开路就相当于电路中有一个无穷大的电阻, 就叫高阻抗.)

为什么叫开漏输出: 开漏输出全称叫漏极开路输出. 因为没有了P-MOS管, 所以N-MOS管的漏极相当于什么也没有接, 所以叫做漏极开路. 简称开漏输出.

下图为开漏输出的原理图简化: 在这里插入图片描述

3.3.1 上拉电阻

我们了解了开漏输出, 引脚不可能输出高电平. 只能输出高阻抗和低电平. 如果我们就想要开漏输出输出引脚输出高电平怎么操作? 我们可以在高阻抗状态下, 在引脚外部接一个外部电源和上拉电阻.

在接入上拉电阻的情况下: 在输出寄存器上写"0", N-MOS管导通, 外部引脚直接通过N-MOS管接地. 即使有外部高电平和上拉电阻, 引脚输出表现依旧为低电平. 在输出寄存器上写"1", N-MOS管断开, 此时外部引脚与MCU断开连接. 此时有外部高电压VDD供电, 此时引脚处输出为高电压. 在这里插入图片描述

我相信肯定有老铁会问: 你说你接个VDD是3.3V没错, 但是你还有个上拉电阻, 你电阻不分压啊, 为啥引脚输出还是3.3V高电平???

我把上图这个电路改造为这样的等效电路, 大家看的直观一点. 其实直白的说就是, N-MOS管断开后, 相当于开路, 开路就相当于连接了一个无穷大阻值的电阻. 此时电路中电流无限趋近于0A. 根据串联分压, 我们知道上拉电阻分压为 0A x R_Pull. 引脚处的分压为 0A x R1. 约等于没有分压.所以引脚处的电压为3.3V.

在这里插入图片描述

为什么需要上拉电阻:

我们在开漏输出模式写入0, N-MOS管闭合. 如果没有上拉电阻, VCC直接通过N-MOS管接地了. 外部电路经过MCU内部后,短路了. 会烧毁MCU. 所以我们这里需要一个上拉电阻.

在这里插入图片描述

为什么叫做上拉电阻: 因为开漏模式, 引脚输出高电压是由于外部接入电阻+高电压拉起来的, 所以把这个电阻叫做上拉电阻. 一般上拉电阻这只为4.7kΩ到10kΩ.

四、总结

我们了解了一个GPIO的输出部分电路和输出模式. 包括了输出部分电路的各个元器件讲解, 以及他们是如何达到既定输出目标的. 下一章节, 我会给老铁介绍输入部分电路.

赞(0)
未经允许不得转载:网硕互联帮助中心 » GPIO输出电路详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!