Atomic PWM Base

支持以下产品:

Atomic PWM Base

UiFlow2 应用示例:

PWM 输出控制

在 UiFlow2 上打开 atoms3r_pwm_base_example.m5f2 项目。

案例演示控制 PWM 信号的占空比在低到高、高到低之间来回变化。

UiFlow2 代码块:

atoms3r_pwm_base_example.png

示例输出:

MicroPython 应用示例:

PWM 输出控制

案例演示控制 PWM 信号的占空比在低到高、高到低之间来回变化。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from base import AtomicPWMBase
 9import time
10
11
12title0 = None
13label0 = None
14label1 = None
15label_freq = None
16label_duty = None
17base_pwm = None
18i = None
19
20
21def setup():
22    global title0, label0, label1, label_freq, label_duty, base_pwm, i
23    M5.begin()
24    title0 = Widgets.Title("PWM Control", 0, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
25    label0 = Widgets.Label("freq:", 1, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
26    label1 = Widgets.Label("duty:", 2, 65, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
27    label_freq = Widgets.Label("1000Hz", 47, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
28    label_duty = Widgets.Label("0", 55, 65, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
29    base_pwm = AtomicPWMBase(5, 1000)
30    label_freq.setText(str((str((base_pwm.get_freq())) + str("Hz"))))
31
32
33def loop():
34    global title0, label0, label1, label_freq, label_duty, base_pwm, i
35    M5.update()
36    for i in range(100):
37        base_pwm.set_duty_u16(i * 150)
38        label_duty.setText(str(base_pwm.get_duty_u16()))
39        time.sleep_ms(40)
40    for i in range(100):
41        base_pwm.set_duty_u16(15000 - i * 150)
42        label_duty.setText(str(base_pwm.get_duty_u16()))
43        time.sleep_ms(40)
44
45
46if __name__ == "__main__":
47    try:
48        setup()
49        while True:
50            loop()
51    except (Exception, KeyboardInterrupt) as e:
52        try:
53            from utility import print_error_msg
54
55            print_error_msg(e)
56        except ImportError:
57            print("please update to latest firmware")

示例输出:

API应用

PWM

class base.pwm.AtomicPWMBase(out_pin=5, freq=1000)

基类:object

创建一个 AtomicPWMBase 对象。

参数:
  • out_pin (int) – PWM 输出引脚,默认为 5。

  • freq (int) – PWM 频率,默认为 1000Hz。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from base import AtomicPWMBase

base_pwm = AtomicPWMBase(out_pin=5, freq=1000)
set_freq(freq=1000)

设置 PWM 频率。

参数:

freq (int) – PWM 频率,默认为 1000Hz。

返回类型:

None

UiFlow2 代码块:

set_freq.png

MicroPython 代码块:

base_pwm.set_freq()
get_freq()

获取 PWM 频率。

返回:

PWM 频率。

返回类型:

int

UiFlow2 代码块:

get_freq.png

MicroPython 代码块:

base_pwm.get_freq()
set_duty_u16(duty=0)

设置 PWM 占空比。

设置 PWM 输出的当前占空比,作为无符号 16 位值,范围为 0 到 65535(含 0 和 65535)。

参数:

duty (int) – PWM 占空比,范围:0~65535,默认为 0。

UiFlow2 代码块:

set_duty_u16.png

MicroPython 代码块:

base_pwm.set_duty_u16()
get_duty_u16()

获取 PWM 占空比。

返回:

PWM 占空比,范围:0~65535。

返回类型:

int

UiFlow2 代码块:

get_duty_u16.png

MicroPython 代码块:

base_pwm.get_duty_u16()