不管是單片機的 IO 口,還是一般的上拉下拉電路,都會有灌電流和拉電流的身影。
了解可以幫助我們更好地理解和設計電路。
灌電流,英文 sink current,指被動輸入電流,是從輸出口流入電流,下圖,當 PTB0 輸出低的時候,LED 亮,電流的方向就是從 VCC 流進 PTB0 管腳。
拉電流,英文 sourcing current,指主動輸出電流,是從輸出口輸出電流,下圖,當 PTB1 輸出高的時候,LED 亮,電流的方向就是從 PTB1 流進地。
?
大致畫出 PTB0 的內(nèi)部結(jié)構(gòu), 當 INPUT 輸出高電平時,LED 亮。
當三極管在飽和狀態(tài)時,三極管集電極和發(fā)射極之間近似為一個開關,PTB0 上的電壓為:U=5*R2/(R1+R2)
如下,簡易畫出 PTB1 的內(nèi)部結(jié)構(gòu),當 VF2 輸出高電平時,LED 亮。
當三極管在飽和狀態(tài)時,三極管集電極和發(fā)射極之間近似為一個開關,PTB1 上的電壓為:U2=5*R4/(R3+R4)
從上述公式可以看出,R3 越小時,拉電流越大,PTB1 電壓越大。拉電流越大時,輸出端的高電平就越低。邏輯門的高電平有一個 Uihmin,當?shù)陀谶@個值的時候,就無法識別為 1,所以拉電流也是有一個上限的。
如下是一個實際問題,波形是單總線的復位應答信號。
可看出,在主機發(fā)送復位信號拉低總線,然后釋放,再由上拉電阻上拉至高電平,然后從機拉低總線應答,發(fā)現(xiàn)從機的低電平比較高,電壓并沒有拉低到 0V。
這個原因就是上面說到的,灌電流過大,說明這個上拉選得比較小,如果這個從機的低電平再高一些,可能就無法被主機識別,導致通信失敗。