文章目录
1.I²C的输出模式2.电路图分析(非IIC标准电路)2.1.MOS管断开的情况下的电路分析:2.2.MOS管闭合的情况下的电路分析:
3.如何选择上拉电阻的阻值
1.I²C的输出模式
I²C 的 SDA、SCL 线都是 开漏/开集电极输出(open-drain/open-collector)
开漏输出 : MCU内部通常集成了MOSFET来控制IO口的开关,对于开漏输出,MOSFET可以开启,控制引脚接地,为低电平,但是如果关闭则会导致引脚悬空(此时引脚的电平进入不确定状态,很显然这样不可靠),此时内部又加上了一个几十K到几百K的上拉电阻,形成弱上拉(保证MOSFET关闭状态下默认高电平),此时电流很小,这只适合“保持默认高电平”,不能满足 I²C 高速通信对上升沿的要求。
如果需要外接上拉电阻,建议关闭MCU或者电子器件的内部上拉
2.电路图分析(非IIC标准电路)
图片里面没有表示出MCU内部弱上拉的电路图,但是有外部上拉电路图,并且连接一个电子器件,器件内部的阻抗必须远大于外接的上拉电阻,这样能够极大的减小3.3V流到节点的电流,减小电流就能减小电压损耗,此时就可以保证节点的电压保持在接近3.3V,然后作为高阻输入,R2通常是远大于R1的,R2是让输入保持默认高阻状态,即芯片默认关闭,但是R1 才是保证 IO 能真正输出高电平的关键,所以外接一个上拉电阻用来保证能够上拉输出。
上拉电阻越小 ,上升沿越快(好处),但功耗更大(坏处)。
上拉电阻越大,上升沿越慢,功耗降低,但是如果是IIC快速通讯会导致上升沿速度太慢,信号畸形,通信错误
当内部MOS管打开后,有一个导通电阻(图中未标出),这个导通电阻非常小,通常为几毫欧到几欧,远小于R2,节点通过低电阻直接接到地,此时电压输出为0,即没有电压经过R2,电子期间不会激活
R2就是为了维持输入的高阻态,保证在没有外部驱动的情况下关闭,保持引脚为低电平,即高电平输入来激活电子器件
2.1.MOS管断开的情况下的电路分析:
VCC — R1 — 节点 — R2 — GND(MOS 断开不参与)这就是一个电阻分压网络,电流为:
I
=
V
C
C
R
1
+
R
2
I= \frac {V_ {CC}}{R_ {1}+R_ {2}}
I=R1+R2VCC节点电压(EN脚电压)为:
V
E
N
=
V
C
C
⋅
R
2
R
1
+
R
2
V_{EN} = V_{CC} \cdot \frac{R_2}{R_1 + R_2}
VEN=VCC⋅R1+R2R2为了让 V_BE接近V_CC,需要 R2≫R1:
例:
𝑉
𝐶
𝐶
=
3.3
V
,
𝑅
1
=
10
𝑘
Ω
,
𝑅
2
=
100
𝑘
Ω
,
V
C
C
=
3.3
V
,
R
1
=
10
k
Ω
,
R
2
=
100
k
Ω
例:𝑉𝐶𝐶=3.3V,𝑅1=10𝑘Ω,𝑅2=100𝑘Ω,VCC=3.3V,R1=10kΩ,R2=100kΩ
例:VCC=3.3V,R1=10kΩ,R2=100kΩ,VCC=3.3V,R1=10kΩ,R2=100kΩ
I
=
3.3
110
k
≈
30
μ
A
,
V
E
N
=
3.3
⋅
100
110
≈
3.0
V
I = \frac{3.3}{110k} \approx 30\ \mu A,\quad V_{EN} = 3.3 \cdot \frac{100}{110} \approx 3.0\ \text{V}
I=110k3.3≈30 μA,VEN=3.3⋅110100≈3.0 V上拉还要“克服”EN脚的 输入漏电流(设为 I_leak),MOS 关断时,会有一股很小的直流电流从 VCC 经 R1 → 节点 → R2 → GND 流过,这股电流在节点上形成的分压把节点“抬高”,所以上拉电阻需要考虑到漏电流和抬升的电压
V
E
N
=
V
C
C
−
I
p
u
l
l
⋅
R
1
,
I
p
u
l
l
=
I
l
e
a
k
+
V
E
N
R
2
V_{EN} = V_{CC} - I_{pull} \cdot R_1,\quad I_{pull} = I_{leak} + \frac{V_{EN}}{R_2}
VEN=VCC−Ipull⋅R1,Ipull=Ileak+R2VEN只要 I_leak 很小、R_2很大,I_pull 就很小,V_EN就会非常接近V_CC。
2.2.MOS管闭合的情况下的电路分析:
VCC — R1 — 节点 — MOS(on) — GND 电流几乎不流向R2,导致R2附近电压全为0大多数MOS闭环导通的电阻会远小于外接上拉电阻,节点电压结算:
V
E
N
=
V
C
C
⋅
R
D
S
(
o
n
)
R
1
+
R
D
S
(
o
n
)
≈
0
V_{EN} = V_{CC} \cdot \frac{R_{DS(on)}}{R_1 + R_{DS(on)}} \approx 0
VEN=VCC⋅R1+RDS(on)RDS(on)≈0上拉电流:
I
=
V
C
C
R
1
+
R
D
S
(
o
n
)
≈
V
C
C
R
1
I = \frac{V_{CC}}{R_1 + R_{DS(on)}} \approx \frac{V_{CC}}{R_1}
I=R1+RDS(on)VCC≈R1VCC
R
1
=
10
k
Ω
,
R
D
S
(
o
n
)
=
50
Ω
⇒
V
E
N
≈
16
mV
,
I
≈
0.33
mA
R_1 = 10k\Omega , R_{DS(on)} = 50\Omega \Rightarrow V_{EN} \approx 16\ \text{mV},\ I \approx 0.33\ \text{mA}
R1=10kΩ,RDS(on)=50Ω⇒VEN≈16 mV, I≈0.33 mA开漏只能“拉低”,不会主动拉高。没有 R1,MOS 关断时节点就是悬空(或只被 R2 往地拉)→ 得不到高电平。R2 的作用是“默认下拉,防误使能”;R1 的作用是“当 MOS 关断时提供上拉电流,把节点电压抬到高电平”。两者分工不同。
3.如何选择上拉电阻的阻值
低电平到高电平的转化在细分的时间刻度下并不是瞬间完成的,它需要有一个爬升的过程,而上拉电阻越大,爬升的越慢,上拉电阻越小,驱动能力越强,爬升的越快,在IIC标准中,在400KHZ的快速模式下,上升时间 t_r <= 300ns 电平上升波形图:
I²C 总线的信号线(SDA 和 SCL)会受到寄生电容的影响,并且影响高电平的上升速度,高电阻会影响电容的充电速度,这些寄生电容主要来源于:
引脚输入电容:每个设备的 I²C 引脚都会有一定的输入电容,通常为几 pF 到几十 pF。PCB 走线电容:印刷电路板上的走线也会引入电容,通常每厘米约为 1~2 pF。杜邦线电容:杜邦线的长度和材质会影响电容,通常每厘米约为 50~100 pF/m。 可以根据需要挂载的从机数量以及线束的长度,PCB走线的长度估算出总电容
上拉电阻和寄生电容形成一个 RC 电路,所以可以通过RC电路来计算电平上升时间
t
r
≈
2.2
⋅
R
p
⋅
C
t
o
t
a
l
t r ≈2.2⋅R p ⋅C total
tr≈2.2⋅Rp⋅Ctotal
R
p
是上拉电阻;
C
t
o
t
a
l
是总线电容。
R p 是上拉电阻; C total 是总线电容。
Rp是上拉电阻;Ctotal是总线电容。 根据公式来计算所需的上拉电阻
一般建议2.7K到4.7k之间能满足20cm走线的400KHZ高速通信
示例电路: