/script> 摘要:詳細(xì)闡述一種采用PIC16C55單片機(jī)實(shí)現(xiàn)可控?cái)?shù)字語音延遲器的設(shè)計(jì)方案,同時(shí)提供控制電路圖及軟件算法流程圖。 關(guān)鍵詞:延遲器 語音信號(hào) PIC單片機(jī) 延遲器在音頻信號(hào)處理中有著重要而特殊的用途,是制造混響器、回聲信號(hào)的重要部件,在無線通信同步控制中也起著重要作用。延遲器大致可分為BBD (Bucket Brigade Device)式延遲器和數(shù)字式延遲器兩類。數(shù)字式延遲器與BBD式延遲器相比,具有延時(shí)時(shí)間范圍寬,工作頻帶寬,動(dòng)態(tài)范圍大等特點(diǎn);而可控式延遲器可以靈活產(chǎn)生多種時(shí)延,以便應(yīng)用于不同的場(chǎng)合。本文介紹一種基于PIC系列單片機(jī)的可控?cái)?shù)字語音延遲器的設(shè)計(jì)方案。 本系統(tǒng)采用性價(jià)比極高的PIC16C55單片機(jī)作為中心控制部件。PID16C55單片機(jī)是PIC系列單片機(jī)中的低檔型單片機(jī),具有20個(gè)I/O,1個(gè)定時(shí)器和1個(gè)WDT,其最短指令周期可達(dá)200ns。利用該型號(hào)單片機(jī)作為控制部件,具有控制快速、擴(kuò)展方便、低功耗、性能穩(wěn)定等特點(diǎn),同時(shí)還可以最大限度地減少外圍電路以降低成本,提高性價(jià)比。
1 系統(tǒng)工作原理 可控?cái)?shù)字語音延遲器的原理框圖如圖1所示。輸入的語音信號(hào)先經(jīng)過低通抗混迭濾波器,濾除其中的高頻成分后送入A/D轉(zhuǎn)換器。經(jīng)過A/D轉(zhuǎn)換后,信號(hào)變成數(shù)字信號(hào)。該數(shù)字信號(hào)在PIC16C55單片機(jī)的控制下被寫入存儲(chǔ)器。系統(tǒng)中高有兩組存儲(chǔ)器,這兩組存儲(chǔ)器在單片機(jī)的控制下交替工作:在一個(gè)延遲周期內(nèi),一組存儲(chǔ)器專門用于存儲(chǔ)本周期內(nèi)采集的數(shù)據(jù),而另一組存儲(chǔ)器專門用于把上一個(gè)周期所采集的數(shù)據(jù)按順序送到數(shù)據(jù)總線,經(jīng)過D/A轉(zhuǎn)換器和低通濾波器后恢復(fù)出原始信號(hào)。在下一個(gè)延遲周期,兩組存儲(chǔ)器交換工作狀態(tài),以后按此不斷循環(huán)。可見,延遲的時(shí)間取決于A/D轉(zhuǎn)換器前后兩次啟動(dòng)的時(shí)間間隔和存儲(chǔ)區(qū)的大小。在本系統(tǒng)中,利用PIC16C55中的定時(shí)器定時(shí)產(chǎn)生A/D轉(zhuǎn)換器的啟動(dòng)信號(hào),定時(shí)器的定時(shí)時(shí)間為10μs,所以,最小延遲時(shí)間為10μs。而存儲(chǔ)區(qū)的大小設(shè)為256,所以,最大延遲時(shí)間為10μs×256=2560μs=2.56ms。系統(tǒng)中的預(yù)置單元用來設(shè)置延遲單元數(shù),進(jìn)而得到所需的延遲時(shí)間。
系統(tǒng)中A/D轉(zhuǎn)換器選用ADC0820,其讀模式下的轉(zhuǎn)換時(shí)間為2.5μs。而且,該芯片內(nèi)置有采樣/保持電路,不需外部時(shí)鐘,故可大大簡(jiǎn)化電路。因ADC0820的輸入范圍僅為0~+5V,而系統(tǒng)輸入信號(hào)的范圍為-5~+5V,所以需對(duì)輸入信號(hào)進(jìn)行預(yù)處理,使其電壓范圍變?yōu)?~+5V。系統(tǒng)中的兩組存儲(chǔ)區(qū)用RAM6116中的00H~FFH和100H~1FFH單元代替。預(yù)置單元由一個(gè)8路開關(guān)實(shí)現(xiàn),預(yù)置的范圍為0~255。D/A轉(zhuǎn)換器選用DAC0832。
2 控制電路設(shè)計(jì) 系統(tǒng)中PIC16C55單片機(jī)是中心控制部件。它的主要任務(wù)有:定時(shí)控制A/D轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換;控制RAM(1)、RAM(2)的讀寫;控制D/A轉(zhuǎn)換器的轉(zhuǎn)換;產(chǎn)生RAM(1)、RAM(2)的地信息;控制RAM(1)、RAM(2)的交替;接受預(yù)置輸入。控制電路如圖2所示。
RA0接收ADC0820的轉(zhuǎn)換結(jié)束信號(hào),RB0控制ADC0820的啟動(dòng),RB1控制RAM6116的寫操作,RB2控制RAM6116的讀操作,同時(shí)控制DAC0832的寫操作。PIC16C55 除了控制轉(zhuǎn)換及讀寫外,還要產(chǎn)生RAM的地址信息及接收預(yù)置輸入。在本系統(tǒng)中,由PIC16C55的RC口產(chǎn)生地址信息,同時(shí)也能接收預(yù)置輸入。系統(tǒng)中利用74LS373作為預(yù)置輸入的緩存,而74LS373的OE端由RB3控制。當(dāng)RC口作為地址發(fā)生器時(shí),RB3=OE=1,即74LS373的輸出不允許,其輸出端為高阻態(tài);當(dāng)RC口接收預(yù)置輸入時(shí),RB3=OE=0,即74LS373的輸出允許,其輸出端為預(yù)置輸入。系統(tǒng)中兩組存儲(chǔ)區(qū)的選擇由RA3控制:當(dāng)RA3=A8=0時(shí),選擇的存儲(chǔ)區(qū)為00H~FFH單元;當(dāng)RA3=A8=1時(shí),選擇的存儲(chǔ)區(qū)為100H~1FFH單元。
3 軟件設(shè)計(jì) 系統(tǒng)正常工作時(shí)的時(shí)序如圖3所示。當(dāng)START變?yōu)榈碗娖綍r(shí),ADC0820開始轉(zhuǎn)換,轉(zhuǎn)換時(shí)間約為2.5μs。在ADC0820轉(zhuǎn)換期間,讀存儲(chǔ)區(qū)開始讀操作,同時(shí)DAC0832開始轉(zhuǎn)換,存儲(chǔ)區(qū)的讀操作時(shí)間設(shè)為1μs。當(dāng)ADC0820轉(zhuǎn)換結(jié)束后,INT變?yōu)榈碗娖剑瑫r(shí)寫存儲(chǔ)區(qū)進(jìn)行寫操作,延時(shí)1μs后,START設(shè)為高電平。至此,一次的轉(zhuǎn)換和一次的讀寫操作已經(jīng)操作已經(jīng)完成。從此刻到下一次A/D轉(zhuǎn)換開始的時(shí)間內(nèi),主要完成的操作有:存儲(chǔ)地址的改變、兩組存儲(chǔ)區(qū)的交替及預(yù)置值的讀入。 程序流程如圖4所示。 結(jié)束語 筆者根據(jù)本文的設(shè)計(jì)方案制作了實(shí)際電路,效果良好。在實(shí)際應(yīng)用中,讀者可根據(jù)實(shí)際情況靈活改變最小延遲時(shí)間和最大延遲單元數(shù)。通過改變PIC16C55中定時(shí)器的定時(shí)時(shí)間即可改變最小遲時(shí)間;通過改變存儲(chǔ)區(qū)的大小即可改變最大延遲單元數(shù),進(jìn)而改變最大延遲時(shí)間
|