0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RTT大赛作品连载】 PWM操作蜂鸣器

闲来无事玩单片机呀 2021-12-06 08:36 次阅读

蜂鸣器是一个比较常见的电子器件,主要作用是哟关于报警,提醒。

蜂鸣器有两中类型,一种是无源蜂鸣器,没有驱动源,需要使用PWM控制蜂鸣器响,可以通过修改PWM的占空比或者频率来达到调整蜂鸣器声音音调的目的;还有一种是有源蜂鸣器,有驱动源,上电接高电平就会响。

本文就将以AB32VG1作为主控,RT-thread作为操作系统来操作无源蜂鸣器。

一、创建工程

使用RT-Thread Studio来创建工程。

1. 新增加两个文件app_beep.c和app_beep.h

poYBAGGsPhuAZr4CAAA2gKRcqmE599.png

2. 打开RT-Thread Settings,使能PWM2

pYYBAGGsPkyAR116AABbqQMsVs8663.png

二、电路连接

蜂鸣器驱动引脚连接:PE0 → Beep驱动引脚

三、无源蜂鸣器操作原理

无源蜂鸣器需要自己提供驱动源,也就是PWM信号,通过控制PWM驱动频率可以控制蜂鸣器输出音符。

本程序通过period来控制PWM频率,频率为1MHz/period KHz

人耳能够听到的声音频率为20Hz~20KHz,所以操作20KHz频率是听不见的。

驱动程序控制PWM循环输出1KHz~20KHz,当声音越接近20KHz,我们能听到的声音越小,占空比为50%,相对而言声音最大。占空比大小可以自己调节输出声音的大小。

四、操作代码

1. 创建Beep线程

static int Pwm_Thread_Init(void)
{
    rt_thread_t beep_thread;

    beep_thread = rt_thread_create("Beep_thread",
                                    PWM_Thread_Entry,
                                    RT_NULL,
                                    512,
                                    10,
                                    10);

    rt_thread_startup(beep_thread);

    return 0;
}

2. 初始化PWM,初始化函数在main中while循环之前调用

#define PWM_DEV_NAME        "lpwm2" /* PWM 设备名称 */
#define PWM_DEV_CHANNEL     1 /* PWM 通道 */
#define PWM_PERIOD          (1000000u) // 1000000u
struct rt_device_pwm *pwm_dev; /* PWM 设备句柄 */
rt_uint32_t period, pulse;

void Pwm_Init(void)
{
    period = PWM_PERIOD; /* 周期 = 1M/period kHz */
    pulse = 0; /* PWM 脉冲宽度值(0 - period) */
    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    RT_ASSERT(pwm_dev != RT_NULL);

    /* 设置 PWM 周期和脉冲宽度 */
    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, 0);
    /* 使能设备 */
    rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);

    Pwm_Thread_Init();
}

3. PWM Beep驱动函数

static void PWM_Thread_Entry(void *para)
{
    uint8_t i = 1;
    while(1)
    {
        period = (uint32_t)(1000000/i);
        rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, period-1);
        i++;
        if(i > 20)
            i = 1;
        rt_thread_mdelay(1000);
    }
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4820

    浏览量

    209559
  • 蜂鸣器
    +关注

    关注

    12

    文章

    848

    浏览量

    45212
  • 线程
    +关注

    关注

    0

    文章

    484

    浏览量

    19468
  • RT-Thread
    +关注

    关注

    31

    文章

    1130

    浏览量

    38817
收藏 人收藏

    评论

    相关推荐

    RTT大赛作品连载】 AB32VG1上手

    AB32VG1上手操作,修改例程运行中的问题,成功点亮RGB。
    的头像 发表于 10-28 18:31 7255次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 AB32VG1上手

    RTT大赛作品连载】AB32VG1评估板到货控制彩灯测试

    RTT大赛作品连载】AB32VG1评估板到货控制彩灯测试篇;接下来看看在如何AB32VG1评估板控制彩灯! 在RT-ThreadStudio新建项目到对应开发配置及下载及验证测试!
    的头像 发表于 11-07 19:39 4804次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】AB32VG1评估板到货控制彩灯测试

    RTT大赛作品连载】CH32V103开发板资料及上电首测

    简介   参加论坛举办的rtt大赛也有几天了,我选用的是CH32V103的板子,第一步就是收集板卡的相关资料了。 CH32V103是 沁恒微电子设计的一款RSIC-V的单片机,使用了RSIC-V3A
    的头像 发表于 11-15 08:45 7501次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】CH32V103开发板资料及上电首测

    RTT大赛作品连载】AB32VG1评估板 音乐播放器

    RTT大赛作品连载】AB32VG1评估板 音乐播放器
    的头像 发表于 11-12 21:11 5840次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】AB32VG1评估板 音乐播放器

    RTT大赛作品连载】中科蓝讯AB32VG1开发板开箱篇

    介绍电路原理图分析接口说明,AB32VG1开发板是以中科蓝讯(Bluetrum)公司推出的基于RISC-V架构的高配置芯片AB5301A为核心所组成的。【RTT大赛作品连载】中科蓝讯A
    的头像 发表于 11-13 10:01 9583次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】中科蓝讯AB32VG1开发板开箱篇

    RTT大赛作品连载】CH32V RTT微秒延时的实现

    就有带rt-thread操作系统的例程,虽然只有一个LED的,但聊胜于无,毕竟rt-thread的bsp中还没有支持到这个芯片。 所以我就基于led功能进行了新功能的开发,但发现其中bsp这块确实匮乏
    的头像 发表于 11-29 08:30 7056次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】CH32V <b class='flag-5'>RTT</b>微秒延时的实现

    RTT大赛作品连载】 OLED显示中文

    使用AB32VG1操作OLED显示文字信息,包括汉字取模方式介绍,汉字显示函数编写.
    的头像 发表于 12-06 09:25 7821次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 OLED显示中文

    RTT大赛作品连载】 按键滤波,按下,松手,长按,短按

    操作AB32VG1的板载按键,实现了按键滤波,按键按下检测,按键松手检测,按键按下时长判断.
    的头像 发表于 12-06 09:23 6962次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 按键滤波,按下,松手,长按,短按

    RTT大赛作品连载】 OLED显示图片

    使用AB32VG1驱动IIC显示图片。
    的头像 发表于 12-06 09:17 6425次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】 OLED显示图片

    RTT大赛作品连载】linkboy面向WCH移植(1)

    本文主要讲解如何让linkboy支持WCH32开发板进行图形化编程,主要是基于RT-Thread操作系统进行vos移植。
    的头像 发表于 12-18 22:10 5960次阅读
    【<b class='flag-5'>RTT</b><b class='flag-5'>大赛</b><b class='flag-5'>作品</b><b class='flag-5'>连载</b>】linkboy面向WCH移植(1)

    【星核计划】上传FPGA大赛作品,领取电子发烧友专属上传福利!

    -FPGA大赛,本次大赛奖励丰厚,不仅有奖金,还有电子发烧友论坛为参赛者准备的上传福利,按照下面规则上传参赛作品即可获得,还在等什么,快来参加吧!!作品上传地址:【FPGA开发者项目
    发表于 05-21 15:01

    【文章连载】RT-Thread创新应用大赛文章汇总

    作品集将会持续更新,欢迎大家订阅关注~ 凡是在本贴参与回复者将获得10积分(在不连续楼层评论均可获得)专栏作者:RT-thread【RTT大赛作品
    发表于 10-11 15:13

    【有奖活动】RT-Thread创新应用大赛作品连载征文

    礼品:https://jifen.elecfans.com/index.html▷文章标题格式:【RTT大赛作品连载】+自拟内容▷文章作品
    发表于 10-21 18:49

    【参与有奖】激扬代码,千元现金!RT-Thread主题征文大赛

    、通俗易懂-作品言之有物、内容有一定实用性2)作品的数量—30分-发布优质原创作品数量越多,得分越高-专题类、连载类、合集类作品享受加分2.
    发表于 05-27 17:51

    国际程序设计大赛作品欣赏

    国际程序设计大赛作品欣赏,非常漂亮的程序
    发表于 08-18 17:26 0次下载