Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


Sidebar

products:sbc:vim1s:applications:gpio:pwm

VIM1S PWM

Introduction

This page introduces the usage of hardware PWM, and leads you to control the hardware PWM on the 40-Pin Header.

PWM Reference Table

PWM PIN GPIO name DT overlay node Device node
VIM1 PWM_AO_A 35 GPIOAO_3 pwm_ao_a /sys/class/pwm/pwmchip4
VIM2 PWM_D 35 GPIODV_28 pwm_d /sys/class/pwm/pwmchip1
VIM3 PWM_F 35 GPIOH_5 pwm_f /sys/class/pwm/pwmchip4
VIM3L PWM_F 35 GPIOH_5 pwm_f /sys/class/pwm/pwmchip0
VIM4 PWM_F 35 GPIOY_8 pwm_f /sys/class/pwm/pwmchip4
VIM1S PWM_F 35 GPIOZ_6 pwm_f /sys/class/pwm/pwmchip0

Enable PWM

In order to use the PWM, you need to enable the PWM function via Device Tree Overlay.

VIM1/2/3/Edge1

Edit /boot/env.txt to add the pwm node to overlays node if it doesn't exist.

Take VIM3 as an example to enable PWM_F, you need to add pwm_f node to overlays node if it doesn't exist.

overlays=uart3 pwm_f i2c3 i2s os08a10 watchdog

After reboot, you will see the pwm device node.

$ ls /sys/class/pwm/pwmchip4
device  export  npwm  power  subsystem  uevent  unexport

VIM3L

Edit /boot/env.txt to add the pwm node to overlays node if it doesn't exist.

Take VIM3L as an example to enable PWM_F, you need to add pwm_f node to overlays node if it doesn't exist.

overlays=uart3 pwm_f i2c3 i2s watchdog

After reboot, you will see the pwm device node.

$ ls /sys/class/pwm/pwmchip0
device  export  npwm  power  subsystem  uevent  unexport

VIM3 with 5.15 kernel

Edit /boot/dtb/amlogic/kvim3.dtb.overlay.env to add pwm node to fdt_overlays node if it doesn't exist.

You need to add pwm_f to node fdt_overlays if it doesn't exist to enable PWM_F.

fdt_overlays=pwm_f

After reboot, you will see the pwm device node.

VIM3L with 5.15 kernel

Edit /boot/dtb/amlogic/kvim3l.dtb.overlay.env to add pwm node to fdt_overlays node if it doesn't exist.

You need to add pwm_f to node fdt_overlays if it doesn't exist to enable PWM_F.

fdt_overlays=pwm_f

After reboot, you will see the pwm device node.

VIM4

Edit /boot/dtb/amlogic/kvim4.dtb.overlay.env to add pwm node to fdt_overlays node if it doesn't exist.

You need to add pwm_f to node fdt_overlays if it doesn't exist to enable PWM_F.

fdt_overlays=pwm_f

After reboot, you will see the pwm device node.

$ ls /sys/class/pwm/pwmchip4
device  export  npwm  power  subsystem  uevent  unexport

VIM1S

Edit /boot/dtb/amlogic/kvim1s.dtb.overlay.env to add pwm node to fdt_overlays node if it doesn't exist.

You need to add pwm_f to node fdt_overlays if it doesn't exist to enable PWM_F.

fdt_overlays=pwm_f

After reboot, you will see the pwm device node.

$ ls /sys/class/pwm/pwmchip0
device  export  npwm  power  subsystem  uevent  unexport

Control PWM

Enable PWM:

VIM1/3/4

echo 1 | sudo tee /sys/class/pwm/pwmchip4/export
echo 1000000 | sudo tee /sys/class/pwm/pwmchip4/pwm1/period
echo 500000 | sudo tee /sys/class/pwm/pwmchip4/pwm1/duty_cycle
echo 1 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable

VIM2

echo 1 | sudo tee /sys/class/pwm/pwmchip1/export
echo 1000000 | sudo tee /sys/class/pwm/pwmchip1/pwm1/period
echo 500000 | sudo tee /sys/class/pwm/pwmchip1/pwm1/duty_cycle
echo 1 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable

VIM3L/1S

echo 1 | sudo tee /sys/class/pwm/pwmchip0/export
echo 1000000 | sudo tee /sys/class/pwm/pwmchip0/pwm1/period
echo 500000 | sudo tee /sys/class/pwm/pwmchip0/pwm1/duty_cycle
echo 1 | sudo tee /sys/class/pwm/pwmchip0/pwm1/enable

VIM4/4N with 5.15 kernel

echo 1 | sudo tee /sys/class/pwm/pwmchip12/export
echo 1000000 | sudo tee /sys/class/pwm/pwmchip12/pwm1/period
echo 500000 | sudo tee /sys/class/pwm/pwmchip12/pwm1/duty_cycle
echo 1 | sudo tee /sys/class/pwm/pwmchip0/pwm12/enable

Use an oscilloscope to check if the pins have been successfully enabled.

pwm-oscilloscope

If you use an oscilloscope to view the PWM waveform, remember that the SBC and the oscilloscope need to share the same GND (ground).

Disable PWM:

VIM1/3/4

echo 0 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable

VIM2

echo 0 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable

VIM3L/1S

echo 0 | sudo tee /sys/class/pwm/pwmchip0/pwm1/enable

VIM4/4N with 5.15 kernel

echo 0 | sudo tee /sys/class/pwm/pwmchip12/pwm1/enable

Disable PWM to Use GPIO

If you want to use normal GPIO instead of PWM, you can remove the PWM node in Device Tree Overlay.

2022/06/29 09:38
Last modified: 2022/09/19 04:58 by nick