5. PWM控制¶
本章讲解Linux pwm相关应用层程序控制。
5.1. pwm引脚¶
LubanCat板卡上集成了四个具有pwm功能的GPIO,其他有些io也能复用为pwm。

由于LubanCat-RK系列的板子的PWM控制器会不一样,请对照下表使用
板卡 |
Pin12 |
Pin32 |
Pin33 |
Pin35 |
---|---|---|---|---|
LubanCat-3系列 |
PWM2_CH6_M3 |
PWM2_CH7_M3 |
PWM1_CH0_M3 |
PWM2_CH3_M3 |
注意
LubanCat-3的12号物理引脚的PWM2_CH6_M3复用和风扇的PMW2_CH6_M0冲突,如果需要使用PWM2_CH6_M3复用需要关闭主设备树的FAN节点,建议使用其他PWM。
具体引脚可以查看 — LubanCat-RK系列-40pin引脚对照图
5.1.1. 使能PWM接口功能¶
PWM接口在默认情况是关闭状态的,需要使能才能使用, 每个板卡都具有四个硬件PWM,下面的使能操作以lubancat-3的 PWM2_CH7_M3 和 PWM2_CH3_M3 为例。
5.1.1.1. 方法一¶
1 2 3 4 5 | #进入工具配置
sudo fire-config
#移动光标到下图的位置
#按确认键进入配置
|

打开PWM2_CH7_M3和PWM2_CH3_M3
使用方向键移动光标到
PWM2_CH7_M3
按 “空格键” 选中PWM2_CH7_M3(出现 “*” ),如下图
按 “确认键” 进行设置
设置PWM2_CH3_M3操作和PWM2_CH7_M3操作一致
按 “Esc键” 退出到终端,运行 sudo reboot 进行重启应用

5.1.1.2. 方法二¶
板卡 |
设备树插件配置文件 |
说明 |
---|---|---|
当前你所使用的板子 |
uEnv.txt |
该配置软链接到你所使用的设备,修改该配置相当于修改板子实际的配置 |
LubanCat-3 |
uEnvLubanCat3.txt |
适用于LubanCat-3 |
可以通过修改 /boot/uEnv/uEnv.txt 或者 /boot/uEnv/uEnvboard.txt (uEnvboard.txt为通过上面的对照表获得的配置文件)
编辑文件,将带有 PWM2_CH7_M3和PWM2_CH3_M3 的行的注释符号去掉 如下图,然后重启激活设备。

注解
如果是直接拔电源的方式重启,会有可能出现文件没能做出修改 (原因:文件未能及时从内存同步到存储设备中,解决方法,在终端上输入 “sync” 再拔电关机)
5.2. 检查PWM设备¶
使能pwm通信接口后,可以用以下命令查看pwm是否开启
1 2 3 | ls /sys/class/pwm/
cat /sys/kernel/debug/pwm
|

系统默认开启风扇pwm以及mipi屏幕背光pwm,当开启多个pwm设备树插件时,pwm控制器值越小,系统分配的pwmchip越小。
1 2 3 4 | pwm1_ch2(backlight)->pwmchip0
pwm2_ch3->pwmchip1
pwm2_ch6(pwm-fan)->pwmchip2
pwm2_ch7->pwmchip3
|
当存在多个pwm不易区分时,可以根据地址确认哪个对应哪个pwm,例如platform/2ade3000.pwm,查看设备树源码rk3576.dtsi,找到2ade3000地址如下图:

可以确认2ade3000.pwm对应的是pwm2_8ch_3,意思是pwm2的8个通道中的第3个,也就是上面的pwm2_ch3。
5.3. pwm控制方式(shell)¶
下面操作以PWM2_CH3_M3为例,对应pwmchip1,
注意
在操作前必须先打开设备树插件,重启使能pwm10引脚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #将PWM2_CH3_M3导出到用户空间
echo 0 > /sys/class/pwm/pwmchip1/export
#设置pwm周期 单位为ns
echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
#设置占空比
echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
#设置pwm极性
echo "normal" > /sys/class/pwm/pwmchip1/pwm0/polarity
#使能pwm
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
#取消将pwm3导出到用户空间
echo 0 > /sys/class/pwm/pwmchip1/unexport
|
提示
当设置period与duty_cycle值的时候需要注意在任何的情况下都得保证period的值大于等于duty_cycle的值。

用逻辑分析仪抓取引脚波形如下:
