1. PWM簡介
1.1 EASY EAI Orin-Nano的PWM資源
1.2 查找PWM節點
rk3576的pwm資源表如下:
【PWM2 CH3】對應的是pwm2_8ch_3,寄存地址為2ade3000。
【PWM2 CH6】對應的是pwm2_8ch_6,寄存地址為2ade6000。
pwm驅動加載成功后,在文件系統/sys/class/pwm/下會產生pwm節點(pwmchip*),通過下方命令,可得知pwm節點與pwm資源的對應關系。
【PWM2 CH3】對應的節點為【pwmchip1】
【PWM2 CH6】對應的節點為【pwmchip2】
1.3 操作PWM節點
下方以操作【PWM2 CH3】為例:
首先通過命令進入到pwmchip1控制器(/sys/class/pwm/pwmchip1),能看到以下內容:
cd /sys/class/pwm/pwmchip1 ls
export:用于導出pwm定時器設備
unexport:用于釋放pwm定時器設備
向export文件寫入0,就會打開pwm定時器,會產生一個pwm0目錄。
echo 0 > export
進入到pwm0定時器,就能設置它的各種屬性,如周期、占空比等。
cd pwm0
echo 1000000 > period ##設置定時器1個周期內的脈沖個數 echo 500000 > duty_cycle ##設置定時器1個周期內低電平的脈沖個數 echo 1 > enable ##使能pwm定時器 echo 0 > enable ##禁能pwm定時器
相反往unexport文件寫入0,就會關閉pwm定時器,同時pwm0目錄會被刪除。
cd .. echo 0 > unexport
2. 快速上手
2.1 例程源碼下載
到【百度網盤】上下載相關的單例程序:
鏈接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234
提取碼: 1234
比如在windows環境中,就把單例程序下載到:此電腦D:BaiduNetdisk (無規定,用戶可自主選擇),如下圖所示。
然后把例程【復制粘貼】到nfs掛載目錄中。(不清楚目錄如何構建的,可以參考《入門指南/開發環境準備/nfs服務搭建與掛載》)
2.2 例程編譯&運行
通過adb shell進入開發板環境(不清楚如何通過adb進行調試,可以參考《入門指南/開發板調試方式介紹/adb調試》),執行下方命令定位到demo目錄,并且執行編譯操作。
編譯成功后,會生成1個叫test-pwm可執行程序在Release目錄下。
運行例程命令如下所示:
sudo ./Release/test-pwm
執行效果如下所示。
通過示波器抓取的波形,如下圖所示:
3. C語言使用案例
PWM的C語言使用案例,代碼地址為10_PWM/test-pwm/main.c,供用戶編碼參考。以下代碼展示了pwm控制器的初始化,調整周期,占空比,資源釋放的操作流程:
int main(int argc, const char** argv) { int ret; ret = pwm_init("pwmchip1", "0"); printf("export_ret:%dn", ret); ret = pwm_set_attr("pwmchip1", "0", "period", "1000000"); printf("set_period_ret:%dn", ret); ret = pwm_set_attr("pwmchip1", "0", "duty_cycle", "500000"); printf("set_duty_cycle_ret:%dn", ret); ret = pwm_set_enable("pwmchip1", "0", "1"); printf("set_enable:%dn", ret); ret = pwm_release("pwmchip1", "0"); printf("unexport_ret:%dn", ret); //====================================================================== ret = pwm_init("pwmchip2", "0"); printf("export_ret:%dn",ret); ret = pwm_set_attr("pwmchip2", "0", "period", "1000000"); printf("set_period_ret:%dn",ret); ret = pwm_set_attr("pwmchip2", "0", "duty_cycle", "500000"); printf("set_duty_cycle_ret:%dn",ret); ret = pwm_set_enable("pwmchip2", "0", "1"); printf("set_enable:%dn",ret); ret = pwm_release("pwmchip2", "0"); printf("unexport_ret:%dn",ret); //====================================================================== return 0; }
其中pwm_init(),pwm_set_attr(),pwm_set_enable(),pwm_release()是對系統調用的易用化封裝。具體實現于10_PWM/test-pwm/main.c
審核編輯 黃宇
-
開發板
+關注
關注
25文章
5415瀏覽量
101098 -
PWN
+關注
關注
0文章
12瀏覽量
16798 -
rk3576
+關注
關注
1文章
117瀏覽量
494
發布評論請先 登錄
基于RK3576開發板的MIPI-DSI使用

評論