Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


products:sbc:common:applications:gpio:pwm

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
products:sbc:common:applications:gpio:pwm [2022/06/29 21:51]
127.0.0.1 external edit
products:sbc:common:applications:gpio:pwm [2023/03/30 06:35]
ivan [PWM Reference Table]
Line 1: Line 1:
-PWM+====== PWM ====== 
 + 
 +===== Introduction ===== 
 + 
 +This page introduces the usage of hardware PWM, and leads you to control the hardware PWM on the [[products:sbc:common:applications:gpio:40pin-header|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/3L  |  ''PWM_F''      35    ''GPIOH_5''    |  432          |  ''pwm_f''              /sys/class/pwm/pwmchip4 
 +^  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 [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]]. 
 + 
 +<tabbox VIM1/2/3/3L/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. 
 + 
 +```shell 
 +overlays=uart4 pwm_ao_a pwm_f 
 +``` 
 + 
 +After reboot, you will see the pwm device node. 
 + 
 +```shell 
 +$ ls /sys/class/pwm/pwmchip4 
 +device  export  npwm  power  subsystem  uevent  unexport 
 +``` 
 + 
 +<tabbox 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''
 + 
 +```shell 
 +fdt_overlays=pwm_f 
 + 
 +``` 
 + 
 +After reboot, you will see the pwm device node. 
 + 
 +```shell 
 +$ ls /sys/class/pwm/pwmchip4 
 +device  export  npwm  power  subsystem  uevent  unexport 
 +``` 
 + 
 +<tabbox 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''
 + 
 +```shell 
 +fdt_overlays=pwm_f 
 + 
 +``` 
 + 
 +After reboot, you will see the pwm device node. 
 + 
 +```shell 
 +$ ls /sys/class/pwm/pwmchip0 
 +device  export  npwm  power  subsystem  uevent  unexport 
 +``` 
 +</tabbox> 
 + 
 +===== Disable PWM to Use GPIO ===== 
 + 
 +If you want to use normal GPIO instead of PWM, you can remove the PWM node in [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]]. 
 + 
 +===== Control PWM ===== 
 + 
 +**Enable PWM:** 
 + 
 +<tabbox VIM1/3/3L/4>  
 + 
 +```shell 
 +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 
 +``` 
 +<tabbox VIM2>  
 + 
 +```shell 
 +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 
 +``` 
 + 
 +<tabbox VIM1S>  
 + 
 +```shell 
 +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 
 +``` 
 +</tabbox> 
 + 
 +Use an oscilloscope to check if the pins have been successfully enabled. 
 + 
 +{{products:sbc:common:applications:gpio:pwm-oscilloscope.png|pwm-oscilloscope}} 
 + 
 +<WRAP info > 
 +If you use an oscilloscope to view the PWM waveform, remember that the SBC and the oscilloscope need to share the same GND (ground). 
 +</WRAP> 
 + 
 +**Disable PWM:** 
 + 
 +<tabbox VIM1/3/3L/4>  
 +```shell 
 +echo 0 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable 
 +``` 
 +<tabbox VIM2>  
 +```shell 
 +echo 0 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable 
 +``` 
 +<tabbox VIM1S>  
 +```shell 
 +echo 0 | sudo tee /sys/class/pwm/pwmchip0/pwm1/enable 
 +``` 
 +</tabbox> 
 + 
Last modified: 2024/08/06 08:36 by nick