5. pwm控制¶
5.1. pwm引脚¶
LubanCat-P1板卡22pin上有两个具有pwm功能的GPIO
5.1.1. PWM控制器与PWM接口¶
算能sg200x有4个PWM控制器,每个控制器有4路PWM接口,4个控制器总共有16路pwm接口,对应关系如下:
可以通过debug接口查看控制器情况
1 2 | #查看pwm控制器情况
sudo cat /sys/kernel/debug/pwm
|
可以从上图看到默认没有程序或者驱动使用PWM。
5.1.2. 使能PWM接口功能¶
PWM接口在默认情况是关闭状态的,需要使能才能使用,可以通过 cvi_pinmux 工具进行切换。
1 2 3 4 5 6 7 8 9 10 11 12 13 | #查看CLK25M引脚复用功能,默认复用为PWR_GPIO11
sudo cvi_pinmux -l | grep -A 5 'CLK25M function'
#将CLK25M引脚复用为PWM_3
sudo cvi_pinmux -w CLK25M/PWM_3
#查看PWR_GPIO0引脚复用功能,默认复用为PWR_GPIO0
sudo cvi_pinmux -l | grep -A 5 'PWR_GPIO0 function'
#将PWR_GPIO0引脚复用为PWM_8
sudo cvi_pinmux -w PWR_GPIO0/PWM_8
|
5.2. pwm控制方式(shell)¶
确认切换了引脚复用后可进行以下操作。
以pwm3为例,对应pwmchip0控制器的第4路接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #切换root用户
sudo -s
#将pwm3导出到用户空间
echo 3 > /sys/class/pwm/pwmchip0/export
#设置pwm周期 单位为ns
echo 1000000 > /sys/class/pwm/pwmchip0/pwm3/period
#设置占空比
echo 500000 > /sys/class/pwm/pwmchip0/pwm3/duty_cycle
#设置pwm极性
echo "normal" > /sys/class/pwm/pwmchip0/pwm3/polarity
#使能pwm
echo 1 > /sys/class/pwm/pwmchip0/pwm3/enable
#取消将pwm3导出到用户空间
echo 3 > /sys/class/pwm/pwmchip0/unexport
|
以pwm8为例,对应pwmchip8控制器的第1路接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #切换root用户
sudo -s
#将pwm8导出到用户空间
echo 0 > /sys/class/pwm/pwmchip8/export
#设置pwm周期 单位为ns
echo 1000000 > /sys/class/pwm/pwmchip8/pwm0/period
#设置占空比
echo 500000 > /sys/class/pwm/pwmchip8/pwm0/duty_cycle
#设置pwm极性
echo "normal" > /sys/class/pwm/pwmchip8/pwm0/polarity
#使能pwm
echo 1 > /sys/class/pwm/pwmchip8/pwm0/enable
#取消将pwm8导出到用户空间
echo 0 > /sys/class/pwm/pwmchip8/unexport
|
提示
当设置period与duty_cycle值的时候需要注意在任何的情况下都得保证period的值大于等于duty_cycle的值。
使能后可以debug接口查看pwm情况
上图sysfs名字的pwm设备就是通过以上shell命令配置的pwm,处于激活状态。
提示
如果需要自启动配置和使能pwm,可将相关命令写入/etc/init.d/sophgo.sh系统初始化脚本末尾。