脈沖寬度調制(PWM)是一種使用開關數字信號來控制傳遞到電子負載的功率量的技術。該技術背后的關鍵思想是,可以通過改變信號的占空比來改變數字信號的平均DC值,從而改變傳遞給負載的功率。該方法通常用于控制直流電動機的速度和燈的亮度。開關電源也基于PWM技術。在本教程中,我們將討論chipKIT Uno32板的PWM引腳,并通過控制兩個外部LED的亮度來說明該概念。
PWM
理論
脈寬調制(PWM)是一種通過能量傳遞能量的方式脈沖而不是連續變化的信號。通過增加或減少脈沖寬度(頻率保持不變),可以控制輸出功率。信號打開的時間周期的一部分稱為占空比。信號的平均DC值可以通過改變占空比來改變。占空比可以在0(信號始終關閉)到1(信號一直打開)之間的任何位置。假設,如果信號在開啟時為+5 V,在關閉狀態時為0 V,則通過更改信號的占空比,可以模擬0-5 V之間的任何電壓。該方法通常用于控制直流電動機的速度和燈的亮度。 PWM的原理如下圖所示。
PWM
電路設置
在chipKIT Uno32板上,可以將I/O引腳3、5、6、9和10配置為提供PWM輸出。我們將兩個LED(紅色和綠色)連接到PWM引腳3和5,并通過改變驅動這些LED的PWM信號的占空比來控制它們的亮度。兩個100電阻用于限制通過LED的電流。
電路設置
在面包板上的實際設置
寫草圖
可以使用 analogWrite生成Arduino平臺中的PWM信號()命令。在括號內,您可以指定引腳號和所需的占空比(0-255)。占空比“ 0”表示始終關閉,“ 255”表示始終打開。調用 analogWrite()時,將在指定的PWM引腳上生成具有指定占空比的穩定方波。下圖使用變化的占空比PWM信號來控制傳遞到兩個LED的輸出功率。兩個LED交替淡入和淡出,這意味著當一個LED處于峰值強度時,另一個LED變暗,反之亦然。
int redLED = 3; // Red LED is connected to pin 3
int greenLED = 5; // Green LED is connected to pin 5
int redCount = 255; // Initial PWM values, RED is full
int greenCount = 1; // Green is dim
int i = 0;
void setup()
{
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
}
void loop()
{
if (i 《 255) // First phase
{
redCount = redCount-1; // Red down
greenCount = greenCount+1; // Green up
}
else if (i 《 509) // Second phase
{
redCount = redCount+1; // Red up
greenCount = greenCount-1; // Green down
}
else // Re-set
{
i = 0;
}
i += 1;
analogWrite(redLED, redCount); // Write current values to LED pins
analogWrite(greenLED, greenCount);
delay(10); // Pause for 10 millisecond
}
輸出
在程序中的職責周期以1為步長從1更改為255。首先,紅色LED由占空比為255的PWM信號驅動,這意味著它將完全打開。驅動綠色LED的PWM信號的占空比為1,這意味著其強度最小。在每10 ms中,驅動紅色LED的PWM信號的占空比減小1,而綠色LED的占空比則增大1。大約2550 ms之后,亮度條件反轉,并且綠色LED完全點亮。重復此操作以交替產生淡入和淡出效果。
淡入和淡出
紅色LED處于最大強度,而綠色則變暗了
綠色處于最大強度而紅色卻變淡
LED的工作電流非常低,因此,可以直接通過UNO32板的PWM輸出驅動它們。對于直流電動機控制,需要一個外部電動機驅動器電路(例如H橋),該電路基本上將從微控制器引腳發出的低電流PWM信號放大為能夠提供足夠電流來驅動電動機的高電流PWM信號。
責任編輯:wv
-
PWM
+關注
關注
114文章
5193瀏覽量
214309 -
開發板
+關注
關注
25文章
5085瀏覽量
97768
發布評論請先 登錄
相關推薦
評論