本帖最后由 woai32lala 于 2023-2-14 19:22 编辑
#申请原创#@21小跑堂
IIC电平转换电路
在做IIC通信的时候,经常会遇到两种芯片电平逻辑不一致,因此我们一般会采用电平逻辑转换电路,我们常用的一般是通过一个MOS管即可。下面说一下这个电平转换电路的原理。IIC总线是开漏输出,只能输出低电平,并且是线与关系,防止一个器件输出高电平,一个器件输出低电平,导致VVC直接对GND短路,因此外部加上拉电阻,如下图的R1和R5所示。 因此这里引出了一个问题,上拉电阻的阻值该如何选择? 1、功耗问题 如果上拉阻值过小,VDD灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(I2C协议规定,端口输出低电平的最高允许值为0.4V)。 根据公式 Rmin={Vdd(min)-0.4V}/3mA,故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时,灌入电流不超过3mA)。 2、速度问题 它取决于上拉电阻和线上电容形成的RC延时,RC延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,的所以上拉电阻不能过大。I2C总线上的负载电容不能超过400pF。当I2C总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pF时,就不能可靠的工作,这也是I2C的局限性。 因为我们这边只是做了电平转换,且只有一路IIC的SDA,因此我们两端上拉电阻均用的10K上拉电阻并不会产生影响,但是在我们实际应用中一定不能这么勇,通常实际应用中选择的上拉电阻一般为1.5K,2.2K,4.7K。 第一步
1)Master往slave发数据1,断开S2、S3、S4,S1按键按下,接通3.3V,左边M_SDA为输出1,NMOS的vGS=0, 此时NMOS关闭,通过万用表可以看到NMOS管两端电阻为168MΩ,这里MOS管用的低Vgs导通的NMOS(切记,这种测量电阻方式不对)
2)右边的Slave的S_SDA是输入,对外呈现高阻;
3)NMOS关断和SLAVE为输入,导致S_SDA悬空;
4)最终S_SDA依靠R5上拉到5V,完成3.3V到5V的转换。
第二步
1)Master往Slave发数据0,将S1、S2、S4断开,闭合S3,讲输入端拉低,使置为低电平。
左边M_SDA为输出,驱Low = 0,NMOS的VGS>0,此时NMOS打开;
2)右边的Slave的S_SDA是输入,对外呈现高阻;
3)NMOS打开和SLAVE为输入,导致M_SDA=S_SDA=0;
4)最终S_SDA被M_SDA拉到0,完成低电平的转换。
第三步
Slave往Master发数据1,将S1、S3、S4断开,闭合S1,使之输入高电平。
1)右边S_SDA为输出5V。
2)左边M_SDA为输入,对外高阻,被R1上拉到3.3V;
3) NMOS因为VGS=0一直关闭;
4) NMOS关闭,M_SDA维持3.3V高电平,完成电平转换。
第四步
1)Slave往Master发数据0,S1、S2、S3断开,S4闭合,Slave输出端接地为低电平。
2)左边M_SDA为输入,对外高阻,被R1上拉到3.3V
3) NMOS因为VGS=0一直关闭;
4) NMOS关闭,M_SDA为3.3V高电平。
5)因为上图的NMOS中体二极管大的存在,方向由S->D,由于左边M_SDA为高电平,右边S_SDA为LOW,因此 Body Diode导通;
6) S_SDA被拉低,导致NMOS VGS>0后打开;
7) NMOS管导通,M_SDA为LOW;
至此,IIC电平转换逻辑分享完毕,如有错误,请大家指出。
|
在电平转换电路中有几种不同的类型。一种是从速度的角度来划分:是高速的信号,还是低速的信号转换,抑或是开关量的信号转换; 还有一种是从方向上来划分,是单向的,还是双向的。作者通过实际的仿真测试,对两种情况均做了相关讲解,步骤清晰,讲解细致。
距申请原创文章的字数门槛还差一两百字哦,您可以稍加补充。