樊長(zhǎng)虹 楊華升 管文輝
【摘要】利用TMS320F281x DSP的捕獲功能,軟件實(shí)現(xiàn)了多通道傳感器信號(hào)到達(dá)時(shí)延測(cè)量。在DSP多個(gè)事件管理器的周期交替中斷中讀取捕獲值,消除了到達(dá)時(shí)延測(cè)量時(shí)可能出現(xiàn)的周期倍差。該測(cè)量方法充分了發(fā)揮DSP硬件功能組合靈活特性,簡(jiǎn)化了外圍電路的硬件設(shè)計(jì)。
【關(guān)鍵詞】F281x DSP;捕獲功能;信號(hào)時(shí)延測(cè)量
1.引言
超聲波測(cè)距定位、麥克風(fēng)語(yǔ)音定位等都需要實(shí)時(shí)而精確地測(cè)量不同傳感器信號(hào)之間到達(dá)時(shí)延,然后送給DSP進(jìn)行計(jì)算求解。時(shí)延精確測(cè)量可以分為粗測(cè)和精測(cè),粗測(cè)通常采用可編程邏輯器件作為計(jì)數(shù)器來(lái)獲得時(shí)差,精測(cè)時(shí)通過(guò)譜估計(jì)方法獲得信號(hào)相位差,然后對(duì)粗測(cè)時(shí)差數(shù)據(jù)進(jìn)行修正。本文在某型超聲波定位系統(tǒng)中利用TMS320F28xx DSP的捕獲端口直接測(cè)量多個(gè)超聲波傳感器信號(hào)到達(dá)時(shí)差,然后對(duì)A/D采集的多路波形信號(hào)采用FFT相關(guān)方法來(lái)獲得相差。
該方法的粗測(cè)和精測(cè)均由DSP完成,簡(jiǎn)化硬件設(shè)計(jì)。下面主要介紹采用DSP捕獲端口直接測(cè)量時(shí)差的方法。
2.捕獲端口時(shí)差測(cè)量難點(diǎn)
現(xiàn)有的多種DSP(或MCU)都具有多個(gè)捕獲端口,很多研究者都考慮過(guò)采用捕獲端口獲取各通道觸發(fā)信號(hào)來(lái)計(jì)算信號(hào)到達(dá)時(shí)差。假設(shè)某個(gè)定時(shí)器周期為P,該定時(shí)器同時(shí)作為兩個(gè)捕獲端口CAP1和CAP2的時(shí)鐘。CAP1和CAP2分別連接外部通道Chan1和Chan2。當(dāng)Chan1和Chan2的觸發(fā)信號(hào)在同一個(gè)定時(shí)器周期內(nèi)到達(dá)時(shí),分別讀取CAP1的捕獲寄存器時(shí)間值CAP1Counter和CAP2的捕獲寄存器時(shí)間值CAP2Counter,則CAP2Counter-CAP1Counter即為所測(cè)時(shí)差。但實(shí)際上兩路觸發(fā)信號(hào)通常在不同的定時(shí)器周期到達(dá),如果仍以CAP2Counter-CAP1Counter作為所測(cè)時(shí)差,則有可能帶來(lái)n*p個(gè)時(shí)鐘誤差(n為兩路觸發(fā)信號(hào)所差的定時(shí)器周期數(shù))??刹捎枚〞r(shí)器周期中斷中計(jì)數(shù)的方法來(lái)解決信號(hào)到達(dá)時(shí)差大于一個(gè)定時(shí)周期的問(wèn)題:開(kāi)啟定時(shí)器的周期中斷,設(shè)置周期中斷次數(shù)為TPCounter,在每個(gè)周期中斷中對(duì)TPCounter增1;當(dāng)Chan1通道觸發(fā)信號(hào)觸發(fā)CAP1時(shí),在該捕獲中斷函數(shù)中記錄當(dāng)前的TPCounter為TPCounter1,同樣Chan2通道觸發(fā)信號(hào)對(duì)應(yīng)的TPCounter為TPCounter2,則兩路信號(hào)的到達(dá)時(shí)差為:
(TPCounter2*P+CAP2Counter)-(TPCounter1*P +CAP1Counter)
上述測(cè)量方法原理上是可行的,但考慮到DSP的中斷處理本質(zhì)上是串行實(shí)現(xiàn)的,必須考慮臨界狀態(tài)的極端情況。由于定時(shí)器周期中斷處理必須一定的時(shí)間,假如當(dāng)定時(shí)器周期中斷中讀到一個(gè)很小的CAP1Counter值,該值小到不足以區(qū)分該次觸發(fā)是當(dāng)前定時(shí)周期內(nèi)產(chǎn)生的,或者是上個(gè)定時(shí)器周期內(nèi)產(chǎn)生的但未及時(shí)被讀取的。此時(shí)如果不能區(qū)分,則時(shí)差測(cè)量時(shí)可能會(huì)出現(xiàn)一個(gè)定時(shí)器周期的誤差。
下面對(duì)TMS320F281x片上資源分析,給出一種可靠的解決方法。
3.解決方法
TMS320F281x具有兩組事件管理器A和B。以事件管理器A為例,它具有兩個(gè)16位定時(shí)器Timer1和Timer2,同時(shí)具有3個(gè)捕獲端口CAP1、CAP2和CAP3,以CAP1和CAP2為示例進(jìn)行分析。Timer1和Timer2都可以分別設(shè)置各自的時(shí)鐘周期數(shù)、計(jì)數(shù)初值,并各自計(jì)數(shù)滿后產(chǎn)生相應(yīng)的周期中斷。當(dāng)設(shè)置Timer1和Timer2的時(shí)鐘為150MHz而最大周期數(shù)為0xFFFF時(shí),每經(jīng)過(guò)約436.9微秒會(huì)各自產(chǎn)生一次周期中斷。
新方法設(shè)置Timer1和Timer2兩者的周期中斷交替進(jìn)行,然后在周期中斷中對(duì)捕獲進(jìn)行查詢來(lái)測(cè)量時(shí)差,避免前述可能出現(xiàn)無(wú)法正確確定觸發(fā)信號(hào)所到達(dá)周期。主要處理流程如下:
1)初始化
設(shè)置Timer2和Timer1周期都為0xFFFF,并且Timer2計(jì)數(shù)器初始值為0x8000,以使Timer2周期中斷超前Timer1周期中斷半個(gè)周期;設(shè)置CAP1和CAP2捕獲模式。啟動(dòng)Timer1和Timer2,并使能二者周期中斷,等待兩個(gè)通道觸發(fā)信號(hào)到來(lái)。
2)Timer2周期中斷函數(shù)處理
由于Timer2超前Timer1,因此Timer2周期中斷函數(shù)先被調(diào)用。讀取CAP1和CAP2的寄存器,判斷是否已被觸發(fā)。若CAP1已被觸發(fā),則TPCounter1=TPCounter;若CAP2已被觸發(fā),則TPCounter2=TPCounter。
3)Timer1周期中斷函數(shù)處理
讀取CAP1和CAP2的寄存器,判斷是否已被觸發(fā)。如果CAP1已被觸發(fā),并且讀取的數(shù)值不小于0x8000,那么可以確定該觸發(fā)一定發(fā)生在上一個(gè)Timer1周期中(因?yàn)門imer2已經(jīng)讀取過(guò)上個(gè)Timer1周期的前半個(gè)周期中是否存在觸發(fā)),則TPCounter1=TPCounter;反之,如果CAP1已被觸發(fā),并且讀取的數(shù)值小于0x8000,可確定該觸發(fā)一定發(fā)生在當(dāng)前Timer1周期中(因?yàn)樾∮?x8000的CAP1已經(jīng)被Timer2周期中斷函數(shù)中讀?。?,則TPCounter1=TPCounter+1。對(duì)CAP2同樣處理。退出周期中斷函數(shù)時(shí),TPCounter=TPCounter+1。
4.試驗(yàn)結(jié)果
為驗(yàn)證新方法有效性,采用安捷倫3320A信號(hào)發(fā)生器作為信號(hào)源,安捷倫DSO6034混合信號(hào)示波器作為時(shí)差測(cè)量?jī)x器。
4.1 小時(shí)差信號(hào)測(cè)試
測(cè)量?jī)陕窌r(shí)差小于定時(shí)器周期的信號(hào):
1)捕獲模式設(shè)置:CAP1設(shè)為上升沿捕獲,CAP2設(shè)為下降沿捕獲。
2)信號(hào)源設(shè)置:設(shè)置3320A輸出信號(hào)為周期50KHz占空比50%幅度3V的方波,也即上升沿和下降沿時(shí)差為1/(100K)=10us,10.000us對(duì)應(yīng)150MHz晶振的1500個(gè)周期。
3)信號(hào)輸入與測(cè)試:3320A輸出信號(hào)直接送給兩路捕獲,共測(cè)量10000次。9995次測(cè)得時(shí)差為1500個(gè)晶振周期,2次測(cè)得時(shí)差為1499個(gè)晶振周期,3次測(cè)得時(shí)差為1501個(gè)晶振周期,也即最大測(cè)量誤差為±1個(gè)晶振周期。
4.2 跨周期時(shí)差信號(hào)測(cè)試
測(cè)試兩路時(shí)差大于定時(shí)器周期的信號(hào):
1)捕獲模式設(shè)置:CAP1設(shè)為上升沿捕獲,CAP2設(shè)為下降沿捕獲。
2)信號(hào)源設(shè)置:設(shè)置3320A輸出信號(hào)為周期500Hz占空比50%幅度3V的方波,也即上升沿和下降沿時(shí)差為1/1000=1000us,1000us對(duì)應(yīng)150MHz晶振的150000個(gè)周期。
3)信號(hào)輸入與測(cè)試:3320A輸出信號(hào)直接送給兩路捕獲,共測(cè)量10000次,其中5949次測(cè)得時(shí)差為150000個(gè)晶振周期,其余時(shí)差值中最大150002個(gè)晶振周期,最小149997晶振周期,沒(méi)有發(fā)送過(guò)測(cè)量誤差為Timer1周期整倍數(shù)的情況。測(cè)量誤差增大是因?yàn)镕281xDSP板卡本身晶振偏差所引起的。
5.結(jié)論
本文利用TMS320F281x DSP兩組事件管理器交錯(cuò)周期中斷方法,實(shí)時(shí)讀取多路捕獲端口的寄存器捕獲時(shí)間值,無(wú)論對(duì)小時(shí)差或者較大時(shí)差均可較精確測(cè)量,長(zhǎng)期試驗(yàn)表明了該方法精確可靠。
參考文獻(xiàn)
[1]TMS320F281x Data Sheet(Rev.F).