李修池 陳歡歡 羅聰 嚴萍
【摘要】介紹了一種以飛思卡爾的16位單片機MC9S12DG128和ISD4004系列語音芯片為核心的電池管理語音報警系統,以電動汽車電池管理系統為平臺,采用硬件SPI方式通信,實現了電池管理的電壓檢測報警、電流過流報警、溫度檢測及溫度異常報警、絕緣監測報警、SOC監測報警等功能。為了滿足靈活錄音的需要,設計了耳機插口錄音模式和駐極式話筒錄音模式。測試結果表明語音系統能夠實時、精準地進行播報,且在惡劣環境中工作穩定。
【關鍵詞】MC9S12DG128 語音系統 ISD4004 語音錄放 多種方式
在數字電子技術迅猛發展的今天,語音的應用已隨處可見,如微信、銀行排隊系統和公交站臺播報系統等。語音是人類信息的主要載體之一,是自然界最動聽、和諧的聲音,其在不同領域的應用給人們的生活帶來了極大的方便。在汽車行業,將語音用于汽車電池管理的意外報警上,極大地提高了電池管理的安全性和可靠性。以全順系列電動汽車整車控制為平臺,設計了以MC9S12DG128和ISD4004為核心的語音系統,本系統可實現電池管理的電壓檢測報警、電流過流報警、溫度檢測及溫度異常報警、絕緣監測報警、SOC監測報警等功能。
1語音系統平臺的介紹
本電動汽車電池管理的結構框圖如圖1所示,其分為主控模塊和子模塊。其中,子模塊與主控模塊通過內部低速CAN通訊,每個子模塊分別負責獨立完成電池的電壓采集、溫度采集、單體均衡保護、CAN通訊等功能。主控模塊則有兩個功能,一是對子模塊發過來的信息進行處理(主要完成電池信息的收集處理、SOC的估算、電池故障診斷和電池SOH的估算、電池組的熱管理、故障診斷等),并在以上功能完成后進行相應的語音報警;二是與上位機和整車控制器的通訊,通過外部CAN把電池管理系統采集到的數據發送到上位機進行數據分析、處理、顯示和保存。
2語音系統的設計
動汽車電池管理選用飛思卡爾的16位單片機MC9S12DG128作為主模塊的控制器[1],其具有較強的數據處理能力和控制功能,尤其是內部的雙CAN通道,優化了電池管理系統結構。MC9S12DG128與語音報警系統采用硬件SPI方式進行通信。由于需要語音播報的話語時間較長,故選用可錄音16分鐘的ISD4004-16M芯片。
2.1語音系統的硬件設計
語音報警系統選用的ISD4004系列芯片[2]采用CMOS技術,內含振蕩器、防混淆濾波器、平滑濾波器、音頻放大器、自動靜噪及高密度多電平閃爍存貯陳列。ISD4004和MC9S12DG128的通信為SPI同步串行數據傳輸協議[3],其通信時序如圖2所示。
ISD4004-16M主要用到的引腳有:音頻模擬輸入ANA_IN+、ANA_IN-,音頻模擬輸出AUDIO_OUT,片選信號SS,串行數據輸入MOSI,串行數據輸出MISO,串行時鐘SCLK等,其與控制器的接口為SS(PP3)、SCK(PP2)、MOSI(PP1)、MISO(PP0)。通過對MC9S12DG128以上四個接口的操作就可完成語音的錄入和回放,具體操作時序如圖3所示。
2.1.1電源轉換電路
ISD4004為3V單電源工作,故采用低壓差線性調壓器LM1117-3.3來給ISD4004供電,其自帶電流限制和熱保護功能,輸出電流可達800mA,電路圖如圖4所示。
2.1.2耳機插口錄音電路
耳機插口錄音(AUDIO_IN)電路[4]如圖5所示,該電路可以實現電腦或其他音源通過對錄線將語音錄進芯片。錄音時,只要將耳機插口(AUDIO_IN)和電腦或其他音源通過對錄線連接即可。當選用本方式錄音時,盡量將音源的音量調小(R69為輸入音量調節電位器),這樣可以避免錄音時語音信號失真而得到較好的音質。
2.1.3駐極式話筒錄音電路
駐極式話筒錄音(personMIC)電路如圖6所示,其中P24為駐極式話筒。在該錄音電路中,只要對著錄音口說話或播放原音就可以完成普通的現場錄音。錄音時,語音信號由駐極式話筒輸入,由于其轉化成的電信號很微弱,為了提高信號信噪比,更好的抑制噪聲,該電信號需先經過三極管Q18放大后再加到ISD4004-16芯片的反向模擬輸入端ANA_IN-。
2.1.4放音電路
本電路[5]可以實現兩種方式放音,喇叭(SPEAK)放音和耳機插口(AUDIO_OUT)放音方式。由于語音芯片輸出的語音信號很微弱,無法直接驅動揚聲器,所以該信號需要通過功率放大電路進行放大后再由揚聲器發出清晰的聲音,功率放大模塊選用LM386功率放大器。放音電路如圖7所示,ISD4004芯片的音頻信號輸出引腳為AUDOUT。由于輸出音頻信號里的直流分量若直接加在LM386芯片上會使LM386芯片飽和而不能發出聲音,所以要先經過電容C38隔直流。圖中的R70是輸出音量控制電位器,在1腳和8腳間接電容C47是為了將電壓增益調至任意值,如圖7,此時電壓增益為200。本設計中喇叭放音方式選用的SPEAK是阻值為8歐,功率為0.5W的喇叭,經過多次測試,音質很好。
2.2語音系統的軟件設計
語音系統程序主要包括ISD4004初始化、SPI通信、錄音和放音子程序。其功能是使系統實現實時、精確的錄音和播音,并且容易操作,易于批量生產,語音播報系統總流程如圖8所示。
2.2.1SPI通信初始化
串行外設接口SPI允許MC9S12DG128和ISD4004進行高速的同步數據傳輸從而完成語音播報。啟用SPI通信時,需先對SPI控制寄存器的SPI使能位、主/從選擇位、數據次序位等進行設置。
2.2.2錄音和放音子程序
在本程序中可實現兩種方式錄音和放音:分段錄放音和一次性錄放音。ISD4004的初始地址為0X0000,地址的計算方法如下:ISD4004-16錄音時間為16min即960s,根據4004性能,960s被分為2400個地址,則每個地址的分辨率為960s/2400=0.4s,則有以下關系存在:
add_length[i]=[T[i]/0.4] i∈[1,2399],T[i]∈[0,960]
add[i+1]=add[i]+add_length[i]
其中,[T[i]/0.4]表示的是大于T[i]/0.4的最小整數,T[i]為錄第i段語音所需的秒數,add_length[i]為第i段語音所占用的地址數,add[i]為第i段語音的起始地址。
(1)分段錄音、分段放音:假設要對第i+1段語音進行錄音,則要確定錄音起始地址。先估算第i段錄音時間T(要求比實際錄音時間稍長),計算出T/0.4的值,若出現小數則往上取最小整值,再把該整值加至第i段起始地址,加出的16進制數就是本次錄音起始地址,最后調用rec(add)進行錄音即可,如此循環直至錄音完畢。放音時直接根據錄音起始地址調用play(add)即可實現播放任意段音。
(2)一次性錄音,分段放音:首先確定錄音起始地址,再調用rec(add)一次性錄音完畢,要求每句話之間有較明顯的停頓。第一次放音時,首先測出第一句話的放音時間T(要求比實際錄音時間長,但不得長于0.4s),然后調用play(add)進行放音,經時間T后停止放音;第二次放音時,亦先確定放音地址,放音地址的確定如下:先測出前一次(這里即第一次)放音和停頓總時間T1,計算T1/0.4的值,若出現小數則往上取最小整值,則([T1/0.4]+add)就是第二次放音地址,依此類推,循環下去,目前所測試系統語音地址映射表如表1所示,相應錄、放音程序如表1:
void rec(ucharadd) //錄音程序
{
send_data4004(0xffff,ISDPOWERUP);delay_nms(30);
send_data4004(0xffff,ISDPOWERUP);
delay_nms(60);
send_data4004(add,RECSET);//錄音地址為add
delay_nms(5);
send_data4004(0xffff,RECCUR);
delay_nms(5);
}
voidplay(ucharadd) //放音程序
{
send_data4004(0xffff,ISDPOWERUP);
delay_nms(30);
send_data4004(add,PLAYSET);//放音地址為add
delay_nms(5);
send_data4004(0xffff,PLAYCUR);
}
2.2.3應注意的問題
(1)若選擇耳機插口錄音方式,錄音過程中應控制聲源音量稍小,因為電腦輸出的模擬音頻信號幅度過大會對錄入芯片的語音信號造成失真從而影響音質。
(2)若想自動或循環播放其中的某些地址不連續的語音,必須在前一段放音結束后延時一定時間,才能確保放音正常。
3結語
在實驗室和嘈雜的工廠中,對制作好的電路板(圖8)進行了100多次測試,發現本語音系統音質好,能夠實時、準確、清晰的播音,且在惡劣的環境中工作穩定,反應良好,并設計了獨立的接口,可以很好的進行移植。
參考文獻:
[1]王少卿,霍迎輝.ATmega128在開發應用中應注意的問題[J].微型機與應用,2004,(2):15-16.
[2]道客巴巴.ISD4004系列語音芯片中文資料.http://www.doc88.com/p-13075450055.html,2011-12-28.
[3]楊易華,吳效明,岑人經.基于ISD4004的紅外遙控醫院語音播報系統的設計[J].醫療衛生裝備,2009,30(10):17-19.
[4]王立華.通信電纜斷點故障自動檢測報警電路的設計[J].自動化儀表,2010,31(12):58-60.
[5]洪耀球、劉浪、李香泉.電動汽車參數檢測及報警顯示系統設計[J].計算機測量與控制,2011,19(5):1197-1198.