1).?簡介
PWM(Pulse-width modulation)接口是嵌入式設備最為常用的接口之一,常用于電機驅動,蜂鳴器,脈沖計數(shù)等嵌入式領域,因此本文就基于嵌入式Linux演示使用PWM接口。
本文所演示的平臺來自于Toradex Colibri iMX6DL嵌入式平臺,這個平臺是基于NXP iMX6系列ARM處理器,支持雙核心Cortex-A9。
2.?準備
a).?Colibri iMX6DL?ARM核心版配合Colibri Eva Board?V3.2B載板,連接調試串口到開發(fā)主機,同時配置好Ubuntu開發(fā)主機開發(fā)環(huán)境,具體操作方法可以參考這里。
b). Colibri iMX6DL操作系統(tǒng)使用Toradex Linux Release V2.7b2,下載和更新方法請參考這里。
c). Colibri iMX6DL?提供了4路PWM接口支持,其中三路為標準的PWM輸出接口,另外一路特定為Backlight背光驅動控制功能,Toradex Linux發(fā)布V2.7以上版本具體的定義請見如下,其他更低的LInux版本以及其他系列產品的定義情況請見這里。另外,如果需要將PWM_A作為常規(guī)PWM使用,需要修改Device Tree文件并重新編譯,這里就不詳細介紹了。
d).?這里為了簡化測試,采用PWM輸出驅動Colibri Eva Board上面提供的LED燈,連接方式如下,分別測試PWM_B,PWM_C,PWM_D連接到LED的驅動情況,PWM_A是backlight背光驅動功能這里就不直接測試了。
./ PWM_B (X12 PWM_B?管腳) –> X21 LED1
./ PWM_C (X12 PWM_B?管腳) –> X21 LED1
./ PWM_D (X12 PWM_B?管腳) –> X21 LED1
3).?在user space下對PWM接口進行測試
a).?這里以PWM_B為例測試,其他PWM通道都是類似配置。
b). Export PWM_B接口
--------------------------------
root@colibri-imx6:~# cd /sys/class/pwm/pwmchip0/
root@colibri-imx6:~# echo 0 > export
--------------------------------
c).?設置PWM?周期和占空比,這里均為時間,單位為ns
--------------------------------
//?這里為了讓驅動LED效果肉眼可見,分別設置周期為1s,占空比為50%
root@colibri-imx6:~# echo 1000000000 > pwm0/period
root@colibri-imx6:~# echo 500000000 > pwm0/duty_cycle
--------------------------------
d).?使能PWM,這時候變可以看到連接的LED以0.5s的周期交替亮和滅了。
--------------------------------
root@colibri-imx6:~# echo 1 > pwm0/enable
--------------------------------
4).?通過C程序操作PWM接口示例
a).?程序和上述user space實現(xiàn)的原理一致,只是使用linux?文件管理相關函數(shù)進行操作,具體代碼請見如下:
./ pwmconfig.h - PWM基本操作函數(shù)定義頭文件
https://github.com/simonqin09/PWMtest/blob/master/pwmconfig.h
./ pwmconfig.c - PWM基本操作函數(shù)定義源文件
https://github.com/simonqin09/PWMtest/blob/master/pwmconfig.c
./ pwmtest.c – PWM具體接口使能配置主文件源代碼
https://github.com/simonqin09/PWMtest/blob/master/pwmtest.c
b).?測試上述c程序代碼運行請見如下:
--------------------------------
root@colibri-imx6:~# ./pwmtest B
PWM_B successfully enabled with period - 1000ms, duty cycle - 50.0%
root@colibri-imx6:~# ./pwmtest C
PWM_C successfully enabled with period - 1000ms, duty cycle - 50.0%
root@colibri-imx6:~# ./pwmtest D
PWM_D successfully enabled with period - 1000ms, duty cycle - 50.0%
root@colibri-imx6:~# ./pwmtest
Usage:??./pwmtest
root@colibri-imx6:~# ./pwmtest S
wrong PWM Channel input
--------------------------------
?
評論
查看更多