標籤:
使用STM32開發板和mbed平台實現的一個呼吸燈。材料,LED燈,電阻,STM32開發板。
先上一張。
背景:
我們之前設定GPIO口使用了DigitalOut,數字訊號輸出。只能是GPIO口為0或1兩個值。在LED上體現的即是滅和亮。然而現實世界大量的訊號都是類比訊號,如溫度、聲音、加速度等。百度上:“類比訊號是指資訊參數在給定範圍內表現為連續的訊號。 或在一段連續的時間間隔內,其代表資訊的特徵量可以在任意瞬間呈現為任意數值的訊號。”
理論知識(可以跳過):
類比訊號即可以簡單理解為,類比訊號輸出的值,可以是0~1裡面連續的值,LED的亮度會隨著電壓的升高而變數,所以說,給LED賦值0~1,就能實現亮度漸層的效果。
但並不是所有微處理器都支援類比訊號輸出的,所以有一種PWM輸出功能,可以實現類比輸出。
簡單來說就是通過一個刻度內高低電平的不同占空比來表徵類比訊號。
簡單的理解就是:連續的電壓,可以用分立的電壓來類比,只要控制好高電平的期間,就能近似的類比出來。
思路:
1、為LED設定一個PWM輸出口,輸出類比訊號。
2、先讓led為0,即燈滅,再讓燈每隔0.05s 執行led+0.05的亮度,這一步可以實現讓led漸漸層亮。
3、燈全亮,即led=1,然後每隔0.05s,讓led-0.05的亮度。這一步能實現讓led漸漸層暗。
執行個體代碼:
#include "mbed.h"//PWM輸出口PwmOut PWM1(D8);//計算亮度float pv=0;int main() { //一個死迴圈 while(1){ //如果燈沒有全亮 while (pv<=1) { PWM1=pv; //每隔0.05s變亮0.05 pv=pv+0.05; wait(0.05); } //燈全亮 //如果燈沒滅 while(pv>0){ PWM1=pv; //每隔0.05s變暗0.05 pv=pv-0.05; wait(0.05); } } }
這是類比訊號輸出最簡單的一個應用,如果覺得燈的呼吸效果不明顯的話,可以換一個小的電阻(使全亮時亮度更大),或者調整一下亮度的變動率。
STM32呼吸燈