Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


Sidebar

products:sbc:vim1s:applications:gpio:pwm

This is an old revision of the document!


VIM4 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/07/17 21:31 by 127.0.0.1