點擊上方名片關注了解更多


01
有些芯片的引腳,是開漏輸出或者開集電極輸出。也就是無法直接輸出高電平。它內部有個開關,打開的時候引腳接地,輸出低電平。開關關掉的時候,引腳就懸空了,處于高阻態。

所以需要一個電阻,把引腳連到電源上。開關關掉的時候,電阻把電平拉上去。這就是上拉電阻的作用。

HDMI的DDC通道就是典型的開漏結構,必須加上拉電阻才能正常工作。
常見用到上拉電阻的地方還有:I2C總線(包括HDMI的DDC),單片機的開漏IO口,比較器的輸出,按鍵檢測等等。
電阻選多大,是個問題。選小了有麻煩,選大了也有麻煩。下面分開說。
02
電阻越小,上拉能力越強,但代價也大。
03
電阻選大了,主要問題是速度上不去。
總線上的導線、芯片引腳、PCB走線都會有寄生電容,上拉電阻和這個電容組成了RC充電回路。電阻越大,充電越慢,信號上升越慢,用示波器看就是上升沿變成斜坡,不是陡峭的方波。
I2C通信對上升沿時間有明確要求:
100kHz標準模式下,上升沿不能超過1000ns;
400kHz快速模式下,不能超過300ns;
1000kHz快速模式+下,不能超過120ns。

算一下:10k電阻加上200pF寄生電容(假設),RC常數是2us,充滿電需要好幾倍RC時間,上升沿大概1us出頭。400kHz模式下,1us的上升沿已經超標了。換成2.2k電阻,RC常數是0.44us,上升沿大概0.24us,合格。
這就是HDMI的EDID讀不出來的原因。DDC通道的I2C跑的是100kHz到400kHz,10k電阻上升沿太慢,EDID芯片不認。換成2.2k,問題解決。另外,電阻大了還容易被干擾,外部噪聲耦合進來,上拉電阻拉不動,電平就會亂跳。
04
沒有萬能值,給大家三個計算步驟,作為參考。
第一步:算最小能選多大。
最小電阻由IO口的最大灌電流決定,公式:R_min = 供電電壓 / 最大灌電流。比如供電3.3V,最大灌電流20mA:3.3 / 0.02 = 165Ω。也就是說電阻不能小于165Ω,比這個再小電流就超了。

第二步:算最大能選多大。
最大電阻由通信速度決定,公式:R_max = 上升沿時間要求 / (總線電容 × 2.2) [ I2C 上升時間近似估算的一種工程簡化表達]。
比如400kHz I2C,上升沿要求300ns,總線電容算200pF:0.0000003 / (0.0000000002 × 2.2) ≈ 681Ω,算出來最大只能到680Ω左右。但實際中沒這么嚴格,很多人在400kHz下用1k、2.2k也能跑。常用的經驗值:100kHz I2C用4.7k到10k,400kHz I2C用1k到2.2k,1MHz以上用470Ω到1k。
第三步:在范圍內挑一個常用值。
比如你算出來最小500Ω,最大5k,那1k、2.2k、4.7k都可以。怎么選?電池供電想省電就選大一點,比如4.7k;高速通信要快就選小一點,比如1k;啥都不敏感就選4.7k,這是最常用的值。
今天的分享就到這里了,你有沒有因為上拉電阻翻過車?評論區聊聊。
加群/投稿/招聘/推廣/宣傳/技術咨詢 請加微信:woniu26a
