当前位置:首页 > 公众号精选 > 硅农亚历山大
[导读]PWM(脉冲宽度调制)可用于电机的调速、LED的亮度调节、无源蜂鸣器输出音调等,是嵌入式系统开发中经常采用的方法。本期内容以一个用无源蜂鸣器播放音乐的例子,带领大家了解使用定时器PWM输出功能的方法。系统环境Windows 10-64bit软件平台NucleiStudioIDE2...

PWM(脉冲宽度调制)可用于电机的调速、LED的亮度调节、无源蜂鸣器输出音调等,是嵌入式系统开发中经常采用的方法。本期内容以一个用无源蜂鸣器播放音乐的例子,带领大家了解使用定时器PWM输出功能的方法。



系统环境


Windows 10-64bit



软件平台


NucleiStudio IDE 202102版


或 PlatformIO IDE



硬件需求


RV-STAR开发板


无源蜂鸣器

脉冲宽度调制





脉冲宽度调制(Pulse Width Modulation,PWM)是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术。


PWM的控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率。其中,一个周期内脉冲时间占总时间的比值称为占空比


简言之,如果你想让电机的速度变慢或者控制的LED变暗,只需降低PWM的占空比,这使得原本需要控制模拟电压或电流才能达到的效果,通过数字方式也能够实现,这样可以大幅度降低系统的成本和功耗。





无源蜂鸣器



无源蜂鸣器是很常见的一个电子元件,相信读者朋友们都见过可以播放生日歌的电子蜡烛,那个就是靠无源蜂鸣器来播放的。无源蜂鸣器的内部不带振荡源,通过使用50%占空比、频率500Hz~4.5kHz的PWM驱动,就可以播放出不同音调的声音。






GD32VF103的定时器



GD32VF103的定时器分为三种类型,分别是基本定时器、通用定时器和高级定时器,其中普通定时器和高级定时器都支持PWM输出功能,在本次的实验中使用TIMER2(普通定时器)来进行PWM输出实验。

实验部分



首先通过NucleiStudio或者PlatformIO等开发工具创建工程,然后在工程目录中添加“tone.h”和“main.c”文件,然后开始进行代码的编写。


首先,我们要为蜂鸣器发出的不同音调所需要的频率进行预先的定义,以下的经调音测试后的D调的不同音符所对应的频率,直接复制到“tone.h”中即可:


#define NTD0 -1
#define NTD1 293
#define NTD2 329
#define NTD3 368
#define NTD4 390
#define NTD5 438
#define NTD6 492
#define NTD7 554

#define NTDL1 147
#define NTDL2 166
#define NTDL3 185
#define NTDL4 196
#define NTDL5 221
#define NTDL6 248
#define NTDL7 278

#define NTDH1 585
#define NTDH2 657
#define NTDH3 700
#define NTDH4 781
#define NTDH5 882
#define NTDH6 990
#define NTDH7 1112



然后,在“main.c”中,我们要实现三个函数:


  • buzzer_init() -- 初始化蜂鸣器
  • buzzer_on(int freq) -- 蜂鸣器根据频率发声
  • buzzer_off() -- 关闭蜂鸣器
下面依次进行讲解,首先是buzzer_init(),我们使用的是PB1引脚,它对应着TIMER2的CH3通道,要依次使能端口时钟、复用时钟、定时器时钟,然后把引脚初始化为推挽输出模式。
void buzzer_init()
{
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_AF);
rcu_periph_clock_enable(RCU_TIMER2);

gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
}



然后是buzzer_on(int freq),它接收不同的频率参数,对定时器进行配置,输出50%占空比的不同频率的PWM波,进而控制蜂鸣器发声。实现方法参考下方代码,其中要注意的是预分频系数、周期以及PWM输出的占空比等几个参数的配置。


void buzzer_on(int freq)
{
timer_oc_parameter_struct timer_ocinitpara;
timer_parameter_struct timer_initpara;
timer_deinit(TIMER2);
/* initialize TIMER init parameter struct */
timer_struct_para_init(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

开关电源LLC是一种高效的电源转换技术,被广泛应用于各种电子设备中。它结合了谐振电路和PWM(脉宽调制)控制的优点,实现了高效率和低电磁干扰的性能。本文将详细阐述开关电源LLC的原理,包括其工作原理、控制策略以及应用优势...

关键字: 开关电源 LLC PWM

开关电源是一种高频化电能转换装置,是电源供应器的一种。其功能是将一个位准的电压,透过不同形式的架构转换为用户端所需求的电压或电流。

关键字: 开关电源 PWM

业内消息,近日半导体巨头意法半导体(ST)官宣将进行重组,该公司将从三个产品部门(ADG、MDG和AMS)过渡到两个产品部门(APMS和MDRF),且ST前汽车和分立产品集团总裁Marco·Monti也将离开公司。

关键字: 意法半导体 ST

时间来到2023年,ST在中国召开了其首届传感器大会,支持本地端的AI计算的智能传感器成为了本次大会的焦点。在开幕演讲上,意法半导体副总裁·中国区总经理曹志平表示,我们的生活经历了从off-line到on-line的变革...

关键字: 传感器 AI ST 可持续 MEMS ISPU

MCU(微控制单元)俗称单片机,可被认为是CPU的缩减版本,把CPU的频率与规格进行缩减处理,并将RAM、ROM、时钟、A/D转换、定时/计数器、UART 、DMA等电路单元,甚至包括USB接口、LCD驱动电路都整合在一...

关键字: 入门级mcu ST

推广五星零碳工厂成功经验 积极响应"双碳"目标  上海2023年9月21日 /美通社/ -- 全球电源管理、散热解决方案暨自动化厂商台达以"台达零碳工厂"为主...

关键字: BSP 可持续发展 微电网 ST

北京2023年9月19日 /美通社/ -- 科技创新与数字化服务领域极具影响力的年度盛会——STIF2023第四届国际科创节暨DSC2023国际数字服务大会(数服会)火热筹备。活动定于12月15日在北京举行,主题为:数实...

关键字: DSC TI ST 数字化

由南卡罗来纳州州长亨利·麦克马斯特(Henry McMaster)阁下揭幕  投资5600万美元  承诺推动美国乡村宽带建设并...

关键字: 光纤 电缆 ST BSP

厦门2023年9月15日 /美通社/ -- Greenpath是美国一家提供全方位综合服务的回收商、加工商和制造商,已有25年的历史,在加利福尼亚州、内华达州和德克萨斯州均设有分公司。Greenpath拥有处理各种物料的...

关键字: GREEN ST 金属 OS

北京2023年9月13日 /美通社/ -- 当前,“百模大战”带来了算力需求的爆发,AI芯片产业也迎来巨大机遇,“创新架构+开源生态”正在激发多元AI算力产品百花齐放。面对新的产业机会,AI算力产业链亟需通过上下游协作共...

关键字: 模型 TE ST AN
关闭