搜索
您的当前位置:首页正文

基于STM32的PWM音乐播放器应用设计_马志强

来源:二三娱乐


基于S音乐播放器应用设计 TM32的 PWM

马志强,王建刚,孙少林,胡明

(总参谋部通信训练基地 ,宣 化 075100)

,。 摘要:基于3的 利 用 产生的音频信号驱动蜂鸣器演奏乐曲 实现了音乐播放器的应用设计 该 2位 STM32F103,PWM ,。 ,播放器能实现从低音到高音的 音 阶 并能根据乐谱演奏完整的曲目 测 试 结 果 表 明 输 出 信 号 与 各 音 阶 21个 PWM 的 ,、,。 对应的声音频率基本一致 方 案切实可行。 这一方法也可用于电机控制 电子琴设计等方面 具有较好的实用性 :;;关键词 蜂 鸣器 定 时器 音 乐 STM32;PWM;::A 中图分类号 文献标识码 TP273

AlicationDesinofPWM MusicPlaerBasedonSTM32 ppgy

,W,,MaZhiiananiananSunShaolinHu MinqggJggg

(,) CommunicationTraininaseofPLA GeneralStaffHeaduartersXuanhua075100,ChinagBq

:,AbstractBasedon32bitSTM32F103,usinudiosinalsproducedbtodriveabuzzertoplamusica musicplaerisdei-gagyPWM y y- sgned.Theplaercanrealize21scalesfrombasstotrebleandplaomletesonsaccordinomusicscores.Testresultsshowthat theyycpggt,oututsinalsofPWM areconsistentwiththecorresondinoicefreuencfthescalesandtheschemeisfeasible.Thismethod canalpgpgvqyo,,sobeusedinmotorcontrolkeboarddesinandsoonshowinoodpracticalit. ygggy:;;mKeordsSTM32;PWM;buzzertimerusic yw

,在科研项目开发 中 有 时会遇到需要播放电话铃声、 ,音乐等情况。 简单的做法是购买专用音乐芯片 但 该方法 ,。 的缺点是播放的内容 不 可 变 不能很好地满足项目需求

[1-3],,一般地 可 采用8其 播放 9C51等单片机实现音乐播放

,器上就可发出该频率的声音。 若想改变音阶 只 需要改变

,半周期时间即可。 表1为 据 此可 C调时音符频率对照表 ,产生不同音阶的音符。“#”表 示半音 用 于上升或下降半 ,,个音 乘 以2就提升该 声 音 一 个 度 音 阶 减 半 则 降 一 个 8 8度。

表 1 C 调时音符频率对照表

,。 内容及歌曲数量都可以随时修改 使用上相对方便 随着 ,列微处 理 器 的 出 现 其 基 于 ARM STM32系 Cortex-M 内 ,,核的 位闪存微控制器 高 达 主 频 高 集 成 32 72 MHz的 、、、、度 实 时性 数 字信号处 理 低 功 耗 低电压操作等众多特 ,点 使 得其应用越来越广泛。 本 文 基 于 处 理 器, STM32 ,根据乐曲简谱制作供程序识别的乐谱 并 利用内部定时器 ,产生 输 出 信 号 驱动蜂鸣器完成自定义乐谱的播 PWM ,放。 经测试 播 放效果良好。

音符 1 2 3 4 5 6 低 音/Hz 262 294 330 349 392 440 494 中 音/Hz 523 578 659 698 784 880 988 高 音/Hz 1046 1175 1318 1397 1568 1760 1976 1 乐谱简析

7 1.1 音阶

,主 音阶是音 乐必不可少的要素 要 由声音的频率决 ,定。 通过给蜂鸣器不同频率的音频脉冲 可 以产生不同的 ,,最简单的办法是算出 音阶 而 要产生某频率 的 音 频 脉 冲 ,该音频的周期 然 后将 此 周 期 除 以 即为半周期的时间。 2 “高 ”、通过程序控制单片机某 引 脚 半 周 期 为 半 周 期 为 “”,,即可产生该频率的矩形波 ,低不 断交替变换 接 到蜂鸣

1.2 节拍

,,,若要构成音乐 光有音阶是不够的 还 需要节拍 也 就

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

敬请登录网站在线投稿

2012 年第11 期

63

乐曲。

,割。 设置计数溢出大 小 为 即 每 计 个 数 就 产 19992000

[4]

2 STM32中的定时器

,/。 生一个更新事件 输 出频率 为 代 码 2kHz2000=1 Hz

如下:

(){ TvoidTIMER_ConfiIM_TimeBaseInitTeDefTIM_TimeBagyp

; seStructure……

//预 分频系数

TIM_TimeBaseStructure.TIM_Prescaler=36000-1; //设 置时钟分割

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_ DIV1;

//设置计数溢出大小

TIM_TimeBaseStructure.TIM_Period = 2000-1; ……

//将 配置应用到 中 TIM3

(); TIM_TimeBaseInitTIM3,&TIM_TimeBaseStructure}

,,音阶的产生与声音 频 率 有 关 为了实现不同音阶 必

,须能为蜂鸣器 提 供不同频率的脉冲。 为 此 选 择 STM32 ,,芯片 利用其自带的定时器 通 过 生 脉 冲 信 号。 PWM 产 ,一共 有 个 定 时 器 包 含 个高级控制定时 STM32中 11 2

、、,器 普通定时器 个 基 本 定 时 器 以 及 个 看 门 狗 定 4个 2 2 ,时器 和 个 系 统 滴 答 定 时 器 S其 中 和 T1 sTick。 TIM1 y,高级定时器 时 钟由 输出产生。TIM8是 APB2的 IM2~ T,,普通定时器 和 是 基 本 定 时 器 这 IM5是 TIM6 TIM7 6 个定时器的时钟由 输出产生。 APB1的

2.1 定时时长的计算

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

2.1.1 系统时钟设置

,必须先确保系统时钟的 设置是 要保证定时的准确性 我们所预期的。 定时器时钟分配如图 所 示。 通 过 编 程 1 ,使 为 预 分 频 后 得 到 为 SYSCLK 72 MHzAPB1 PCLK1

,再 经 T倍 频 器 得 到 T36 MHzIM2TIM7 IM2TIM7 ~~(),时钟72 时 钟 源 多 采 用 H外 部 时 钟 源 对 于 MHz。 SE

,,其 外部 时 钟 为 而 外 部 STM32F1038 MHzSTM32F107 ,,,时钟为25 因 此 在 使用 H做时钟源时 这 两种器 MHzSE

,件产 生 的分频和倍频方式不同 需 要 使 用 者 引 SYSCLK 起注意。

输出 2.2 STM32的 PWM

(,)脉冲宽度调 制 是 利 Pulse Width ModulationPWM用微处理器的数字输出来对模拟电 路进行控制的一种非 ,,常有效的技术 简 而言 之 就 是实现对输出信号脉冲宽度

,的控制 一 般用 来 控制步进电机等。STM32 的 定 时 器 除 ,其他的定时器都可以用来产生 了 TIM6和 TIM7 之 外 ,,输出 其 中 高 级定时 器 和 能 够 产 生 PWM TIM1 TIM8 3 ,而 对 互补 输 出 也 能 同 时 产 生 路 PWM TIM2TIM5 4 ~的 PWM 输出。

输出引脚 2.2.1 PWM

,不同的定时器分配了不同的输出引脚 考 STM32给

,“”虑到引脚复 用 功 能 还 提 出 了 一 个 重 映 像 的 概 STM32 ,,念 就是通过设置 某一 些 相 关 的 寄 存 器 使得在其他非原

,始指定的引脚上也能输出 波形 但 是这种重映像不 PWM ,[。 ,是随意的 使 用方法可参 照 参 考 文 献 例 如 的 1]TIM3 ,通道2,在 没有重映像的时候 指 定 的 引 脚 是 如 果 PA7。 ,;设置部分重映像之后 输 出 就 被 映 像 到 上 了 如 果 设 PB5 ,。 置完全重映像的话 输出就被映像到 PC7上

2.2.2 占空比的计算

图 1 定时器时钟分配图

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

比值。

IM_Pulse 占空比 = T() 00% 1TIM_ Peiod+1 ( r)×1

_,若想得到占空比50% ,当 为时 则 TIMPeriod1999_()/。 应 设 置 为 具 体 设 置 TIMPulse 1999+12=1000

如下:

(){ voidPWM_Config

2.1.2 定时器相关参数设置

定时器的 参 数 由 结 构 体 义, TimeBaseInitTeDef定 yp、、、主要包括预分频系数 时 钟分割 计 数器模式 计 数溢出大

,小等。 例如 要 由 定 时器3)产生一个时长为1s的 TIM3(,,,定时 首 先 应进行系统时钟的设置 得 到 TIM3CLK=72 ,。 ,然后进行定时器设置 其中 预 分频系数 为3MHz5999,

,/,此时 时 钟 为 无 时 钟 分 TIM3 72 MHz36000=2kHz

64

Microcontrollers & EmbeddedSstems y2012 年第11 期 www.mesnet.com.cn

; TIM_OCInitTeDefTimOCInitStructureyp3.2.2 主程序设计

……

//设 置占空比

TimOCInitStructure.TIM_Pulse =1000; ……

//设 置 TIM3 的 PWM

输出为使能 TIM_CtrlPWMOutputs(TIM3,ENABLE); }

3 用 PWM

控制蜂鸣器播放音乐 3.1 硬件电路设计

蜂鸣 器 电 路 如 图 2 所 示。 需要 注 意 的 是 ,有 源 蜂 鸣 器 是 以固 定 频 率 工 作 ,加 电 即 可 鸣 叫 ,无 源 蜂 鸣器可以用不同频 率输入信号来控制发声 ,因 此, 需要选 择 无 源 蜂 鸣 器。 核 心 控

图 2 蜂鸣器电路

制器 件 选 择 STM32F103VET6,其 引 脚 PB5 连 接 到

BEEP。 由电路可知 ,当 PB5

为 高 电 平 时 ,蜂 鸣 器 可 工 作, 只要控制 PB5高 低电平输出形成的矩形波的频率就可以 控制蜂鸣器演奏音乐。

3.2 程序设计

3.2.1 制作乐谱

音阶的产生依 赖 于 PWM 输出信号的频率。 为 了 简 化设计 ,我 们令定时 器 的 TIM_Period为 1999,且 占 空 比 始终为 50% ,根 据 式 (1)则 TIM _Pulse 为 1000。 此 时, PWM 输出信号频率仅与定时器预分频系数 TIM_Pres- caler

有 关 ,只 需 要 调 整 该 系 数 ,即 可得到所需信号频率。 TIM_Prescaler

由 下式得到:

TIM_Prescaler= 72 MHz -1

(2) (TIM_Period+1)×fsound 式(2)中 ,fsound为

音阶对应的频率 ,如 低 音 Do频 率 为 262 Hz。 要产生该音频 ,TIM_Prescaler应 为136。

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

的倍数。 相关代码如下: #d

efineStdBeat125 //1/4 节拍 =125ms /* 定义音阶(预 分频系数)*/ #d

efinelow_1136 //低 音 Do #definelow_2121 //低 音 Re ……

#definehig

h_717 //高 音 Xi /* 定义乐谱(两 只老虎)*/ u16 music[]={mid_1,4,mid_2,4,mid_3,4,mid_1,4,mid_1,4, mid_2,4,mid_3,4,mid_1,4,mid_3,4,mid_4,4,mid_5,8,

…}; 敬请登录网站在线投稿

程序流程如 图 3 所 示。 由 于 STM32 的 PWM 输 出 引 脚 是

PB5,所 以我们采用 TIM3的 通道 2 来 产 生 PWM 输 出。 在 GPIO

设置 程 序 中 ,将 TIM3 的 通 道 2 引脚部分重映像到 PB5,GPIO 模

式选择为复用推挽输出。 程 序 循 环读取 乐 谱 ,根 据 音 阶 修 改 定 时

器的预 分 频 系 数 ,并 重 新 设 置 定 时 器 和 PWM。 同 时, 利 用 STM32的 内部SysTick进 行精确 计时 ,根 据 节 拍 实 现 ms级 延 时,

并减少内核消耗。 图 图 4

为 示 波 器 3 主程序流程图

测量得到的低音 So的 PWM 输出波形。 根据表1,该 波形 频率应 为 392 Hz,实 测 为 391.549 Hz,可 见 本 方 案 的 PWM 输出误差较小。

图 4 PWM 输出波形

结 语

STM32 既可以搭载 / ,

也可以作为单片机使用 , μ

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

参考文献

[1]远 飞.基于单片机的音乐播放器的仿真与制作 [J].电

子 元 器件应用 ,2010,12(12):47-49. [2]王 建平 ,焦 国太 ,陈 亚 星.数字音乐盒设计 [J].机 械 ,2011,

38(4):65-67. [3]马 巍.单片机制作音乐盒[J].职 业 ,2011(29):164-165. [4]意法半导体(中国)投资有限公司.STM32F10xxx参考手册,2010.

马志强(高级讲师),主要研究方向为无线通信、嵌入式系统和自动控制。

(责 任编辑 :梅 栾芳 收稿日期 :2012-07-09) 2012 年第11 期

65

因篇幅问题不能全部显示,请点此查看更多更全内容

Top