【雕爷学编程】MicroPython手册之 RP2(Pico)PWM(脉宽调制)

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
RP2(Pico)是树莓派基金会推出的一款微控制器开发板,基于自研的 RP2040 芯片,售价仅为 4 美元。它可以用 C/C++ 或 Python 语言编程,适合用于物联网、机器人、音乐等各种应用场景。技术参数:RP2(Pico)的技术参数如下:

1、搭载双核 ARM Cortex M0+ 处理器,运行频率 133 MHz
2、内置 264 KB 的片上 RAM,板载 2 MB 闪存
3、可通过专用 QSPI 总线支持最高 16 MB 的片外闪存
4、DMA 控制器
5、30 个 GPIO 引脚,其中 4 个可用作模拟输入
6、2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器
7、16 个 PWM 通道
8、USB 1.1 主机和设备支持
9、8 个树莓派可编程 I/O(PIO)状态机,用于自定义外围设备支持
10、支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程

在这里插入图片描述
MicroPython的RP2(Pico) PWM(脉宽调制)是一种用于控制模拟信号的重要技术。

主要特点:

脉宽调制能力:RP2(Pico) PWM模块可以生成可调节的脉冲信号,通过调节信号的脉冲宽度来控制输出电平的高低。这使得它可以用来模拟模拟信号,如模拟电压或模拟光强度等。

高精度控制:RP2(Pico) PWM模块提供高精度的脉冲宽度控制,通常可以达到微秒级的精度。这使得它在需要精确控制的应用中非常有用,如电机速度控制、LED亮度调节等。

多通道支持:RP2(Pico) PWM模块通常支持多个独立的PWM通道,每个通道可以独立设置不同的频率和占空比。这种多通道的支持使得它可以同时控制多个输出信号,提供更多的灵活性。

应用场景:

电机控制:RP2(Pico) PWM模块可以用于控制直流电机或步进电机的转速和转向。通过调节PWM信号的频率和占空比,可以实现精确的电机速度控制,从而满足不同应用的需求。

LED灯控制:RP2(Pico) PWM模块广泛应用于LED灯的亮度调节。通过调节PWM信号的占空比,可以实现LED灯的渐变亮度效果,或者实现不同亮度的闪烁效果。

声音合成:RP2(Pico) PWM模块可以用于声音合成和音频处理。通过调节PWM信号的频率和占空比,可以模拟不同音调和音量的声音信号,用于音频合成、音乐播放等应用。

需要注意的事项:

引脚选择:在使用RP2(Pico) PWM模块时,需要根据具体的硬件设计选择合适的引脚。RP2(Pico)通常提供多个可用于PWM的引脚,需要确保选择的引脚具有PWM功能,并根据需要分配合适的引脚资源。

电流和电压限制:在使用RP2(Pico) PWM模块时,需要注意PWM输出信号的电流和电压限制。确保PWM输出信号的电流和电压在设备和电路的额定范围内,以避免损坏设备或引发其他问题。

频率和占空比设置:在使用RP2(Pico) PWM模块时,需要根据具体应用需求设置合适的PWM频率和占空比。不同应用可能对频率和占空比有不同的要求,需要根据实际情况进行调试和优化。

总之,MicroPython的RP2(Pico) PWM模块具有脉宽调制能力、高精度控制和多通道支持等特点。它适用于电机控制、LED灯控制、声音合成等多种应用场景。在使用RP2(Pico) PWM模块时,需要注意引脚选择、电流和电压限制,以及频率和占空比的设置,以确保正确而可靠的使用。

以下是几个使用 MicroPython 和 RP2(Pico)通用板的 PWM(脉宽调制)实际运用程序参考代码案例:

案例1:控制 LED 的亮度:

import machine

# 初始化 PWM 引脚
pwm_pin = machine.Pin(15)
pwm = machine.PWM(pwm_pin)

# 设置 PWM 频率和占空比
pwm.freq(1000)
pwm.duty_u16(32768)  # 占空比范围:0-65535

# 延迟等待
machine.delay(5000)

# 停止 PWM
pwm.deinit()

这个程序使用 PWM 控制 LED 的亮度。

使用 machine.Pin() 初始化一个引脚对象 pwm_pin,参数 15 表示引脚的编号。

使用 machine.PWM() 初始化一个 PWM 对象 pwm,参数为引脚对象 pwm_pin。

通过调用 pwm.freq() 方法设置 PWM 的频率,参数 1000 表示频率为 1000 Hz。

通过调用 pwm.duty_u16() 方法设置 PWM 的占空比,参数 32768 表示占空比为 50%(范围为 0-65535)。

使用 machine.delay() 方法实现延迟等待,这里延迟 5000 毫秒(5秒)。

最后调用 pwm.deinit() 方法停止 PWM。

案例2:控制舵机的角度:

import machine
import time

# 初始化 PWM 引脚
pwm_pin = machine.Pin(16)
pwm = machine.PWM(pwm_pin)

# 设置 PWM 频率和占空比范围
pwm.freq(50)
pwm.duty_u16(1000, 5000)  # 占空比范围:1000-5000

# 控制舵机角度
pwm.duty_u16(2000)  # 设置占空比为 2000,对应舵机角度的位置

# 延迟等待
time.sleep(2)

# 停止 PWM
pwm.deinit()

这个程序使用 PWM 控制舵机的角度。

使用 machine.Pin() 初始化一个引脚对象 pwm_pin,参数 16 表示引脚的编号。

使用 machine.PWM() 初始化一个 PWM 对象 pwm,参数为引脚对象 pwm_pin。

通过调用 pwm.freq() 方法设置 PWM 的频率,参数 50 表示频率为 50 Hz。

通过调用 pwm.duty_u16() 方法设置 PWM 的占空比范围,参数 1000, 5000 表示占空比范围为 1000-5000。

通过调用 pwm.duty_u16() 方法设置 PWM 的占空比,参数 2000 表示占空比为 2000,对应舵机角度的位置。

使用 time.sleep() 方法实现延迟等待,这里延迟 2 秒。

最后调用 pwm.deinit() 方法停止 PWM。

案例3:控制电机的转速:

import machine
import time

# 初始化 PWM 引脚
pwm_pin = machine.Pin(18)
pwm = machine.PWM(pwm_pin)

# 设置 PWM 频率和占空比范围
pwm.freq(1000)
pwm.duty_u16(0, 65535)  # 占空比范围:0-65535

# 控制电机转速
pwm.duty_u16(32768)  # 设置占空比为 32768,对应中等转速

# 延迟等待
time.sleep(5)

# 停止 PWM
pwm.deinit()

这个程序使用 PWM 控制电机的转速。

使用 machine.Pin() 初始化一个引脚对象 pwm_pin,参数 18 表示引脚的编号。

使用 machine.PWM() 初始化一个 PWM 对象 pwm,参数为引脚对象 pwm_pin。

通过调用 pwm.freq() 方法设置 PWM 的频率,参数 1000 表示频率为 1000 Hz。

通过调用 pwm.duty_u16() 方法设置 PWM 的占空比范围,参数 0, 65535 表示占空比范围为 0-65535。

通过调用 pwm.duty_u16() 方法设置 PWM 的占空比,参数 32768 表示占空比为 32768,对应中等转速。

使用 time.sleep() 方法实现延迟等待,这里延迟 5 秒。

最后调用 pwm.deinit() 方法停止 PWM。

这些代码示例可用作使用 MicroPython 和 RP2(Pico)进行 PWM 控制的参考。请注意,具体的引脚编号、频率和占空比范围可能根据实际硬件和应用需求进行调整。

案例4:LED闪烁程序

import machine  
import utime  
  
# 配置GPIO引脚为输出模式  
pin = machine.Pin(25, machine.Pin.OUT)  
  
# 设置PWM频率和占空比  
pwm = machine.PWM(pin, freq=1000, duty=512)  
  
while True:  
    # 通过PWM控制LED亮度,实现LED闪烁效果  
    for i in range(0, 101, 1):  
        pwm.duty(i)  
        utime.sleep(0.01)  
    for i in range(100, -1, -1):  
        pwm.duty(i)  
        utime.sleep(0.01)

案例5:电机控制程序

import machine  
import utime  
  
# 配置GPIO引脚为输出模式  
pin = machine.Pin(25, machine.Pin.OUT)  
  
# 设置PWM频率和占空比  
pwm = machine.PWM(pin, freq=1000, duty=512)  
  
# 控制电机正反转和停止  
def forward():  
    pwm.duty(512)  
def backward():  
    pwm.duty(0)  
def stop():  
    pwm.deinit()  
  
while True:  
    forward()  # 电机正转  
    utime.sleep(1)  
    backward()  # 电机反转  
    utime.sleep(1)  
    stop()  # 电机停止  
    utime.sleep(1)

案例6:控制LED的亮度:

import machine
import utime

led_pin = machine.Pin(25)
pwm = machine.PWM(led_pin)

while True:
    for duty_cycle in range(0, 65535, 1024):
        pwm.duty_u16(duty_cycle)
        utime.sleep(0.1)

上述代码案例中,通过创建PWM对象并指定LED所连接的引脚(这里使用引脚25),使用duty_u16()方法来设置PWM的占空比。在主循环中,通过循环改变占空比的值来实现LED的渐变亮度效果。

案例7:控制舵机的角度:

import machine
import utime

servo_pin = machine.Pin(18)
pwm = machine.PWM(servo_pin, freq=50)

while True:
    for duty_cycle in range(40000, 80000, 2000):
        pwm.duty_u16(duty_cycle)
        utime.sleep(1)

上述代码案例中,通过创建PWM对象并指定舵机所连接的引脚(这里使用引脚18),同时设置PWM的频率为50Hz。在主循环中,通过循环改变占空比的值来控制舵机的角度,实现舵机的旋转效果。

案例8:生成音频信号:

import machine
import utime

speaker_pin = machine.Pin(15)
pwm = machine.PWM(speaker_pin)

while True:
    pwm.freq(440)  # 设置频率为440Hz(A4音调)
    pwm.duty_u16(32768)  # 设置占空比为50%
    utime.sleep(1)
    pwm.duty_u16(0)  # 关闭音频信号
    utime.sleep(1)

上述代码案例中,通过创建PWM对象并指定扬声器所连接的引脚(这里使用引脚15)。在主循环中,通过设置freq()方法来指定音频信号的频率,使用duty_u16()方法来设置占空比。通过循环控制音频信号的开启和关闭,实现简单的音频合成效果。这些示例代码可以帮助您理解如何使用MicroPython的RP2(Pico) PWM进行实际的脉宽调制控制。根据具体的应用需求,您可以根据以上示例代码进行修改和扩展,以实现更复杂的PWM控制逻辑。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。

在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值