引言
現(xiàn)在很多娛樂(lè)設(shè)備不需要人干預(yù)就可以自動(dòng)停止工作。例如,現(xiàn)代的無(wú)線設(shè)備和家庭電視在一定時(shí)間或者在預(yù)設(shè)的周期內(nèi)可以自己關(guān)斷,這些應(yīng)用已經(jīng)比較普遍了。這種功能便于實(shí)現(xiàn)“睡眠”模式,當(dāng)人們睡著之后,設(shè)備自動(dòng)關(guān)斷。然而,并不是所有的娛樂(lè)設(shè)備都有這類功能;合成立體聲系統(tǒng)一般不提供這類特性。在這種情況下,需要通過(guò)外部器件來(lái)增加睡眠模式功能。簡(jiǎn)單地關(guān)斷這類系統(tǒng)的電源是不夠的。這會(huì)突然結(jié)束音頻,轉(zhuǎn)到靜音。更好的方法是讓音頻電平在相對(duì)較長(zhǎng)的時(shí)間內(nèi)下降,音頻以幾乎察覺(jué)不到的方式逐漸停止。本應(yīng)用筆記介紹的低成本器件便可以實(shí)現(xiàn)這一功能。
該器件可以插入到合成立體聲系統(tǒng)的音頻流中,在音頻源和最終功率放大器之間。器件需要線性電平信號(hào)輸入輸出,因此,能夠放在系統(tǒng)中有該信號(hào)電平的任意地方。當(dāng)開始上電時(shí),該器件對(duì)音頻信號(hào)直通,沒(méi)有任何衰減,并保持這一狀態(tài),直到其“開始”按鈕被按下。這一動(dòng)作啟動(dòng)初始時(shí)間延時(shí),使器件在預(yù)設(shè)的倒計(jì)時(shí)間隔內(nèi)保持這一“全輸出”狀態(tài)。倒計(jì)時(shí)間隔后,器件開始平滑、逐步地提高音頻衰減,直到信號(hào)完全靜音。
系統(tǒng)硬件
系統(tǒng)硬件原理圖如圖1所示??梢钥吹剑到y(tǒng)只有幾個(gè)有源元件:MAXQ3210 RISC微控制器、DS1801雙路音頻抽頭電位器和MAX4167雙路單電源供電運(yùn)算放大器。下面介紹每一元件及其在系統(tǒng)中的功能。MAXQ3210微控制器
MAXQ3210對(duì)系統(tǒng)進(jìn)行控制。MAXQ3210是16位RISC機(jī),最大時(shí)鐘速率達(dá)到3.58MHz。由于幾乎每一條指令都在1個(gè)時(shí)鐘周期內(nèi)執(zhí)行完成,處理器的性能接近每兆赫1百萬(wàn)條指令。因此,處理器峰值性能達(dá)到每秒3百58萬(wàn)條指令(MIPS)。MAXQ3210含有1K 16位字的EEPROM用于程序存儲(chǔ),128字的EEPROM以及64字節(jié)的SRAM用于數(shù)據(jù)存儲(chǔ)。EEPROM存儲(chǔ)器被配置為使用器件內(nèi)置啟動(dòng)加載程序在系統(tǒng)進(jìn)行編程,或者通過(guò)用戶提供的代碼在應(yīng)用程序中進(jìn)行編程。微控制器還含有一個(gè)9V至5V電壓穩(wěn)壓器,一個(gè)壓電喇叭驅(qū)動(dòng)器,以及15個(gè)通用I/O (GPIO)引腳。MAXQ3210處理器的另一版本MAXQ3212和它一樣,只是不含有壓電喇叭驅(qū)動(dòng)器和9V至5V穩(wěn)壓器。由于不需要喇叭驅(qū)動(dòng)器和穩(wěn)壓器,因此,MAXQ3212也是本應(yīng)用比較好的選擇。MAXQ3212是成本更低的解決方案。
最終,本應(yīng)用選擇MAXQ3210進(jìn)行原型開發(fā),以提高系統(tǒng)靈活性,便于以后進(jìn)行更新。

圖1. 系統(tǒng)原理圖
MAXQ3210還含有一個(gè)I/O引腳,可直接驅(qū)動(dòng)一個(gè)LED。本應(yīng)用利用直接LED驅(qū)動(dòng)功能,以不同速率閃爍LED,指示系統(tǒng)狀態(tài)。下面的系統(tǒng)狀態(tài)指示部分將詳細(xì)介紹這一功能。
DS1801數(shù)字電位器
Maxim在數(shù)字電位器上提供多種選擇。本應(yīng)用出于幾種原因而選擇了DS1801。該器件含有兩個(gè)音頻抽頭數(shù)字電位器,每個(gè)都有65個(gè)獨(dú)立觸點(diǎn)位置。位置0到63表示衰減級(jí)(即,從0dB到-63dB衰減)。位置64是特殊的“靜音”位置,提供大于-90dB的衰減。每一電位器使用一個(gè)8位移位寄存器來(lái)保持觸點(diǎn)位置設(shè)置,如表1所示。在這8位中,低6位表示電位器的觸點(diǎn)位置在0到63之間。當(dāng)設(shè)置為1時(shí),不論其他位如何,第7位強(qiáng)制靜音狀態(tài)。每一移位寄存器的第8位“不重要”,對(duì)電位器的設(shè)置沒(méi)有影響。在設(shè)置每個(gè)電位器或者所有電位器的觸點(diǎn)位置時(shí),所有16位必須移入這些寄存器。移位寄存器的安排及其位定義如表1所示。
表1. DS1801數(shù)字電位器寄存器
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | ? | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Don't Care | Mute | Pot 1 Value MSB | Pot 1 Value | Pot 1 Value | Pot 1 Value | Pot 1 Value | Pot 1 Value LSB | ? | Don't Care | Mute | Pot 0 Value MSB | Pot 0 Value | Pot 0 Value | Pot 0 Value | Pot 0 Value | Pot 0 Value LSB |
之所以選擇DS1801,還因?yàn)樗档土擞呻娢黄饔|點(diǎn)位置發(fā)生大的變化時(shí)帶來(lái)的噪聲。該器件含有一個(gè)“零跨越探測(cè)器”,只有當(dāng)跨過(guò)電位器的信號(hào)是零或者50ms超時(shí)后,觸點(diǎn)才能改變位置。通過(guò)限制觸點(diǎn)移動(dòng)到信號(hào)為零的點(diǎn),從而消除了觸點(diǎn)移位導(dǎo)致的振幅突然改變。新的觸點(diǎn)位置寫入50ms后,如果DS1801沒(méi)有探測(cè)到零跨越,那么,不論輸入信號(hào)狀態(tài)如何,觸點(diǎn)都將改變位置。如圖1原理圖所示,數(shù)字電位器的連接方式使電位器的兩端都有相等的直流偏置。這樣,出現(xiàn)的交流信號(hào)即使在供電電壓一半的直流偏置上,也可以通過(guò)0V。因此,數(shù)字電位器零跨越探測(cè)器達(dá)到了工作目的。DS1801的低電平有效ZCEN引腳限制在低電平,以使能零跨越探測(cè)器電路。
最后,選擇DS1801的另一原因是它具有控制接口,一個(gè)3線串行接口。設(shè)計(jì)用于CPU控制的應(yīng)用,該接口支持電位器的觸點(diǎn)位置被寫入到上面闡述的兩個(gè)8位寄存器中。微控制器GPIO的3個(gè)引腳被配置為輸出,以實(shí)現(xiàn)該接口。DS1801 3線接口含有3個(gè)輸入:低電平有效RST、CLK和D。低電平有效RST信號(hào)用于使能3線串口寫操作。CLK是時(shí)鐘,提供數(shù)據(jù)傳送同步信號(hào)。D信號(hào)是數(shù)據(jù),實(shí)現(xiàn)器件中設(shè)置電位器觸點(diǎn)位置的通信。通過(guò)其15個(gè)GPIO引腳,MAXQ3210很容易支持該3線接口。
MAX4167運(yùn)算放大器
MAX4167是MAX4166運(yùn)算放大器的雙路版本。它是單電源供電的(+2.7V至+6.5V)器件,提供滿幅輸入和輸出。在本應(yīng)用中,由一個(gè)5.0V電源為其供電。它典型的增益帶寬積為5MHz,典型擺率為2V/μs。MAX4167為音頻信號(hào)提供信號(hào)緩沖。在所示的配置中,器件提供單位增益,可用作簡(jiǎn)單的緩沖。
線性電平音頻信號(hào)與系統(tǒng)交流耦合輸入輸出,以消除音頻信號(hào)單電源供電導(dǎo)致的直流偏置電壓。
系統(tǒng)軟件
使用MAXQ?集成開發(fā)環(huán)境,即MAX-IDE以及MAXQ3210評(píng)估(EV)套件來(lái)開發(fā)并測(cè)試本應(yīng)用的軟件。MAX-IDE含有開發(fā)各種微處理器代碼需要的所有工具,包括MAXQ3210。它支持使用工程接口匯編語(yǔ)言代碼開發(fā)??梢葬槍?duì)目標(biāo)器件對(duì)工程進(jìn)行匯編,下載,逐行執(zhí)行。當(dāng)使用MAXQ3210評(píng)估套件時(shí),可以通過(guò)查看其存儲(chǔ)器內(nèi)容、調(diào)用堆棧項(xiàng)、所有寄存器中的數(shù)值、源代碼中可以訪問(wèn)的所有變量值,來(lái)檢查系統(tǒng)狀態(tài)。還可以在源代碼中設(shè)置斷點(diǎn),在預(yù)設(shè)的位置暫停執(zhí)行。MAX-IDE是免費(fèi)的開發(fā)工具,可以從Maxim網(wǎng)站下載。軟件簡(jiǎn)單明了。應(yīng)用程序代碼在一個(gè)主匯編語(yǔ)言程序Attenuator.asm中,它含有初始化函數(shù)、主程序循環(huán)、幾個(gè)子例程以及一個(gè)中斷服務(wù)例程。所有源代碼都可以下載(ZIP,8kB)。這一.ZIP文件含有MAX-IDE工程文件,所有必須的“include files”,以及源代碼文件。還提供應(yīng)用程序的.HEX文件,可以將其裝入MAXQ3210評(píng)估板或者用戶目標(biāo)板并執(zhí)行。
電位器控制
該軟件的主要功能是控制DS1801數(shù)字電位器。上電時(shí),電位器被設(shè)置在非衰減狀態(tài)。用戶輸入(例如,按下按鍵)后,經(jīng)過(guò)相應(yīng)的倒計(jì)時(shí)延時(shí),軟件開始步進(jìn)電位器的觸點(diǎn),直到達(dá)到其全靜音位置。電位器觸點(diǎn)的實(shí)際位置由兩個(gè)子程序控制;Output_Bytes和Clk_Bytes。Output_Bytes子程序采集單字節(jié)值,存儲(chǔ)在兩個(gè)電位器觸點(diǎn)位置寄存器中;測(cè)試其是否可用;將其順序發(fā)送至Clk_Bytes子程序。Clk_Bytes子程序提供所需的低層端口引腳處理和位串化功能,選通電位器的觸點(diǎn)位置數(shù)據(jù)。在編寫軟件時(shí),如果選擇了具有不同接口的另一電位器,對(duì)軟件進(jìn)行的修改只是替換這兩個(gè)子程序。
系統(tǒng)狀態(tài)指示
如前所述,采用了閃爍LED來(lái)指示系統(tǒng)狀態(tài)。大約0.25s的閃爍速率指示器件已經(jīng)上電,但是還沒(méi)有接收到用戶輸入以啟動(dòng)倒計(jì)時(shí)。大約1s的閃爍速率指示系統(tǒng)已經(jīng)啟動(dòng)了衰減步進(jìn)之前的倒計(jì)時(shí)模式。大約2s的閃爍速率指示系統(tǒng)處于步進(jìn)衰減模式。大約5s的閃爍速率指示系統(tǒng)到達(dá)其全靜音位置,并在此停留,直到下一次上電。通過(guò)限流電阻為紅色LED提供5V供電。LED的陰極直接連接到MAXQ3210的端口0,第7位,它可以吸收所需的電流。在所述的時(shí)間間隔,端口引腳P0.7與自己XOR,使其觸發(fā),隨之導(dǎo)致LED閃爍。時(shí)間間隔發(fā)生
本應(yīng)用中微控制器的另一主要作用是測(cè)量不同功能的時(shí)間間隔。從系統(tǒng)級(jí)角度看,本應(yīng)用至少應(yīng)具有兩個(gè)可變時(shí)間間隔延時(shí)。第一個(gè)間隔必須提供倒計(jì)時(shí)延時(shí),當(dāng)用戶按下啟動(dòng)按鍵時(shí)開始,當(dāng)啟動(dòng)衰減過(guò)程時(shí)結(jié)束。直覺(jué)上,這一時(shí)間間隔應(yīng)在1小時(shí)到2小時(shí)之間,讓人們有足夠的時(shí)間入睡。第二個(gè)延時(shí)必須在衰減過(guò)程的獨(dú)立步長(zhǎng)之間建立時(shí)間間隔。這一間隔有效地確定音頻從未衰減電平下降直到其最終靜音狀態(tài)所需的時(shí)間。因此,它將確定衰減步進(jìn)的平滑度。直覺(jué)上,整個(gè)衰減步進(jìn)過(guò)程應(yīng)在1分鐘到60分鐘,以實(shí)現(xiàn)電平精確平滑的下降。所以,采用電位器的65個(gè)獨(dú)立步長(zhǎng),表示步長(zhǎng)之間大約1s到55s的時(shí)間間隔。最后,按鍵開關(guān)還應(yīng)具有相對(duì)較短的反彈延時(shí),大約應(yīng)在200ms的量級(jí)。為實(shí)現(xiàn)這一范圍較寬的時(shí)間間隔,本應(yīng)用采用了兩個(gè)子程序。名為Delay的子程序在接收到的8位參數(shù)基礎(chǔ)上建立可變時(shí)間間隔。該參數(shù)確定通過(guò)10ms軟件時(shí)序循環(huán)的次數(shù)。由于該參數(shù)值在0到255之間,該子程序產(chǎn)生最大2.55s的時(shí)間間隔。軟件時(shí)序循環(huán)以3.58MHz的處理器時(shí)鐘頻率產(chǎn)生時(shí)間間隔。這一子程序還產(chǎn)生軟件最終實(shí)現(xiàn)中的反彈延時(shí)。
第二個(gè)時(shí)間間隔發(fā)生子程序名為L(zhǎng)Delay,它基于處理器內(nèi)部第2定時(shí)器產(chǎn)生的計(jì)數(shù)1s時(shí)間間隔。對(duì)定時(shí)器初始化以產(chǎn)生1s間隔的中斷;中斷服務(wù)程序遞增計(jì)數(shù)器變量TIC。LDelay子程序?qū)Ρ萒IC和預(yù)設(shè)值(參見下一節(jié)),當(dāng)它們相等時(shí),TIC被復(fù)位至零。當(dāng)TIC為零時(shí),變量TOC遞增1。然后,變量TOC和另一預(yù)設(shè)值對(duì)比。如果兩個(gè)值不相等,則重復(fù)循環(huán)。如果這些值相等,間隔完成,定時(shí)器停止。由于TIC和TOC都可以是8位值,該子程序能夠產(chǎn)生18.06小時(shí)的延時(shí)(255 × 255 × 1s = 65,025s = 18.06hr)。
評(píng)論