單片機點燈技巧分析

今天給大家分享一下嵌入式入門之點燈技巧。對於初次接觸嵌入式的小夥伴們來說,就像大多人入門要寫的第一行C代碼都是"hello world !",在實物電路板上乾的第一件事就是點個燈,甚至是N個燈。


單片機點燈技巧分析

電路板LED指示燈

用微處理器點亮一個燈在邏輯和操作上對新手來說都是比較容易的,雖然看似簡單的一件事,但深究起來也蘊含著不少技巧,在你還沒掌握這些技巧之前它們就是一個個的坑,你會有各種各樣的困惑,遇見各種各樣的問題。

假如要實現指示燈按1S週期閃爍,偽代碼如下:

<code>

while

(

1

) { 延時

1S

IO

翻轉; }

while

(

1

) {

HAL_Delay

(

1000

);

HAL_GPIO_TogglePin

(GPIOC, GPIO_PIN_7); }/<code>

邏輯看起來相當簡單,你要做到兩件事:1.實現精確的1S延時時間 2.讓微處理相關引腳電平翻轉

實現固定延時的方式有很多,首先你要考慮的是自己的微處理器HAL庫是否自帶延時API,如果有那你很幸運,只需要考慮傳入正確的時間參數並正確調用它即可,這樣可以省去很多麻煩,例如我在上面HAL_Delay(1000);裡面寫的是1000,代表1000ms。如果沒有現成的API提供,你可以用定時器或者死循環來實現,當然這都得需要示波器大哥的嚴格把關。

對於操控IO的代碼,不管是51也好,還是MSP430、STM32等等微處理器,實現方式都大同小異。另外在軟件方面還需要注意的是正確配置IO類型,以免代碼邏輯正確,但是燈始終不閃爍,甚至導致單片機死機現象。

分析完代碼部分再看一下硬件上的實現,一般LED燈驅動電路如下:


單片機點燈技巧分析

LED經典驅動電路

該電路工作原理是,當控制引腳為高電平時,三極管CE之間導通,相當於開關打開,LED通電形成迴路故能發光;當控制引腳為低電平時,三極管截止開關關閉。

其中R1的作用是限制流過LED的電流,當你的燈太暗或者太亮時,可以通過調節該電阻的阻值大小達到你想要的亮度,具體阻值的計算要根據你 LED燈電氣特性和供電電壓來確定;R2的作用是限制流過三極管B極的電流,這是必須要加的,否則當BE之間導通時會產生很大的電流,從而將管子燒掉,原因是三極管是電流控制型元件;R3是一個下拉電阻,其目的是穩定B極電平,防止三極管在工作中受噪聲的影響產生誤動作,尤其是單片機剛上電時IO狀態不穩定,最好不要省略。

另外有些小夥伴喜歡簡單粗暴的方式,直接用單片機引腳來驅動LED燈,本人不建議在實際項目中使用該方式,首先拉灌電流過大對單片機的工作穩定性是一種威脅,還有一個理由是一些LED燈不能被IO引腳直接驅動起來,這對單片機來說是心有力而不足,此時你就要加驅動電路了。


單片機點燈技巧分析

Can you drive it?


總而言之,小小的燈也蘊含著處理問題的哲學,當你點亮了第一盞燈,也意味著你正式開啟了嵌入式之路,我希望它從此也點亮了你的人生。於工作和實踐中提取出通用且健壯的方案是我們每一個工程師的基本追求,不斷學習和思考是我們成長進步的動力,一大波乾貨即將到來。。。



分享到:


相關文章: