引言
现在很多娱乐设备不需要人干预就可以自动停止工作。例如,现代的无线设备和家庭电视在一定时间或者在预设的周期内可以自己关断,这些应用已经比较普遍了。这种功能便于实现“睡眠”模式,当人们睡着之后,设备自动关断。然而,并不是所有的娱乐设备都有这类功能;合成立体声系统一般不提供这类特性。在这种情况下,需要通过外部器件来增加睡眠模式功能。简单地关断这类系统的电源是不够的。这会突然结束音频,转到静音。更好的方法是让音频电平在相对较长的时间内下降,音频以几乎察觉不到的方式逐渐停止。本应用笔记介绍的低成本器件便可以实现这一功能。
该器件可以插入到合成立体声系统的音频流中,在音频源和最终功率放大器之间。器件需要线性电平信号输入输出,因此,能够放在系统中有该信号电平的任意地方。当开始上电时,该器件对音频信号直通,没有任何衰减,并保持这一状态,直到其“开始”按钮被按下。这一动作启动初始时间延时,使器件在预设的倒计时间隔内保持这一“全输出”状态。倒计时间隔后,器件开始平滑、逐步地提高音频衰减,直到信号完全静音。
系统硬件
系统硬件原理图如图1所示。可以看到,系统只有几个有源元件:MAXQ3210 RISC微控制器、DS1801双路音频抽头电位器和MAX4167双路单电源供电运算放大器。下面介绍每一元件及其在系统中的功能。MAXQ3210微控制器
MAXQ3210对系统进行控制。MAXQ3210是16位RISC机,最大时钟速率达到3.58MHz。由于几乎每一条指令都在1个时钟周期内执行完成,处理器的性能接近每兆赫1百万条指令。因此,处理器峰值性能达到每秒3百58万条指令(MIPS)。MAXQ3210含有1K 16位字的EEPROM用于程序存储,128字的EEPROM以及64字节的SRAM用于数据存储。EEPROM存储器被配置为使用器件内置启动加载程序在系统进行编程,或者通过用户提供的代码在应用程序中进行编程。微控制器还含有一个9V至5V电压稳压器,一个压电喇叭驱动器,以及15个通用I/O (GPIO)引脚。MAXQ3210处理器的另一版本MAXQ3212和它一样,只是不含有压电喇叭驱动器和9V至5V稳压器。由于不需要喇叭驱动器和稳压器,因此,MAXQ3212也是本应用比较好的选择。MAXQ3212是成本更低的解决方案。
最终,本应用选择MAXQ3210进行原型开发,以提高系统灵活性,便于以后进行更新。
图1. 系统原理图
MAXQ3210还含有一个I/O引脚,可直接驱动一个LED。本应用利用直接LED驱动功能,以不同速率闪烁LED,指示系统状态。下面的系统状态指示部分将详细介绍这一功能。
DS1801数字电位器
Maxim在数字电位器上提供多种选择。本应用出于几种原因而选择了DS1801。该器件含有两个音频抽头数字电位器,每个都有65个独立触点位置。位置0到63表示衰减级(即,从0dB到-63dB衰减)。位置64是特殊的“静音”位置,提供大于-90dB的衰减。每一电位器使用一个8位移位寄存器来保持触点位置设置,如表1所示。在这8位中,低6位表示电位器的触点位置在0到63之间。当设置为1时,不论其他位如何,第7位强制静音状态。每一移位寄存器的第8位“不重要”,对电位器的设置没有影响。在设置每个电位器或者所有电位器的触点位置时,所有16位必须移入这些寄存器。移位寄存器的安排及其位定义如表1所示。
表1. DS1801数字电位器寄存器
之所以选择DS1801,还因为它降低了由电位器触点位置发生大的变化时带来的噪声。该器件含有一个“零跨越探测器”,只有当跨过电位器的信号是零或者50ms超时后,触点才能改变位置。通过限制触点移动到信号为零的点,从而消除了触点移位导致的振幅突然改变。新的触点位置写入50ms后,如果DS1801没有探测到零跨越,那么,不论输入信号状态如何,触点都将改变位置。如图1原理图所示,数字电位器的连接方式使电位器的两端都有相等的直流偏置。这样,出现的交流信号即使在供电电压一半的直流偏置上,也可以通过0V。因此,数字电位器零跨越探测器达到了工作目的。DS1801的低电平有效ZCEN引脚限制在低电平,以使能零跨越探测器电路。
最后,选择DS1801的另一原因是它具有控制接口,一个3线串行接口。设计用于CPU控制的应用,该接口支持电位器的触点位置被写入到上面阐述的两个8位寄存器中。微控制器GPIO的3个引脚被配置为输出,以实现该接口。DS1801 3线接口含有3个输入:低电平有效RST、CLK和D。低电平有效RST信号用于使能3线串口写操作。CLK是时钟,提供数据传送同步信号。D信号是数据,实现器件中设置电位器触点位置的通信。通过其15个GPIO引脚,MAXQ3210很容易支持该3线接口。
MAX4167运算放大器
MAX4167是MAX4166运算放大器的双路版本。它是单电源供电的(+2.7V至+6.5V)器件,提供满幅输入和输出。在本应用中,由一个5.0V电源为其供电。它典型的增益带宽积为5MHz,典型摆率为2V/µs。MAX4167为音频信号提供信号缓冲。在所示的配置中,器件提供单位增益,可用作简单的缓冲。
线性电平音频信号与系统交流耦合输入输出,以消除音频信号单电源供电导致的直流偏置电压。
系统软件
使用MAXQ®集成开发环境,即MAX-IDE以及MAXQ3210评估(EV)套件来开发并测试本应用的软件。MAX-IDE含有开发各种微处理器代码需要的所有工具,包括MAXQ3210。它支持使用工程接口汇编语言代码开发。可以针对目标器件对工程进行汇编,下载,逐行执行。当使用MAXQ3210评估套件时,可以通过查看其存储器内容、调用堆栈项、所有寄存器中的数值、源代码中可以访问的所有变量值,来检查系统状态。还可以在源代码中设置断点,在预设的位置暂停执行。MAX-IDE是免费的开发工具,可以从Maxim网站下载。软件简单明了。应用程序代码在一个主汇编语言程序Attenuator.asm中,它含有初始化函数、主程序循环、几个子例程以及一个中断服务例程。所有源代码都可以下载(ZIP,8kB)。这一.ZIP文件含有MAX-IDE工程文件,所有必须的“include files”,以及源代码文件。还提供应用程序的.HEX文件,可以将其装入MAXQ3210评估板或者用户目标板并执行。
电位器控制
该软件的主要功能是控制DS1801数字电位器。上电时,电位器被设置在非衰减状态。用户输入(例如,按下按键)后,经过相应的倒计时延时,软件开始步进电位器的触点,直到达到其全静音位置。电位器触点的实际位置由两个子程序控制;Output_Bytes和Clk_Bytes。Output_Bytes子程序采集单字节值,存储在两个电位器触点位置寄存器中;测试其是否可用;将其顺序发送至Clk_Bytes子程序。Clk_Bytes子程序提供所需的低层端口引脚处理和位串化功能,选通电位器的触点位置数据。在编写软件时,如果选择了具有不同接口的另一电位器,对软件进行的修改只是替换这两个子程序。
系统状态指示
如前所述,采用了闪烁LED来指示系统状态。大约0.25s的闪烁速率指示器件已经上电,但是还没有接收到用户输入以启动倒计时。大约1s的闪烁速率指示系统已经启动了衰减步进之前的倒计时模式。大约2s的闪烁速率指示系统处于步进衰减模式。大约5s的闪烁速率指示系统到达其全静音位置,并在此停留,直到下一次上电。通过限流电阻为红色LED提供5V供电。LED的阴极直接连接到MAXQ3210的端口0,第7位,它可以吸收所需的电流。在所述的时间间隔,端口引脚P0.7与自己XOR,使其触发,随之导致LED闪烁。时间间隔发生
本应用中微控制器的另一主要作用是测量不同功能的时间间隔。从系统级角度看,本应用至少应具有两个可变时间间隔延时。第一个间隔必须提供倒计时延时,当用户按下启动按键时开始,当启动衰减过程时结束。直觉上,这一时间间隔应在1小时到2小时之间,让人们有足够的时间入睡。第二个延时必须在衰减过程的独立步长之间建立时间间隔。这一间隔有效地确定音频从未衰减电平下降直到其最终静音状态所需的时间。因此,它将确定衰减步进的平滑度。直觉上,整个衰减步进过程应在1分钟到60分钟,以实现电平精确平滑的下降。所以,采用电位器的65个独立步长,表示步长之间大约1s到55s的时间间隔。最后,按键开关还应具有相对较短的反弹延时,大约应在200ms的量级。为实现这一范围较宽的时间间隔,本应用采用了两个子程序。名为Delay的子程序在接收到的8位参数基础上建立可变时间间隔。该参数确定通过10ms软件时序循环的次数。由于该参数值在0到255之间,该子程序产生最大2.55s的时间间隔。软件时序循环以3.58MHz的处理器时钟频率产生时间间隔。这一子程序还产生软件最终实现中的反弹延时。
第二个时间间隔发生子程序名为LDelay,它基于处理器内部第2定时器产生的计数1s时间间隔。对定时器初始化以产生1s间隔的中断;中断服务程序递增计数器变量TIC。LDelay子程序对比TIC和预设值(参见下一节),当它们相等时,TIC被复位至零。当TIC为零时,变量TOC递增1。然后,变量TOC和另一预设值对比。如果两个值不相等,则重复循环。如果这些值相等,间隔完成,定时器停止。由于TIC和TOC都可以是8位值,该子程序能够产生18.06小时的延时(255 × 255 × 1s = 65,025s = 18.06hr)。