Part 01、前言
I2C通信電路是嵌入式設(shè)計中的“??汀?,在各種產(chǎn)品比如家電,工控,醫(yī)療器械等產(chǎn)品的板內(nèi)通信中I2C總能派上用場。但設(shè)計I2C電路時,上拉電阻Rp的選擇卻是個讓人頭疼的問題:選小了不行,選大了也不行。今天咱們就來聊聊I2C上拉電阻的計算方法吧。
Part 02、為啥I2C需要上拉電阻?
I2C是一種開漏Open-Drain通信協(xié)議,SDA和SCL線上的信號只能被拉低(輸出0V),而拉高(輸出1)全靠上拉電阻Rp。
工作原理:
沒有信號時,上拉電阻把線路拉到高電平(接近Vcc)。
IC需要輸出0時,會通過內(nèi)部的MOSFET把線路拉低到接近0V。
上拉電阻的作用:
電阻決定了線路從低電平到高電平的上升速度,同時也影響功耗。選的值不對,要么通信慢得像“烏龜爬”,要么功耗高得像“電老虎”。
那上拉電阻的阻值如何確定呢?
Part 03、上拉電阻計算
我們需要計算上拉電阻的最小值Rp(min)和最大值Rp(max),咱們一步步分析。
最小值 Rp(min)計算
如果上拉電阻太小,電流會太大,IC可能拉不下來低電平,導(dǎo)致通信失敗。最小電阻由以下公式?jīng)Q定:
Vcc:電源電壓
VoL(max):IC能輸出的最大低電平電壓(I2C標準要求邏輯低電平低于 0.3×Vcc)
IoL:IC拉低時的灌電流能力(Sink Current)
舉個例子,Vcc = 3.3V,VoL(max)=0.4V,IoL=3mA,
所以,上拉電阻不能小于966.67Ω,不然IC拉低電平會“力不從心”,邏輯0 可能變成“半吊子”,通信直接崩。
最大值 Rp(max)計算
如果上拉電阻太大,線路的上升時間會變長,達不到I2C標準的上升時間要求(Rise Time),導(dǎo)致通信失敗。最大電阻由以下公式?jīng)Q定:
tr:I2C標準的最大上升時間
0.8473:RC電路上升時間的常數(shù)(從0.3×Vcc到0.7×Vcc的時間系數(shù))
舉個例子,如果tr=300 ns,Cb = 200pF
所以,上拉電阻不能大于1770Ω,不然信號上升太慢,I2C主設(shè)備可能還沒等到高電平就“等不及了”,通信又崩。
上拉電阻的范圍算出來了(966.67Ω到1770Ω),但具體選多大,還得看速度和功耗的平衡。小電阻(接近Rp(min)),優(yōu)點是上升時間短,通信速度快。缺點是電流大,功耗高。比如用1kΩ,上升時間:
速度很快,但平均電流(信號頻繁切換時):
功耗
大電阻(接近 Rp(max)),優(yōu)點是電流小,功耗低。缺點是上升時間長,速度慢。比如用1.5kΩ,上升時間:
速度慢了點,但功耗:
Part 04、注意事項
1.總線線電容Cb要估準:
Cb包括PCB走線電容(每厘米約1-2pF)、IC引腳電容(通常5-10pF/個)。比如10cm走線+2個IC,Cb ≈ 20 + 2 × 10 = 40 pF。實際設(shè)計時留點余量,測一下最好。
2.Vcc變化的影響:
Vcc不是穩(wěn)定的,而是波動的,比如不是3.3V,而是2.9-3.5V之間,Rp(min)會變化,重新算一下。
3.環(huán)境溫度:
高溫下IC的IoL可能變小,Rp(min)會變大,注意評估。
4.多設(shè)備場景:
多個IC掛在I2C 總線上,電容Cb會增加,Rp(max)變小,重新算一下范圍。
有問題歡迎在評論區(qū)留言交流哦!