首页 > 其他分享 >推挽输出与开漏输出

推挽输出与开漏输出

时间:2024-03-31 21:58:25浏览次数:13  
标签:输出 EN 高电平 推挽 低电平 开漏

推挽输出与开漏输出


文章目录


前言

在使用GPIO口时,会遇到两种配置,一种叫推挽输出,一种叫开漏输出,今天就简聊一聊这两种模式的差异和选择。


一、推挽输出

如图所示,以STM32的GPIO输出端口结构为例,开漏与推挽电路主要由一个PMOS和一个NMOS组成,两个MOS相互配合实现推挽电路。
如下图:当Q1导通,Q2截至时,电流经红色路径,将右侧MOS导通,扩音器运作。整个过程电流由内向外,类似将电流推出去。
在这里插入图片描述
如图:当Q2导通,Q1截至时,电流经红色路径,右侧MOS截至,扩音器停止。整个过程通过GND将外部电流拉进来,类似将电流挽回去。
在这里插入图片描述

如上所述,两个过程一推一挽,两种结果,描述了GPIO输出高低电平时电流的一个动作,就是常说推挽。
特点:推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力

二、开漏输出

简单总结一下Q1和Q2对于GPIO输出状态的影响,其真值表如表:

Q1状态Q2状态GPIO的输出状态
导通导通VCC直接对地短路,烧毁MOS管,错误状态
导通关断输出接VCC,输出高电平
关断导通输出接地,输出低电平
关断关断输出浮空,相对与其它点的电阻无穷大,呈现高阻态

在第3种和第4种情况下Q1均为关断状态,此时可将Q1看成是不存在的,此时Q2的漏极啥也没接,处于浮空状态,我们称之为开漏。
如果此时在右侧给他接一个芯片的EN脚,假设EN脚为低电平失能高电平使能,但是此时的漏极只能是高阻态和低电平,没有对芯片EN使能和失能的功能。
在这里插入图片描述
那么怎么才能使用漏极拥有失能和失能的能力呢?
如果在其中接入一个上拉电阻,这是的情况会如何

在这里插入图片描述
如果Q1导通,GND接入,电流通过红色路径到地,EN等效为GND此时也处于低电平,
如果Q1断开,GND断开,电流通过绿色路径到EN,EN被上拉此时处于高电平状态,
在这里插入图片描述

那么此时就有聪明的小伙伴就要问了,推挽电路可以输出高低电平,直接使用推挽电路直接输出高低电平控制EN,岂不快哉?
我觉得是可以的,但有一个问题就是,GPIO输出的电压基本是恒定的,而不同芯片的EN电压又是不一样的,比如常见的STM32的GPIO输出一般是3.3v,有的MCU的EN使能是5v,有的又是1v。不可能针对每个芯片再转一遍电压吧!这就体现了开漏电路的重要性了,只需根据需要的电压配个上拉电阻就OK了!

特点:开漏输出最主要的特性就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平,其电平跳转速度也上拉电阻决定

在使用多个GPIO控制EN的话,如果使用推挽电路会出现这样一种情况,如图
当Q1打开,Q2关闭,那么Vout1输出高电平,
当Q3关闭,Q4打开,那么Vout2输出低电平
这种情况下,电路等效为真值表的第一种情况,MOS,VCC通过MOS直接接地MOS烧毁,不能进行“线与”

在这里插入图片描述
如果使用开漏,模式就不会出现这样一种情况,如图
只有当Vout1和Vout2都输出高电平时,EN才会是高电平,处于一种“线与”状态

在这里插入图片描述


总结

推挽输出:真正的高电平有驱动能力,无需上拉电阻,电平跳转快,不可“线与”,不可电平转换

开漏输出:虚假的高电平无驱动能力,需要上拉电阻,电平跳转慢,可以“线与”,可以电平转换

标签:输出,EN,高电平,推挽,低电平,开漏
From: https://blog.csdn.net/Yin_w/article/details/136406097

相关文章

  • rollup 插件开发 - 输出钩子
    rollup插件开发-输出钩子outputOptions(outputOptions:OutputOptions)=>OutputOptions\|null替换或操作传递给bundle.generate()或bundle.write()的输出选项对象。返回null不会替换任何内容。如果我们只需要读取输出选项,则建议使用renderStart钩子,因为......
  • C语言 键盘输入与屏幕输出——数据的格式化屏幕输出
    目录顺序结构C语言如何实现数据的输入和输出?数据的格式化屏幕输出printf()格式字符printf()的格式修饰符顺序结构一般而言,顺序结构程序涉及如下三个基本操作:*输入数据*处理数据*输出数据顺序结构的特点 *自上而下,依次按顺序执行C语言如何实现数据的输入和输出?......
  • PPM协议的输出实现
    关于PPM输出的具体实现我们必然先知道其原理,本人是参考站内qiyuexin大佬的PPM信号解析这篇文章。基本要点1.ppm每个通道所占用的时间并不固定2.ppm的精度主要受制于时钟精度3.对于一个通道数据每次开头都有0.5ms的固定低电平,之后跟着0.5ms的固定的高电平,之后是0-1ms的数据......
  • C语言——倒序输出一个整数【字符篇】
    上次我们讲了如何使用数组方法倒序输出一个整数,在我们往期的学习中,我们知道,字符串可以实现很多数组类似的操作效果,那么,如何使用它来达到我们的目的呢?在C语言中,可以使用 strrev 函数直接实现倒序输出字符串。 strrev 函数用于反转字符串。使用该函数前需要包含头文件<st......
  • 输入输出-中断-总线-可靠性
    输入输出技术计算机系统中存在多种内存与接口地址的编制方式,常见的是下面两种:内存与接口地址独立编址方法内存地址和接口地址是两个完全独立的两个地址空间。访问数据时所使用的指令也完全不同,用于接口的指令只用于接口的读/写,其余的指令全都是用于内存的。因此,在编程序或......
  • 绚烂之境:Python Rich,让终端输出更炫酷!
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/c8c7bd95.html初识rich你好,我是测试蔡坨坨。在代码的世界里,每一行都是一个故事,每一个变量都是一个角色,而打印则是展示这些故事与角色的窗口。然而,这个窗口并非都是朴实无华的,有时候,我们需要一种更加「艺术」的方式来展......
  • c语言:用do-while输出前40项的斐波那契数值
    求Fibonacci数列的前40个元素。该数列的特点是第1、2两个数为1、1。从第3个数开始,每数是其前两个数之和。  分析:从题意可以用如下等式来表示斐波那契数列:     1,1,2,3,5,8,13,21…     f1=1     (n=1)     f2=1   ......
  • 输出所有可能的栈的合法出栈序列
    voidlegalstack(tack*st,intin[],intout[],intlen,inti,intj){ intx; staticintnum=1; if(empty(st)&&j>=len) { cout<<"第"<<num++<<"种:"; for(inti=0;i<len;i++) { ......
  • mount命令输出中每行的格式及其表示意义
     本文结构:a、原图展示b、格式说明c、各部分详解d、注意 a、原图 b、格式:<设备名>on<挂载点>type<文件系统类型>[<挂载选项>]c、各部分的表示意义:<设备名>:这表示已挂载设备的名称或标识符。对于硬盘分区,它可能是像/dev/sda1这样的设备文件;对于网络文件系统(如......
  • 【C#】while循环 输出四种形式的九九乘法表
    首先创建一个控制台应用程序(一)第一种阶梯inti=1;while(i<=9){intj=1;while(j<=i){Console.Write("{0}*{1}={2}\t",j,i,j*i);//\t的目的是让式子之间有一定间隔j++;}i++;Console.WriteLin......