Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


Sidebar

products:sbc:common:applications:gpio:pwm

This is an old revision of the document!


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 GPIO num DT overlay node Device node
VIM1 PWM_AO_A 35 GPIOAO_3 504 pwm_ao_a /sys/class/pwm/pwmchip4
VIM2 PWM_D 35 GPIODV_28 478 pwm_d /sys/class/pwm/pwmchip1
VIM3 PWM_F 35 GPIOH_5 432 pwm_f /sys/class/pwm/pwmchip4
VIM3L PWM_F 35 GPIOH_5 432 pwm_f /sys/class/pwm/pwmchip0
VIM4 PWM_F 35 GPIOY_8 482 pwm_f /sys/class/pwm/pwmchip4
VIM1S PWM_F 35 GPIOZ_6 503 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

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

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

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.

Last modified: 2023/11/07 03:29 by nick