使用脈沖寬度調(diào)制(PWM)技術(shù),使用汞柱板來控制LED亮度
掃描二維碼
隨時(shí)隨地手機(jī)看文章
控制LED亮度是電子和嵌入式系統(tǒng)中的一個(gè)基本概念,在可調(diào)光照明,顯示背光,甚至電機(jī)速度控制中起著關(guān)鍵作用。我們使用脈寬調(diào)制(PWM)來實(shí)現(xiàn)平滑和精確的亮度調(diào)節(jié),而不僅僅是開關(guān)LED。
PWM的工作原理是快速切換LED在ON和OFF狀態(tài)之間的高頻。亮度是通過改變占空比來控制的,占空比代表了信號(hào)在每個(gè)周期中保持高電平的時(shí)間百分比。
當(dāng)以足夠高的頻率切換時(shí),人眼無法感知在開和關(guān)狀態(tài)之間的快速切換。相反,由于視覺的持續(xù),LED的亮度呈現(xiàn)為連續(xù)的平均值,造成變暗的錯(cuò)覺。
在本教程結(jié)束時(shí),您將學(xué)習(xí):
?PWM是什么以及它如何控制亮度。
?如何使用水星板上的analogWrite()函數(shù)。
我們開始吧
?設(shè)置環(huán)境-如果您還沒有在Arduino®上添加水星板,現(xiàn)在是這樣做的好時(shí)機(jī)。
?插入U(xiǎn)SB電纜水星板和連接它您的筆記本電腦。
?請(qǐng)參閱下面的代碼
?當(dāng)Arduino終端顯示“Connecting…”時(shí),長(zhǎng)按FLASH按鈕啟動(dòng)上傳過程。
這里到底發(fā)生了什么?
速成班:了解Arduino®環(huán)境中的GPIO控制
對(duì)于Arduino®編碼環(huán)境的新手,讓我們分解使用數(shù)字GPIO(通用輸入/輸出)引腳和analogWrite()函數(shù)控制LED亮度的基礎(chǔ)知識(shí)。
Arduino中的analogWrite()函數(shù)用于在支持的數(shù)字引腳上生成脈沖寬度調(diào)制(PWM)信號(hào)。與digitalWrite()不同,digitalWrite()只是將引腳設(shè)置為HIGH或LOW,而analogWrite()通過改變方波的占空比來允許中間輸出電平。
這里,“亮度”表示用戶輸入所需的LED亮度。
在水銀開發(fā)板上,高電平是3.3V,低電平是0V。analogWrite()函數(shù)使輸出能夠在兩個(gè)極端之間實(shí)現(xiàn)可感知的電壓。
analogWrite()函數(shù)接受兩個(gè)輸入:引腳和占空比。在Mercury Board上,內(nèi)置LED連接到引腳D7 (GPIO 2)。通過將占空比設(shè)置為0到255之間的值[0 = 0%占空比,255 = 100%占空比],我們可以平滑地調(diào)節(jié)LED的亮度。
因此,要將LED亮度設(shè)置為50%,代碼如下:
為了使其更具交互性,我們可以引入Serial.parseInt();允許用戶輸入控制LED亮度。這將使用戶能夠輸入[0,255]之間的亮度水平,水星板將讀取并使用相應(yīng)地調(diào)整LED的亮度。
***聲明***
以上提到的一切大體上都是正確的;然而,在使用ESP-12F模塊的水星板上,ESP-12F模塊上的默認(rèn)內(nèi)置LED以反向配置連接。這意味著當(dāng)GPIO 2 (D7)設(shè)置為HIGH時(shí),LED關(guān)閉,當(dāng)GPIO 2設(shè)置為L(zhǎng)OW時(shí),LED打開。
因此,PWM的行為也被反轉(zhuǎn)。當(dāng)PWM值設(shè)置為0時(shí),LED以全亮度發(fā)光,當(dāng)PWM值設(shè)置為255時(shí),LED完全關(guān)閉。否則,概念理解保持不變。
為了解釋這種倒置的LED行為,我們需要在代碼中做一個(gè)小的調(diào)整,如下所示:
這里,“亮度”表示用戶輸入所需的LED亮度。
本文編譯自hackster.io