• sales

    +86-0755-88291180

Luckfox Pico RV1103【Tutorial on how to use PWM】

Due to pin multiplexing on the LuckFox Pico and LuckFox Pico Plus, there may be conflicts in pin functionality, so PWM functionality cannot be enabled by default for all pins.


】Use the GPIO sysfs interface to control PWM:


1] View the default enabled PWM interfaces:

# ls -l /sys/class/pwm

lrwxrwxrwx    1 root     root             0 pwmchip10 -> ../../devices/platform/ff490020.pwm/pwm/pwmchip10

lrwxrwxrwx    1 root     root             0 pwmchip1 -> ../../devices/platform/ff350010.pwm/pwm/pwmchip1

lrwxrwxrwx    1 root     root             0 pwmchip11 -> ../../devices/platform/ff490030.pwm/pwm/pwmchip11

lrwxrwxrwx    1 root     root             0 pwmchip0 -> ../../devices/platform/ff350000.pwm/pwm/pwmchip0


2] Test PWM. Export PWM1_M0 (GPIO0_A4_d) to the user space:

echo 0 > /sys/class/pwm/pwmchip1/export


3] Set the PWM period unit to ns. For example, the period of a 1KHz frequency is 1000000ns:

echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period


4] Set the duty cycle:

 #Set the duty cycle to 10% (with a period of 100,000 nanoseconds and a duration of 10,000 nanoseconds).

echo 100000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle  

echo 200000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 300000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 400000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 600000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 700000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 800000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

echo 900000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

 # Set the duty cycle to 100% (with a period of 1,000,000 nanoseconds and a duration of 1,000,000 nanoseconds).

echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle

#Set the duty cycle to 0, which is equivalent to stopping the duty cycle output.

echo 0 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle


5]  Set the normal PWM polarity:

#Set the normal PWM polarity:

echo "normal" > /sys/class/pwm/pwmchip1/pwm0/polarity

#Set the inverted PWM polarity:

echo "inversed" > /sys/class/pwm/pwmchip1/pwm0/polarity


6] Enable PWM :

echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable




7] Disable PWM :

echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable



8] Disable exporting PWM to user space:

echo 0 > /sys/class/pwm/pwmchip1/unexport


9] Screenshot of the operation process:



】Test the built-in sample program of the official SDK:


(The following operations need to be performed in the terminal of the Pico development board)

3] Run the test sample program: 
chmod 777 ./luckfox_pwm_test
## Grant executable permissions to the file
./luckfox_pwm_test 3


4] Running result:

TAG: ESP32-S3 GEEK Development Board DeepSeek AI Voice Chat ESP32 C6 Development Board 1.69 inch LCD Display 240x280 1.69inch TouchScreen Programmable Watch ESP32-S3 GC9A01A DeepSeek XiaoZhi AI Chat Robot ESP32-S3 1.54 inch LCD N16R8 MUMA Development Board Display Screen Wifi Weather Station TimeClock Raspberry Pi Pico 2 RP2350 USB A Development Board RP2350A Raspberry Pi Pico 2 RP2350B 2.8 inch LCD Development Board RGB Display Round TouchScreen 480x480 LVGL QMI8658 / SD / RTC Raspberry Pi Audio Sipeed Lichee Tang Nano1K FPGA MINI Development Board GW1NZ-1 NVIDIA Jetson Orin Nano Developer Kit Official Original 8GB AI 40Tops For Embedded and Edge Systems X1009 Raspberry Pi 5 PCIe To 5-Port SATA SATA3.0 (NOT BOOT From SATA) X1002 Raspberry Pi 5 PCIe to M.2 NVMe SSD Adapter Board HAT Pi5 2280 Raspberry Pi 5 PCM5122 I2S Audio Card DAC Also For PI4 /PI3 /Zero Series ESP32-AI Series User Guide Solar Power Manager Module (D) Raspberry Pi Pico Raspberry Pi CM5 Gigabit/2.5G Dual Ethernet Expansion Board with RJ45 GPIO IO Base SC09 Serial UART Bus Servo Motor Switchable 2.3kg 300Angle ESP32-C6 Geek 1.14inch Development Board with 1.14 inch 65K Color LCD Raspberry Pi Pico 2 RP2350A USB-C Mini Development Board Raspberry Pi Pico 2 RP2350 bit board Size & Port high Compatible With BBC Micro:bit