【雕爷学编程】MicroPython手册之 WiPy 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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
WiPy是一款基于MicroPython的无线微控制器模块,它提供了一个完整的硬件和软件解决方案,旨在简化物联网(IoT)设备的开发和部署。

1、微控制器模块:WiPy是一种集成了处理器、内存、无线通信模块和其他必要组件的微型计算机模块。它的设计目标是提供一个紧凑、低功耗的硬件平台,能够运行MicroPython这样的高级编程语言,并具备连接到互联网和其他设备的能力。
2、MicroPython:MicroPython是一种精简版的Python编程语言,专为嵌入式系统和微控制器设计而开发。它提供了Python语言的核心功能和语法,使得开发者能够使用熟悉的Python语法进行硬件控制和物联网应用开发。WiPy作为MicroPython的运行环境,能够直接解释和执行MicroPython代码。
3、物联网(IoT):物联网是指将各种物理设备(如传感器、执行器、嵌入式系统等)通过互联网连接起来,实现智能化、互联互通的网络。WiPy作为一种无线微控制器模块,具备无线通信能力,能够连接到物联网中的其他设备和云平台,实现远程控制和数据交换。
4、无线通信模块:WiPy内置了一种或多种无线通信模块,常见的包括Wi-Fi、蓝牙(Bluetooth)和LoRa等。这些无线通信模块使得WiPy能够通过无线网络与其他设备进行通信,实现数据传输、远程控制、云连接等功能。开发者可以根据具体需求选择适合的无线通信模块。
5、开发和部署:WiPy提供了一套方便的开发工具和开发环境,使得开发者能够快速进行应用程序的开发、调试和测试。开发完成后,WiPy可以直接部署到实际的物联网设备中,与其他设备进行通信和交互。WiPy的紧凑设计和低功耗特性,使得它非常适合嵌入式系统和物联网设备的部署。

在这里插入图片描述
MicroPython的WiPy计时器是WiPy开发板上的硬件定时器模块,用于实现精确的时间测量和定时触发。

主要特点:

硬件支持:WiPy计时器是WiPy开发板上的硬件模块,提供高精度的定时功能。它独立于处理器,可以在后台运行,不会受到其他代码的影响。
多功能性:WiPy计时器支持多种模式,包括定时器模式、计数器模式和PWM模式。可以根据需求选择适当的模式进行配置。
精确性:WiPy计时器具有高精度的计时能力,可以实现微秒级的时间测量和定时触发。
中断支持:WiPy计时器可以配置中断,当计时器达到设定的时间或计数值时,会触发中断,从而执行相应的任务。

应用场景:

时间测量:WiPy计时器可以用于精确测量各种事件和操作的时间。例如,测量信号的脉冲宽度、计算代码的执行时间等。
定时触发:WiPy计时器可以用于定时触发特定的任务或事件。例如,定时采集传感器数据、定时发送数据等。
PWM输出:WiPy计时器支持PWM模式,可以用于控制执行器的输出,例如控制电机的转速、控制LED的亮度等。

注意事项:

计时精度:WiPy计时器的精度取决于硬件本身和系统时钟的稳定性。在对时间要求较高的应用中,需要考虑时钟源的稳定性和误差校正。
中断处理:当使用中断功能时,需要注意编写正确的中断处理函数并合理处理中断触发时的任务。避免中断处理函数执行时间过长或导致其他问题。
引脚冲突:在使用计时器时,需要注意避免与其他引脚功能的冲突。确保计时器所需的引脚资源可用并正确配置。
综上所述,WiPy计时器是WiPy开发板上的硬件模块,具有高精度、多功能和中断支持的特点。它可以应用于时间测量、定时触发和PWM输出等场景。在使用时,需要注意计时精度、中断处理和引脚冲突等问题,以确保准确的时间测量和可靠的定时功能。

在这里插入图片描述

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

案例1:控制LED亮度:

import machine

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

# 设置PWM频率为1000Hz
pwm.freq(1000)

# 控制LED亮度(占空比范围:0-1023)
duty = 512
pwm.duty(duty)

上述代码中,通过使用MicroPython的PWM模块,使用PWM引脚控制LED的亮度。通过设置PWM的频率和占空比,可以实现精确的亮度调节效果。

案例2:控制舵机角度:

import machine
import time

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

# 设置PWM频率为50Hz(舵机标准频率)
pwm.freq(50)

# 控制舵机角度(占空比范围:20-115)
angle = 60
duty = int((angle / 180) * 95) + 20
pwm.duty(duty)

# 等待舵机运动到目标位置
time.sleep(1)

# 停止PWM输出
pwm.deinit()

上述代码中,通过使用MicroPython的PWM模块,使用PWM引脚控制舵机的角度。通过设置PWM的频率和根据舵机的角度范围计算占空比,实现舵机的精确控制。在代码中,使用time模块延时1秒等待舵机运动到目标位置,然后停止PWM输出。

案例3:生成音频信号::

import machine
import time

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

# 设置PWM频率为440Hz(A4音符频率)
pwm.freq(440)

# 播放音符(占空比范围:0-1023)
duty = 512
pwm.duty(duty)

# 播放持续时间
duration = 1  # 1秒钟
time.sleep(duration)

# 停止播放
pwm.deinit()

上述代码中,通过使用MicroPython的PWM模块,使用PWM引脚生成音频信号。通过设置PWM的频率和占空比,可以播放特定的音符。在代码中,设置PWM频率为440Hz,即A4音符的频率,播放持续时间为1秒钟,然后停止PWM输出。以上代码仅为示例,实际应用中需要根据具体需求进行适当的修改和调整。同时,确保正确配置PWM引脚、设置PWM频率和占空比以及控制PWM输出的时间和停止操作。

案例4:使用MicroPython控制LED灯的亮度

from machine import Pin, PWM
import time

# 初始化引脚12为PWM输出模式
led = PWM(Pin(12), duty=50)

while True:
    led.duty(75)  # 设置占空比为75%
    time.sleep(1)  # 延时1秒
    led.duty(25)  # 设置占空比为25%
    time.sleep(1)  # 延时1秒

案例5:使用MicroPython控制蜂鸣器的音量

from machine import Pin, PWM
import time

# 初始化引脚13为PWM输出模式
buzzer = PWM(Pin(13), duty=50)

while True:
    buzzer.duty(75)  # 设置占空比为75%
    time.sleep(1)  # 延时1秒
    buzzer.duty(25)  # 设置占空比为25%
    time.sleep(1)  # 延时1秒

案例6:使用MicroPython控制电机的速度

from machine import Pin, PWM
import time

# 初始化引脚14为PWM输出模式
motor = PWM(Pin(14), duty=50)

while True:
    motor.duty(75)  # 设置占空比为75%
    time.sleep(1)  # 延时1秒
    motor.duty(25)  # 设置占空比为25%
    time.sleep(1)  # 延时1秒

案例7:使用PWM控制LED灯的亮度

from machine import Pin  
import utime  
  
# 设置PWM通道和引脚  
pwm = machine.PWM(Pin(2), freq=100, duty=50) # PWM通道2,频率100Hz,占空比50%  
  
# 控制LED灯亮度  
while True:  
    for i in range(0, 101, 10): # 从0到100每隔10%改变一次亮度  
        pwm.duty(i)  
        utime.sleep(0.1) # 等待0.1秒钟

案例8:使用PWM控制舵机的转动

from machine import Pin  
import utime  
  
# 设置PWM通道和引脚  
pwm = machine.PWM(Pin(2), freq=200, duty=50) # PWM通道2,频率200Hz,占空比50%  
  
# 控制舵机转动角度  
while True:  
    for i in range(0, 101, 10): # 从0到100每隔10%改变一次占空比  
        pwm.duty(i)  
        utime.sleep(0.1) # 等待0.1秒钟

案例9:使用PWM控制电机的转速

from machine import Pin  
import utime  
  
# 设置PWM通道和引脚  
pwm = machine.PWM(Pin(2), freq=100, duty=50) # PWM通道2,频率100Hz,占空比50%  
  
# 控制电机转速(这里假设电机接在引脚2上)  
while True:  
    for i in range(0, 101, 10): # 从0到100每隔10%改变一次占空比  
        pwm.duty(i)  
        utime.sleep(0.1) # 等待0.1秒钟

这些代码案例只是PWM的一些基本用法,您可以根据自己的需要进一步扩展和改进这些程序。例如,您可以添加更多的设备,或者使用PWM与其他设备进行通信和交互。同时,还可以通过调节PWM的频率和占空比来实现不同的控制效果。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。确保正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/133410273
今日推荐