APP下载

基于STM32单片机的无线电子琴系统设计

2023-03-20何健诺谢树波曾敏羽

电脑迷 2023年23期
关键词:电子琴音调电路设计

何健诺 谢树波 曾敏羽

【摘  要】 在1958年,我国就制造出了电子琴,讫今为止它的设计方法和发声原理各种各样,主要是利用单片机、PLC技术、EDA技术等发出声音和控制音调。现代的电子琴通常采用的是PCM技术进行采样音源,它依旧和以前的电子琴一样内置滤波器和振荡器,靠同样的原理来产生和使用音色。本研究设计的电子琴是一种能够发出8种音阶的小型、简易的单片机电子琴。该系统设计是以STM32F103C8T6单片机为主控芯片,通过连接硬件电路和编写程序来实现。该设计的特点是采用单片机的定时器相关寄存器输出的值控制输出PWM来发出不同音调,实现升调降调、自动演奏,还可以演奏简单的音乐。

【关键词】 电子琴;STM32F103C8T6;定时器;PWM

一、系统总体设计

(一)系统总体框架设计

如今电子琴是通常采用PCM或者AWM技术采样音源的形式来完成对传统乐器的音色呈现,一般的原理是先对乐器的声音进行采样记录,然后通过ADC数字化存储在ROM中,再按键盘模仿所记录的频率回放声音,用振荡电路和滤波器形成各种音色。

事实上,音乐有一个稳定的周期信号。该设计采用STM32F130C8T6的定时器进行控制,在IO口输出PWM信号产生声音。利用按键控制选择每次输出的频率,发出不同的音调,这样就可以制作出简单的电子琴。该设计的电子琴在演奏方面要求的音色并不是很高,用单片机自身产生的一般频率就可以满足此次设计的基本要求。

对电子琴的电路功能进行系统的解析,采取由上到下的设计理念,先从设计的整个结构进行研讨,把整体设计的内容进行步骤详细化,最终实行系统结构的整体设计。该设计对电子琴系统的用途和优劣并没有十分精准和完整的要求,系统的效果需求有基本的按键功能、自行进行演奏功能、主动升调降调功能共3种。

(二)系统总体方案设计

1. 此次设计的无线电子琴还有音乐储存功能,能够自动弹奏存储好的歌曲。通过编程把数首曲子的频率编入系统中,按下设置的演奏按钮,电子琴便能够播放歌曲。

2. 设置相关按键。当按键按下时,使用存储好的一组音调,这里存储了两组音调,分别是低音和中音,通过查询资料,可以得出都是不同频率的do、re、mi、fa、so、la、si、do八个音调。

3. 设计的主要工作原理是利用STM32内置的定时器TIM3产生一个PWM信号驱动扬声器产生特定频率的声音,通过改变定时器TIM3的分频预置数改变PWM信号的频率,从而产生不同音调的声音,通过改变占空比,产生不同音量的声音。

4. 用ST32F103C8T6来做核心控制,设计中运用单片机的定时寄存器来产生PWM,然后把音调分别对应不同的频率信号,最后用无线激光进行控制,通过扬声器進行输出。

5. 设计中用KEIL5进行软件的设计编写,然后搭建硬件电路运行,采取中断系统和定时器对应寄存器的原理掌握电子琴发声的频率,用编程语言实现乐曲演奏必须明确乐曲的音调,通过它来演奏、播放音乐。

二、模块化分析

(一)扬声器模块

脉冲宽度调制(PWM)是英文Pulse Width Modulation的缩写,简称脉宽调制,应用未处理器的数字输出来模拟电路进行控制的一种技术。PWM的周期就是由定时器的自动重装值和CNT计数频率决定的,而CNT的计数时钟是CK_PSC经分频器PSC得到,通过脉宽调制解决电子琴的发声问题。

扬声器引脚是PB1。把PB1作为定时器通道,定时器作为单片机的重点难点,定时器的溢出时间如下:

Tout=((arr+1)*(psc+1))/Tclk。

式中,Tout是溢出时间;psc(分频系数)决定数数字的快慢;arr为自动重装值;Tclk为输入时钟频率,设置频率为72/(8+1)=8MHz。

频率为arr,Tout=arr+1/8000000,而频率是时间的倒数,音调与频率有关,音调(频率)用:Autoreload=(8000000/usFraq)-1方法自动重装值。

因为人耳只能听到大于20Hz小于20000Hz频率的声音,自动重装值最大为65535,所以对应值为122。为了防止有噪声输出,需要一个判断频率的函数。判断输入的频率小于122Hz大于20000Hz频率为静音,使用语句TIM_SetCompare4(TIM3,0)来停止发声。

(二)自动演奏模块

每一段音乐都是不同频率的声音按照一定的时间节拍变换发出。演奏出音乐需要熟悉音乐的音调和节拍的信息。查阅到各首音乐的频率和节拍。创建两个数组AllBGM1[]和AllBGM2[]分别用来存放两首音乐,里面存放的是音乐的频率,当自动演奏的时候就依次使用数组里的频率,但演奏音乐时,每个音调需要节拍都不同,需要在每一次调用数组里面的频率时就延时一段时间,音符节奏分为一拍、半拍、1/4拍、1/8拍,制作者设定一拍音符的时间为1,半拍为0.5,1/4拍为0.25,1/8拍为0.125……每个音符以这样的拍子播放出来,音乐就完成了。用实验板的KEY5和KEY6作为AllBGM1和AllBGM2的按键,KEY5或KEY6按下后,扬声器就可以开始自动演奏内置音乐。

(三)激光头传感器模块

设计中采用激光头传感器模块KY-008作为无线电子琴的琴键。激光头传感器模块KY-008,中间是正极,S是控制脚,工作电压为5V,规格为15*24mm,光源波长为650nm,重量为2.2g。当电路中的激光被物体挡住时,激光头传感器模块就会输出不同的电平,比传统固定直接式按键更加灵敏,激光头传感器输出电平信号接到单片机IO口,单片机识别之后就做出相应的反应。使用时更加简便,触摸激光线便能使电子琴发声,保证了电子琴演奏的新颖性。

三、硬件设计

(一)激光头传感器电路设计

激光头传感器模块KY-008作为琴键是无线电子琴,通过设计8个激光光传感器作为8个音阶,及8个激光发射端、8个激光信号接收端,电路设计如图1所示。

(二)主控模块电路设计

主控模块采用STM32单片机,主控单元的IO口接收激光信号,经过程序判断对应IO口,输出设定的PWM频率信号,不同频率信号对应不同的Do-Re-Mi-Fa-Sol-La-Ti-Do音符,每个音符一个音节,主控电路设计如图2所示。

(三)输出驱动模块电路设计

输出的扬声器使用TDA7279驱动,芯片TDA7279性能稳定,属于是立体声双桥式放大器,工作电压范围宽,驱动电路设计如图3所示。

四、軟件设计

(一)低音/高音选择程序设计

单片机下载完成后,初始化完成等待选择模式,按下key1,进入低音模式,按下key2,进入高音模式,可以开始弹奏。低音,高音对应的升调和降调程序。

u16 CL[8]={262,294,330,349,392,440,494,523};

u16 CM[8]={523,587,659,698,784,880,988,1047};

void play(u32 tone)

{switch(tone_level)

{case1:buzzerSound(CL[tone],1);break;

case2:buzzerSound(CM[tone],1);break;}}

if(KEY11_STA==KEY_DN)

{tone_level=2;}

if(KEY12_STA==KEY_DN)

{tone_level=1;}

创建两个数组CL[]和CM[]分别用来存放低音和中音,里面存放的是各个音调的频率,使用的时候就从数组里提取。用实验板的KEY1(KEY11_STA)和KEY2(KEY12_STA)作为升调和降调的按键,在主函数中设置按键初始化,使用while函数扫描按键状态,用if函数判断按键是否按下,KEY1或KEY1按下后,选用低音或高音。这样就可以实现电子琴的升调和降调功能。

(二)程序流程图设计

通过判断无线激光器的线,使用while函数扫描激光头传感器模块输出状态,程序设计流程如图4所示。

猜你喜欢

电子琴音调电路设计
基于AT89C51单片机的电子琴设计
Altium Designer在电路设计中的应用
负反馈放大电路设计
听力障碍幼儿音调异常矫治的实施建议
刘涛《音调未定的儒家——2004年以来关于孔子的论争·序》
电子琴
基于UC3843的60W升压电路设计
基于UC3842应用电路设计
越南女教师肌紧张性发声障碍对完成音调靶点基频的影响
乐器的音调是如何改变的