基于語(yǔ)音識(shí)別的汽車(chē)空調(diào)控制系統(tǒng)
2 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)軟件設(shè)計(jì)采用C語(yǔ)言開(kāi)發(fā),用Keil uVision4軟件進(jìn)行編譯。開(kāi)發(fā)過(guò)程按照模塊化分塊進(jìn)行,系統(tǒng)的主要模塊包括語(yǔ)音識(shí)別模塊、語(yǔ)音播放模塊、SD卡模塊以及空調(diào)控制模塊。
2.1 語(yǔ)音識(shí)別模塊
語(yǔ)音識(shí)別模塊采用中斷的方式進(jìn)行工作,其工作流程大致為芯片初始化、寫(xiě)入識(shí)別列表、開(kāi)始識(shí)別、中斷響應(yīng)并獲取識(shí)別結(jié)果。語(yǔ)音識(shí)別流程如圖8所示。在初始化程序里,主要完成軟復(fù)位、模式設(shè)定、時(shí)鐘頻率設(shè)定和FIFO設(shè)定。在寫(xiě)入識(shí)別列表之前,首先要讀取寄存器B2的值,檢查L(zhǎng)D3320是否處于空閑狀態(tài);然后,把識(shí)別語(yǔ)音列表信息寫(xiě)入LD3320的05和B9寄存器中,每個(gè)識(shí)別條目是標(biāo)準(zhǔn)普通話(huà)的漢語(yǔ)拼音(小寫(xiě)),每?jī)蓚€(gè)漢語(yǔ)拼音之間用一個(gè)空格間隔。在完成添加語(yǔ)音識(shí)別列表后,設(shè)定寄存器35的值為45H。此處設(shè)定的值越大,代表麥克的音量越大,識(shí)別距離也越遠(yuǎn),但是可能產(chǎn)生較多的誤識(shí)別;值越小代表麥克的音量越小,需要近距離說(shuō)話(huà)才能啟動(dòng)語(yǔ)音識(shí)別功能,識(shí)別率也高。設(shè)定寄存器37值為06H,啟動(dòng)語(yǔ)音識(shí)別,即可開(kāi)始語(yǔ)音識(shí)別。如果麥克風(fēng)采集到聲音,不管是否識(shí)別出正常結(jié)果,都會(huì)產(chǎn)生一個(gè)中斷信號(hào)。進(jìn)入中斷函數(shù)后,首先清零寄存器29和寄存器02;然后,檢查B2寄存器是否為0x21。若值為0x21,表示閑,可以檢測(cè)2B的值;若為1,表示語(yǔ)音識(shí)別有結(jié)果產(chǎn)生。寄存器BF讀到數(shù)值為0x35,可以確定是一次語(yǔ)音識(shí)別流程正常結(jié)束。寄存器BA表示語(yǔ)音識(shí)別有幾個(gè)識(shí)別候選結(jié)果。最后,可以讀取寄存器C5,獲取識(shí)別結(jié)果。本文引用地址:http://www.ex-cimer.com/article/196223.htm
2.2 語(yǔ)音播放模塊
語(yǔ)音播放的軟件設(shè)計(jì)流程包括通用初始化、MP3播放初始化、播放音量調(diào)節(jié)、開(kāi)始播放聲音以及中斷響應(yīng)。通用初始化時(shí),首先連續(xù)讀取寄存器06,相當(dāng)于激活了芯片;然后,按順序設(shè)置相關(guān)寄存器的值。MP3播放初始化時(shí),首先要設(shè)置寄存器BD的值為02H,啟動(dòng)MP3播放模塊;然后,向寄存器17寫(xiě)入48H,激活DSP。語(yǔ)音播放模塊的音量分為16級(jí),用4位二進(jìn)制表示,這里需要設(shè)置寄存器8E的第2~5位的值來(lái)調(diào)節(jié)播放音量。當(dāng)播放語(yǔ)音時(shí),首先需要清零,開(kāi)始播放位置。將寄存器1B的第3位設(shè)為1,然后執(zhí)行循環(huán)。當(dāng)播放條件為真時(shí),順序?qū)P3數(shù)據(jù)放入寄存器01(每次1個(gè)字節(jié)),播放位置值增加1。當(dāng)寄存器06的第3位等于0或者播放位置小于MP3文件的總長(zhǎng)度時(shí),就跳出循環(huán)。等到芯片播放該段后會(huì)發(fā)出中斷請(qǐng)求,而中斷函數(shù)會(huì)不斷接收數(shù)據(jù),直到FIFO-DA-TA裝滿(mǎn)或聲音數(shù)據(jù)結(jié)束。
2.3 SD卡模塊
此模塊分為SD卡初始化和SD卡數(shù)據(jù)讀取。SD卡初始化時(shí),在發(fā)送CMD命令之前,在片選有效的情況下,首先要發(fā)送至少74個(gè)時(shí)鐘,否則將有可能出現(xiàn)SD卡不能初始化的問(wèn)題。然后,就可以發(fā)送復(fù)位命令CMD0。發(fā)送復(fù)位命令后等待8個(gè)時(shí)鐘周期,進(jìn)入SPI總線(xiàn)模式,接著發(fā)送CMD1命令。如果正確接收響應(yīng)信號(hào),表示SD卡初始化完成,可以接受后續(xù)讀寫(xiě)命令。初始化完成后,發(fā)送CMD17讀命令。判斷響應(yīng)值是否全為0,然后,判斷接收數(shù)據(jù)開(kāi)始令牌是否為0xfe,如果是,就可以接收正式數(shù)據(jù)和CRC碼。
2.4 空調(diào)控制模塊
空調(diào)控制模塊主要包括信號(hào)采集模塊、風(fēng)門(mén)電機(jī)控制模塊、鼓風(fēng)機(jī)控制模塊、壓塑機(jī)控制模塊、后除霜控制模塊5個(gè)子模塊。空調(diào)控制流程如圖9所示。首先,進(jìn)行系統(tǒng)的初始化。若點(diǎn)火開(kāi)關(guān)正常啟動(dòng),信號(hào)采集模塊開(kāi)始采集傳感器數(shù)據(jù),根據(jù)采集到的數(shù)據(jù),判斷是否滿(mǎn)足風(fēng)機(jī)啟動(dòng)條件。若滿(mǎn)足條件,則設(shè)置風(fēng)機(jī)PWM占空比,進(jìn)而調(diào)節(jié)風(fēng)量的大小。當(dāng)風(fēng)量大小滿(mǎn)足要求時(shí),接下來(lái)就要判斷是否滿(mǎn)足壓縮機(jī)的啟動(dòng)條件。若滿(mǎn)足條件,啟動(dòng)壓縮機(jī);如果不滿(mǎn)足條件,則判斷風(fēng)門(mén)位置是否滿(mǎn)足條件。如果不滿(mǎn)足條件,則調(diào)節(jié)風(fēng)門(mén)電機(jī)轉(zhuǎn)動(dòng),直到滿(mǎn)足條件。最后,判斷是否滿(mǎn)足除霜條件,若滿(mǎn)足則啟動(dòng)后除霜繼電器。
在軟件設(shè)計(jì)上,采用了指令冗余、軟件陷阱和重復(fù)設(shè)置各種工作方式控制字等方法,消除干擾。使用“Watchdog”定時(shí)器,實(shí)時(shí)監(jiān)測(cè)程序的運(yùn)行;運(yùn)用CPU運(yùn)算與控制功能,采用算術(shù)平均法,實(shí)現(xiàn)數(shù)字濾波,消除傳感器通道的千擾信號(hào)。
結(jié)語(yǔ)
本文介紹了基于語(yǔ)音識(shí)別的汽車(chē)空調(diào)控制系統(tǒng),分別對(duì)硬件電路和軟件設(shè)計(jì)進(jìn)行了詳細(xì)的介紹。本系統(tǒng)開(kāi)發(fā)成本低、性能優(yōu)越,系統(tǒng)測(cè)試表明,本系統(tǒng)具有一定的應(yīng)用價(jià)值,可以用于中低檔汽車(chē)。
評(píng)論