1. PWM簡(jiǎn)介
1.1 EASY EAI Orin-Nano的PWM資源
1.2 查找PWM節(jié)點(diǎn)
rk3576的pwm資源表如下:
【PWM2 CH3】對(duì)應(yīng)的是pwm2_8ch_3,寄存地址為2ade3000。
【PWM2 CH6】對(duì)應(yīng)的是pwm2_8ch_6,寄存地址為2ade6000。
pwm驅(qū)動(dòng)加載成功后,在文件系統(tǒng)/sys/class/pwm/下會(huì)產(chǎn)生pwm節(jié)點(diǎn)(pwmchip*),通過下方命令,可得知pwm節(jié)點(diǎn)與pwm資源的對(duì)應(yīng)關(guān)系。
【PWM2 CH3】對(duì)應(yīng)的節(jié)點(diǎn)為【pwmchip1】
【PWM2 CH6】對(duì)應(yīng)的節(jié)點(diǎn)為【pwmchip2】
1.3 操作PWM節(jié)點(diǎn)
下方以操作【PWM2 CH3】為例:
首先通過命令進(jìn)入到pwmchip1控制器(/sys/class/pwm/pwmchip1),能看到以下內(nèi)容:
cd /sys/class/pwm/pwmchip1 ls
export:用于導(dǎo)出pwm定時(shí)器設(shè)備
unexport:用于釋放pwm定時(shí)器設(shè)備
向export文件寫入0,就會(huì)打開pwm定時(shí)器,會(huì)產(chǎn)生一個(gè)pwm0目錄。
echo 0 > export
進(jìn)入到pwm0定時(shí)器,就能設(shè)置它的各種屬性,如周期、占空比等。
cd pwm0
echo 1000000 > period ##設(shè)置定時(shí)器1個(gè)周期內(nèi)的脈沖個(gè)數(shù) echo 500000 > duty_cycle ##設(shè)置定時(shí)器1個(gè)周期內(nèi)低電平的脈沖個(gè)數(shù) echo 1 > enable ##使能pwm定時(shí)器 echo 0 > enable ##禁能pwm定時(shí)器
相反往unexport文件寫入0,就會(huì)關(guān)閉pwm定時(shí)器,同時(shí)pwm0目錄會(huì)被刪除。
cd .. echo 0 > unexport
2. 快速上手
2.1 例程源碼下載
到【百度網(wǎng)盤】上下載相關(guān)的單例程序:
鏈接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234
提取碼: 1234
比如在windows環(huán)境中,就把單例程序下載到:此電腦D:BaiduNetdisk (無規(guī)定,用戶可自主選擇),如下圖所示。
然后把例程【復(fù)制粘貼】到nfs掛載目錄中。(不清楚目錄如何構(gòu)建的,可以參考《入門指南/開發(fā)環(huán)境準(zhǔn)備/nfs服務(wù)搭建與掛載》)
2.2 例程編譯&運(yùn)行
通過adb shell進(jìn)入開發(fā)板環(huán)境(不清楚如何通過adb進(jìn)行調(diào)試,可以參考《入門指南/開發(fā)板調(diào)試方式介紹/adb調(diào)試》),執(zhí)行下方命令定位到demo目錄,并且執(zhí)行編譯操作。
編譯成功后,會(huì)生成1個(gè)叫test-pwm可執(zhí)行程序在Release目錄下。
運(yùn)行例程命令如下所示:
sudo ./Release/test-pwm
執(zhí)行效果如下所示。
通過示波器抓取的波形,如下圖所示:
3. C語言使用案例
PWM的C語言使用案例,代碼地址為10_PWM/test-pwm/main.c,供用戶編碼參考。以下代碼展示了pwm控制器的初始化,調(diào)整周期,占空比,資源釋放的操作流程:
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()是對(duì)系統(tǒng)調(diào)用的易用化封裝。具體實(shí)現(xiàn)于10_PWM/test-pwm/main.c
審核編輯 黃宇
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
5415瀏覽量
101095 -
PWN
+關(guān)注
關(guān)注
0文章
12瀏覽量
16798 -
rk3576
+關(guān)注
關(guān)注
1文章
117瀏覽量
494
發(fā)布評(píng)論請(qǐng)先 登錄
米爾RK3576開發(fā)板特惠活動(dòng)!

RK3576開發(fā)板技術(shù)分享 | Weston 配置技巧:定制你的桌面體驗(yàn)!

基于RK3576開發(fā)板的MIPI-DSI使用

評(píng)論