說到上下拉電阻的作用,在課本中學習時經常會看OD OC門、增強輸出驅動能力、維持確定的高低電平狀態、抗外界干擾......
之前始終對維持確定的高低電平狀態沒有足夠深的理解,既然單片機自身是有輸出高低電平的能力,為什么還需要在外部上下拉,這不是浪費能量嗎?
直到自己做項目遇到了奇奇怪怪的現象,并且最終解決了問題,才算是真正體會到了上下拉電阻的必要性。
原來的電路方案如上圖,左邊板卡中的MCU使用兩個通用IO口控制右邊的按鍵板,按鍵板控制機器的啟動和關閉,其中用LED1和LED2兩種顏色的燈來指示機器開關機狀態。指示燈的要求是機器通電LED1亮,開機LED1滅LED2亮,關機LED1重新亮LED2滅。
非常簡單的一個單片機控制方案,裝上機器之后卻出了問題:220V通電后1~2s的時間內兩顆LED燈是同時點亮的,隨后LED2才滅。
一開始始終想不通,LED2程序都沒有給高電平,他怎么會亮。后來才想起來,從單片機啟動到程序運行是有一段時間的,而這個時間IO口的狀態是默認狀態,查詢單片機手冊,發現默認狀態是有內部上拉。內部上拉電阻阻值是10k。
這么一來,就說得通了,設計右邊板卡的工程師三極管下拉電阻其實是為了管子的開關特性考慮,而左邊板卡又沒有加上下拉。右邊板卡的三極管基極下拉電阻是20k,單片機內部上拉電阻為10k,3.3V的供電電源,三極管基極電壓就能達到2.2V,足夠將三極管導通,因此就出現了兩顆LED都點亮的現象。
隨后把R1和R2的阻值都改為了1k,通電后發現再沒有LED同時點亮的情況。但是很不巧,又出現了一個問題,機器關機時需要LED1再次亮起,LED2滅掉,但狀態切換后LED1又出現了一個閃滅的現象。原來是單片機的程序中寫了機器關掉之后會有一個自身的復位,而單片機在復位的時候引腳也是默認狀態!所以復位的時候本來是需要LED1常亮的,結果因為電阻改小了他又閃滅。
當然把R1又改回20k就能達到要求了。但這畢竟只是止血措施,否則項目改版的成本會增加不少,而且單片機引腳的上下拉本也不是右邊板卡的責任范圍。
如上圖電路應該是本設計比較好的方案,經過了這個電路的問題分析和改進,才算是深入理解了為什么上下拉電阻能夠維持IO口的穩定狀態。現在,不論是單片機啟動時IO口的默認狀態,還是復位時的重置,都不會對LED的狀態產生影響,因為在單片機狀態沒定時有上下拉電阻來給。而右邊板卡設計時使用的基極下拉電阻正常使用和選擇阻值也不會有影響。
-
led
+關注
關注
242文章
23347瀏覽量
662975 -
單片機
+關注
關注
6043文章
44617瀏覽量
638257 -
下拉電阻
+關注
關注
4文章
147瀏覽量
20585 -
IO口
+關注
關注
3文章
170瀏覽量
24170
發布評論請先 登錄
相關推薦
評論