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