上拉/下拉电阻 和 开漏/推挽输出 之间的关系

上拉/下拉电阻 和 开漏/推挽输出 之间的关系

文章目录


很常见的一个GPIO口配置

c 复制代码
    GPIO_InitTypeDef gpio_init_struct;						/* 初始化结构体 */
    __HAL_RCC_GPIOB_CLK_ENABLE();                           /* GPIOB时钟使能 */

    gpio_init_struct.Pin = GPIO_PIN_5;                   	/* PB5引脚 */
    gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */
    gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */
    gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */
    HAL_GPIO_Init(GPIOB, &gpio_init_struct);       			/* 初始化LED0引脚 */

    gpio_init_struct.Pin = GPIO_PIN_6;           			/* PB6引脚 */
    HAL_GPIO_Init(GPIOB, &gpio_init_struct);       			/* 初始化LED1引脚 */
GPIO八种模式 特点及应用
输入浮空 输入用,完全浮空,状态不定
输入上拉 输入用,用内部上拉,默认是高电平
输入下拉 输入用,用内部下拉,默认是低电平
模拟功能 ADC、DAC
开漏输出 软件IIC的SDA、SCL等
推挽输出 驱动能力强,25mA(max),通用输出
开漏式复用功能 片上外设功能(硬件IIC的SDA、SCL引脚等)
推挽式复用功能 片上外设功能(SPI的SCK、MISO、MOSI引脚等)

上拉电阻 & 下拉电阻

STM32 F1的IO结构图

STM32 F4/F7/H7的IO结构图


上拉电阻

上拉电阻作用:解决浮空状态的不确定性,将输出压钳位高电平


上拉电阻原理

芯片内部可以简略等效成mos管(Q1)表示输出

Q1 输出
打开 低电平
关闭 浮空/高阻态

也就是当mos管(Q1)关闭时,输出是不知道,相当于什么都没接(浮空/高阻态)
这就相当于是一个未知不可控的因素,这是让人不能接受。

所以我们需要接上拉电阻

Q1 输出
打开 低电平
关闭 高电平

如此当mos管(Q1)关闭时,输出就被钳位在高电平

也可以这么理解

并联电阻使得上半部分阻值减少

而下半部分阻值无穷大

故而5V电压全加在下半部分

由此将输出电压拉高


上拉电阻如何取值?

最靠谱的做法就是,用示波器来看,找打合适的阻值

应用 取值
只用作控制开关 取10K-100K
驱动PWM / IIC等通讯 R1取1K-10K
阻值 优点 缺点
上拉电阻小 驱动能力强 漏电流大
上拉电阻大 漏电流小 驱动能力弱

PS:漏电流 & 驱动能力

漏电流

MOS管打开时,就会产生如图的漏电流
这部分电流不仅会浪费掉,还会产生热量
电阻越小漏电流越大,发热越厉害


驱动能力

两个器件之间电平传输,一般会有寄生电容
当电平跳变的时候,例如低电平跳变成高电平

你以为的电平跳变

实际上的电平跳变

这就是寄生电容充电的过程,上拉电阻越大,充电越慢,驱动能力越弱


下拉电阻

下拉电阻作用:同样是解决浮空状态的不确定性,将输入电压钳位低电平


我们先将芯片内部等效成一个mos管(实际上应该是一个触发器)

虽然接的是5V电源,但由于N半导体和P半导体组成的PN结阻值太大,跟断开没什么区别

由于存在扩散电流,漂移电流,信号干扰等诸多因素

导致P半导体的电压漂浮不定,也就是输入电压不确定

对于一个精益求精的工程师来说,这怎么能忍,必须要排除一切不确定因素

当外接一个与地相连的电阻(下拉电阻),此时输入电压就是低电平了

那为什么不直接接地?

如果直接接地,也是将输入电压钳位在低电平

但是这样的话,就无法输入高电平了!!

默认情况,输入低电平

当有高电平连接时,输入高电平


开漏输出 & 推挽输出


一个GPIO口有可能的几种输出

状态 Q1 Q2 输出
状态1 打开 关闭 高电平
状态2 关闭 打开 低电平
状态3 关闭 关闭 浮空/高阻态
状态4 打开 打开 (短路烧毁)

推挽输出

将 状态1 和 状态2 拿出来研究


什么是 " 推挽 "?

当Q1打开,Q2关闭时,输出高电平,如下图这个过程叫做

当Q1关闭,Q2打开时,输出地电平,如下图这个过程叫做


开漏输出


什么是 " 开漏 "

将 状态2 和 状态3 拿出来看,可以发现,Q1都是关闭的,就可以等效成下图

只剩下Q2,而且Q2的漏极什么都没接,处于开路状态,这就是你为什么叫 " 开漏输出 "


什么情况下使用开漏模式?

GPIO需要给一个外部芯片输出一个高信号时

当GPIO输出的是5V,而外部芯片的使能电压是3.3V时

如果使用开漏输出,外部芯片就有可能会倍烧毁

此时就应该使用开漏输出

并且要接一个上拉电阻

这样高电平电压就由上拉电阻的电压决定了

Q2关闭时,输出高电平

Q2打开时,输出低电平

所以现在知道,为什么配置IO的时候,开漏输出要加上拉电阻的吧!!!


开漏输出的应用

多个IO口控制一个输出

Q2和Q4任意一个打开,都输出低电平

只有Q2和Q4都关闭,才输出高电平

Q2 Q4 输出
打开 关闭 低电平
关闭 打开 低电平
打开 打开 低电平
关闭 关闭 高电平

(1)、

(2)、

(3)、

(4)、


┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈

┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈

┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈

▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈

▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈

▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈

▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈

如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡

相关推荐
黑叶白树1 小时前
简单的签到程序 python笔记
笔记·python
幸运超级加倍~2 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
scan13 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
芊寻(嵌入式)3 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典4 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
Mortal_hhh4 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
密码小丑5 小时前
11月4日(内网横向移动(一))
笔记
Mr.谢尔比6 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie6 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔6 小时前
STM32外设之SPI的介绍
stm32