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

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
products:sbc:common:applications:gpio:pwm [2022/07/12 05:53]
nick [Table]
products:sbc:common:applications:gpio:pwm [2023/12/25 22:00]
jacobe [Control PWM]
Line 3: Line 3:
 ===== Introduction ===== ===== Introduction =====
  
-This document mainly describes the usage of hardware PWM. You will learn how to control the hardware PWM on the [[products:sbc:common:applications:gpio:40pin-header|40-Pin Header]].+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 Information =====+===== PWM Reference Table =====
  
-<tabbox VIM1>+|          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  |
  
-^  PWM      ^  PIN & GPIO Number        DT Overlays Node  ^  Device Node              ^ 
-| PWM_AO_A  | PIN35 - GPIOAO_3 (#504)  |  pwm_ao_a          |  /sys/class/pwm/pwmchip4  | 
  
-<tabbox VIM2>+===== Enable PWM =====
  
-^  PWM   ^  PIN & GPIO Number        ^  DT Overlays Node  ^  Device Node                   ^ +In order to use the PWM, you need to enable the PWM function via [[products:sbc:common:configurations:device-tree-overlay|Device Tree Overlay]].
-| PWM_D  | PIN35 GPIODV_28 (#478)  |  pwm_d              /sys/class/pwm/pwmchip1/pwm1  |+
  
-<tabbox VIM3/3L>+<tabbox 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. 
 + 
 +```shell 
 +overlays=uart3 pwm_f i2c3 i2s os08a10 watchdog 
 +``` 
 + 
 +After reboot, you will see the pwm device node. 
 + 
 +```shell 
 +$ ls /sys/class/pwm/pwmchip4 
 +device  export  npwm  power  subsystem  uevent  unexport 
 +``` 
 + 
 +<tabbox 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. 
 + 
 +```shell 
 +overlays=uart3 pwm_f i2c3 i2s watchdog 
 +``` 
 + 
 +After reboot, you will see the pwm device node. 
 + 
 +```shell 
 +$ ls /sys/class/pwm/pwmchip0 
 +device  export  npwm  power  subsystem  uevent  unexport 
 +``` 
 + 
 + 
 +<tabbox 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''
 + 
 +```shell 
 +fdt_overlays=pwm_f 
 + 
 +``` 
 + 
 +After reboot, you will see the pwm device node. 
 + 
 +<tabbox 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''
 + 
 +```shell 
 +fdt_overlays=pwm_f 
 + 
 +```
  
-^  PWM    PIN & GPIO Number      ^  DT Overlays Node  ^  Device Node              ^ +After reboot, you will see the pwm device node.
-| PWM_F  | PIN35 - GPIOX_7 (#432)  |  pwm_f              /sys/class/pwm/pwmchip4  |+
  
 <tabbox VIM4> <tabbox VIM4>
  
-^  PWM    PIN & GPIO Number        ^  DT Overlays Node  ^  Device Node                   ^ +Edit ''/boot/dtb/amlogic/kvim4.dtb.overlay.env'' to add pwm node to ''fdt_overlays'' node if it doesn't exist.
-| PWM_D  | PIN35 - GPIODV_28 (#478)  |  pwm_d             |  /sys/class/pwm/pwmchip1/pwm1  |+
  
  
 +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> </tabbox>
  
-===== Enable PWM ===== 
  
-<tabbox VIM1/3/3L/4>  +===== Control PWM ===== 
-%%PWM_F:%%+ 
 +**Enable PWM:** 
 + 
 +<tabbox VIM1/3/4>  
 ```shell ```shell
-echo 1 | sudo tee /sys/class/pwm/pwmchip4/export +echo 1 | sudo tee /sys/class/pwm/pwmchip4/export 
-echo 1000000 | sudo tee /sys/class/pwm/pwmchip4/pwm1/period +echo 1000000 | sudo tee /sys/class/pwm/pwmchip4/pwm1/period 
-echo 500000 | sudo tee /sys/class/pwm/pwmchip4/pwm1/duty_cycle +echo 500000 | sudo tee /sys/class/pwm/pwmchip4/pwm1/duty_cycle 
-echo 1 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable+echo 1 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable
 ``` ```
 +
 <tabbox VIM2>  <tabbox VIM2> 
-PWM_D:+
 ```shell ```shell
-echo 1 | sudo tee /sys/class/pwm/pwmchip1/export +echo 1 | sudo tee /sys/class/pwm/pwmchip1/export 
-echo 1000000 | sudo tee /sys/class/pwm/pwmchip1/pwm1/period +echo 1000000 | sudo tee /sys/class/pwm/pwmchip1/pwm1/period 
-echo 500000 | sudo tee /sys/class/pwm/pwmchip1/pwm1/duty_cycle +echo 500000 | sudo tee /sys/class/pwm/pwmchip1/pwm1/duty_cycle 
-echo 1 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable+echo 1 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable
 ``` ```
 +
 +<tabbox VIM3L/1S> 
 +
 +```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 VIM4/4N with 5.15 kernel> 
 +
 +```shell
 +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
 +```
 +
 </tabbox> </tabbox>
  
Line 58: Line 173:
 </WRAP> </WRAP>
  
-===== Disable PWM =====+**Disable PWM:**
  
-<tabbox VIM1/3/3L/4> +<tabbox VIM1/3/4> 
 ```shell ```shell
-echo 0 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable+echo 0 | sudo tee /sys/class/pwm/pwmchip4/pwm1/enable
 ``` ```
 <tabbox VIM2>  <tabbox VIM2> 
 ```shell ```shell
-echo 0 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable+echo 0 | sudo tee /sys/class/pwm/pwmchip1/pwm1/enable 
 +``` 
 +<tabbox VIM3L/1S>  
 +```shell 
 +echo 0 | sudo tee /sys/class/pwm/pwmchip0/pwm1/enable
 ``` ```
 </tabbox> </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]].
 +
  
  
Last modified: 2023/12/25 22:01 by jacobe