你会操作在嵌入式Linux下PWM功能调试?

1).简介
pwm(pulse-width modulation)接口是嵌入式设备最为常用的接口之一,常用于电机驱动,蜂鸣器,脉冲计数等嵌入式领域,因此本文就基于嵌入式linux演示使用pwm接口。
本文所演示的平台来自于toradex colibri imx6dl嵌入式平台,这个平台是基于nxp imx6系列arm处理器,支持双核心cortex-a9。
2.准备
a).colibri imx6dlarm核心版配合colibri eva boardv3.2b载板,连接调试串口到开发主机,同时配置好ubuntu开发主机开发环境,具体操作方法可以参考这里。
b). colibri imx6dl操作系统使用toradex linux release v2.7b2,下载和更新方法请参考这里。
c). colibri imx6dl提供了4路pwm接口支持,其中三路为标准的pwm输出接口,另外一路特定为backlight背光驱动控制功能,toradex linux发布v2.7以上版本具体的定义请见如下,其他更低的linux版本以及其他系列产品的定义情况请见这里。另外,如果需要将pwm_a作为常规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实现的原理一致,只是使用linux文件管理相关函数进行操作,具体代码请见如下:
./ pwmconfig.h - pwm基本操作函数定义头文件
https://github.com/simonqin09/pwmtest/blob/master/pwmconfig.h
./ pwmconfig.c - pwm基本操作函数定义源文件
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
--------------------------------

数控机床plc编程详解
基于被动红外 (PIR) 的运动探测器
OPPO 成立安第斯事业部负责云平台、数据中心以及基础技术
电瓶修复技术—充电与硫化是否密不可分
选云,EDA厂商上云的第一步
你会操作在嵌入式Linux下PWM功能调试?
基于RASC的keil电子时钟制作(瑞萨RA)(2)----配置keil以及使用串口进行打印
环境光传感器和接近传感器的优势介绍
LED三维封装原理及芯片优化
忆联SSD存储虚拟化SR-IOV方案荣获“华彩杯”算力应用创新大赛优胜奖
安捷伦示波器DSO-X3034A进入不了测试界面是什么原因?
USB4真的要来了
工信部将组织各单位开展IMS网络网间互通联调联测
盘点九月份发布的五款手机,哪款能挑战iPhone呢?
ANDFlash10月起将展开新一波补货潮 价格有望上涨
并购成风 传感器产业有望持续高速发展
智能电力运维的应用给配电运维人员减轻了压力
晶体管的工作原理介绍
可扩展的灵活多相解决方案
基于DSP芯片TMS320F240实现异步电动机调速系统的应用方案