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系统初始化脚本末尾。