当前位置:首页 > 单片机 > 单片机
[导读] 基于32位的STM32F103,利用PWM产生的音频信号驱动蜂鸣器演奏乐曲,实现了音乐播放器的应用设计。该播放器能实现从低音到高音的21个音阶,并能根据乐谱演奏完整的曲目。测试结果表明,PWM的输出信号与

基于32位的STM32F103,利用PWM产生的音频信号驱动蜂鸣器演奏乐曲,实现了音乐播放器的应用设计。该播放器能实现从低音到高音的21个音阶,并能根据乐谱演奏完整的曲目。测试结果表明,PWM的输出信号与各音阶对应的声音频率基本一致,方案切实可行。这一方法也可用于电机控制、电子琴设计等方面,具有较好的实用性。

在科研项目开发中,有时会遇到需要播放电话铃声、音乐等情况。简单的做法是购买专用音乐芯片,但该方法的缺点是播放的内容不可变,不能很好地满足项目需求。一般地,可采用89C51等单片机实现音乐播放,其播放内容及歌曲数量都可以随时修改,使用上相对方便。随着STM32系列微处理器的出现,其基于ARM Cortex—M内核的32位闪存微控制器,高达72 MHz的主频,高集成度、实时性、数字信号处理、低功耗、低电压操作等众多特点,使得其应用越来越广泛。本文基于STM32处理器,根据乐曲简谱制作供程序识别的乐谱,并利用内部定时器产生PWM输出信号,驱动蜂鸣器完成自定义乐谱的播放。经测试,播放效果良好。

1 乐谱简析
1.1 音阶
音阶是音乐必不可少的要素,主要由声音的频率决定。通过给蜂鸣器不同频率的音频脉冲,可以产生不同的音阶,而要产生某频率的音频脉冲,最简单的办法是算出该音频的周期,然后将此周期除以2即为半周期的时间。通过程序控制单片机某引脚半周期为“高”、半周期为“低”,不断交替变换,即可产生该频率的矩形波,接到蜂鸣器上就可发出该频率的声音。若想改变音阶,只需要改变半周期时间即可。表1为C调时音符频率对照表,据此可产生不同音阶的音符。“#”表示半音,用于上升或下降半个音,乘以2就提升该声音一个8度音阶,减半则降一个8度。

1.2 节拍

若要构成音乐,光有音阶是不够的,还需要节拍,也就是音符持续时间的长短,一般用拍数表示。至于1拍是多少秒,没有严格的规定,只要节拍适宜,声音悦耳即可。假如某首歌曲的节奏是每分钟120拍,那么1拍为0.5 s,1/4拍为0.125 s,以此类推可得到其他节拍对应的时长。这样,利用不同的频率,加上与拍数对应的延时,就构成了乐曲。

2 STM32中的定时器

音阶的产生与声音频率有关,为了实现不同音阶,必须能为蜂鸣器提供不同频率的脉冲。为此,选择STM32芯片,利用其自带的定时器,通过PWM产生脉冲信号。STM32中一共有11个定时器,包含2个高级控制定时器、4个普通定时器、2个基本定时器,以及2个看门狗定时器和1个系统滴答定时器SysTiek。其中,TIM1和TIM8是高级定时器,时钟由APB2的输出产生。TIM2~TIM5是普通定时器,TIM6和TIM7是基本定时器,这6个定时器的时钟由APB1的输出产生。

2.1 定时时长的计算

定时器的一个主要功能就是到指定时间就会产生一个溢出事件,这个时间的设置与定时器时钟有关,在定时器时钟基础上进行预分频,设置计数溢出大小即可。


2.1.1 系统时钟设置

要保证定时的准确性,必须先确保系统时钟的设置是我们所预期的。定时器时钟分配如图1所示。通过编程使SYSCLK为72 MHz,APB1预分频后得到PCLK1为36 MHz,再经TIM2~TIM7倍频器得到TIM2~TIM7时钟72 MHz。时钟源多采用HSE(外部时钟源),对于STM32F103,其外部时钟为8 MHz,而STM32F107外部时钟为25 MHz,因此,在使用HSE做时钟源时,这两种器件产生SYSCLK的分频和倍频方式不同,需要使用者引起注意。

2.1.2 定时器相关参数设置

定时器的参数由结构体TimeBaselnitTypeDef定义,主要包括预分频系数、时钟分割、计数器模式、计数溢出大小等。例如,要由TIM3(定时器3)产生一个时长为1 s的定时,首先,应进行系统时钟的设置,得到TIM3CLK=72MHz,然后进行定时器设置。其中,预分频系数为35 999,此时,TIM3时钟为72 MHz/36 000=2 kHz,无时钟分割。设置计数溢出大小为1 999,即每计2 000个数就产生一个更新事件,输出频率为2 kHz/2 000=1 Hz。代码如下:

2.2 STM32的PWM输出

脉冲宽度调制(Pulse Width Modulation,PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,简而言之,就是实现对输出信号脉冲宽度的控制,一般用来控制步进电机等。STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中,高级定时器TIM1和TIM8能够产生3对PWM互补输出,而TIM2~TIM5也能同时产生4路的PWM输出。

2.2.1 PWM输出引脚

STM32给不同的定时器分配了不同的输出引脚,考虑到引脚复用功能,STM32还提出了一个“重映像”的概念,就是通过设置某一些相关的寄存器,使得在其他非原始指定的引脚上也能输出PWM波形,但是这种重映像不是随意的,使用方法可参照参考文献。例如,TIM3的通道2,在没有重映像的时候,指定的引脚是PA7。如果设置部分重映像之后,输出就被映像到PB5上了;如果设置完全重映像的话,输出就被映像到PC7上。

2.2.2 占空比的计算

占空比(Duty Ratio)有如下含义:在一串理想的脉冲周期序列(如方波)中,正脉冲的持续时间与脉冲总周期的比值。


当TIM_Period为1 999时,若想得到占空比50%,则TIM_Pulse应设置为(1999+1)/2=1000。具体设置如下:

3 用PWM控制蜂鸣器播放音乐

3.1 硬件电路设计

蜂鸣器电路如图2所示。需要注意的是,有源蜂鸣器是以固定频率工作,加电即可鸣叫,无源蜂鸣器可以用不同频率输入信号来控制发声,因此,需要选择无源蜂鸣器。核心控制器件选择STM32F103VET6,其引脚PB5连接到BEEP。由电路可知,当PB5为高电平时,蜂鸣器可工作,只要控制PB5高低电平输出形成的矩形波的频率就可以控制蜂鸣器演奏音乐。

3.2 程序设计

3.2.1 制作乐谱

音阶的产生依赖于PWM输出信号的频率。为了简化设计,我们令定时器的TIM_Period为1 999,且占空比始终为50%,根据式(1)则TIM_ Pulse为1000。此时,PWM输出信号频率仅与定时器预分频系数TIM_Prescaler有关,只需要调整该系数,即可得到所需信号频率。

TIM_Prescaler由下式得到:

式(2)中,fsound为音阶对应的频率,如低音Do频率为262 Hz。要产生该音频,TIM_Prescaler应为136。

乐谱由音阶和节拍组成,每两个元素为一组,前者表示音阶,后者表示节拍。节拍以1/4拍为基准,存放的数值为1/4拍的倍数。相关代码如下:


3.2.2 主程序设计

程序流程如图3所示。由于STM32的PWM输出引脚是PB5,所以我们采用TIM3的通道2来产生PWM输出。在GPIO设置程序中,将TIM3的通道2引脚部分重映像到PB5,GPIO模式选择为复用推挽输出。程序循环读取乐谱,根据音阶修改定时器的预分频系数,并重新设置定时器和PWM。同时,利用STM32的内部SysTICk进行精确计时,根据节拍实现ms级延时,并减少内核消耗。图4为示波器测量得到的低音So的PWM输出波形。根据表1,该波形频率应为392Hz,实测为391.549 Hz,可见本方案的PWM输出误差较小。


结语

STM32既可以搭载μC/OS,也可以作为单片机使用,是一款性价比较高的处理器。本文利用STM32的定时器,产生PWM音频脉冲波形,实现了音乐播放功能。这种方法可用于电机控制、电子琴以及无线报务中的电子键设计等,具有较高的实用价值。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭