【GD32F303红枫派使用手册】第七节 TIMER-蜂鸣器PWM

7.1 实验内容

通过本实验主要学习以下内容:

  • PWM输出功能实现;
  • 定时器基本原理;
  • 蜂鸣器驱动原理;

7.2 实验原理

7.2.1 蜂鸣器驱动原理

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。比如台式电脑的主机开机会"滴"一声、洗衣机按下按键及洗衣完成都会有声响,以上这些声音都是通过蜂鸣器来发出的。蜂鸣器的驱动方式可分为:有源蜂鸣器(内有驱动线路)和无源蜂鸣器(使用外部驱动)。这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。

有源蜂鸣器不需要外部的激励源,只需要接入直流电源,即可自动发出声音(声音频率相对固定),它的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。

7.2.2 定时器基本原理

GD32F30X系列MCU的timer主要有以下五类,主要包括高级定时器/通用定时器L0/通用定时器L1/通用定时器L2/基本定时器。各个定时器支持的功能可在该表中查阅,其中黑点代表改类型的定时器支持该功能,X代表改类型的定时器不支持该功能。

 定时器可支持主从模式,可实现多个定时器级联,相关定时器的级联信号说明如下表所示。以TIMER0为例,其触发信号可以选择TIMER4_TRGO/TIMER1_TRGO/TIMER2_TRGO/TIMER3_TRGO。

定时器可支持主从模式,可实现多个定时器级联,相关定时器的级联信号说明如下表所示。以TIMER0为例,其触发信号可以选择TIMER4_TRGO/TIMER1_TRGO/TIMER2_TRGO/TIMER3_TRGO。

根据计数模式,PWM输出分为两种波形:

  • EAPWM(边沿对齐 PWM)  

EAPWM 的周期由 TIMERx_CAR 寄存器值决定,占空比由 TIMERx_CHxCV 寄存器值决定。下图显示了 EAPWM 的输出波形和中断。  

  • CAPWM(中央对齐PWM)  

CAPWM 的周期由(2*TIMERx_CAR 寄存器值)决定,占空比由(2*TIMERx_CHxCV 寄存器值)决定。 下图显示了 CAPWM 的输出波形和中断。  

7.3 硬件设计

蜂鸣器驱动电路如下图所示,在本例程中,通过BEEP_PWM(PA15)引脚驱动三极管实现蜂鸣器的驱动,当BEEP_PWM输出高电平时,三极管导通,蜂鸣器鸣叫;当BEEP_PWM输出低电平时,三极管截断,蜂鸣器停止鸣叫。

 

当我们通直流电到有源蜂鸣器的时候,它会发送预设的声音,通常是连续的蜂鸣声或间歇的蜂鸣声等。 工作电压不变,改变通断时间,获得不同的长音,如连续声,快短声,慢长声等。

7.4 代码解析

本例程实现通过调整PWM的周期占空比以及对应PWM输出的时间,实现不同音调的蜂鸣器播放,进而实现模拟音乐播放的效果,例程中模拟的是孤勇者的音乐。

7.4.1 主函数代码解析

主函数如下所示,主要包括串口/LED初始化,蜂鸣器PWM初始化,TIMER初始化(该timer仅实现基本定时的功能,通过该timer控制蜂鸣器PWM输出时间),以及启动蜂鸣器等。

C
int main(void)
{uint16_t t=0;driver_init(); bsp_uart_init(&BOARD_UART);bsp_led_group_init();  bsp_led_on(&LED0);bsp_led_off(&LED1);bsp_beep_init(1000000,50);    TIMER_INT.timer_updata_callback=Music_switch;bsp_timer_init(10000,5000);buzzer_on();printf("\r\n Bepp music play\r\n");while(1){if(int_flag==1){int_flag=0;t++;bsp_led_toggle(&LED0);            printf("\r\n Bepp music play loop %d\r\n",t);}}
}

7.4.2 蜂鸣器PWM配置函数

蜂鸣器PWM配置函数如下所示,通过调用driver_timer_channel_init底层驱动函数实现对对应TIMER周期和占空比的配置。

C
void bsp_beep_init(uint32_t counter_frequency,uint16_t period)
{driver_timer_channel_init(&PWM_BEEP,counter_frequency,period);
}

PWM_BEEP的定义如下,采用TIMER1的CH0通道进行输出,引脚为PA15,通过该定义可实现对蜂鸣器相关参数的一站式定义。

C
TIMER_CH_DEF(PWM_BEEP,TIMER1,0,TIMER_CH_PWM_HIGH,A,15,AF_PP,GPIO_TIMER1_PARTIAL_REMAP0);

7.4.3 基本定时器初始化函数

基本定时器初始化函数如下,启动了TIMER5作为中断功能,定时周期为10000个定时器时钟,其回调函数为Music_switch。

CTIMER_INT.timer_updata_callback=Music_switch;bsp_timer_init(10000,5000);void bsp_timer_init(uint32_t counter_frequency,uint16_t period)
{driver_timer_base_int_init(&TIMER_INT,counter_frequency,period);nvic_irq_enable(TIMER5_IRQn,0,0);
}TIMER_BASE_DEF(TIMER_INT,TIMER5);

Music_switch的定义如下,该函数在TIMER5的中断中调用,该函数实现的功能主要为配置修改TIMER5的周期以及蜂鸣器PWM输出的周期占空比,进而实现对不同音调的播放。

C
void Music_switch(void)
{   
    static uint16_t i=0;
    buzzer_set(music[i],12);
    i++;
    bsp_timer_init(10000,music[i]*50);  
    i++;

    if( i==(sizeof(music)/sizeof(music[0])) )
    {
        i=0;
        bsp_led_toggle(&LED1);
        int_flag=1;        
    }        
}

 音乐的相关数据定义在music数组中,其参数含义如下:M6代表蜂鸣器PWM的周期,下一个50代表该PWM输出的时间(对应TIEMR5的周期),以上两个数据一组,后面的数据类似。

C
uint16_t music[]=
{
//        //这一路上走走停停 顺着少年漂流的痕迹
//                M2,50,M2,50,M1,25,M2,50,M2,50,M1,25,M2,50,M3,50,M5,50,M3,50, M2,50,M2,50,M1,25,M2,50,M2,50,M1,25,M2,25,M3,25,M2,25,M1,25,L6,100,Z0,10,
//                //迈出车站的前一刻 竟有些犹豫
//                M2,50,M2,50,M1,25,M2,50,M2,50,M1,25,M2,50,M3,50,M5,50,M3,50, M2,50,M2,50,M3,25,M2,50,M1,50,M2,100,Z0,50,
//                //不仅笑着这近乡情怯 仍无法避免
//                M2,50,M2,50,M1,25,M2,50,M2,50,M1,25,M2,50,M3,50,M5,50,M3,50, M2,50,M2,50,M3,25,M2,50,M1,50,L6,100,Z0,10,
//                //而长野的天 依旧那么暖 风吹起了从前
//                M3,25,M2,25,M1,25,M2,25,M1,100, M3,25,M2,25,M1,25,M2,25,M1,50,M1,50, M5,25,M3,25,M2,25,M1,25,M2,25,M1,100,M1,150,Z0,30,
//                //从前初识这世间 万般留恋 看着天边似在眼前 也甘愿赴汤蹈火去走它一遍
//                M1,50,M2,50,M3,50,M1,50,M6,50,M5,25,M6,25,M6,50,M6,50, M1,25,M7,50,M6,25,M7,25,M7,100,Z0,5, M7,50,M6,25,M7,25,M7,50,M3,50,H1,25,H2,25,H1,25,M7,25,M6,50,M5,50, M6,50,M5,25,M6,25,M6,25,M5,25,M6,25,M5,25,M6,50,M5,25,M2,25,M2,25,M5,50,M5,50,M3,100,M3,100,Z0,25,
//                //如今走过这世间 万般留恋 翻过岁月不同侧脸 措不及防闯入你的笑颜
//                M1,50,M2,50,M3,50,M1,50,M6,50,M5,25,M6,25,M6,50,M6,50, M1,25,M7,50,M6,25,M7,25,M7,100,Z0,5, M7,50,M6,25,M7,25,M7,50,M3,50,H1,25,H2,25,H1,25,M7,25,M6,50,M5,50, M6,50,H3,25,H3,25,H3,50,M5,50,M6,50,H3,25,H3,25,H3,25,M5,50,M6,25,M6,100,M6,100,M6,100,Z0,25,
//                //我曾难自拔与世界之大 也沉溺于其中梦话
//                H1,50,H2,50,H3,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H2,25,H3,25,H3,50, H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,25,H3,50,H3,50,
//                //不得真假 不做挣扎 不惧笑话
//                H2,50,H1,25,M6,25,M6,25,H1,50, M6,25,H2,25,H1,25,M6,50,M6,25,H1,50,H1,50, H3,100,H3,25,H4,25,H3,50,H3,25,H2,50,H2,50,Z0,25,
//                //我曾将青春翻涌成她 也曾指尖弹出盛夏 心之所动且就随缘去吧
//                H1,50,H2,50,H3,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H2,50, H3,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H6,25,H5,25,H5,50,H3,50,H3,50, H2,50,H1,25,M6,25,M6,25,H3,50,H3,50, H2,50,H1,25,M6,25,M6,25,H1,50,H1,50,H1,100,H1,100,Z0,10,
//                //逆着光行走任风吹雨打吧
//                M6,25,H3,50,H3,50,H2,50,H1,25,M6,25,M6,25,H3,50,H2,50,H1,25,M6,25,M6,25,H1,50,H1,50,H1,50,H1,100,Z0,10,   M6,50,M7,50,H1,50,H2,50,M7,50,H1,50,H1,100,Z0,10,        //爱你孤身走暗巷H1,50,M7,50,H1,50,H2,50,M7,50,H1,50,H1,100,Z0,10,         //爱你不跪的模样H1,50,H2,50,H3,50,H2,50,H3,50,H2,50,H3,100,H3,50,H3,50,H2,50,H3,100,H5,100,H3,100,Z0,10 //爱你对峙过绝望不肯哭一场    
};

7.5 实验结果

将本例程烧录到红枫派开发板中,运行后将会通过蜂鸣器听到相关音乐

由聚沃科技原创,来源于    

【红枫派开发板】第七讲 TIMER-蜂鸣器PWM - 苏州聚沃电子科技有限公司 (gd32bbs.com)

GD32MCU技术交流群:859440462  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数仓建模—指标体系初识

文章目录 数仓建模—指标体系初识什么是指标如何理解指标体系指标体系的价值指标体系的构建构建原则与规范指标体系的分类指标体系构建步骤指标体系挑战与对策总结数仓建模—指标体系初识 指标体系是一套系统化、结构化的指标集合,用于衡量、评估、监控组织或项目的整体情况。…

2024年信息素养大赛图形化编程小低组复赛模拟真题

2024年全国青少年信息素养大赛复赛为六道编程题,分值为10分*215分*225分*2,难度依次递增,按步骤评分,据Scratch实验室预估,初赛80%的晋级率,初赛近20万人,意味着有15万多进入复赛,7月…

bootstrapblazor小白笔记

使用了bootstrapblazor,采用.net8.0,server模式,所有的问题都是基于以上条件所遇到的 1、登录过后需要在每个页面都使用认证吗 是不需要的,每个页面都写attribute [Authorize]没有问题,但是页面很多的话一个一个的写很…

私有化部署的无忧企业文档,助力企业实现文档权限的精细化管理

在当今数字化快速发展的时代,企业文档管理已成为企业运营中不可或缺的一部分。文档的安全性和访问权限的精确控制对于企业的信息保护至关重要。在无忧企业文档管理系统中,不仅具备强大的内容管理能力,更在权限管理上做到了细致入微。下面我对…

C++ 宏定义中的##

一、解释 C的宏定义中的##,代表将内容先分隔,再强制连接。 二、举例 假设有如下宏定义: #define DECLARE(name, type) type name##_##type##_typevoid decl() {DECLARE(val, int); //语句1 } 则语句1替换为:int val_int_type 由…

【MySQL】MySQL Connect -- 详解

一、Connector / C 使用 要使用 C 语言连接 MySQL,需要使用 MySQL 官网提供的库,可以去官网进行下载:MySQL :: MySQL Community Downloads 我们使用 C 接口库来进行连接,要正确使用,还需要做一些准备工作&#xff1a…

[Windows] 植物大战僵尸杂交版

游戏包含冒险模式、挑战模式、生存模式三种不同玩法。冒险模式主打关卡闯关,挑战模式则挑战特殊设计的关卡,生存模式结合无尽模式和特殊地图,各具特色。玩家可根据喜好自由选择模式,体验不同的游戏乐趣。快来尝试这款独特的pvz游戏…

【2024-06-03】某红书X-s分析

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、【2023-02-24】版本1.网站分析2.参数x-s3.web_session4.测试三、【2024-06-03】 版本1. 抓包流程2.简单分析…

springboot学习笔记-待整理

学习方式:看博客学习,记录博客链接,并整理干货知识点。 参考的博客:SpringBoot框架 Spring Boot最主要作用是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅…

对GPT-4o的评价:技术革新与未来展望

目录 引言一、GPT-4o的技术背景1.1 GPT系列的发展历程1.2 GPT-4o的技术特点 二、版本间的对比分析2.1 GPT-3与GPT-4的对比2.2 GPT-4与GPT-4o的对比 三、GPT-4o的技术能力3.1 自然语言处理3.2 多模态处理3.3 任务定制化 四、个人整体感受4.1 交互体验4.2 应用场景4.3 未来展望 五…

C++_deque:deque的数据结构特点

文章目录 🚀1. deque介绍🚀2. deque数据结构🚀3. deque的缺陷🚀4.为什么选择deque作为stack和queue的底层默认容器🚀5.deque头插逻辑(了解) 大家好!本文会简单讲讲deque的使用与数据…

会计事务所巨头普华永道,大量内部文件泄露

据安全机构监测显示,“四大”会计师事务所之一的普华永道(PwC)遭遇数据泄露,18900份内部档案被公开,文件大小共222GB。泄露的文件包括客户评审文件、人力资源文件和员工文件。 据了解, 普华永道&#xff0…

html + js 实现单个标签内文本大小不一样的效果

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>价格显示示例</title><style>.small {font-size: 0.7em; /* 设置较小的字体大小 */color:red;}#price{color:red;}</style> <…

第24讲:Ceph集群RGW对象存储高可用集群部署与测试

文章目录 1.RGW对象存储高可用集群架构1.1.环境规划1.2.高可用集群架构图 2.部署RGW对象存储高可用集群2.1.在所有的Ceph节点中部署RGW2.2.部署Haproxy负载均衡服务2.3.配置Haproxy负载均衡三个节点中的RGW2.4.配置Keepalived实现RGW高可用集群2.5.启动Keepalived并观察VIP地址…

python通过自相关对两个时序数据进行匹配、对时

目录 1. 背景2. 代码3. 计算相关性4. 谁在前、谁在后5. 对时数据处理6. 函数介绍代码解读1. 背景 为了数据源一 125m 高度的风速 ws_125 与数据源二 125m 高度的风速 ws_125-2 进行“对时”处理,可以通过计算两个时间序列之间的相关性来确定最佳时间滞后。通常可以使用 Pears…

有本HCIE,作用真的不大

在现在内卷的时代&#xff0c;获得专业认证是提升个人职业竞争力的重要途径之一。 获取认证证书是一种常见的提升自身技能和职业竞争力的方法。 然而&#xff0c;仅仅持有一张证书&#xff0c;并不能保证你在实际工作中游刃有余。 真正将其知识转化为技术能力&#xff0c;才…

学会读书并不简单,如何真正学会读书

一、教程描述 读书是要讲究方法的&#xff0c;否则就会事倍功半&#xff0c;比如&#xff0c;在学习书本上的每一个问题每一章节的时候&#xff0c;首先应当不只看到书面上&#xff0c;而且还要看到书背后的东西&#xff0c;在对书中每一个问题都经过细嚼慢咽&#xff0c;其次…

ClickHouse如何整合数据源:MySQL、HDFS...

一、ClickHouse数据源 ClickHouse 作为一个强大的列式数据库管理系统&#xff0c;支持多种数据源&#xff0c;使得用户能够方便地将数据导入 ClickHouse 进行存储和分析。以下是常见的 ClickHouse 数据源&#xff1a; 外部数据源 HDFS&#xff1a; 支持从 Hadoop 分布式文件系…

C++中的迭代器

目录 摘要 迭代器类别 1. 输入迭代器&#xff08;Input Iterator&#xff09; 2. 输出迭代器&#xff08;Output Iterator&#xff09; 3. 前向迭代器&#xff08;Forward Iterator&#xff09; 4. 双向迭代器&#xff08;Bidirectional Iterator&#xff09; 5. 随机访…

0基础认识C语言(理论知识)

为了给0基础一个舒服的学习路径&#xff0c;就有了这个专栏希望带大家一起进步。 话不多说&#xff0c;开始正题。 一、C语言的一段小历史 C语言的设计要追溯到20世纪60年代末和70年代初&#xff0c;在那个时代美国有这么一号人叫做丹尼斯.里奇&#xff0c;他和同事肯.汤普逊…