引入:
序号 | Q1 | Q2 | 输出 |
---|---|---|---|
1 | 1 | 0 | 1 |
2 | 0 | 1 | 0 |
3 | 0 | 0 | 浮空/高阻态 |
没有同为1的状态,如果同为1两个mos管导通导致短路
推挽模式
当在如上所述的(1,2)情况下组成了推挽模式,即相当于输出高低电平即为输出VCC或者GND
而推挽:VCC推,GND挽
-
1->高电平->vcc
-
0->高电平->gnd
所以这种模式驱动能力强,因为它可以直接输出vcc,但是也需要注意外围电路不能短路
电路图分析
输入逻辑A和输入逻辑B同时控制输出高低电平(1,0)=>1, (0,1)=>1
A:1 B:0 输出:1
A:0 B:1 输出:0
STM32的GPIO举例
STM32的推挽输出和上述基本上是一模一样,这里需要注意:这里是接的Vss而不是GND(平常一般情况我们是把GND作为Vss)
应用
驱动LED小灯
开漏输出
在如上所述的(2,3)情况下组成了开漏模式,变成了输出高阻态或者GND
-
1->高阻态(无论是对gnd还是对vcc的阻值都很大)
-
0->高电平->gnd
电路图分析
输入逻辑A一直为0,,由输入逻辑B单独控制输出
B:1 输出:高阻态
B:0 输出:0
STM32的GPIO举例
在stm32里面是逻辑输入A恒为0,故相当于上端p-mos没有了,故也是和上图差不多。
应用
IIC通信
在IIC里面的SDA线需要设置为开漏输出,因为写数据ACK的时候需要IIC从设备发送ACK确认,是需要开漏模式才可以。
默认IIC设备都会把SCL线和SDA线接到上拉电阻进行上拉处理,例如MPU6050模块
右上角R4和R5就是SDA和SCL线的上拉电阻
为什么要使用开漏模式?
- 在IIC里面默认已经是高电平,使用这样使用开漏模式即可实现输出0和1
- IIC线可以挂载多个设备,那么他们都需要具有相同的权限,即大家都可以控制高低电平,当不用的设备设置为高阻态,就不会影响其他的设备。
适配比单片机电平更低的设备
当单片机为5V的时候,可以采用开漏模式配合如下电路匹配3.3v的器件
注意:这里只能匹配低电压的,高电压需要考虑单片机是否可以承受