推挽输出&&开漏输出

2023-05-16

33df06521b6a4ecbaf398571eb7b6c05.png

在学习STM32的时候,我发现了一个很值得研究学习的问题,下面,用我的理解来阐述一遍,这其中的原理。


首先请看电路图

97bc1dfe956a40fc9d057e6a88842251.png

在给GPIO配置输出的时候,其有两种工作模式可选,分别是推挽输出和开漏输出。

e437e2f2129a4c5baf47665a7d501644.png


在此之前先得了解mos管的工作原理,为了方便大家理解,我用通俗的语言来阐述

07ad29fdb0be467d998ccc2b9f1ab9d7.png

这是一个PMOS,他可以理解成一个低电平(逻辑0)开启的开关,图中的小圆点是非门的意思,也就给我们提示需要用一个低电平来导通这个pmos管

3fca844c5bc1442998892fcb3309c2ac.png

这是一个NMOS,他可以理解成一个高电平(逻辑1)开启的开关


在有了上面的认知,我们再来理解下面的问题

1、推挽输出

推挽输出的时候,是不需要上拉电阻的,其本身就有足够的驱动能力,但是其缺点是无法进行“线与”,一但进行了高低电平的“线与”, 就会发生短路的现象。

1.1分析其输出(用逻辑0和1来分析)

输入PMOSNMOS输出
0导通不导通1
1不导通导通0

推挽输出时,不管是输入0,还是1,都会有一个mos管是工作在导通状态。 

当输入0时,PMOS导通,那就把上面想成一个导线,NMOS不导通,那就想成电阻无穷大,根据节点电压,或者说分压原理,输出的那一段电压值,其实就是分在下面NMOS两端的电压,由于其阻止很大,因此分的也大,几乎是全部,也就是逻辑1了,

输入1时的情况也可以用我上面说的那种方法来理解,此处就不过多赘述了

1.2分析其不可“线与”

03ad675887464773a45c42abd6943e3a.png

这就是所谓的“线与”,就是把前一个的输出,直接接到后一个作为后一个的输入。而我上面画出的这种情况,也就是在最开始的时候输入一个0,其线与后就会反生如上图所示的短路(图中的叉叉表示不导通),所以我们说推挽输出,不可以“线与”。

2、开漏输出

所谓的开漏就是,没有VDD,也就是如下图所示的状态

6cf5361df2284873bbd282fb8635fb5d.png

由于上面不接VDD了,上面的PMOS也就不工作了,真正工作的只有下面的NMOS,原来的电路也就可以等效成下面这样,其与单个NMOS工作没什么差别。

48b38db6301240cd95ef52a6fffc02e0.png

输入NMOS状态输出
0不导通高阻态
1导通0

在其不导通的时候,nmos管相当于一个很大的电阻,也就是我们所说的高阻态;而在其导通的时候,就相当于直接接地了,所以就是逻辑0。

由于其不导通和导通的时候是高阻和0,所以其可以进行“线与”,就相当于多个电阻进行连接,并没有什么电源,也就不存在什么短路。

因此,为了提高其驱动能力,STM32的线路设计上在后面又给它加了个上拉电阻,也就是下面这个图,这也是为什么开漏输出需要上拉电阻的原因。

 ac57ffbceb0e4900823b9e3bd5754335.png

另外,使用开漏输出,还可以根据上拉电阻的阻值大小不同,控制输出电平的大小,其中原理就是一个很简单的分压原理, 也就是说其可以进行电压转换。

总结

推挽输出:不需要上拉电阻,不可“线与”,不可电平转换

开漏输出:需要上拉电阻,可以进行“线与”,可以电平转换

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

推挽输出&&开漏输出 的相关文章

  • HIVE常用函数的用法之JSON解析下

    HIVE常用函数之JSON TUPLE 如果JSON为空或者为非法的JSON格式 xff0c 返回NULL 如果键Key为空或者不合法 xff08 JSON中不存在 xff09 返回NULL 如果JSON合法 xff0c 键Key也存在 x
  • 时间机器无法存入备份之外的文件的解决方法

    在macOS Big Sur 11 0之后 xff0c APFS 或 APFS 加密磁盘已经替代Mac OS 扩展格式 xff08 日志式 xff09 格式 xff0c 成为时间机器备份磁盘的首选格式 但是Mac将整个APFS宗卷作为时间机
  • ROS安装与报错记录

    ubuntu18 04 安装ros melodic的踩最全的坑的记录 目录 ubuntu18 04 安装ros melodic的踩最全的坑的记录ubuntu 18 04 ros melodic安装记录 ubuntu20 04 ROS noe
  • Eigen3安装、卸载与重装(包含一键卸载安装指令)

    目录 ubuntu中一键卸载安装的 96 sh 96 文件下载链接一 卸载1 查看当前版本2 删除 96 eigen3 96 相关文件二 安装需要的版本1 官网 https gitlab com libeigen eigen release
  • c++调用python

    这里写目录标题 c 43 43 调用python头文件包含初始化python调用具体的函数调用链接CMakeLists txtExamplec 43 43 python的数据类型转化图像数据格式cv Mat传递numpy数据格式转化 一些奇
  • 在ubuntu安装使用miniconda

    目录 miniconda安装使用安装下载更好channel开启虚拟环境 使用一些库安装 miniconda安装使用 安装 下载 span class token function wget span https mirrors tuna t
  • 李群、李代数在SLAM中的应用

    文章目录 李群 李代数李群 李代书与坐标变换的对应关系SE 3 上的李代数求导数左乘扰动 右乘扰动怎么选取用左or右扰动 xff1f SLAM中的使用重投影误差误差项构建对应C 43 43 代码雅克比矩阵frame i的Ti2w从IMU坐标
  • ubuntu 系统安装与问题汇总

    文章目录 ubuntu 系统前期准备系统安装系统安装后显卡驱动问题设置win与ubuntu系统的启动顺序双系统时间问题系统显卡驱动选择意外状况 黑屏无法开机 重刷系统 ubuntu 系统 前期准备 硬盘分区设置BIOS选项 把快速启动关闭把
  • g2o中的核函数

    文章目录 g2o中的核函数RobustKernelHuber函数 g2o中的核函数 作用限制误差较大的edge对最终优化结果的影响 RobustKernelHuber函数 g2o中的class名称 xff1a class RobustKer
  • Eigen库参考博文

    记录一些看过的相关博客的介绍网站 动态大小的矩阵MatrixXd VectorXd
  • Illegal modifier for parameter *** , only final is permitted”

    大家好 xff0c 我想在main函数中定义一个public变量 xff0c 系统报错说 Illegal modifier for parameter chatRoom only final is permitted xff0c 如果把pu
  • C++基础学习

    文章目录 编译内存相关编译变量与内存分区内存分区变量类型 内存对齐内存泄露智能指针include 34 34 和 lt gt 语言对比c 43 43 11自动类型推导lembda 表达式 xff08 匿名函数 xff09 范围for del
  • C++ STL底层实现

    文章目录 STL库的底层实现arrayvectordequelistforward listset mapunordered map unordered set迭代器 STL库的底层实现 顺序容器 array数组vector向量deque双
  • kali爆破WiFi

    kali暴力破解WiFi密码实验步骤 建议在kali的root模式下进行 实验条件 xff1a window7下的VMware装的kali 2020 某宝买的无线 网卡 xff0c 注意 xff0c 有些厂家的网卡不支持Linux系统 xf
  • Nacos全面解析

    目录 一 Nacos概要 1 Nacos简介 2 Nacos安装 3 Nacos配置外部数据源 二 Nacos应用 1 注册发现 2 负载均衡 3 配置中心 4 多环境切换 5 配置刷新 6 共享 扩展配置 7 灰度发布 一 Nacos概要
  • Mysql性能调优

    目录 一 Mysql架构设计 1 Mysql架构图 二 Mysql常见的存储引擎 1 InnoDB引擎 2 MyISAM存储引擎 3 MEMORY存储引擎 三 Mysql索引 1 索引的分类 2 mysql中空值和null的区别 3 mys
  • Elasticsearch模糊查询精讲

    目录 一 3种模糊查询的区别 以及 常用的查询手段 1 wildcard 2 prefix 3 fuzzy 4 exists query 二 terms set 主要用于数组检索 1 数据准备 2 minimum should match
  • JRebel激活教程

    1 在idea的plugins中搜索jrebel进行安装插件 2 重启idea 3 激活jrebel 下载代理地址 Release v1 4 ilanyu ReverseProxy GitHub 双击下载的exe文件 在idea中找到激活界
  • Invalid bound statement (not found)异常解决

    问题描述以及解决思路 xff1a 1 我这里用的若依微服务框架 2 新建一个user模块ruoyi user 3 启动后报错mapper映射有问题Invalid bound statement not found 截图如下 4 报错后就开始
  • Linux防火墙添加白名单

    查看防火墙状态 systemctl status firewalld 开启防火墙 systemctl start firewalld service 开机启动防火墙 systemctl enable firewalld service 关闭

随机推荐

  • stream流对集合进行排序,取集合的topN

    package com tangbb test1 import java util ArrayList import java util Comparator import java util List import java util s
  • 1487 北极通讯网络

    1487 北极通讯网络 这个题就是用来维护一个最短路径吧 也不难 xff0c 就是用来求最小生成树的第k条边 并且 xff0c 这貌似和并查集还有一定的关系 我太傻了 xff0c 这里生成树的方法就是krusal xff0c 我居然想 xf
  • mybatis实现批量插入

    1 首先 创建一个简单的insert语句 lt insert id 61 insertname gt insert into names name values value lt insert gt 2 然后在java代码中像下面这样执行批
  • java实现简单的用户登录包含token

    要实现简单的用户登录包含token xff0c 可以按照以下步骤进行 xff1a 创建一个用户表 xff0c 在表中存储用户的用户名和密码等信息 当用户登录时 xff0c 首先检查用户提交的用户名和密码是否正确 xff0c 如果正确则生成一
  • tar.gz压缩,查看,解压

    压缩 span class token function tar span czf jpg tar gz jpg 将目录里所有jpg文件打包成jpg tar后 xff0c 并且将其用gzip压缩 xff0c 生成一个gzip压缩过的包 xf
  • C++调用shell脚本并传递参数

    C 43 43 调用脚本的两种方式 1 system 执行shell命令也就是向dos发送一条指令 xff0c system 会调用fork 产生子进程 xff0c 由子进程来调用 bin sh c string来执行参数string字符串
  • 学生成绩信息管理系统 C++(含源码)

    懂的都懂 经典大一大作业 我以前也是面向CSDN和GitHub搞定了 今天也来造福新的小朋友了 一 系统需求分析 学生成绩信息记录了学生的基本信息和成绩情况 包括 姓名 学号 整数 中间无分隔符 性别 院系 班级 各个学科及其成绩 总成绩
  • Vue项目导入ElementUI后,网页无显示,打不开Vue的Main页面

    错误如下 xff0c 这是因为我们的vue版本和node js版本太高了 xff0c 我们需要使用Element plus 执行 cnpm install save element plus 然后字main js中修改 import Ele
  • 递归求n的阶乘完整版

    递归函数 求n的阶乘 span class token keyword def span span class token function fun span span class token punctuation span Num sp
  • Ubuntu基础使用指南

    一 基础操作 1 终端重要热键 Tab xff1a 补全功能 Ctrl 43 c xff1a 中断目前程序 Ctrl 43 d xff1a 键盘输入结束 Ctrl 43 Shift 43 c xff1a 复制 Ctrl 43 Shift 4
  • Fixed Frame [base_link] does not exist

    出现这个问题请先检查有没有启动gazebo xff0c gazebo是否能正常加载模型 如果不能 xff0c 那么rviz很可能也加载不了相应的节点 启动了gazebo xff0c 在Fixed frame后可以选择节点 xff0c 没有启
  • 舵机控制(0°与90°之间反复)

  • 1488 新的开始

    1488 新的开始 新的开始 保证最少的花费 xff0c 那么很明显这就是一个最小生成树了 做题之前盲猜一下 xff0c 这个题应该要跑两遍最小生成树 xff0c 因为他说了使用两种情况 xff0c p和v 在井上修建一个和在各个井中间修建
  • Rancher2.7 + Jenkins CI/CD全流程保姆级最佳实践

    Rancher 43 Jenkins k8s集群 CI CD全流程最佳实践 CI方面 xff0c 官方推荐的视频教程等多是使用极狐Gitlab CI xff0c 但社区版极狐每月仅400分钟构造时间 xff0c 额外购买价格为1000分钟
  • linux驱动----内核模块

    目录 一 引言 二 模块的特点 三 模块程序的构成 必要内容 1 模块入口函数 2 模块出口函数 3 模块许可证声明 非必要内容 1 模块参数 2 模块导出符号 3 模块相关信息 四 模块操作命令 一 引言 我们往往需要对内核的大小进行控制
  • linux驱动----模块符号导出使用

    本文介绍一种 xff0c 一个模块调动另一个模块中定义的函数的方法 在内核中 xff0c 函数又叫做符号 xff0c 为了便于理解 xff0c 此处说成我们在C语言中熟悉的函数调用 xff0c 回想一下C语言中的函数调用 xff0c 如果我
  • gcc的编译流程

    xff08 1 xff09 预处理阶段 xff08 c gt i xff09 预处理器会处理所有的以 开头的命令 xff0c 这些都属于预处理命令 xff0c 也就是会将所有的头文件包含的东西插入到源文件中 xff0c 将所有定义的宏都在程
  • Linux驱动----mmap系统调用

    在介绍mmap之前 xff0c 我们首先要了解 xff0c 如果没有mmap xff0c 在我们对一个设备进行操作时 xff0c 内核中其实有映射一份该设备的物理内存地址 xff0c 这是一份虚拟地址 xff0c 但是这是属于内核的 xff
  • STM32的启动流程

    本文主要介绍 xff0c STM32从 CPU 上电复位执行第 1 条指令开始 xff08 汇编文件 xff09 到进入 C 程序 main 函数入口之间的那个部分 基本流程如下 1 确定启动方式 每个STM32的芯片上都有两个管脚BOOT
  • 推挽输出&&开漏输出

    在学习STM32的时候 xff0c 我发现了一个很值得研究学习的问题 xff0c 下面 xff0c 用我的理解来阐述一遍 xff0c 这其中的原理 首先请看电路图 在给GPIO配置输出的时候 xff0c 其有两种工作模式可选 xff0c 分