1 引言
去年在我國局部地區(qū)流行的SARS 前期癥狀是高燒38oC 以上(少數(shù)長期病患者除外),紅外測溫儀可為防止SARS 的擴散和傳播提供了快速、非接觸測量手段,可廣泛、有效地用于人群的體溫排查。一時紅外測溫在我國迅速紅火起來,這里介紹一種采用SPCE061A和TN系列傳感器實現(xiàn)紅外測溫的方法。
2 芯片特性簡介
SPCE061A是臺灣凌陽公司生產(chǎn)的性價比很高的一款十六位單片機,使用它可以非常方便的實現(xiàn)控制和語音播報的系統(tǒng),該芯片擁有8路10位精度的AD,其中1路AD為音頻轉(zhuǎn)換通道,并且內(nèi)置有自動增益電路。這為實現(xiàn)語音錄入提供了方便的硬件條件。2路10位精度的DA,只需要外接2個功放(LM386)即可完成語音的播放。另外,凌陽十六位單片機具有易學易用的效率較高的一套指令系統(tǒng)和集成開發(fā)環(huán)境。在此環(huán)境中,支持標準C語言,可以實現(xiàn)C語言與凌陽匯編語言的互相調(diào)用,并且,提供了語音錄放的庫函數(shù),只要了解庫函數(shù)的使用,就會很容易完成語音播報,這些都為軟件開發(fā)提供了方便的條件。
3 系統(tǒng)總體方案介紹
系統(tǒng)結(jié)構(gòu)圖如下:
本系統(tǒng)包括按鍵部分、音頻輸出部分和TN紅外測溫傳感器接入等三部分。
按鍵部分:按鍵開始測溫,一直按下,聽到聲音表示測溫完畢。
音頻輸出部分:主要是將SPCE061A兩路音頻輸出端通過LM386放大,經(jīng)喇叭播放。
TN紅外測溫傳感器接入部分:通過SPCE061A IO口的控制,將將所測得的溫度接受到SPCE061A中來處理。
系統(tǒng)實現(xiàn)的功能:按住按鍵,聽到聲音,此時播報測得的環(huán)境溫度和目標溫度。
4 系統(tǒng)硬件設(shè)計
紅外測溫傳感器如圖 4.1 所示。
紅外測溫模塊與SPCE061A的接口如下:
V-->3.3v
D-->IOA15
C-->IOB8
G-->GND
A-->按鍵-->GND
音頻輸出部分詳細電路圖如圖4.2
5 系統(tǒng)軟件設(shè)計
本系統(tǒng)軟件設(shè)計流程如下:
其中,SPCE061A讀取紅外傳感器的測量結(jié)果,是采用SPI接口進行讀取,其中數(shù)據(jù)格式如下:
SPI時序圖:
一幀數(shù)據(jù)包括5Byte,每個Byte代表含義如下:
Item “L”(4CH): 代表此幀為目標溫度
“f”(66H): 代表此幀為環(huán)境溫度
MSB 8 bit Data Msb
LSB 8 bit Data Lsb
Sum Item+MSB+LSB=SUM
CR 0DH,結(jié)束碼
讀取數(shù)據(jù)流程圖如圖5.3:
本軟件系統(tǒng)設(shè)計簡單。主要是因為凌陽的十六位單片機開發(fā)環(huán)境使用方便,并支持C語言與匯編語言的互相調(diào)用,且提供豐富的凌陽語音函數(shù)庫,只要我們了解這些函數(shù)的使用方法,我們就可以很容易的實現(xiàn)語音的播放。本系統(tǒng)采用S480壓縮格式,該壓縮算法壓縮比較大80:3, 存儲容量大,音質(zhì)介于A2000和S240之間,適用于語音播放。例如播放部分代碼如下:
其相關(guān)API函數(shù)如下所示:
int SACM_S480_Initial(int Init_Index) //初始化
void SACM_ S480_ServiceLoop(void) //獲取語音資料,填入譯碼隊列
void SACM_ S480_Play(int Speech_Index, int Channel, int Ramp_Set) //播放
void SACM_ S480_Stop(void) //停止播放
void SACM_S480_Pause (void) //暫停播放
void SACM_S480_Resume(void) //暫停后恢復
void SACM_S480_Volume(Volume_Index) //音量的控制
unsigned int SACM_S480_Status(void) //獲取模塊的狀態(tài)
Call F_FIQ_Service_ SACM_S480 //中斷服務函數(shù)
各函數(shù)具體內(nèi)容如下:
1)【API格式】
C:int SACM_S480_Initial(int Init_Index)
ASM:R1=[ Init_Index]
Call F_ SACM_ S480_Initial
【功能說明】SACM_S480語音播放之前的初始化。
【參 數(shù)】Init_Index=0 表示手動方式;Init_Index=1 則表示自動方式。
【返 回 值】
0:代表語音模塊初始化失敗
1:代表初始化成功。
【備 注】該函數(shù)用于對定時器、中斷和DAC等的初始化。
2) 【API格式】
C:void SACM_S480_ServiceLoop(void)
ASM:Call F_ SACM_S480_ServiceLoop
【功能說明】從資源中獲取SACM_S480語音資料,并將其填入解碼隊列中。
【參 數(shù)】無。
【返 回 值】無。
【備 注】播放語音文件中數(shù)據(jù),當出現(xiàn)FF FF FFH數(shù)據(jù)時便停止播放。
3) 【API格式】
C:int SACM_S480_Play(int Speech_Index, int Channel, int Ramp_Set);
ASM:R1=[ Speech _Index]
R2=[ Channel]
R3=[ Ramp_Set]
Call SACM_S480_Play
【功能說明】播放資源中SACM_S480語音。
【參 數(shù)】Speech _Index 表示語音索引號。
Channel: 1.通過DAC1通道播放; 2.通過DAC2通道播放; 3.通過DAC1和 DAC2雙通道播放。
Ramp_Set:0.禁止音量增/減調(diào)節(jié); 1.僅允許音量增調(diào)節(jié); 2.僅允許音量減調(diào) 節(jié); 3.允許音量增/減調(diào)節(jié)。
【返 回 值】無。
【備 注】
① SACM_S480的數(shù)據(jù)率有4.8Kbps\7.2Kbps三種,可在同一模塊的幾種算法中自動選擇一種。
②Speech_Index是定義在resource.inc文件中資源表(T_SACM_S480_SpeechTable)的偏移地址。
③ 中斷服務子程序中F_FIQ_Service_ SACM_S480必須放在TMA_FIQ中斷向量上(參見SPCE的中斷系統(tǒng))。
④函數(shù)允許TimerA以所選的的數(shù)據(jù)采樣率(計數(shù)溢出)中斷。
SACM_S480自動方式主程序流程見:
6 結(jié)語
凌陽公司的SPCE061A的結(jié)構(gòu)特點及其相關(guān)的一些開發(fā)平臺為我們控制和播放提供了極其方便的條件,當然SPCE061A還有很多的類似于其他方面的單片機所具有的功能,使用起來同樣方便。隨著市場競爭的激烈,開發(fā)者對產(chǎn)品開發(fā)的資金和時間的投入不斷縮小,相信凌陽科技能實現(xiàn)開發(fā)者們的需求。