基于AT89S52 和K9F6408U0A 的語音數(shù)字系統(tǒng)設(shè)計
摘要: 在研究傳統(tǒng)語音錄放電路的基礎(chǔ)上,提出了一種基于AT89S52 的音頻信號采集、存儲與處理系統(tǒng)。該系統(tǒng)以單片機AT89S52 為控制器, 采用鍵盤和LCD 作為人機界面,ADC0809 采集音頻信號, 擴展8 MB 閃速存儲器K9F6408U0A作為數(shù)字化音頻信號的存儲器,通過軟件濾波濾除噪音;采用PWM 產(chǎn)生聲音的原理,使存儲在Flash 中的音頻數(shù)據(jù)控制PWM 每個波形的占空比,通過低通濾波器將聲音從PWM 的脈沖中分離,并驅(qū)動揚聲器。實驗表明:8 kHz 采樣頻率和8 位采樣位數(shù)可獲得清晰的語音以及較好的音樂聲,語音存儲時間達15 min。
數(shù)據(jù)采集技術(shù)涉及領(lǐng)域廣,采集信號的動態(tài)范圍寬,處理數(shù)據(jù)量大,對系統(tǒng)實時性能要求高。以數(shù)字信號的形式對信號進行處理,具有處理速度快、靈活、精確、抗干擾能力強、體積小及可靠性高等優(yōu)點,滿足了對信號快速、精確、實時處理及控制的要求。本設(shè)計利用了數(shù)字電路的這些優(yōu)點,對傳統(tǒng)的模擬錄音電路進行了改進,以較低的成本使性能得到了提高。
1 方案論證
本設(shè)計以數(shù)字化信號的形式對音頻信號進行處理,有以下3 種方案可供選擇:
1)直接利用語音芯片進行語音錄放。Winbond 公司的ISD系列語音芯片采用了Chip-Corded 專利技術(shù), 聲音無需A/D轉(zhuǎn)換和壓縮就可直接存儲,不存在A/D 轉(zhuǎn)換誤差,在一個記錄位(BIT)可存儲多達250 級聲音信號,相當于通常A/D 技術(shù)記錄容量的8 倍。片內(nèi)集成了晶體振蕩器、麥克風前置放大器、自動增益控制、抗混疊濾波器、平滑濾波器、聲音功率放大器等,只需很少的外圍器件,就可構(gòu)成一個完整的聲音錄放系統(tǒng)。
2)利用DSP 對采樣信號進行處理。DSP 是專門為快速實現(xiàn)各種信號處理算法而設(shè)計的、具有特殊結(jié)構(gòu)的微處理器,其處理速度遠遠超過一般的CPU。
3)利用AT89S52 作為系統(tǒng)主控芯片,利用ADC0809 對音頻信號進行采集和A/D 轉(zhuǎn)換,將轉(zhuǎn)換得到的數(shù)字化音頻信號存儲到擴展的數(shù)據(jù)存儲器中,利用軟件對信號進行數(shù)字濾波,最后通過單片機輸出PWM 信號來完成放音。
從經(jīng)濟和技術(shù)等因素考慮對上述3 種方案進行比較:直接利用語音芯片可以減少很多外圍電路, 電路設(shè)計方便,但語音芯片使用不夠靈活。DSP 具有強大的數(shù)字信號處理功能,使用靈活,但該芯片價格較高,不適于一般的應(yīng)用。方案3)中器件均為常用芯片,易于獲取,且價位不高。因此,方案3)為最佳設(shè)計方案。
2 硬件設(shè)計
圖1 為系統(tǒng)硬件結(jié)構(gòu)圖。音頻信號通過拾音器將聲音信號轉(zhuǎn)換為可以處理的電信號,前置放大電路用來對拾音器的輸出進行放大, 與A/D 轉(zhuǎn)換電路匹配,A/D 轉(zhuǎn)換電路實現(xiàn)對模擬信號的編碼。微處理器是系統(tǒng)的核心,它用來對數(shù)字化音頻信號進行處理和存儲,協(xié)調(diào)系統(tǒng)各個部分的工作,輸出PWM 波來驅(qū)動輸出電路。
系統(tǒng)硬件結(jié)構(gòu)框圖
圖1 系統(tǒng)硬件結(jié)構(gòu)框圖。
2.1 單片機
單片機是系統(tǒng)的控制中心, 它主要實現(xiàn)以下的功能:控制LCD 顯示語音信號的相關(guān)信息, 控制按鍵識別和功能選擇; 控制音頻數(shù)據(jù)的采集并存儲在Flash ROM, 放音時讀取Flash ROM 中數(shù)據(jù),用軟件方法產(chǎn)生PWM 脈沖信號,實現(xiàn)語音的存儲和回放。
2.2 聲音信號拾取、放大電路
聲音信號拾取電路就是將聲音信號轉(zhuǎn)換為電信號的裝置。本設(shè)計選用麥克風,它是一種聲敏電阻,其阻值隨外界聲音信號的變化而變化,將其串聯(lián)在電路中,電阻的變化形成電壓的變化,經(jīng)過電容通交隔直,就得到了表征聲音信號特征的電信號。
然而由于聲音信號拾取電路輸出電壓的幅值很小,為20~25 mV,若將該信號直接與A/D 轉(zhuǎn)換電路相連,由于A/D轉(zhuǎn)換器最小分辨電壓也為毫伏數(shù)量級, 會產(chǎn)生很大的誤差,為了保證系統(tǒng)的精度,在和A/D 轉(zhuǎn)換電路相連之前,需串聯(lián)一個放大電路, 考慮到聲音信號拾取電路的輸出信號很小,放大電路的失真度和噪聲對系統(tǒng)的精度影響最大,故將其設(shè)計為抗共模干擾強的并聯(lián)負反饋放大電路, 由于音頻信號的頻寬較大,故選用寬頻帶,低輸出阻抗的雙運放NE5532。
2.3 A/D 轉(zhuǎn)換電路
A/D 轉(zhuǎn)換電路由A/D 轉(zhuǎn)換器ADC0809 與系統(tǒng)處理器AT89S52 組成, 主要實現(xiàn)對放大后的聲音信號進行采樣。
ADC0809 與AT89S52 的電路連接如圖2 所示。
ADC0809 與AT89S52 的連接電路
圖2 ADC0809 與AT89S52 的連接電路
從圖2 中可以看到,把ADC0809 的ALE 信號與START信號接在一起,這樣可使得在信號的前沿寫入(鎖存)通道地址,緊接著在其后沿就啟動轉(zhuǎn)換。啟動A/D 轉(zhuǎn)換只需要一條P2.7=0 指令。在此之前,要將P2.7 清零并將最低3 位與所選的通道對應(yīng)的地址送入數(shù)據(jù)指針DPTR 中。ADC0809 的轉(zhuǎn)換結(jié)束信號EOC 取反后與AT89S52 的INT1 相連,采用中斷方式讀取A/D 轉(zhuǎn)換結(jié)果,并啟動下一次A/D 轉(zhuǎn)換。也可定時啟動A/D 轉(zhuǎn)換,并讀取上次轉(zhuǎn)換結(jié)果。
[!--empirenews.page--]
2.4 聲音編碼存儲電路
在采樣時每一采樣點都會產(chǎn)生1 字節(jié)的數(shù)字編碼信號,由于采樣的頻率為8 kHz, 若錄音15 min, 則所需的存儲空間為7.031 25 MB,故系統(tǒng)選用8 MB 的Flash 存儲器K9F6408U0A,由于該存儲器的地址線和數(shù)據(jù)線可復用[3],這樣可節(jié)省I/O 接口。K9F6408U0A 的最大優(yōu)點在于其命令、數(shù)據(jù)和地址均可通過8 條I/O 接口線與主控制器進行通信, 大大簡化了系統(tǒng)的連線, 增強了系統(tǒng)的穩(wěn)定性。除8 條I/O 接口線外,K9F6408U0A 還包括以下控制線,1)CLE: 命令鎖存使能端,高電平有效。在WE 信號的上升沿,命令信號可通過I/O 口鎖入命令寄存器;2)ALE:地址鎖存使能端,高電平有效。在WE信號的上升沿, 地址信號可通過I/O 口鎖入地址寄存器;3)CE:片選線,低電平有效。在頁編程或塊擦除操作期間或器件處于忙狀態(tài)時,CE 高電平將被忽略,4)WE: 寫使能口,命令、地址和數(shù)據(jù)在WE 信號的上升沿被鎖定;5)RE: 讀使能口,在該口的下降沿將數(shù)據(jù)送到I/O 口線上,并使內(nèi)部列地址寄存器加1;6)WP:寫保護口,低電平有效,當其為低時,編程和擦除操作禁止;7)R/B:操作狀態(tài)指示信號。為低時,表示正在編程、擦除或讀操作,操作結(jié)束后變高。利用上述控制線,從而方便實現(xiàn)系統(tǒng)主控制器對K9F6408U0A 的控制。AT89S52單片機與K9F6408U0A 存儲接口電路如圖3 所示。
AT89S52 與K9F6408U0A 存儲接口電路
圖3 AT89S52 與K9F6408U0A 存儲接口電路。
2.5 PWM 輸出電路
本設(shè)計采用單片機輸出PWM 信號驅(qū)動音頻放大電路,PWM 輸出電路如圖4 所示。PWM 是一種利用微處理器的數(shù)字輸出控制模擬電路的有效技術(shù),對一系列脈沖的寬度進行調(diào)制,等效獲得所需波形,并且由于沒有使用D/A 轉(zhuǎn)換器,系統(tǒng)成本減少很多。PWM 的優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進行D/A 轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小。此外PWM 信號很容易通過MCU 的軟件進行控制,即使電路稍微有些系統(tǒng)誤差,易于通過軟件進行校正。
圖4 中, 利用單片機的P1.7 引腳輸出一定寬度的PWM信號,通過三極管整形后,作用在慣性環(huán)節(jié)上,得到的輸出信號PWMOUT 將作用在音頻功放電路上,還原為聲音。
PWM 輸出電路
圖4 PWM 輸出電路。
2.6 音頻功率放大電路
為了使系統(tǒng)有足夠大的輸出,驅(qū)動揚聲器發(fā)聲,便于調(diào)節(jié)音量, 在PWM 輸出電路后使用了音頻信號功率放大器LM386 構(gòu)建功率放大電路,如圖5 所示。
音頻功放電路
圖5 音頻功放電路。
LM386 型音頻功率放大器主要應(yīng)用于低電壓消費類產(chǎn)品。為使外圍元件最少,電壓增益內(nèi)置為20。但在其引腳1 和8 之間外接電阻和電容, 便可將電壓增益調(diào)為任意值, 直至200。輸入端以地位參考,同時輸出端被自動偏置到電源電壓的一半, 在6 V 電源電壓下, 其靜態(tài)功耗僅為24 mW, 使得LM386 特別適用于電池供電的場合。PWMOUT 為PWM 輸出電路的輸出,揚聲器為8 Ω,0.5 W。經(jīng)過調(diào)試發(fā)現(xiàn)將電源+5 V用10 μF 和0.1 μF 的電容濾波后,會減小很多噪聲,效果較好。[!--empirenews.page--]
3 系統(tǒng)軟件設(shè)計
系統(tǒng)具有錄音、放音、暫停、清除存儲內(nèi)容等功能,各種功能由按鍵來選擇,系統(tǒng)首先掃描各個按鍵的狀態(tài),如果有按鍵按下,就轉(zhuǎn)往相應(yīng)的處理程序,系統(tǒng)程序流程如圖6 所示。
系統(tǒng)流程圖
圖6 系統(tǒng)流程圖。
3.1 系統(tǒng)初始化程序
系統(tǒng)初始化程序主要對單片機中斷、定時器、LCD 初始化、鍵盤、PWM、K9F6408U0A 存儲接口,以及ADC0809 地址、程序中要用到的各個變量進行設(shè)置。
3.2 按鍵掃描程序
由于錄音和暫停是由和外部中斷引腳相連的2 個按鍵來設(shè)置,一旦按鍵按下就進入錄音或放音程序,所以按鍵掃描程序用于掃描放音鍵和清除鍵是否按下。
3.3 錄音程序
與外部中斷0 相連的按鍵按下,則進入錄音程序。
錄音過程實質(zhì)上是啟動ADC0809 對模擬音頻信號進行采樣, 并將A/D 轉(zhuǎn)換結(jié)果存儲到外圍數(shù)據(jù)存儲器中的過程,故其主要包含對ADC0809 進行讀取, 對外圍數(shù)據(jù)存儲器進行寫入兩個部分。
提取聲音數(shù)據(jù)時,要注意采樣頻率、采樣位數(shù)、存儲容量與存儲時間的關(guān)系,通常8 kHz 的采樣頻率和8 位的采樣位數(shù)可獲得清晰的語音以及較好的音樂聲,并且占有較少的存儲空間。
以8 kHz 的采樣頻率啟動ADC0809,并讀取上次采樣結(jié)果,寫到外擴Flash 存儲器的代碼片段如下:
3.4 放音程序
若P1.0 按下,則執(zhí)行放音程序。放音過程實質(zhì)上是讀取外圍數(shù)據(jù)存儲器中的數(shù)據(jù),將其轉(zhuǎn)化為一定寬度的PWM 波,進行輸出的過程。讀取K9F6408U0A 的子函數(shù)如下:
// 函數(shù)名稱: READBYTE
[!--empirenews.page--]
產(chǎn)生PWM 波形的步驟:1)設(shè)置定時器,產(chǎn)生定時中斷,若采樣率為11.025 kHz, 則設(shè)置定時器的定時中斷頻率為11.025 kHz;2)初始化PWM 模塊,產(chǎn)生11.025 kHz 的PWM波形;3)等待定時器中斷,在中斷處理程序中取采樣數(shù)據(jù),并設(shè)置PWM 占空比寄存器,判斷聲音是否播放完成。若完成,則關(guān)定時器中斷,并停止PWM 輸出。
3.5 暫停程序
在錄音過程中,如果需要暫時停止錄音可以按下暫停鍵進入暫停狀態(tài), 再次按下暫停鍵可以返回暫停以前的狀態(tài)。
程序中設(shè)置了一個變量來指示現(xiàn)在是應(yīng)該暫停還是恢復。
3.6 存儲器內(nèi)容清除程序
當存儲器內(nèi)容已滿,而又需要錄音時,可以按下清除按鍵,清除一定容量的內(nèi)容,供用戶再次使用。
擦除:以塊為單位進行擦除。代碼片段如下。
4 調(diào)試注意事項
系統(tǒng)進行調(diào)試時,應(yīng)注意以下方面:
1)由于在PCM(Pulse Code Modulation)編碼及DPCM 編碼模式下都要采用8 kHz 的采樣率,所以,每次壓縮中斷服務(wù)程序必須在不超過125 μs 的時間內(nèi)完成,因此,壓縮錄音處理程序的代碼必須進行最大可能的優(yōu)化,以減少程序執(zhí)行時間,以免采樣和數(shù)據(jù)處理或信息顯示發(fā)生沖突,也可避免在中斷采樣時造成采樣點的丟失。
2)在選擇ADC0809 的時鐘時,經(jīng)典選擇是640 kHz 左右,最初選擇將單片機的ALE 端4 分頻后作為ADC0809 的時鐘信號,但發(fā)現(xiàn)影響了LCD 的輸出顯示。將ALE 改為2 分頻后(用1 M 觸發(fā))作為ADC0809 的時鐘信號,問題得到解決。
3)使用MAX813L 復位芯片替代RC 復位電路,使電路可靠復位,結(jié)合軟件監(jiān)控實現(xiàn)看門狗功能。
4)當采樣頻率為8 kHz,字長為8 位時,存儲語言時長超過15 min,回放語音質(zhì)量良好。
5 結(jié)束語
利用K9F6408U0A 8 MB NAND Flash 存儲器和單片機PWM 功能可為單片機的應(yīng)用增加語音功能。對聲音采樣數(shù)據(jù)的存儲方式是用直接的、原始的采樣數(shù)據(jù)。在具體的實際應(yīng)用中,可選用內(nèi)嵌A/D 轉(zhuǎn)換器的STC12C5A08AD,可省去外擴ADC0809,使電路更簡潔。創(chuàng)新之處在于不使用專用的語音芯片,實現(xiàn)使單片機應(yīng)用系統(tǒng)語音的存儲與回放。