摘要:本應用筆記介紹一種可自動實現立體聲音頻衰減器的系統。MAXQ3210低功耗16位RISC微控制器是系統控制器,它產生各種時序間隔,驅動音頻信號逐漸衰減,以靜音狀態結束。使用DS1801 65級、音頻抽頭、雙路數字電位器來產生衰減。MAX1467雙路、單電源供電運算放大器提供信號緩沖。可以從Maxim網站上下載固件源代碼。
然而,并不是所有的娛樂設備都有這類功能;合成立體聲系統一般不提供這類特性。在這種情況下,需要通過外部器件來增加睡眠模式功能。簡單地關斷這類系統的電源是不夠的。這會突然結束音頻,轉到靜音。更好的方法是讓音頻電平在相對較長的時間內下降,音頻以幾乎察覺不到的方式逐漸停止。本應用筆記介紹的低成本器件便可以實現這一功能。
該器件可以插入到合成立體聲系統的音頻流中,在音頻源和最終功率放大器之間。器件需要線性電平信號輸入輸出,因此,能夠放在系統中有該信號電平的任意地方。當開始上電時,該器件對音頻信號直通,沒有任何衰減,并保持這一狀態,直到其“開始”按鈕被按下。這一動作啟動初始時間延時,使器件在預設的倒計時間隔內保持這一“全輸出”狀態。倒計時間隔后,器件開始平滑、逐步地提高音頻衰減,直到信號完全靜音。
MAXQ3210處理器的另一版本MAXQ3212和它一樣,只是不含有壓電喇叭驅動器和9V至5V穩壓器。由于不需要喇叭驅動器和穩壓器,因此,MAXQ3212也是本應用比較好的選擇。MAXQ3212是成本更低的解決方案。
最終,本應用選擇MAXQ3210進行原型開發,以提高系統靈活性,便于以后進行更新。
![圖1. 系統原理圖](/article/UploadPic/2009-4/20094231603814.gif)
圖1. 系統原理圖
MAXQ3210還含有一個I/O引腳,可直接驅動一個LED。本應用利用直接LED驅動功能,以不同速率閃爍LED,指示系統狀態。下面的系統狀態指示部分將詳細介紹這一功能。
每一電位器使用一個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為音頻信號提供信號緩沖。在所示的配置中,器件提供單位增益,可用作簡單的緩沖。
線性電平音頻信號與系統交流耦合輸入輸出,以消除音頻信號單電源供電導致的直流偏置電壓。
軟件簡單明了。應用程序代碼在一個主匯編語言程序Attenuator.asm中,它含有初始化函數、主程序循環、幾個子例程以及一個中斷服務例程。所有源代碼都可以下載(ZIP,8kB)。這一.ZIP文件含有MAX-IDE工程文件,所有必須的“include files”,以及源代碼文件。還提供應用程序的.HEX文件,可以將其裝入MAXQ3210評估板或者用戶目標板并執行。
電位器觸點的實際位置由兩個子程序控制;Output_Bytes和Clk_Bytes。Output_Bytes子程序采集單字節值,存儲在兩個電位器觸點位置寄存器中;測試其是否可用;將其順序發送至Clk_Bytes子程序。Clk_Bytes子程序提供所需的低層端口引腳處理和位串化功能,選通電位器的觸點位置數據。在編寫軟件時,如果選擇了具有不同接口的另一電位器,對軟件進行的修改只是替換這兩個子程序。
為實現這一范圍較寬的時間間隔,本應用采用了兩個子程序。名為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)。
引言
現在很多娛樂設備不需要人干預就可以自動停止工作。例如,現代的無線設備和家庭電視在一定時間或者在預設的周期內可以自己關斷,這些應用已經比較普遍了。這種功能便于實現“睡眠”模式,當人們睡著之后,設備自動關斷。然而,并不是所有的娛樂設備都有這類功能;合成立體聲系統一般不提供這類特性。在這種情況下,需要通過外部器件來增加睡眠模式功能。簡單地關斷這類系統的電源是不夠的。這會突然結束音頻,轉到靜音。更好的方法是讓音頻電平在相對較長的時間內下降,音頻以幾乎察覺不到的方式逐漸停止。本應用筆記介紹的低成本器件便可以實現這一功能。
該器件可以插入到合成立體聲系統的音頻流中,在音頻源和最終功率放大器之間。器件需要線性電平信號輸入輸出,因此,能夠放在系統中有該信號電平的任意地方。當開始上電時,該器件對音頻信號直通,沒有任何衰減,并保持這一狀態,直到其“開始”按鈕被按下。這一動作啟動初始時間延時,使器件在預設的倒計時間隔內保持這一“全輸出”狀態。倒計時間隔后,器件開始平滑、逐步地提高音頻衰減,直到信號完全靜音。
系統硬件
系統硬件原理圖如圖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. 系統原理圖](/article/UploadPic/2009-4/20094231603814.gif)
圖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數字電位器寄存器
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,還因為它降低了由電位器觸點位置發生大的變化時帶來的噪聲。該器件含有一個“零跨越探測器”,只有當跨過電位器的信號是零或者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)。
評論