用micropython 操作stm32f4单片机的定时器实现蜂鸣器驱动

发布于:2024-12-05 ⋅ 阅读:(190) ⋅ 点赞:(0)

import pyb
import time

# 初始化引脚和定时器通道作为PWM输出
# 注意:这里我们假设您使用的是支持PWM的引脚和定时器
# 在不同的MicroPython板上,支持的引脚和定时器可能不同
# 请查阅您的板的文档以确认正确的引脚和定时器
buzzer_pin = pyb.Pin('PD15', pyb.Pin.OUT)  # 假设PD15引脚支持PWM
tim = pyb.Timer(4, freq=2000)  # 设置定时器4的频率为2000Hz
ch = tim.channel(4, pyb.Timer.PWM, pin=buzzer_pin)  # 创建PWM通道

# 控制蜂鸣器发声的函数
def beep(duty_percent, on_time_ms, off_time_ms, repeat):
    # duty_percent 是占空比的百分比,范围从0到100
    for _ in range(repeat):
        # 开启蜂鸣器
        # 注意:pyb.Timer.channel的pulse_width_percent()接受0到100的百分比值
        ch.pulse_width_percent(duty_percent)
        time.sleep_ms(on_time_ms)
        
        # 关闭蜂鸣器(通过设置占空比为0)
        ch.pulse_width_percent(0)
        time.sleep_ms(off_time_ms)

# 示例调用:蜂鸣器以50%占空比,100ms开启,100ms关闭的模式重复发声3次
beep(50, 100, 100, 20) 

下面对其封装

# buzzer.py -- put your Buzzer class code here!
import pyb
import time

class Buzzer:
    def __init__(self, pin_name, timer_num, channel_num, freq=2000):
        # 初始化引脚和定时器通道作为PWM输出
        self.pin = pyb.Pin(pin_name, pyb.Pin.OUT)
        self.timer = pyb.Timer(timer_num, freq=freq)
        self.pwm_channel = self.timer.channel(channel_num, pyb.Timer.PWM, pin=self.pin)

    def beep(self, duty_percent, on_time_ms, off_time_ms, repeat):
        # 控制蜂鸣器发声的函数
        # duty_percent 是占空比的百分比,范围从0到100
        for _ in range(repeat):
            # 开启蜂鸣器
            self.pwm_channel.pulse_width_percent(duty_percent)
            time.sleep_ms(on_time_ms)
            
            # 关闭蜂鸣器(通过设置占空比为0)
            self.pwm_channel.pulse_width_percent(0)
            time.sleep_ms(off_time_ms) 

 主函数:

from buzzer import Buzzer

if __name__ == "__main__":
    # 初始化Buzzer对象
    buzzer = Buzzer('PE11', 1, 2)  # 假设PE11引脚支持PWM,使用定时器1和通道2
#     while True:
    # 示例调用:蜂鸣器以60%占空比,100ms开启,100ms关闭的模式重复发声20次
    buzzer.beep(60, 100, 100, 3)  # 注意这里添加了闭合的括号)


网站公告

今日签到

点亮在社区的每一天
去签到