PWM作為一種靈活且高效的訊號調製手段,在電氣裝置的效能控制和調節中發揮著重要作用,常用於電機控制、燈光調光、音訊訊號生成、加熱控制等應用。
本文將以合宙低功耗4G模組經典型號——Air780E為例,展示PWM(脈衝寬度調製)輸出呼吸燈的實現方法,幫助大家深入理解如何在專案中應用PWM技術。
一、PWM概述
1.1 PWM介紹
脈衝寬度調製PWM,是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調製,是利用微處理器的數字輸出來對類比電路進行控制的一種非常有效的技術。
PWM具有高效、控制精度高及實現簡便等優點,但PWM訊號可能產生高頻噪聲,需要濾波以減小干擾。另外,某些應用需要特定的硬體支援,如支援PWM輸入的微控制器或電路。
要想使用PWM,還需先了解PWM的相關引數:
-
PWM的頻率:
是指1秒鐘內訊號從高電平到低電平再回到高電平的次數(一個週期),也就是說一秒鐘PWM有多少個週期。單位:Hz。 -
PWM的週期:
T=1/f 週期=1/頻率例:如果頻率為50Hz,T=1/50=0.02s,也就是說一個週期是20ms; 1s=1000ms,那麼一秒鐘就有50次PWM週期。
-
PWM的佔空比:
是一個脈衝週期內,高電平的時間佔整個週期時間的比例。單位:% (0%-100%)例:一個週期10ms,高電平佔8ms,那麼此佔空比就是8/10=80%。
1.2 PWM原理
微控制器的IO引腳輸出的是數字訊號,且只能輸出1和0。那如果TTL電平中,高電平為5V,低電平為0V,但是我們想要輸出不同的模擬電壓,比如輸出3.75V應該怎麼操作?
此時要用到PWM,透過改變IO口輸出方波的佔空比,得到不同的模擬電壓。
3.75/5=0.75,也就是高電平時間佔整個週期的75%,即佔空比為75%,可得到模擬電壓3.75V。
注意上圖中藍線,代表著輸出的模擬電壓,佔空比越大,則模擬電壓也越大。
1.3 PWM通道說明
當前版本為:
《Air780E_GPIO_table_20240812.pdf》
由上方GPIO複用表可知:
Air780E的實際可用PWM通道有4個(0/1/2/4), 但每個都有3種配置。
PWM3/PWM5已經被底層使用,例如PWM1和PWM11都使用硬體通道1,只能選其中一個使用。啟用PWM1就不能啟用PWM11,呼叫PWM庫的API時,填軟體通道id。
相關注意事項:
-
軟體通道10/11/12/14需要V1002以上的韌體,即20221219之後編譯的版本。
-
軟體通道20/21/22需要V1016以上的韌體,即20230330之後編譯的版本。
-
上述對映是固定的,mcu.iomux也沒有配置項, 而且已經列舉了全部可用PWM通道。
二、演示功能概述
接下來本文將用兩個示例,演示如何使用Air780E的PWM功能:
PWM輸出:
控制Air780E核心板pwm4通道的pwm輸出,設定不同的佔空比,讓小燈有不同的亮度;
呼吸燈效果:
使用Air780E核心板的pwm1通道,外接發光二極體來檢視呼吸燈效果。
三、準備硬體環境
3.1 開發板
本文使用Air780E核心板進行演示:
詳見Air780E產品手冊開發板使用說明:
https://docs.openluat.com/air780e/product/
寫這篇文章時最新版本的使用說明為:
<<開發板Core_Air780E使用說明 V1.0.5.pdf>>
核心板使用過程中遇到任何問題,可以直接參考這份使用說明pdf文件。
3.2 PC電腦
Win7及其以上版本的Windows系統。
3.3 資料通訊線
USB轉Type-C資料線一根;
四、準備軟體環境
4.1 下載除錯工具
https://docs.openluat.com/Luatools/
4.2 原始碼及韌體
最新韌體下載:
https://docs.openluat.com/air780e/luatos/firmware/
韌體詳見core_V1112壓縮包:
LuatOS-SoC_V1112_EC618_FULL.soc
五、PWM軟硬體資料
5.1 API介面介紹
本教程使用API介面詳見:
https://wiki.luatos.com/api/pwm.html?highlight=pwm
1)按住下載模式按鍵(boot 鍵)不放,同時再長按開機鍵開機,這時開發板會進入下載模式,Luatools下載進度條會開始跑,這時可以鬆開boot按鍵。直到工具提示下載完成。
2)如果未能成功進入下載模式,而是進入正常開機模式,這時可以按住 boot 鍵,再短按復位按鍵,讓開發板重啟,重新進入下載模式。
如何判斷有沒有進入下載模式:
可以透過PC端的裝置管理器中虛擬出來的USB埠數量來判斷。
正常開機模式:
下載模式:
六、程式碼示例介紹
6.1 PWM輸出
本例使用Air780E核心板上的NetLed(網路狀態燈),pwm通道id=4,開啟pwm4通道的pwm輸出,設定不同的佔空比,小燈會有不同的亮度。
6.1.1 程式碼介紹
6.1.2 效果展示
6.2 呼吸燈效果
本例使用Air780E核心板的pwm1通道,外接發光二極體來檢視呼吸燈效果:
呼吸燈效果就是小燈由亮到暗逐漸變化,很有節奏感地一起一伏,”感覺,好像人在呼吸“,我們可以透過不斷調高佔空比讓小燈一點點亮起,再不斷調低佔空比讓小燈一點點熄滅從而達到此效果。
6.2.1 硬體接線
GPIO24 --------發光二極體正極
GND -----------發光二極體負極
6.2.2 程式碼介紹
6.2.3 效果展示
外接發光二極體,效果如下圖所示:
也可用Air780E核心板上的NetLed(網路狀態燈)來觀察呼吸燈效果,但demo裡的PWM通道要改成相應的id,可檢視上文的PWM通道說明。
我們透過示波器檢視PWM的輸出波形,可以看到佔空比在10%-90%之間變化。
七、常見問題
1. 如何驗證所產生的PWM訊號?
可以使用示波器檢測PWM輸出,檢視頻率、佔空比和波形的完整性。確保波形按照設計引數正常工作,必要時進行調整。
2. PWM的訊號的頻率如何選擇?
頻率的選擇通常取決於具體應用,根據自己的專案需要來選擇:
-
電機控制:常用頻率為1kHz到20kHz,以確保足夠的反應速度和控制精度。
-
LED調光:頻率通常在1kHz以上,以避免人眼感知到閃爍。
-
音訊訊號:頻率設定應高於音訊訊號的最高頻率(例如,至少為20kHz)。
3. 什麼是佔空比,如何計算PWM的佔空比?
佔空比即是一個脈衝週期內,高電平的時間佔整個週期。
例如:
如果PWM訊號的高電平時間為2ms,週期為10ms。
則:佔空比 = (2 / 10) × 100 = 20%