不同芯片的工作电压有 1.8V、3.3V、5V 等。当两种不同电压的芯片需要连接工作时,就要让两边的电平都符合各自的要求,这样才能正常工作。由于不同电压的芯片之间会存在电平不匹配的问题,而且如果两端的压差太大,还可能损坏芯片引脚,所以我们有必要进行电平转换。通常来讲,进行电平转换时,主要要考虑的是信号传输的速度以及信号的方向这两个问题。
二极管电平转换电路

电路的转换方向固定,高电压端和低电压端不能调换。
电路分析
当输入端 3.3V_IN 为低电平时,D1 导通,输出端 1.8V_OUT 为低电平,实现两端都是低电平。
当输入端 3.3V_IN 为高电平时,D1 截止,输出端被 R1 上拉至 1.8V,为高电平,实现两端都是高电平。
三极管电平转换电路

当输入端为低电平 0V 时,三极管导通,输出端与输入端导通,输出端被拉低到接近 0V,实现两端都是低电平。
当输入端为高电平时,三极管截止,输出端依靠上拉电阻(上图中的 R17、R19)变成高电平,实现两端都是高电平。
不适用于波特率过高的应用(大概大于 400Kbps 就不建议使用了)。
MOS 管电平转换电路

从左向右看
当 S1A 为高电平(VCC_S1)时,MOS 管 VGS=0,NM1 不导通,S2A 处电平被 R11 上拉为高电平(VCC_S2),S2A 也为高电平。两端都是高电平。
当 S1A 为低电平时,MOS 管 VGS=VCC_S1,NM1 导通,S2A 的电平与 S1A 相等,为低电平。两端都是低电平。
从右向左看
这里说明一下开漏输出,由于有上拉电阻,所以在没有外部影响的正常情况下,S1A 和 S2A 默认都是高电平。
当 S2A 为高电平(VCC_S2)时:
假设左侧 S1A 为高电平(因为是开漏输出,所以左侧一般会被 R10 上拉至高电平(VCC_S1),除非线上有低电平拉低,这里我们还是分两种情况讨论),MOS 管 VGS=0,NM1 不导通,左侧依然被 R10 上拉至高电平(VCC_S1)。两端都是高电平。
假设左侧 S1A 为低电平(正常情况下不会发生,原因就是开漏输出),MOS 管 VGS=VCC_S1,NM1 导通,S2A 为高电平,所以会导致 S1A 电压上升,等 S1A 上升到 VCC_S1 时,NM1 截止,两端都变成高电平(除非开始使 S1A 为低电平的外界因素一直存在,这属于外部问题,这里就不多做讨论了)。
当 S2A 为低电平时:
正常情况下左侧 S1A 为高电平(VCC_S1),MOS 管 VGS=0,NM1 不导通,但由于 MOS 管的寄生二极管,会把 S1A 下拉至低电平(这个低电平不是 0V,比 S2A 高一个二极管压降,比如 0.7V),那么 VGS=(VCC_S1-0.7V),使得 NM1 导通,导通之后,S1A 和 S1B 基本相等,两端都是低电平。
如果 S1A 一开始就是低电平(正常情况下不会发生),MOS 管 VGS=VCC_S1,NM1 导通,S2A 的电平与 S1A 相等,为低电平。两端都是低电平。
这是最经典的电平转换电路,可实现双向电平转换。常用于 I2C 通讯。不能用于推挽输出的 IO 口,MOS 管的选型要注意 VGS (th)(开启电压)的最大值要小于通讯两端的低电源电压。