1、简易电子琴设计 姓名: 班级:学号:一、 项目概况 选题目标,为了深入巩固之前学到知识,将书本知识结合趣味性,让自己得到愈加好提升。项目构思,模型要做一个能成功实现简易电子琴,包含按键按下后蜂鸣器会依据对应频率正确发出对应音阶声音,7段数码管会显示出按键简谱,输出端H能够表示音高低。要用到计数器,触发器分频器,7段数码显示器等元件。 二、 方案设计系统框图为:系统介绍以下:1.系统框图2.系统端口 (2个输入口 3个输出口) (1) CLK,频率1MHz。用于提供时钟脉冲信号。(2) DIN7.0。琴键输入8个音符,8位中只有一位是低电平即每次只能按一个键。(3) SPK。用于驱动蜂鸣器,输出
2、频率fB和蜂鸣器发出音调和电子琴各音阶基频有对应关系。(4) LED。接数码管,用于显示对应简谱码,H显示音调高低。3.工作原理(1)编码器CODE3。将输入8位琴键信号进行编码,输出一个4位码,最多能对应16个音符(若有16个键)。按下琴键电平为低。例:8b11111110 : KEY=4b0001 输入第一位琴键“哆”此时编译成4位二进制数 20=1 传入译码器INX2CODE。(2) 译码器INX2CODE。将键盘输入编码信号译码成数控分频器SPK0输出信号频率控制字。例:1 : F_CODE = 11H305 刚才编码器编码传入琴键“哆” 1此时被译码为数控分频器SPK0输出信号频率控
3、制字305H。(3) SPK0。计数器CNT11B是一个LPM宏模块,利用同时加载控制sload避免来自进位信号cout中可能毛刺影响,反相器和D触发器使得进位信号延迟半个时钟周期,过滤掉可能毛刺,使得加载愈加可靠。例:经过编译305H被置入模块SPK011位可预置计数器中计数器不停以此值为计数起始值,直至全为1。以305H计数起始,计数器成为一个模为1270(7FFH-305H=4F6H=1270)计数器。从CLK端每输入1270个脉冲,BEEP输出一个进位脉冲。CLK输入频率是1MHz,BEEP输出信号频率是1/(12701us)=787Hz,然而SPK0输出信号经过一个D触发器接成T触发
4、器后才输出给蜂鸣器。T触发器一是作二分频器,二分频就是经过有分频作用电路结构,在时钟每触发2个周期时,电路输出1个周期信号。此时预置305H对应蜂鸣器发音基频FB约等于392.00Hz,二是作为占空比均衡电路,使得SPK0模块输出功率极低脉款较窄无法驱动蜂鸣器信号脉宽变均匀(FB占空比为50)。附加T触发器知识点: T触发器又叫计数器在上升沿到来时实现对原状态翻转实现计数,频率是时钟周期二分之一实现二分频。(4) M_CODE。将CODE3编码编译为简谱码传输给DCD7SG而且编译对应音调高低值H。当音调为高时候H输出为1,H接LED灯亮。1 :CODE,H = 4B0001,1B0 ;按下“
5、哆”,此时编码键盘按键为1,M_CODE将其编译为简谱码0001,H为0,低音调。(5) DCD7SG。数码管7段显示译码器,将简谱码编译成数码管显示信号。类似于74LS48,其输出次序为g-a。例:4B0001 : LED = 7B0000110 ; M_CODE编译出来简谱码B0001在数码管7段(gfedcba)显示译码器中,bc为高电平,数码管显示出来“哆”简谱1。三、 设计和调试设计中存在问题:1. 因为本身基础较差对计数器功效了解不够在SPK0部分存在毛刺影响。 处理措施:使用反相器和D触发器接在进位信号cout处,将cout延时半个时钟周期,使得加载愈加可靠 2. 7段数码管显示
6、出来数字是镜像。 处理措施:显示器abcdefg高位低位弄错,应该为gfedcba。3. 波形仿真时要一一音符验证,较为繁琐。 处理措施:将DIN和LEDcount every设置为8.89 这么就能在同一个页面中看出仿真波形和对比结果以验证是否正确。4试验板子上晶振是20MHz,而试验需要1MHz调用PLL模块,使其分频为1/20,图仿真:将endtime设置为80usCLK因为频率是1MHz所以周期是1.0us验证输入“哆” 手动将DIN设置为11111110仿真结果LED7段数码显示管(gfedcba=0000110 bc)显示出数字1。H一直为低电平,显示为音调为低值。仿真波形以下:优势和不足从低音阶到高音阶波形以下所表示,实现了按键后经过CODE编码器将键盘按键信号经过INX2CODE译码传输给SPK0再经过T触发器将脉宽变均匀信号传输给蜂鸣器实现音阶发音,也实现了7段数码显示管显示按键键盘音符简谱和用H来显示音调高低,以下图在音符上升为高音“哆”之前,H一直为低电平,在DIN为01111111时,上升为高音“哆”,H为高电平,数码管显示为8。存在优势是T触发器存在使得输出SPK愈加稳定驱动蜂鸣器,存在不足是只将8位琴键信号进行编码最多只能对应16个音符。谢谢老师耐心看完