利用555定时器构建一个可以演奏音符的电路
多年来,人们已经成功地将《毁灭》运行在几乎任何设备上。计算器、相机、自动取款机、打印机,以及许多原本并非用于运行第一人称射击游戏的其他设备,都被用来实现这一目标。因此我决定尝试用几个555定时器来播放《毁灭》。
嗯,差不多可以这么说。
这个项目实际上并不直接运行《毁灭》,而是播放原版游戏第一关的开场曲《毁灭之门》。整个过程完全不需要微控制器、计算机或任何软件支持。
该电路使用两个555定时器、一些7400系列逻辑元件、一个二极管矩阵、模拟开关和一个小型音频放大器。其中一个555负责设定节奏,另一个生成实际的音符。中间的所有部分都记录电路在音阶中的位置,并告诉音频振荡器应该输出哪个音高。
工作原理
该电路可分为五个主要部分:
•节奏时钟
•序列计数器与解码器
•二极管音符矩阵
•音调选择与音频振荡器
完整的信号路径如下所示:
设置节拍
第一个NE555被配置为一个双稳态振荡器。电容通过一对电阻反复充放电,使引脚3的输出持续在高电平和低电平之间切换。
该振荡器运行频率约为7.33 Hz,每约136毫秒产生一次新的时钟脉冲。
此时,555并未产生音频信号,其唯一作用是设定节奏的时序。
在时序网络中有一个可调电位器,用于精确调节时钟频率。我在使用逻辑分析仪测量引脚3时进行了调整。
通过音符计数
时钟输出直接进入一个74LS161N,即四位同步二进制计数器。
每次时钟脉冲都会使计数器加1:
四位提供16种可能的状态,这非常合适,因为播放的节奏部分需要15个位置。
四个计数器输出信号输入到一个74LS154N(4选16解码器)。这样无需在电路其他地方处理四位二进制数,解码器能为每个计数值提供独立的输出。
当计数器为零时,选择Y0;为一时选择Y1,依此类推。
74LS154的输出为低电平有效,即当前选定的输出端口变为低电平,其余所有输出端口保持高电平。
这使得电路在序列中的每个位置都对应一条物理线路。
制作15步计数器
共有16种可能的计数状态,但仅需15种。
因此,最终的解码器输出Y15用于重置计数器,而不是播放另一个音符。
Y15控制一个由两个2N3904 NPN晶体管组成的较小反相器/驱动电路。当Y15被激活时,该晶体管电路会将74LS161的低电平“清零”输入(CLEAR)拉至低电平。
计数器随即立即回到零。
连接到CLEAR输入端的按钮还可提供手动复位功能。
用二极管存储音乐
计数器现在知道它在音阶中的位置,但仍然需要确定每个位置应播放的音高。
这由15个1N4148二极管来实现。
序列中有15个音符位置,但只有6种不同的音高。我创建了六个对应这些音高的音符总线。74LS154的每个输出通过一个二极管连接到相应音高应播放的总线。
例如,多个位置都播放重复的低E音,因此所有这些解码器输出都通过二极管连接到相同的E2总线:
其他解码器输出则连接到其他音高的总线上。
这个二极管矩阵实际上就是电路的音乐记忆。没有使用ROM、RAM或程序来存储序列,而是通过二极管的物理布局来编码序列。
转换音符信号
每个音符总线都有一个上拉电阻,通常保持其为高电平。
当74LS154选择某个位置时,其输出变为低电平,相应的二极管便会将对应的音符总线拉至低电平。
但这存在一个问题:电路后续使用的模拟开关需要高电平信号才能开启。
74HCT14N 六路施密特触发器反相器可以解决这个问题。
芯片内部包含六个反相器,正好满足所需数量。每个音符总线连接到一个反相器。
HCT14 的六个输出现在提供干净的高电平信号,指示应播放哪六个音高中的哪一个。
选择音高
这六个信号控制两个 CD4066BE 芯片内的开关。
CD4066 包含四个双极性模拟开关。当开关的控制输入为低电平时,其两个信号端子实际上被断开。将控制输入拉高时,连接就会闭合。
其中使用了六个开关,每个对应一个音高。
每个开关将不同的电阻网络接入第二个 555 的定时电路:
生成音符
第二个 NE555 是另一个无稳态振荡器,但它的工作频率为音频频率。
其定时电容通过选定的电阻网络持续充电和放电。改变该电阻值会改变电容的充放电速度,从而影响振荡器的频率。
较大的电阻会产生较低的频率,因此产生的音乐音高也更低。较小的电阻会产生更高的频率和更高的音调。
六个电阻网络分别对应:
•E2
•B♭2
•B2
•C3
•D3
•E3
每个网络都包含一个可调电位器。我并未完全依赖计算出的电阻值和元件公差,而是手动选择每个音高,并测量第二个555芯片的输出频率。
随后,通过调整电位器将频率调节至所需值。
例如,E2被调谐为约82.41 Hz,而其他网络则被调整到对应的音符频率。
校准完成后,CD4066开关在序列推进时可快速在六个电阻网络之间切换。
产生一些噪音
音频555芯片的第3引脚输出的是方波。
这听起来不会完全像原声电吉他,但调音依然可以辨认出来。
555的输出信号经过耦合电容后,才传入PAM8302放大模块。该电容阻隔了555输出中的直流分量,同时允许变化的音频信号通过。
PAM8302随后提供足够的功率,驱动小型扬声器发声。
本文编译自hackster.io





