【雕爷学编程】MicroPython手册之 OpenMV Cam 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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
OpenMV Cam 是一款小型、低功耗的微控制器板,可以让你在现实世界中使用机器视觉轻松实现应用程序。你可以使用高级 Python 脚本(由 MicroPython 操作系统提供)而不是 C/C++ 对 OpenMV Cam 进行编程。OpenMV Cam 的技术参数包括以下几个方面:

1、处理器:OpenMV Cam H7 Plus 使用 STM32H743II ARM Cortex M7 处理器,运行频率为 480 MHz,具有 32MB SDRAM + 1MB SRAM 和 32 MB 外部闪存 + 2 MB 内部闪存。OpenMV Cam M4 V2 使用 STM32F427VG ARM Cortex M4 处理器,运行频率为 180 MHz,具有 256KB RAM 和 1 MB 闪存。
2、图像传感器:OpenMV Cam H7 Plus 和 OpenMV Cam M4 V2 都使用 OV7725 图像传感器,能够在分辨率高于 320x240 时以 75 FPS 拍摄 320x240 8 位灰度图像或 320x240 16 位 RGB565 图像,在分辨率低于 320x240 时能够以 150 FPS 拍摄。
3、I/O 接口:OpenMV Cam H7 Plus 和 OpenMV Cam M4 V2 都具有以下 I/O 接口:
(1)全速 USB (12Mbs) 接口,连接到电脑。当插入 OpenMV Cam 后,你的电脑会出现一个虚拟 COM 端口和一个“U盘”。
(2)μSD 卡槽能够进行 100Mbs 读/写,使你的 OpenMV Cam 能够录制视频,并把机器视觉的素材从 μSD 卡提取出来。
(3)SPI 总线的运行速度高达 54Mbs,使你可以简单地把图像流数据传给 LCD 扩展板、WiFi 扩展板,或者其他控制器。
(4)I2C 总线(高达 1Mb/s)、CAN 总线(高达 1Mb/s)和异步串行总线(TX/RX,高达 7.5Mb/s),用于与其他控制器或传感器连接。
(5)一个 12 位 ADC 和一个 12 位 DAC。
(6)所有 I/O 引脚上都有中断和 PWM(板上有 9 或者10个 I/O 引脚)。
4、LED:OpenMV Cam H7 Plus 和 OpenMV Cam M4 V2 都配备了一个 RGB LED(三色)和两个高亮的 850nm IR LED(红外)。
5、镜头:OpenMV Cam H7 Plus 和 OpenMV Cam M4 V2 都配备了标准 M12 镜头接口和一个默认的 2.8 毫米镜头。如果你想在 OpenMV Cam 上使用更专业的镜头,你可以轻松购买并自行安装。

在这里插入图片描述

MicroPython的OpenMV Cam支持PWM(脉宽调制)功能,可以通过编程来实现对输出信号的脉冲宽度调节。下面将以专业的视角详细解释MicroPython的OpenMV Cam PWM脉宽调制的主要特点、应用场景以及需要注意的事项。

主要特点:

脉宽调制功能:OpenMV Cam的PWM功能可以生成特定频率和占空比的脉冲信号。通过调节脉冲信号的脉宽(高电平持续时间)和周期(脉冲重复周期),可以实现对输出信号的精确控制。

多通道支持:OpenMV Cam通常支持多个PWM通道,可以同时控制多个输出信号。这种多通道支持能力使得OpenMV Cam可以独立控制多个设备或执行多路PWM输出的任务。

灵活配置:PWM功能通常提供灵活的配置选项,可以设置频率、占空比以及引脚的映射等。根据具体需求,可以选择适当的配置来满足输出信号的要求。

应用场景:

电机控制:PWM功能广泛应用于电机控制领域。通过控制电机驱动器输入的PWM信号的占空比,可以调节电机的转速和方向,实现精确的电机控制。

LED亮度调节:PWM功能也可以用于LED灯的亮度调节。通过调节PWM信号的占空比,可以实现对LED灯的亮度精确调节,实现灯光亮度的变化。

声音发生器:PWM功能还可以用于声音发生器的控制。通过调节PWM信号的频率和占空比,可以生成不同频率和音色的声音信号,用于音乐播放、声音合成等应用。

需要注意的事项:

引脚选择:在使用PWM功能时,需要选择支持PWM输出的合适引脚。要确保选择的引脚支持PWM功能,并且与其他功能或设备的引脚冲突。

配置参数:在使用PWM功能时,需要合理配置PWM的频率和占空比。频率和占空比的选择应根据具体应用需求进行调整,以达到所需的控制效果。

硬件限制:在使用PWM功能时,需要注意OpenMV Cam的硬件限制。例如,PWM的输出范围、最大频率和最小占空比等限制,需要在编程时遵守。

总之,MicroPython的OpenMV Cam PWM脉宽调制功能具有脉宽调制、多通道支持和灵活配置等特点,适用于电机控制、LED亮度调节和声音发生器等应用场景。在使用PWM功能时,需要注意选择合适的引脚、配置参数以及遵守硬件限制。通过合理利用OpenMV Cam的PWM功能,可以实现精确的输出信号控制。

案例1:控制OpenMV Cam的LED灯颜色

import sensor, image, time
from machine import Pin, PWM

# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

# 启动摄像头
sensor.run(1)

# 设置LED灯颜色为红色
red_led = PWM(Pin(2))
red_led.freq(50)
red_led.duty_u16(255)

while True:
    img = sensor.snapshot()
    img.compress(quality=80, optimize=True)
    time.sleep(1/30)  # 每30帧进行一次白平衡校准

要点解读:这个程序演示了如何使用MicroPython控制OpenMV Cam的LED灯颜色。首先,需要初始化摄像头并设置图像格式和分辨率。然后,通过run方法启动摄像头。接着,在一个无限循环中,不断获取摄像头的图像,并将其保存到本地文件中。需要注意的是,在使用OpenMV Cam进行视频流传输时,需要确保数据传输的正确性和完整性。

案例2:控制OpenMV Cam的麦克风录音

import sensor, image, time
from machine import Pin, UART

# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

# 启动摄像头
sensor.run(1)

# 设置麦克风为输入模式
mic = Pin(0, Pin.IN)

# 设置串口通信,用于将录音数据发送到电脑
uart = UART(1, 9600)

while True:
    if mic.value() == 1:
        data = mic.read()
        uart.write(data)
        time.sleep_ms(100)

要点解读:这个程序演示了如何使用MicroPython控制OpenMV Cam的麦克风录音。首先,需要初始化摄像头并设置图像格式和分辨率。然后,通过run方法启动摄像头。接着,在一个无限循环中,不断获取摄像头的图像,并将其保存到本地文件中。需要注意的是,在使用OpenMV Cam进行视频流传输时,需要确保数据传输的正确性和完整性。

案例3:控制LED的亮度:

import pyb

# 初始化PWM对象
pwm = pyb.PWM(1)  # PWM1引脚

# 设置PWM频率和占空比
pwm.freq(1000)  # 频率为1kHz
pwm.duty(50)   # 占空比为50%

# 主循环
while True:
    pass

要点解读:
使用pyb.PWM()初始化PWM对象,参数为PWM引脚号。
pyb.PWM()的参数为PWM引脚号,可以选择PWM1、PWM2、PWM3或PWM4。
使用pwm.freq()设置PWM的频率,这里设置为1kHz。
使用pwm.duty()设置PWM的占空比,这里设置为50%。
在主循环中使用pass保持程序运行。
这个示例展示了如何使用MicroPython在OpenMV Cam上实现PWM控制LED的亮度。通过设置PWM的频率和占空比,可以控制LED的亮度,这里将频率设置为1kHz,占空比设置为50%。

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

import pyb

# 初始化PWM对象
pwm = pyb.PWM(3)  # PWM3引脚

# 设置PWM频率和占空比
pwm.freq(50)  # 频率为50Hz
pwm.duty(5)  # 占空比为5%

# 主循环
while True:
    pass

要点解读:
使用pyb.PWM()初始化PWM对象,参数为PWM引脚号。
pyb.PWM()的参数为PWM引脚号,可以选择PWM1、PWM2、PWM3或PWM4。
使用pwm.freq()设置PWM的频率,这里设置为50Hz。
使用pwm.duty()设置PWM的占空比,这里设置为5%。
在主循环中使用pass保持程序运行。
这个示例展示了如何使用MicroPython在OpenMV Cam上实现PWM控制舵机的角度。通过设置PWM的频率和占空比,可以控制舵机的转动角度,这里将频率设置为50Hz,占空比设置为5%。

案例5:产生脉冲信号:

import pyb

# 初始化PWM对象
pwm = pyb.PWM(2, freq=1000)  # PWM2引脚,频率为1kHz

# 循环产生脉冲信号
while True:
    pwm.duty(50)  # 占空比为50%
    pyb.delay(500)  # 延时500ms
    pwm.duty(0)  # 占空比为0%
    pyb.delay(500)  # 延时500ms

要点解读:
使用pyb.PWM()初始化PWM对象,参数包括PWM引脚号和频率。
pyb.PWM()的参数为PWM引脚号,可以选择PWM1、PWM2、PWM3或PWM4。
使用pwm.duty()设置PWM的占空比,这里将占空比设置为50%和0%。
使用pyb.delay()进行延时,这里延时500ms。
在循环中交替设置占空比为50%和0%,并通过延时产生脉冲信号。
这个示例展示了如何使用MicroPython在OpenMV Cam上实现PWM产生脉冲信号。通过循环设置PWM的占空比和延时,可以产生周期性的脉冲信号。

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

import pyb  
import time  
  
led = pyb.Pin('X1', pyb.Pin.OUT_PP) # 将X1引脚配置为输出模式,用于控制LED灯  
pwm = pyb.PWM(timer=pyb.Timer(4), freq=100) # 创建一个PWM对象,使用定时器4,频率为100Hz  
pwm.channel(1, pin=led, pulse_width=500) # 将PWM通道1绑定到X1引脚,并设置脉冲宽度为500us  
  
while True:  
    for i in range(100, 2000, 100): # 脉冲宽度从100us到2000us递增  
        pwm.channel(1).pulse_width(i) # 设置PWM通道1的脉冲宽度  
        time.sleep_ms(50) # 延时50ms,等待LED亮度变化  
    for i in range(2000, 100, -100): # 脉冲宽度从2000us到100us递减  
        pwm.channel(1).pulse_width(i) # 设置PWM通道1的脉冲宽度  
        time.sleep_ms(50) # 延时50ms,等待LED亮度变化

要点解读:此代码使用OpenMV Cam的MicroPython运行时来使用PWM控制LED灯的亮度。代码中,我们首先使用pyb.Pin()函数将X1引脚配置为输出模式,用于控制LED灯。然后创建一个PWM对象pwm,使用定时器4,频率为100Hz。接着使用pwm.channel()方法将PWM通道1绑定到X1引脚,并设置脉冲宽度为500us。在主循环中,我们使用两个for循环来递增和递减脉冲宽度,从而控制LED灯的亮度变化。需要注意的是,在OpenMV Cam中,可以使用pyb模块来进行通用硬件控制。

案例7:使用PWM控制直流电机转速

import pyb  
import time  
  
motor_pin = pyb.Pin('X2', pyb.Pin.OUT_PP) # 将X2引脚配置为输出模式,用于控制直流电机  
pwm = pyb.PWM(timer=pyb.Timer(4), freq=50) # 创建一个PWM对象,使用定时器4,频率为50Hz  
pwm.channel(1, pin=motor_pin, pulse_width=500) # 将PWM通道1绑定到X2引脚,并设置脉冲宽度为500us  
  
while True:  
    for i in range(500, 2000, 100): # 脉冲宽度从500us到2000us递增  
        pwm.channel(1).pulse_width(i) # 设置PWM通道1的脉冲宽度  
        time.sleep_ms(50) # 延时50ms,等待电机转速变化  
    for i in range(2000, 500, -100): # 脉冲宽度从2000us到500us递减  
        pwm.channel(1).pulse_width(i) # 设置PWM通道1的脉冲宽度  
        time.sleep_ms(50) # 延时50ms,等待电机转速变化

要点解读:此代码使用OpenMV Cam的MicroPython运行时来使用PWM控制直流电机转速。代码中,我们首先使用pyb.Pin()函数将X2引脚配置为输出模式,用于控制直流电机。然后创建一个PWM对象pwm,使用定时器4,频率为50Hz。接着使用pwm.channel()方法将PWM通道1绑定到X2引脚,并设置脉冲宽度为500us。在主循环中,我们使用两个for循环来递增和递减脉冲宽度,从而控制直流电机的转速变化。需要注意的是,直流电机的转速与脉冲宽度成正比。因此,脉冲宽度越大,电机转速越高。

案例8:使用PWM实现呼吸灯效果

import pyb  
import time  
  
led = pyb.Pin('X1', pyb.Pin.OUT_PP) # 将X1引脚配置为输出模式,用于控制LED灯  
pwm = pyb.PWM(timer=pyb.Timer(4), freq=100) # 创建一个PWM对象,使用定时器4,频率为100Hz  
pwm.channel(1, pin=led, pulse_width=500) # 将PWM通道1绑定到X1引脚,并设置脉冲宽度为500us  
  
while True:  
    for i in range(500, 2000, 50): # 脉冲宽度从500us到2000us递增  
        pwm.channel(1).pulse_width(i) # 设置PWM通道1的脉冲宽度  
        time.sleep_ms(20) # 延时20ms,等待LED亮度变化  
    for i in range(2000, 500, -50): # 脉冲宽度从2000us到500us递减  
        pwm.channel(1).pulse_width(i) # 设置PWM通道1的脉冲宽度  
        time.sleep_ms(20) # 延时20ms,等待LED亮度变化

要点解读:此代码使用OpenMV Cam的MicroPython运行时来使用PWM实现呼吸灯效果。代码中,我们首先使用pyb.Pin()函数将X1引脚配置为输出模式,用于控制LED灯。然后创建一个PWM对象pwm,使用定时器4,频率为100Hz。接着使用pwm.channel()方法将PWM通道1绑定到X1引脚,并设置脉冲宽度为500us。在主循环中,我们使用两个for循环来递增和递减脉冲宽度,从而使LED灯的亮度呈现呼吸灯效果。需要注意的是,呼吸灯效果的实现原理是通过不断改变LED灯的亮度来实现的。通过调整PWM的脉冲宽度,可以改变LED灯的亮度。因此,在代码中,我们使用两个for循环来递增和递减脉冲宽度,从而使LED灯的亮度呈现呼吸灯效果。同时,我们也通过time.sleep_ms()方法来控制呼吸灯效果的速度。

这些示例程序展示了如何在OpenMV Cam上使用MicroPython实现PWM的不同应用场景。通过初始化PWM对象并设置频率和占空比,可以控制LED的亮度、舵机的角度,以及产生脉冲信号。对于每个示例,我们使用pyb.PWM()初始化PWM对象,并通过pwm.freq()和pwm.duty()设置PWM的频率和占空比。可以根据具体需求调整PWM的频率和占空比来实现不同的功能。在主循环中使用pass保持程序运行,或者通过循环和延时来实现特定的脉冲信号生成。

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

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值