yaboPP电子
项目

EFM8声音合成器:驱动扬声器

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

第2部分“如何制作基于EFM8的声音合成器”系列。

介绍

第2部分《如何制作基于efm8的声音合成器》系列。

推荐的水平

中间的

必需的硬件/软件

描述 数量 Digi-Key p / n
面包板 1 377 - 2094
插座跳线电线 4 1471-1231-nd.
5v AC/DC壁挂式电源 1 1470-2771-nd.
0.1μF电容器 4 399 - 4266
第五阶开关电容低通滤波器 1 LTC1063CN8 # PBF-ND
通用OP-AMP 2 LT1638CN8 # PBF-ND
模拟电源缓冲 1 LT1010CN8 # PBF-ND
2μF电容器 2 490-8835-nd.
10 kΩ电阻 2 10kqbk-nd.
100Ω电阻 1 100qbk-nd.
8Ω,1瓦扬声器 1 GF0771-ND

项目概况

在上一篇文章中,我们通过一个方波通过一个五阶开关电容低通滤波器成功地产生了正弦波。我们还可以通过调整方波的频率以及决定滤波器截止频率的时钟信号的频率来改变正弦波的频率。我们现在的目标是使用正弦波来驱动扬声器,但在此之前,我们需要解决滤波器输出管脚处信号的三个不良品质:

  1. 它包含称为“时钟馈通”的高频噪声。
  2. 它具有非零DC偏移量。
  3. 它无法驱动扬声器,因为LTC1063无法提供足够的输出电流。

在本文中,我们将重点通过一些简单的信号调理电路来纠正这三个缺陷,然后我们将修改固件,使扬声器播放一系列与C大调音阶相对应的声音。

这是这个项目的整个示意图:

在下面的章节中,示意图的相关部分将以放大的形式再现。

时钟直通的

与标准无源或有源滤波器相比,开关电容滤波器具有显著的优势,但总要有所取舍。开关盖技术的一个突出缺点是时钟馈通。在LTC1063中,数字时钟信号直接控制模拟信号的滤波电路。因此,发现我们的正弦波在芯片中获得了一些高频噪声就不足为奇了。这里是LTC1063输出一个523.25 Hz的信号(对应的音符C5):

仔细观察就会发现时钟馈通噪声:

光标确认噪声是由时钟引起的,因为时钟频率为523.25Hz×125 = 65.4 kHz(从上一篇文章中召回时钟信号到声音信号比为125到1)。您可以看到噪声类似于从数字到模拟转换器或模数转换器产生的模拟信号中发生的“阶梯步骤”模式。这提醒我们,交换盖滤波器实际上采样输入信号,如ADC,我们使用“时钟馈通”,以表示任何采样数据系统的输出中存在的阶梯阶段噪声。IC制造商为设计开关电容器滤波器是有利的,使得时钟到截止比率高,因为可以通过简单的一阶RC低通滤波器有效地抑制时钟馈通噪声:

R1和c3.提供20 dB / doad滚动,截止频率为1 /(2πrc)= 796 Hz。这意味着上面所示的时钟频率将衰减近40dB,这是幅度的100因素-100。所有其他时钟频率都会衰减更多,因为注意C5是该项目的规模中最低的音符,它以C开头5(523.25 Hz)并以c结尾6(1046.5 Hz)。在OP-AMP组件的引脚3处测量的以下示波器迹线展示了过滤器的功效:

如果我们使用高达1046.5 Hz的音频频率,您可能会想知道为什么截止频率设定为796 Hz。这是一个很好的问题,而本文末尾的视频清楚地表明,该低通滤波器的规模中的较高音符正在衰减。但是,您也可能会注意到,较高的音符不会听起来比较低的笔记更响亮。实际上,他们听起来有点响亮。这发生了,因为我们的发言者和我们的听力感支持更高的频率。人耳表现出C的逐渐增加反应性5(约500hz)至C6(约1 kHz),扬声器的频率响应也显示出这条频段的总体上升趋势:

所以,将截止频率放置在频率范围的中间,实际上有助于平衡音阶中音符的感知响度。

直流偏置

我们发送到扬声器的正弦波的平均值应该是零,换句话说,纯交流没有直流成分。音频信号中的直流偏置会使扬声器的音圈产生偏差,从而降低动态范围,还会导致失真。在我们的电路中,我们只需插入一个直流阻塞电容器(C6)第一个运算放大器的输出和第二个运算放大器的输入。

在电路中的这一点我们也使用r3.和R.4将信号幅度降至一半;我们这样做是因为全幅度信号需要比我们的缓冲器可靠地供给的更多电流,如下一节所述。

功率放大器

注意C5第二个运放输出的音频信号是这样的:

峰值振幅为1.32 V。如果我们试图用这个信号驱动8 Ω扬声器,峰值电流将约为1.32 V / 8 Ω = 165 mA。然而,LT1638运放的最大输出电流在25ma范围内。这就是为什么我们需要一个功率放大器级——电压幅值很好,但我们需要能提供更多电流的东西,从而为扬声器提供有意义的功率。为此,我们使用LT1010,这是一个单位增益的缓冲器,可以将现有的运放电路的输出电流容量增加到约150ma:

如示意图所示,LT1010被设计为包括在OP-AMP的反馈回路内。扬声器的正端子连接到LT1010的输出引脚,负端子连接到电路的接地节点。这是驱动扬声器的信号:

为什么峰值幅度仅为800 mV而不是1.32 V?因为这里所示的电压本质上是由LT1010的输出阻抗和扬声器的8Ω线圈阻抗组成的电阻分压器的输出。LT1010的输出阻抗在5到10Ω之间的某处指定;在这种情况下,它看起来约为5Ω,因为v扬声器= 800mV≈1.32v×(8Ω/(8Ω+5Ω))。

峰值幅度为800 mV,LT1010必须提供800 mV /8Ω= 100 mA,其舒适地在其最大电流额定值内。现在,您了解为什么我们在第二个OP-AMP的输入处将电压降低一半:施加到扬声器的1.6 V的峰值幅度需要200 mA。LT1010可能会忍受这一点,因为我们在适度的温度下运行,因为我们的正弦电流不在200 mA时不断地运行,但世界压力足够压力,因为它是 - 为什么要为演示项目强调LT1010的压力?

固件

此项目的固件在端口I / O,外围设备和中断方面是相同的。新代码与我们生成的新声频有关:

的#define SOUND_C5_INCREMENT 1958的#define FILTCLK_C5_INCREMENT 16的#define SOUND_D5_INCREMENT 1744的#define FILTCLK_D5_INCREMENT 14的#define SOUND_E5_INCREMENT 1554的#define FILTCLK_E5_INCREMENT 12的#define SOUND_F5_INCREMENT 1467的#define FILTCLK_F5_INCREMENT 12的#define SOUND_G5_INCREMENT 1307的#define FILTCLK_G5_INCREMENT 10的#define SOUND_A5_INCREMENT 1164的#define FILTCLK_A5_INCREMENT 9的#definesound_b5_increment 1037 #define filtclk_b5_increment 8 #define sound_c6_increment 979 #define filtclk_c6_increment 8

现在我们有声音信号和时钟信号增量,所有音乐票据(不包括Sharps和Flats)来自C.5到C.6。主while循环通过循环适当的增量值来重复播放C大调音阶,每个音符保持一秒钟:

虽然(1){current_soundsignal_increment = sound_c5_increment;current_filterclock_increment = filtclk_c5_increment;//延迟1秒SFRPAGE = TIMER3_PAGE;tmr3 = 0;而(TMR3 <10000);current_soundsignal_increment = sound_d5_increment;current_filterclock_increment = filtclk_d5_increment;//延迟1秒SFRPAGE = TIMER3_PAGE;tmr3 = 0;而(TMR3 <10000); Current_SoundSignal_Increment = SOUND_E5_INCREMENT; Current_FilterClock_Increment = FILTCLK_E5_INCREMENT; //delay 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3<10000); Current_SoundSignal_Increment = SOUND_F5_INCREMENT; Current_FilterClock_Increment = FILTCLK_F5_INCREMENT; //delay 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3<10000); Current_SoundSignal_Increment = SOUND_G5_INCREMENT; Current_FilterClock_Increment = FILTCLK_G5_INCREMENT; //delay 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3<10000); Current_SoundSignal_Increment = SOUND_A5_INCREMENT; Current_FilterClock_Increment = FILTCLK_A5_INCREMENT; //delay 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3<10000); Current_SoundSignal_Increment = SOUND_B5_INCREMENT; Current_FilterClock_Increment = FILTCLK_B5_INCREMENT; //delay 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3<10000); Current_SoundSignal_Increment = SOUND_C6_INCREMENT; Current_FilterClock_Increment = FILTCLK_C6_INCREMENT; //delay 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3<10000); }

SoundSynthesizer_Part2.zip

在下一篇文章中,我们将扩展固件,将USB连接和额外的定时功能结合起来,这样我们就可以方便地合成旋律。

视频

有关频率增加,请参阅“时钟馈通”部分,以说明幅度随着振幅减小的原因。您听到的静态是由于录制过程;扬声器出来的声音很干净,尤其是较低的笔记。

下一篇文章串联:EFM8声音合成器:通过USB播放旋律

为自己提供这个项目!BOM。