1.项目简介
随着嵌入式技术的快速发展,特别是在音频处理领域的广泛应用,基于ARM的音乐盒项目应运而生。本项目旨在设计一款基于ARM架构的建议音乐盒,结合嵌入式系统的特点,实现音乐的存储、播放、以及,以此对嵌入式的操作有个简单的了解。基于此项所设计的预期目标为:预存多首歌曲,实现循环播放,歌曲的节拍,声调准确。
2.项目原理
蜂鸣器音乐盒主要由STM32F429微控制器、蜂鸣器、电源模块以及必要的电路组成。STM32F429微控制器作为核心,负责控制蜂鸣器发出不同的声音,实现音乐播放的功能。因此需要将蜂鸣器的一个引脚连接到STM32F429微控制器的某个GPIO引脚上。蜂鸣器是一种将电能转换为声能的电子器件。其工作原理主要基于压电效应或电磁效应。在本项目中,我们使用的是无源蜂鸣器。为了播放一首完整的歌曲,我们需要将歌曲的音符序列转换为PWM的占空比序列,并在程序中实现这个序列的播放。
3.部件介绍
3.1硬件部分
3.1.1 无源蜂鸣器
无源蜂鸣器(Passive Buzzer)是一种利用电磁感应现象发声的装置,它不具备独立发声的能力,需要外部电路提供频率信号才能发声。无源蜂鸣器的工作原理与扬声器相似,通过音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥来推动振膜发声。无源蜂鸣器的工作原理基于电磁感应。当外部电路为音圈提供交变电流时,音圈内的电磁铁会产生变化的磁场,这个磁场与永磁铁的磁场相互作用,使电磁铁与永磁铁相吸或相斥,从而推动振膜产生振动,进而发出声音。由于需要外部电路提供频率信号,无源蜂鸣器无法直接发声,其发声的频率和音调取决于外部电路提供的频率信号。是项目重要的发声装置
3.1.2 ARM嵌入式开发板F429野火
开发板F429野火是一款基于STM32F429IGT6微控制器的高性能开发板,具有丰富的硬件资源和强大的处理能力搭载高性能的ARM Cortex-M4 32位RISC内核,工作频率高达180MHz,支持浮点单元(FPU)单精度,配备1024KB的FLASH和256KB的RAM,支持高速数据存取和程序存储。拥有众多常用外设包括RGB灯,按键,USB转串口、SD卡接口、以太网接口、LCD接口,等多种用于开发的功能配件。支持MDK4、MDK5和IAR等主流开发环境,同时支持GCC开发环境,为开发者提供多样化的开发工具选择。提供完善的板级支持包(BSP),包含驱动、示例代码等,降低开发难度,提高开发效率。是本次项目的主体硬件。
3.2软件部分
3.2.1 keil5
Keil µVision 5是一款广泛应用于嵌入式系统开发的集成开发环境(IDE),由德国公司Keil Software开发。它专为基于ARM架构的嵌入式系统提供了一套完整的开发工具链,帮助开发者高效地进行软件开发、调试和优化。Keil5提供了一个完整的集成开发环境,包括代码编辑器、编译器、调试器和仿真器等组件,方便开发者进行统一的开发和管理,支持多种编程语言,如C、C++和汇编语言,满足不同开发者的需求。keil5具有强大的调试功能,包括单步执行、断点调试、变量监视等,帮助开发者快速定位和解决问题。Keil5集成了ARM公司的编译器,支持多种微控制器架构的编译和优化,确保代码的高效执行。是本项目中必要的编程软件。
4.具体实现
4.1硬件方面
首先要准备好上述所需的所有部件。由于需要使蜂鸣器接收到音乐信号与电源,因此必须使用杜邦线将蜂鸣器与开发板进行连接。
在开发板中间芯片的两侧竖着两排管脚,旁边标明这些管脚的名称。需要找到与蜂鸣器三个管脚相适配的管脚进行连接,蜂鸣器的VCC管脚接到开发板上的VCC管脚上,蜂鸣器GND管脚也要接到开发板的GND管脚上。蜂鸣器的I/O口是开发板传送信号的“通道”因此需要将其接到开发板设置产生了PWM波形的管脚。
4.2软件方面
准备好编写ARM代码的Keil5软件。导入F429的嵌入式开发包,建好主程序,进行开发环境的搭建,写好主函数,接着进行管脚初始化。
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相关的GPIO外设时钟*/
RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA, ENABLE);
/* 定时器通道引脚复用 */
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_TIM2);
/* 定时器通道引脚配置 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
由于要让STM32按照简谱输入对应频率的PWM波由此使管脚产生波长驱动蜂鸣器进行歌曲播放,由此需要进行对PA5管脚的初始化,还要对定时器进行初始化,由频率与重装载计数值的关系,由定时器配置代码可知,定时器的预分频为90,定时器的时钟源为90Mhz,经过90分频后定时器的时钟频率为1MHz,由T=1/f可得,计数器CNT每增加1的时间T1 = 1/1000000 (s).以产生1KHz的PWM为例,其周期T2 = 1/1000(s),那么重装载计数值应为T2/T1,化简后为1000000/1000,也就是定时器的时钟频率除以要产生的PWM波的频率。因此对频率进行调整。
void PWM_SetFrequency(uint32_t rate)
{
uint32_t temp =0;
if(rate == 0)
temp = 0;
else
temp= 1*1000000/rate;
TIM_SetCounter(TIM2,0);
TIM_SetAutoreload(TIM2, temp);
TIM_SetCompare1(TIM2,temp/2);
设置完管脚,频率,定时器便可以在根据下图进行音调的定义编写。
接着再在编写歌曲的状态。调整好后便完成了八音盒的制作。
5.测试结果
在进行完软件与硬件的数项操作后,对开发板通电下载程序后蜂鸣器可以发出平稳,不间断的录入的音乐。至此F429嵌入式音乐盒制作完成