
相信不少設計者在進行學習時,都是從較為簡單且經典的器件或電路開始著手,STM32就恰恰符合這一特點,因此不少新手在進行單片機學習時都是先從STM32開始。在本文中,小編將為大家介紹在STM32中的I2C上拉電阻的選擇問題。
從設計過程中我們可以發現,I2C的上拉電阻通常為1.5K、2.2K、4.7K,然而電阻的大小對時序有一定影響,對信號的上升時間和下降時間也有影響,所以一般接1.5K或2.2K。
上拉電阻阻值的確定
由于I2C接口采用OpenDrain機制,器件本身只能輸出低電平,無法主動輸出高電平,只能通過外部上拉電阻RP將信號線拉至高電平。因此I2C總線上的上拉電阻是必須的。
RP不宜過小,一般不低于1KΩ:一般IO端口的驅動能力在2mA~4mA量級。如果RP阻值過小,VDD灌入端口的電流將較大,這導致端口輸出的低電平值增大(I2C協議規定,端口輸出低電平的最高允許值為0.4V)。如果灌入端口的電流過大,還可能損壞端口。故通常上拉電阻應選取不低于1KΩ的電阻(當VDD=3V時,灌入電流不超過3mA)。
RP不宜過大,一般不高于10KΩ:由于端口輸出高電平是通過RP實現的,線上電平從低到高變化時,電源通過RP對線上負載電容CL充電,這需要一定的時間,即上升時間。端口信號的上升時間可近似用充電時間常數RPCL乘積表示。信號線負載電容(對地)由多方面組成,包括器件引腳、PCB信號線、連接器等。如果信號線上掛有多個器件,負載電容也會增大。比如總線規定,對于的400kbps速率應用,信號上升時間應小于300ns。假設線上CL為20PF,可計算出對應的RP值為15KΩ。如果RC充電時間常數過大,將使得信號上升沿變化緩慢,達不到數據傳輸的要求。因此一般應用中選取的都是幾KΩ量級的上拉電阻,比如都選取4K7的電阻。
I2C上拉電阻計算公式
Rmin={Vdd(min)-o.4V}/3mA
Rmax=(T/0.874)*c,T=1us100KHz,T=0.3us400KHz。(C是Buscapacitance)
上拉電阻Rp最大值由總線最大容限(Cbmax)決定,Rp最小值由上拉電源Vio與上拉驅動電流(最大取3mA)決定。于是Rpmin=5V/3mA≈1.7K(@Vio=5V)或者2.8V/3mA≈1K(@Vio=2.8V)。
Rpmax的取值:參考周立功的I2C總線規范中文版來說,標準模式下100Kbps總線的負載最大容限<=400pF。快速模式下400Kbps總線的負載最大容限<=200pF,根據具體使用情況、目前的器件制造工藝、PCB的走線距離等因素以及標準的向下兼容性,設計中以快速模式為基礎,即總線負載電容<200pF,也就是傳輸速度可以上到400Kbps是不成問題的。于是Rpmax可以取的范圍是1.8K~7K@Vio=5V對應50pF~200pF。根據Rpmin與Rpmax的限制范圍,一般取5.1K@Vio=5V,負載容限的環境要求也容易達到。在2.8V系統中,console設計選3.3K,portable/handset等低供耗的設計選4.7K犧牲速度換取電池使用時間。
總的來說:電源電壓限制了上拉電阻的最小值。負載電容(總線電容)限制了上拉電阻的最大值。補充一點,在I2c總線可以串連300歐姆電阻RS可以用于防止SDA和SCL線的高電壓毛刺。
本文從阻值的計算與確定等方面,來對STM32中的I2C上拉電阻問題進行了講解,并給出了I2C上拉電阻的計算公式。對于STM32和上拉電阻之間存在疑惑的朋友不妨花上幾分鐘來閱讀本文,相信一定會有意想不到的收獲。
聲明:本內容為作者獨立觀點,不代表電源網。本網站原創內容,如需轉載,請注明出處;本網站轉載的內容(文章、圖片、視頻)等資料版權歸原作者所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯系我們,以便迅速采取適當處理措施;歡迎投稿,郵箱∶editor@netbroad.com。
微信關注 | ||
![]() |
技術專題 | 更多>> | |
![]() |
技術專題之EMC |
![]() |
技術專題之PCB |