所有关于电路
项目

EFM8合成器的声音:方波、正弦波

2015年9月04日通过罗伯特Keim

第1部分的“如何做一个EFM8-Based声音合成器”系列中,将设计一个声音合成器,发挥标准的音符。我们将完成这个使用低成本、小型EFM8单片机与外部组件和一个扬声器。

第1部分的“如何做一个EFM8-Based声音合成器”系列。

推荐的水平

中间

所需的硬件/软件

描述 数量 Digi-Key p / n
电路试验板 1 377 - 2094
Receptacle-to-plug跳线 4 1471 - 1231
5 V AC / DC壁挂电源 1 1470 - 2771
0.1µF电容器 2 399 - 4266
基于开关电容低通滤波器 1 LTC1063CN8 # PBF-ND

项目概述

这个项目的目标是设计一个声音合成器,发挥标准的音符。我们将完成这个使用低成本、小型EFM8单片机与外部组件和一个扬声器。在第一篇文章中,我们将关注EFM8产生的方波转换为正弦波适合驱动扬声器。必要的组件在这个过程中是一个clock-tunable单片低通滤波器。在这个项目中我们将使用LTC1063基于巴特沃斯滤波器从线性集成电路技术,尽管部分高阶频率响应和不同滤波器类型(如MAX7401 eighth-order贝塞尔低通滤波器从格言集成)。ICs等这些都是基于开关电容滤波器的设计,因此我们将首先简要概述的技术。

更换电阻

开关电容滤波器拓扑结构的本质是取代电阻开关打开和关闭根据特定的模式。

左边的图是一个标准的RC低通滤波器,右边是开关电容等效。正如你所看到的,电阻已经取代了的组合两个开关和一个电容器(后者是同名的“切换电容器”)。这个概念如下:当西南1关闭和西南2是开放的,输入电压指控C1。接下来,当西南1是开放和西南2关闭,费用从C1通过西南2到输出。我们这里是电荷从输入到输出。在每个时钟周期内电荷转移的数量成正比的电容C1和V之间的区别和V,因此每秒传输的电荷量成正比1,V- v每秒的时钟周期数,即、频率。如果我们回想一下,电流是电荷的数量单位时间内流过导体时,我们可以看到开关电容安排产生平均现在给出如下:

我们从欧姆定律知道组件的电压除以电流流经该组件等于组件的阻力,因此开关电容电路的等效电阻如下:

这是明显的:该等效电阻的值可以调整仅仅通过不同频率的时钟驱动开关,因此开关电容RC滤波器的截止频率可以由数字方波的频率控制。此外,截止频率不是一个绝对的电容值,而是取决于C的比例1C2,集成电路制造工艺可以有效地控制组件值之间的比例比组件值本身。因此,开关电容滤波器拓扑是多才多艺的和高度兼容集成电路技术。IC制造商可以合并多个switched-capacitor-based过滤阶段到单个芯片,导致高阶滤波器的频率响应可以方便而精确控制数字方波的频率。

从广场到正弦

方波的傅里叶变换k振幅和频率f

换句话说,一个方波是无穷级数的和的正弦波频率增加,振幅降低3倍,5,7,9,等等。这些组件被称为奇数次谐波频率。(你可以找到详细讨论这个话题在这里)。本系列中的第一项具有相同的峰值振幅和频率作为最初的方波,这是我们想要的词。如果我们能过滤掉所有其他人,我们将有一个平稳,audio-friendly正弦波代替笨重的方波。

这是基于低通滤波器的由来。我们应该得到6 dB /八度(或转出20 dB /十年)对于每一个杆的频率响应,所以我们的理论碾轧five-pole系统30分贝/倍频程。中给出的频率响应曲线LTC1063数据表确认:

一个八度音阶对应的频率增加一倍,我们可以看到,从20千赫至40 kHz的增益减少30 dB。第二项的频率在上面给出的傅里叶级数是方波频率的三倍;因此,通过适当的滤波器截止频率的位置,这种谐波应该由40或45分贝衰减。衰减40 dB对应于一个因素——- 100的减少幅度,和更高的谐波会减更多(至少70分贝),所以此时看起来LTC1063做了出色的工作,将我们的方波转化为正弦波。

固件概述

EFM8需要生成两种不同频率的方波。第一个是相同的频率的正弦波驱动扬声器,和第二个驱动器LTC1063的时钟针,从而控制滤波器的截止频率。LTC1063 clock-to-cutoff的比例为100:1;换句话说,截止频率等于时钟频率除以100。小心,虽然这并不意味着生成的两个信号之间的频率比EFM8应该是100比1。为什么?考虑下面的情节,它提供了详细信息滤波器的截止频率附近的频率响应:

回想一下,截止频率的另一个名字是3-dB频率:截止频率,增益是3 dB,而不是0分贝。所以如果EFM8时钟信号频率的声音信号的频率就是100次,声音信号将被减3 dB。相反,我们希望声音信号频率位于频率响应的地方开始卷;这个位置是由红色星号标识在上面的阴谋。这个点的频率大约是800赫兹;这个情节的时钟频率是100千赫,和100千赫除以800赫兹等于125。因此,我们将配置的EFM8 clock-signal-to-sound-signal 125比1。

外围设备、港口和中断

我们将生成两个方波使用EFM8的可编程计数器数组(PCA)。这周边包括三个渠道是由同一个时钟但除此之外独立函数。每个主成分分析通道可以执行各种各样的时机和waveform-generation任务;在本例中,我们将配置PCA通道0和1的“高速输出”模式:

注意,上面显示的“输出频率”是不相关的,因为我们将控制通过手动更新每个通道的频率捕获/比较注册(下载代码在页面的底部):

/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *输出频率时间* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / / * PCA时钟周期为488 ns。400赫兹输出,周期是2.5,2.5除以488 ns女士= 5123。所以,5123 PCA时钟给适当的时期一个400 Hz的输出。然而,我们只需要添加这个值一半的捕获/比较寄存器因为捕获/比较寄存器之间的匹配和PCA柜台导致输出接脚开关,和一个时钟周期需要两个切换。时钟驱动低通滤波器的频率是125倍的频率声音信号,这意味着短周期是125倍。因此,我们把声音信号增加到125年获得filter-clock增量。这个程序是用来计算600赫兹的声音信号和时钟信号的增量输出。* / # define SOUND_400Hz_INCREMENT 2562 # define FILTCLK_400Hz_INCREMENT 20 # define SOUND_600Hz_INCREMENT 1708 # define FILTCLK_600Hz_INCREMENT 14

时间在评论中给出细节包含在代码摘录。一般概念如下:16位PCA柜台总是递增;当它达到0 xffff时,就会溢出并继续计数。这个计数器是用于所有三个PCA频道。每个通道都有自己的捕获/比较寄存器。在“高速输出”模式中,PCA频道切换输出引线每次PCA柜台的16位值等于16位值存储在频道的捕获/比较寄存器。通过不断递增的捕获/比较寄存器和一个预先确定的价值,我们可以精确地控制之间的时间连续捕获/比较匹配,这是PCA中断的由来:

现在,每次有一个匹配PCA计数器和通道的捕获/比较寄存器,将切换输出接脚一个中断会火。在中断服务例程,我们控制的输出信号通过添加之前的预定的增量捕获/比较值:

SI_INTERRUPT (PCA0_ISR PCA0_IRQn){如果(PCA0CN0_CCF0) / /这个通道产生声音信号频率{PCA0CN0_CCF0 = 0;/ /清除中断标志PCA0Mod0_Compare_Value = PCA0Mod0_Compare_Value + Current_SoundSignal_Increment;PCA0CPL0 = LOWBYTE (PCA0Mod0_Compare_Value);/ /必须先写低字节PCA0CPH0 = HIGHBYTE (PCA0Mod0_Compare_Value);}如果(PCA0CN0_CCF1) / /这个通道生成filter-clock频率{PCA0CN0_CCF1 = 0;/ /清除中断标志PCA0Mod1_Compare_Value = PCA0Mod1_Compare_Value + Current_FilterClock_Increment;PCA0CPL1 = LOWBYTE (PCA0Mod1_Compare_Value);/ /必须先写低字节PCA0CPH1 = HIGHBYTE (PCA0Mod1_Compare_Value);}}

注意,我们使用的是16位无符号变量,所以我们不需要担心手动处理变量溢出:增加导致PCA0Mod0/1_Compare_Value变量超过65535,他们会自动溢出到正确的值,因为PCA柜台也是16位。

这两个PCA通道输出信号驱动P0.0和P1.1:

唯一所需的其它外围当前固件Timer3,用于延迟毫秒到秒的顺序:

我们还需要使低频振荡器,这样我们可以使用它作为Timer3时钟源:

电路

这是项目的这一部分的示意图:

这是试验板实现:

这篇文章细节使用廉价的壁挂电源提供一个负电压电路试验板。

这是主要的固件while循环:

而(1){Current_SoundSignal_Increment = SOUND_400Hz_INCREMENT;Current_FilterClock_Increment = FILTCLK_400Hz_INCREMENT;/ /延迟3秒SFRPAGE = TIMER3_PAGE;TMR3 = 0;而(TMR3 < 30000);Current_SoundSignal_Increment = SOUND_600Hz_INCREMENT;Current_FilterClock_Increment = FILTCLK_600Hz_INCREMENT;/ /延迟3秒SFRPAGE = TIMER3_PAGE;TMR3 = 0;而(TMR3 < 30000); }

SoundSynthesizer_Part1.zip

在这个无限循环,EFM8 400赫兹的声音和filter-clock信号输出正弦波,三秒钟,然后切换到声音和filter-clock 600 Hz正弦波信号,又适用于3秒。视频结束时,这篇文章显示了EFM8产生的方波和正弦波LTC1063的输出。示波器的频率测量功能(在屏幕的右下角部分“CH1频率”)确认生成的信号确实是400和600赫兹。

需要一些额外的过滤和缓冲电路之前,我们使用这些正弦波信号来驱动扬声器,这就是我们下一篇文章将探索。beplay体育下载不了

下一篇文章系列:EFM8声音合成器:推动扬声器

自己尝试这个项目!BOM。