当前位置: 首页 > news >正文

嵌入式硬件杂谈(一)-推挽 开漏 高阻态 上拉电阻

引言:对于嵌入式硬件这个庞大的知识体系而言,太多离散的知识点很容易疏漏,因此对于这些容易忘记甚至不明白的知识点做成一个梳理,供大家参考以及学习,本文主要针对推挽、开漏、高阻态、上拉电阻这些知识点的学习。

目录

GPIO基础

GPIIO内部结构简图

推挽的理解

开漏的理解 驱动能力强

推挽和开漏的区别

上拉电阻,到底在拉什么?

上拉电阻应用的场景

上拉电阻如何取值?

漏电流?驱动能力?是什么?


GPIO基础

下图截取的数据手册图,里面包含了GPIO的相关模式的介绍。

MCU输出时会有两种模式,一种叫做推挽模式,一种是开漏模式,对于一个GPIO要么不就是输出高电平不就是输出低电平吗,为什么还要有这两种模式,答案在后文。

GPIIO内部结构简图

如下图所示,我们要关注的也就是mos管的开关状态,枚举一下会有四种情况,如下所示:

Q1Q2OUT
opencloseHigh
closeopenLow
closecloseFloating
openopenShort Circuit

推挽的理解

当 Q1 PMOS 打开,Q2 NMOS 关闭,VCC给负载所在电路的给这颗 NMOS 的栅极供电,也就是推电流出去,输出高电平,当Q1 PMOS 关闭,Q2 NMOS打开时,负载所在的电路的NMOS栅极放电,也就是挽电流回来,这里用的是 NMOS 也就是在此专栏的硬件篇专门讲过为什么是NMOS,应用的场景也有说明,如果还是不懂可以回去看看。

开漏的理解 驱动能力强

开漏模式下不加外部上拉电阻的话如下图所示,这种情况是不能接受的。

因此我们需要加一个外部电阻,上拉电阻。

第一个就是改变高电平的电压,防止主控烧坏相关器件,例如在IIC中,我们想用主控控制一个芯片,但是主控输出的高电平为5V, 芯片引脚只支持3.3V输入 ,因此会造成芯片给烧毁等一系列不确定因素的问题了,因此我们就要使用开漏模式了,同时最主要的就是需要外接一个上拉电阻了,用来将5V拉低成3.3V。

也就是NMOS关闭就是高阻态,高电平由外部提供,打开就是低电平。

第二个作用就是可以让几个GPIO同时控制芯片,但是推挽就会造成短路。

这里补充一下,I2C总线理论上可以连接127个设备(7位地址模式),2^7 (本质就是前7位是地址后一位是方向 )减去一个设备0 就是127.

推挽和开漏的区别

输出状态直接输出高电平和低电平只输出低电平,或通过上拉电阻输出高电平
驱动方式双向驱动(高电平和低电平)只有低电平驱动(高电平由外部提供)
输出能力高驱动能力低驱动能力(需要上拉电阻)
适用场景一般的数字输出、控制信号多设备共享总线、I2C、1-Wire等
优点响应速度快,能提供较大电流支持多设备共享,避免驱动冲突
缺点不适合多个设备共享,功耗较大需要外部上拉电阻,响应速度较慢

上拉电阻,到底在拉什么?

上拉电阻应用的场景

上拉电阻都会伴随着mos管的出现,其实就是工作在开漏模式下的GPIO口,

但是如果例如相关外部芯片集成上拉电阻,我们就不用外部加了,如下图所示:

上拉电阻如何取值?

绝大部分上拉电阻都是 1K-100K 之间,电阻小的话优点就是驱动能力强,电阻大的话漏电流小。

漏电流?驱动能力?是什么?

漏电流就是mos管打开时,会形成通路,如果这个电阻是1K的话,那这边的漏电流就有5mA了,这个电流是白白浪费的,而且还会产生热量。因此阻值当然是越大越好,但是驱动能力会弱。。

何为驱动能力?

也就是低电平向高电平的电平转换的过程,虽然你看到的是一个瞬间的上升沿,但是其实刻度调大之后,低电平到高电平并不是瞬间完成的,也就是之前章节说到的爬升过程了。。也要结合相关芯片负载的硬件选型了,否则会有失真的情况了。

http://www.lryc.cn/news/483999.html

相关文章:

  • 在arm64架构下, Ubuntu 18.04.5 LTS 用命令安装和卸载qt4、qt5
  • k8s笔记——核心概念
  • 大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-并行调用多个tools(五)
  • 蓝桥杯每日真题 - 第8天
  • 论云游戏的性能与性价比,ToDesk、青椒云、顺网云游戏等具体实操看这篇就够了
  • Jmeter中的定时器(二)
  • 华为HCIP-openEuler考试内容大纲:备考必看!
  • Vector 深度复制记录
  • Go语言实现用户登录Web应用
  • Android CarrierConfig 参数项和正则匹配逻辑
  • 微信小程序中使用离线版阿里云矢量图标
  • hive的tblproperties支持修改的属性
  • 移动端开发
  • 光伏行业内卷到什么程度了?
  • C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)
  • 学习threejs,使用第一视角控制器FirstPersonControls控制相机
  • odoo17 前端 在头像下拉 dropdown 自定义菜单
  • 如何管理好自己的LabVIEW项目
  • GPT-5 要来了:抢先了解其创新突破
  • @ComponentScan:Spring Boot中的自动装配大师
  • uniapp 面试题总结常考
  • 花了36元给我的个人博客上了一道防御
  • 浅谈C++之内存管理
  • 719. 找出第 K 小的数对距离
  • 【图像压缩感知】论文阅读:Self-supervised Scalable Deep Compressed Sensing
  • Swift 宏(Macro)入门趣谈(一)
  • linux常见资源查询命令(持续更新)
  • JavaWeb:文件上传1
  • C++ 中的异常处理机制是怎样的?