基于單片機的數(shù)字電位器的設計
人耳對聲強的主觀感受遵循韋伯定律(Webber's Law),在音量較小時人耳對聲波振幅的改變感受靈敏,聲音達到一定響度后,人耳的聽覺特性開始變得遲鈍。而指數(shù)型電位器的阻值變化規(guī)律為先慢后快,如果將這種衰減特性用在音量調(diào)節(jié)中,則恰好可以抵消人耳對音量感知的對數(shù)特性,保證主觀聽感的平滑。
與傳統(tǒng)的機械式音量電位器相比,數(shù)字電位器(DCP)的阻值調(diào)節(jié)由內(nèi)部CMOS開關控制,因而使用壽命長、可靠性高且不會產(chǎn)生機械噪聲;如果將廉價的通用型線性數(shù)字電位器直接用于音量調(diào)節(jié),在小音量狀態(tài)下稍微調(diào)節(jié)電位器即會使輸出聲壓陡然增加,無法保證大動態(tài)范圍內(nèi)音量的準確定位,因此目前將數(shù)字式電位器運用在成熟功放產(chǎn)品中的實例還不多。實際上,如果將低分辨率線性數(shù)字電位器與通用嵌入式系統(tǒng)結合起來,就能夠得到運用于音量控制領域的低成本高分辨率指數(shù)式電位器。
總體設計方案
在數(shù)字電位器的擴展系統(tǒng)中,主控單元可選用常見的8位或16位成熟單片機。這里我們主要針對Intersil公司的低分辨率線性數(shù)字電位器X9313、X9312進行擴展,系統(tǒng)最終能夠達到的實際分辨率為31×99=3069級;如果把32抽頭的X9313全部更換為X9312,分辨率還可以進一步提高至9801級。
X9313與X9312這兩種DCP均為三線制接口、帶掉電自動保存功能的非易失性數(shù)字電位器,其內(nèi)部分別包含31、99個電阻單元構成的電阻陣列,相鄰兩個電阻單元以及電阻陣列端點都設置有可以被滑動單元訪問的抽頭,如圖1所示?;瑒訂卧奈恢糜蒀S、U/D和INC三個輸入端控制,抽頭位置值能夠被存儲在非易失性存儲器中,供下次上電時調(diào)用置位。
圖1 X931x系列DCP的內(nèi)部結構
系統(tǒng)的每個聲道的音量控制由兩個X9313與一個X9312構成,圖2為三個數(shù)字電位器的功能連接圖。所有DCP的U/D、INC端分別連接在一起,而片選端CS各自占用一個MCU端口。這種硬件連接方式能夠很容易地實現(xiàn)四聲道乃至更多聲道的音量控制。為了與常見的數(shù)字式音量調(diào)整習慣一致,最好不要保留通用DCP的三鍵式控制方式,而只需設置UP/DOWN兩組按鍵直接控制音量的增減。UP/DOWN按鍵與MCU的連接應設置軟件延時的去抖算法,以消除按鍵輸入時的抖動,MCU與DCP之間則不再考慮按鍵抖動。
圖2 系統(tǒng)連接示意圖
分辨率擴展
Ra和Rb同時并聯(lián)在輸入信號Vin的兩端,其抽頭數(shù)均為32。Ra和Rb的輸出作Rc端口電壓VH和VL設置,Ra始終比Rb高一個位置間隔,這樣就可以將1/32Vi~31/32Vi共31種輸入信號的電壓變化加到Rc兩端。由于Rc選用了100抽頭的DCP,從而可以在Rc輸出端得到31×(100-1)=3069級的Vin線性電壓值。
隨著Rc滑動端上下移動,Ra和Rb的位置也在MCU的控制下進行相應調(diào)整。在上移過程中,設Rc滑動端上移值與目前所在位置值相加后的值為M。若M小于100,說明這時只是Rc的滑動端發(fā)生移動,而Ra和Rb的滑動觸點位置不變;若M值超過100,則Ra和Rb的觸點均上移1個滑動位,Rc的滑動端返回M減去100之后所得實際值決定的觸點位。類似地,在抽頭下移過程中,若Rc的滑動端需要下移到抽頭0以下時,則Ra和Rb的滑動端也需要同步下移1位,以保持電位器實際調(diào)整步數(shù)的平衡。
電位器Rc的抽頭輸出端設置了一級電壓跟隨器,可以減小因負載并聯(lián)對級聯(lián)后分壓系數(shù)的影響。電位器觸點的滑動過程屬于不連貫的步進調(diào)節(jié)方式,故Rc的電阻值不是連續(xù)變化而是在滑動端調(diào)整到位后才具有所希望的輸出,這樣會使得輸出電壓出現(xiàn)一些小幅跳變。但由于輸入信號Vin的絕對增量并不大,且整個電位器擴展系統(tǒng)的分辨率很高,對此我們可在Rc電位器的滑動輸出端對地并聯(lián)一只1000~2200pF的小電容C1,以減小輸出電壓的波動。
上述電位器分辨率擴展的思路具有較高的可行性與移植性,此前曾應用在我們的一項程控增益可編程高速放大器的系統(tǒng)設計方案中,取得很好的使用效果。
電阻值指數(shù)化
DCP的指數(shù)化處理采用軟件方式實現(xiàn),不需要額外增加硬件。由于通用單片機的函數(shù)運算功能非常有限,因此在算法上,將電位器每級切換所要求的觸點移動步數(shù)以數(shù)組形式保存在單片機的ROM中。阻值調(diào)整時,MCU根據(jù)按鍵的UP/DOWN狀態(tài)和當前的階數(shù)值以查表方式取得各只DCP的實際偏移量,然后再由MCU控制DCP執(zhí)行相應的步進切換動作??紤]到3069級的實際分辨率,系統(tǒng)從零到滿幅輸出共設置了24級的步進階數(shù),優(yōu)于市場上主流機械式步進電位器18~21的步進階數(shù),具體的階數(shù)與電位器抽頭偏移量關系可參見表1。從表中不難看出,系統(tǒng)將DCP擴展到3069的高分辨率正是為了適應電位器阻值在指數(shù)化調(diào)整過程中步進值的精確辨析。
表1 階數(shù)與電位器抽頭偏移量關系
X9312與X9313是不能直接從片內(nèi)存儲單元讀出滑動端當前所在位置的,因此,為了記憶各只數(shù)字電位器滑動觸點的實際位置,必須在程序中設置變量對不同電位器的觸點位置進行記憶。
結束語
高分辨率指數(shù)式數(shù)字電位器的解決方案以較低成本實現(xiàn)了通用型線性數(shù)字電位器在音響系統(tǒng)中的應用,具有較好的工程應用前景和推廣價值。此外,由于DCP的指數(shù)式高分辨率擴展僅僅占用了很少的系統(tǒng)資源,因而可將MCU的剩余端口資源應用在音量狀態(tài)的指示以及紅外信號解碼等功能性環(huán)節(jié)中,以完善系統(tǒng)功能。