经典的MOS管电平转换电路

经典的MOS管电平转换电路

各电路模块间经常会出现电压域不一致的情况,所以模块间的通讯就要使用电平转换电路了。

在这里插入图片描述
上图是用MOS管实现的I2C总线电平转换电路,实现3.3V电压域与5V电压域间的双向通讯。挂在总线上的有3.3V的器件,也有5V的器件。

原理分析:

简化来看,留下I2C的一根线来分析就可以了,如下图。
在这里插入图片描述
分四种情况:
1、当SDA1输出高电平时:MOS管Q1的Vgs = 0,MOS管关闭,SDA2被电阻R3上拉到5V。
2、当SDA1输出低电平时:MOS管Q1的Vgs = 3.3V,大于导通电压,MOS管导通,SDA2通过MOS管被拉到低电平。
3、当SDA2输出高电平时:MOS管Q1的Vgs不变,MOS维持关闭状态,SDA1被电阻R2上拉到3.3V。
4、当SDA2输出低电平时:MOS管不导通,但是它有体二极管!MOS管里的体二极管把SDA1拉低到低电平,此时Vgs约等于3.3V,MOS管导通,进一步拉低了SDA1的电压。
注:
低电平指等于或接近0V。
高电平指等于或接近电源电压。所以3.3V电压域的器件,其高电平为等于或接近3.3V;5V电压域的器件,其高电平为等于或接近5V。
具体要求看芯片的数据手册是怎么说明这个限定范围的,常见的比如说0.3倍的“芯片供电电压”以下为低电平,0.7倍的“芯片供电电压”以上为高电平。也就是说“芯片供电电压”为5V的时候,5 x 0.3 = 1.5V 以下为低电平,5 x 0.7 = 3.5V 以上为高电平。
在这里插入图片描述
二、注意事项:
以上是3.3V与5V之间的情况,如果换用其他电压域之间的转换,如3.3V、2.5V、1.8V等电压值的两两之间,需要注意MOS管的Vgs开启导通电压。
给MOS管过高的Vgs会导致MOS管烧坏!给过低的Vgs会导致MOS管打不开!不同型号的MOS管这个参数值还不一样!!!
在这里插入图片描述
举例:其中一个厂家生产的2N7002的数据手册,Vgs不能超过正负20V

再来看一下,设计电路时Vgs可能设计过小的情况,下图是2N7002的数据手册。
举例:其中一个厂家生产的2N7002的数据手册,Vgs的开启电压为1V
实际使用时为保证完全开启、完全导通,设计上要多预留余量,比如实际电路中Vgs起码给到1.8V。因为1.8V的设计参数接近数据手册标注的1V临界值,尤其注意用实验验证,确保万无一失。

三、总结:
3.3V跟5V互转的电路已经是一个经典电路,实在是硬件设计师居家旅行、护院看家,必备良药!

版权声明: LR梁锐 发表于 2018年11月30日15:37:51,共 1575 字。
转载请注明:经典MOS管电平转换电路 | 电路啊!

### MOSFET电平转换电路中使用开漏输出引脚的原因及优势 #### 开漏输出的工作原理 开漏输出是指以MOSFET的漏极为输出的电路,在这种配置下,通常会在漏极外部添加上拉电阻来形成完整的开漏电路[^2]。当控制信号为高电平时,MOS管关断,输出端通过外接的上拉电阻被拉至高电平;而当控制信号为低电平时,MOS管导通,使得输出端接地从而呈现低电平[^5]。 #### 使用开漏输出的优势 1. **兼容性强** - 开漏结构允许不同的逻辑电平系统之间的连接更为简单有效。因为最终的输出是由外部上拉电阻决定的,所以可以轻松调整到所需的电压水平,实现不同工作电压设备间的通信。 2. **减少干扰** - 对于噪声敏感的应用场景来说,开漏设计有助于降低电磁干扰(EMI)。这是因为只有在需要改变状态时才会有电流流过,减少了不必要的开关动作带来的瞬态尖峰现象。 3. **支持线与功能** - 多个开漏输出可以直接并联在一起而不必担心短路风险,这被称为“线与”。多个设备可以通过共享同一根总线来进行握手协议或其他形式的数据交换操作。 4. **功耗管理** - 当不需要驱动负载的时候,可以让MOSFET保持关闭状态,这样就不会消耗额外的能量维持高电平输出,对于电池供电或者其他功率受限环境特别有利。 ```python def mosfet_level_shifter(input_voltage, output_voltage): """ Simulate a simple level shifter using an open-drain configuration. Args: input_voltage (float): Input voltage from the source device. output_voltage (float): Desired output voltage after shifting. Returns: str: Description of how the circuit behaves based on given voltages. """ if input_voltage >= 0.8 * Vth: # Assuming threshold voltage is around 0.8V for NMOS return f"MOSFET conducts and pulls down to GND, Output={output_voltage}V" else: return f"MOSFET does not conduct, Output pulled up by external resistor to {output_voltage}V" print(mosfet_level_shifter(3.3, 5)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值