APP下载

基于FPGA红外遥控乐曲播放器设计

2019-09-10赖义汉卢彬锋王宇松

赤峰学院学报·自然科学版 2019年2期
关键词:播放器乐曲

赖义汉 卢彬锋 王宇松

摘要:本文介绍了乐曲播放的基本原理及基于FPGA芯片乐曲播放器系统的组成,分析了红外遥控器的工作原理及红外遥控接收解码器、按键消抖的有限状态机设计方法,系统以FPGA内部嵌入式存储块作为乐曲存储器,能够动态显示乐曲的音符,通过SignalTap II逻辑分析仪进行在线仿真和硬件测试,系统控制稳定,音质效果好,外围电路简单.

关键词:FPGA;红外遥控;乐曲;播放器

中图分类号:TN912.2  文献标识码:A  文章编号:1673-260X(2019)02-0068-04

1 引言

传统的音乐播放器主要以单片机为主控制芯片[1-2],由芯片中的定时器来产生乐曲的音调及音调的持续时间,从而实现乐曲的连续演奏.由于单片机运行速度及内部存储容量有限,其音调频率的精度及乐曲的存储数量会受到一定的限制[3].而FPGA芯片内部含有丰富的逻辑阵列、嵌入式存储器块、PLL锁相环等硬件资源,以FPGA芯片为控制芯片,以Verilog硬件描述语言来设计乐曲的播放器,具有低功耗、外围电路简单,速度快、功能可扩展等特点.乐曲播放器具有上一首、下一首、播放/暂停、自动/手动和红外遥控等多种控制模式,能够动态显示音符等功能.

2 系统总体结构

系统主要由FPGA核心模块及系统时钟、按键模块、红外一体接收电路,音乐放大电路等外围电路组成.系统总体框图如图1所示.其中系统时钟频率为50MHz, FPGA采用Altera公司的Cyclone IV系列的EP4C4E10F174CN芯片,FPGA核心模块包含按键消抖模块、分频器模块、乐曲播放模块、乐谱存储及动态音符驱动模块等.

3 系统各模块的FPGA实现

3.1 乐曲演奏的基本原理

声音的频谱范围为20Hz~20KHz范围,乐曲主要由音调(音符的频率值)和音长(持续时间)两个基本数据组成,即只要控制输出信号的频率高低及持续的时间就可以使扬声器发出连续的乐曲声.根据音乐的十二平均率規定[4]:每两个八度之间的频率相差一倍,在两个八度音之间,又可分为12个半音,每两个半音的频率比为■,如音名A(简谱中的低音6)的频率为440Hz,音名B到C之间、E到F之间为半音,其余为全音,由此可以计算出简谱中从低音1到高音7之间每个音名对应的频率,乐曲就是由一连串的音符组成的,按照乐曲的乐谱依次输出这些音符所对应音调的频率,就可以在扬声器上连续发出各个音符的音调,因此,要演奏一首音乐,关键是控制乐曲中的音符的发生频率及乐曲的节拍的.由于每两个音的音频比值(高音比低音)正好是2或是2n,因此,对于所有八度关系的乐音除了音高上的差异外,本质上听起来不会任何区别.

3.2 乐曲播放控制模块实现

准确获取音符的发音频率及持续的时间是乐曲无失真演奏的重要因素,为产生乐谱中不同的音符的频率,系统采用预置数分频法对基准时钟信号进行分频,预置数不同,其计数值不同分频数也不同,就能得到不同的频率值.由于音阶频率多为非整数,分频后会存在或多或少的误差,一般采用四舍五入法.本设计以6MHz的时钟信号为基准频率,通过设置不同的初值使分频器产生各种音符频率.如要产生低音的“1”,则分频数为6MHz/216.6Hz≈22935.8,即分频数约为22936,为提高信号的驱动能力,使音调的频率输出占空比为50%,则分频数为22936/2=11468,其他音符以此类推,本设计以C调为例,各音阶频率、分频数、音符编码之间关系如表1所示.

音长即音乐的节拍,也就是音调持续的时间,以2/4节拍为例,如果每个小节持续的时间为1s,则每拍的演奏时间为0.5s,为提高驱动能力及节拍精度,系统由占空比为50%的4Hz的时钟来产生节拍信号,即每一个半节拍为0.25s.

3.3 基准时钟的产生

基准时钟是产生乐曲音调的基础,根据设计要求,需要得到音调所需的6MHz基准时钟和节拍所需的4Hz信号,为提高时钟的精度,采用FPGA内部集成的嵌入式锁相环PLL来实现,锁相环可以与输入的系统时钟信号同步,并以其作为参考信号实现锁相,从而可以输出一个或多个同步倍频或分频的片内时钟,得到高精度的频率,以供逻辑系统使用,与直接来自外部的时钟相比,这种片内时钟会减少时钟的延时和时钟信号的变形,减少干扰,能很好地保证系统稳定高速可靠工作.通过设置ALTPLL模块的分频数,由50MHz系统时钟得到6MHz和4MHz的频率,再由4MHz的频率再经过分频得到占空比为50%的4Hz的节拍时钟信号.从而保证基准时钟的稳定性和准确性.

3.4 乐曲的定制及动态音符的显示

为提高乐曲的直观性和可读性,乐曲中用变量q[11:0]表示音名,其中高4位q[11:8]表示高音的■:■,q[7:4]表示中音的1~7,q[3:0]表示低音的■:■,其编码方式如表1所示.通过定制FPGA中LPM- ROM存储音乐数据,通过改变ROM的地址就可以输出不同的音符编码,通过查表可得到不同的分频预置数,从而得到不同的音调频率,通过控制地址产生的频率就可以控制乐符输出的节拍,以纯硬件的方法来实现乐曲的演奏效果.若要实现其他乐曲的演奏,只要修改LPM-ROM所存储的音乐数据,再重新定制LPM-ROM,就可以实现其他乐曲的演奏.为使演奏能循环进,需另外设计置一节拍时长计数器,保证演奏完后又重新开始,或跳到下一首的乐曲的首地址.

LPM-ROM中存储的是乐曲音符的编码,由3位的BCD码组成,分别表示不同音阶,系统采用3位数码管分别动态显示乐曲中的高中低音的音符,显示模块采用动态扫描方式,由8位的段码信号和3位的位码信号来驱动3位的共阴数码管,从而实现音符的动态显示.

3.5 按键消抖模块

键盘模块有四个按键:上一首(key_up)、下一首(key_down)、暂停/播放(key_pause);自动/手动(key_auto).由于机械按键存在抖动,为保证每按一次,产生一个负脉冲,执行一次操作,这里采用有限状态机分别对按键按下和释放进行消抖处理[5].其按键识别与消抖的状态转换图如图2所示.

工作过程:初始状态为IDLE,当检测有下降沿时,进入STATE0状态,并通过一个计数器计时电平持续的时间.在按键按下时,计数器开始计数,并且每个周期判断该键是否为低电平,如果仍为低电平且计数器计数值达一定值(约10ms)后,则按键切换标志变量key_flag产生一个高电平脉冲,按键状态变量key_state为低电平,进入稳定状态DOWN,若计数值未达到预定值,则为抖动重新返回IDLE状态;在DOWN状态时,如果检测到上升沿,则进入STATE1状态,启动计数器,并且每个周期判断该键是否仍为高电平,当高电平保持时间达10ms后,则按键切换标志变量key_flag产生一个高电平脉冲,按键状态变量key_state为高电平,一次完整的按键识别结束,重新回到IDLE状态,若计数值未达到预定值,则为抖动重新返回DOWN状态.如果满足(key_flag==1&&key_state==0)则按键按下有效,按键为低电平,如果(key_flag== 1&&key_state==1)则按键释放完成,按键为高电平.

3.6 红外遥控系统接收电路及解码模块设计

3.6.1 红外遥控接收电路

红外遥控系统分为发射和接收两部分,红外发射部分主要由红外发光二极管、矩阵键盘、编码和调制电路等组成[6],红外接收部分采用Holtek公司的HT6221一体化红外接收头模块,该接收头集红外接收、放大、滤波和比较输出等模块功能,性能稳定可靠,其接口电路如图3所示,其中IR输出信号接FPGA的红外遥控解码模块.

3.6.2 红外遥控解码模块设计

HT6221红外遥控器是一款基于NEC红外通信协议的遥控编码芯片,其采用脉冲宽度编码(PPM)的编码格式,其数据帧格式由:引导码、8位地址码、8位地址反码、8位按键数据码、8位按键数据反码以及1位结束位组成[7],如图4所示.

其中,引导码由9ms高电平和4.5ms的低电平组成,其代表一个数据的帧头.NEC协议采用脉冲之间不同时长的时间间隔来区分“0”和“1”编码.

编码“0”是0.56ms高电平+0.56ms的低电平,編码“1”是0.56ms的高电平+1.69ms的低电平,以上分析的是遥控器发射端信号的编码方法,其接收端信号的编码方法与发射端的编码电平正好相反.

通过上面的分析可知,能否正确接收一帧数据,其核心是识别9ms、4.5ms、0.56ms、1.69ms这四个关键时序信号,这里采用4个计数器分别对这四种时序信号进行计时,考虑信号传输时会有不同程度的误差,因此,计数值要有一定的范围.为准确读取遥控识别码,采用有限状态机来识别各种控制状态及数据的接收解码过程,状态转换图如图5所示,其中IDLE:空闲状态,等待红外一体化输出信号IR下降沿到来;LEADER_9:识别9ms的低电平引导码;LEADER_45:识别4.5ms的高电平引导码,若识别成功则进行读码状态,否则返回空闲状态.DATA_STATE:读码状态,连续读取32位的地址、数据信号,若读完或读取过程发生错误,返回空闲状态,重新识别.状态机的编码采用“0001、0010、0100、1000”的四位独热码编码方式,由于设计只需要得到遥控器8位的按键码值IR_db[7:0],因此,地址码及反码不输出.红外遥控解码模块接口功能如表2所示.

4 系统仿真与测试

系统顶层原理图如图6所示,由分频模块(pll6_4m)、按键消抖模块(key_filt)、音乐控制模块(music_control)、音曲存储模块(music_rom)、红外一体解码模块(IR)及乐曲显示驱动模块等组成,系统通过QuartusII软件进行综合并对部分模块进行仿真测试.

首先对红外遥控模块进行编译及管脚分配,并在顶层中嵌入ISSP(In-System Sources and Probes Editor)模块,探测口与红外模块的IR_db[7:0]连接,并下载到FPGA开发板中,然后在QuartusII中调用ISSP,在红外遥控器中按下不同的功能键,观察prober探测端口采集的数据,如在遥控器中按下CH+(按键值为47H)和PLAY(按键值为43H)键,ISSP抓取的数据如图7所示,从图中看出其IR_db的数据值,与HT6221手册上的编码值相同[8].

利用QuartusII集成的SignalTap II逻辑分析仪,对乐曲播放器电路的音符编码及音频等信号进行测试.SignalTap II提供了一个不使用外部I/O口引脚就能检测内部信号状态,SignalTap II采样时钟频率设为12.8KHz,采样深度为8K,保存SignalTap II设置后,编译并下载至FPGA开发板,启动SignalTap II逻辑分析仪,对LPM-ROM的地址信号addr、乐曲编码信号q以及音频信号audio进行在线采集,采集信号如图8所示,从图中可以看出,地址信号addr发生变化,能够调用LPM-ROM中的音符编码,同时在audio端输出不同频率的方波,同时在开发板上的扬声器上也能听到优美准确的乐曲旋律,实现了预定的功能,达到设计要求.

5 结束语

乐曲播放系统采用单片的FPGA完成红外遥控按键码的识别、按键信号的采集及乐曲的存储及播放,能动态显示音符,经实际电路板测试音调准确,音质效果好,控制灵活,乐曲可根据用户需求随意变更或自行增加,具有功能扩展方便,且外围电路简单,稳定可靠等特点,可应用于车载MP3等场合.

参考文献:

〔1〕邱燕.基于51单片机音乐播放器的设计[J].通讯世界,2016(10):252-253.

〔2〕何谐,唐大权,张淑廷等.一种基于51单片机的音乐播放器的设计[J].现代电子技术,2014,36(16):11-13.

〔3〕刘垣,李外云,赵嘉怡.基于STC单片机WAVE音乐播放器的设计与实现[J].科技创新与应用,2015(34):50-51.

〔4〕段耀勇,刘鹏,周瑞琪.中国传统数学与“十二平均率”的产生[J].赣南师范学院学报,2005(6):22-24.

〔5〕于晶,杨晓慧,黄勇.基于FPGA的按键消抖电路设计方法的研究[J].电子设计工程,2011,19(22):1-3.

〔6〕崔岩,吴国兴,顾媛媛,等.基于FPGA的红外遥控密码锁的设计[J].电子技术应用,2013,39(11):44-46.

〔7〕常涛,雪琦.基于FPGA的红外遥控信号接收模块设计[J].电子元器件应用,2010,13(5):44-46.

〔8〕袁玉卓,曾凯锋,梅雪松.FPGA自学笔记-设计与验证[M].北京航空航天大学出版社,2017.8.

猜你喜欢

播放器乐曲
Windows11自带播放器使用技巧
播放器
Lon Duo Deck多功能播放器
悲伤的乐曲
STORIES ABOUT FAMOUS PERSONS
练乐曲vs基础练习
用太阳穴听的MP3