MSP430超聲波測距
本應(yīng)用報(bào)告描述了一種采用MSP430F413 超低功耗微控制器的基于超聲波的距離測量系統(tǒng)。系統(tǒng)向測量目標(biāo)發(fā)射超聲波脈沖然后接收相應(yīng)的反射波。MSP430 集成的模擬比較器A 用于檢測到達(dá)系統(tǒng)的回聲。超聲波脈沖從系統(tǒng)到目標(biāo)然后反射回系統(tǒng)所需的時間可以由MSP430精確的測量。假設(shè)聲波室溫下在空氣中的速度為1100 英尺/秒,MSP430 計(jì)算系統(tǒng)與目標(biāo)間的距離并采用內(nèi)部集成的LCD驅(qū)動器將其顯示在一兩位的靜態(tài)液晶顯示器上。距離以英寸為單位顯示,精度為1 英寸本系統(tǒng)能夠測量的最小距離是8 英寸,因?yàn)槭艿桨l(fā)射器傳感器穩(wěn)定時間;能夠測量的最大距離為99英寸,回聲的強(qiáng)度取決于反射物的材質(zhì)形狀、和尺寸。地毯之類的吸音材料或者反射面積小于兩平方英尺的物體反射能力很弱,這類目標(biāo)最大測量范圍相對較小。如果系統(tǒng)接收到的回聲的強(qiáng)度很小以至于比較器A 無法檢測到就超出了系統(tǒng)的測量范圍。這時系統(tǒng)將顯示錯誤信息“E”。
DIY樣品圖如下:
以下將按幾個部分來講述此次超聲波距離測量步驟:
1-工作原理
2-電路描述
3-軟件
UltrasonIC.s43
設(shè)備初始化子
程序主循環(huán)程序
計(jì)算子程序
BT_ISR 子程序
顯示子程序
延時子程序
工作原理
本應(yīng)用基于聲波的反射。聲波在其傳播的介質(zhì)中被定義為縱波。當(dāng)聲波受到尺寸大于其波長的目標(biāo)物阻擋時就會發(fā)生反射;反射波稱為回聲。如果聲波在介質(zhì)中傳播的速度是已知的,而且測量到聲波從聲源到達(dá)目標(biāo)然后返回聲源的時間,從聲源到目標(biāo)的距離就可以精確地計(jì)算出來。這就是本應(yīng)用的測量原理。這里聲波傳播的介質(zhì)就是空氣,采用不可見的超聲波。
假設(shè)室溫下聲波在空氣中的傳播速度是1100 英尺/秒,測量到的聲波從聲源到達(dá)目標(biāo)然后返回聲源的時間是t,秒距離d可以由下列公式計(jì)算:
d=1100 12 t (英寸)
因?yàn)槁暡ń?jīng)過的距離是聲源與目標(biāo)之間距離的兩倍,聲源與目標(biāo)之間的實(shí)際距離應(yīng)該為d/2。
電路描述
本應(yīng)用中中用來發(fā)射和接收超聲波的裝置是40KHz的陶瓷超聲波傳感器。MSP430 采用晶體振蕩器產(chǎn)生的一個40KHz 方波信號的12周期脈沖序列驅(qū)動發(fā)射傳感器,接收傳感器則接收回聲。MSP430 的定時器A被定義為40KHz晶振頻率計(jì)數(shù)器,因此時間測量精度為25 微秒,這對本應(yīng)用來說足夠用了。測量的時間基準(zhǔn)是非常穩(wěn)定的因?yàn)樗墒⒕w振蕩器產(chǎn)生。接收傳感器收到的回聲由運(yùn)算放大器放大后送到比較器A 的輸入端。比較器A 檢測到其輸入端的回聲信號后觸發(fā)定時器A 計(jì)數(shù)值的捕捉來捕獲比較寄存器CCR1 的值。捕捉在回聲到達(dá)系統(tǒng)的瞬間進(jìn)行。捕獲的計(jì)數(shù)值就是超聲波脈沖序列從系統(tǒng)出發(fā)到達(dá)目標(biāo)然后返回系統(tǒng)的時間。從系統(tǒng)到目標(biāo)的距離(用英寸表示)就可由MSP430 用測得的時間算出并顯示在兩位靜態(tài)液晶顯示器上。顯示更新后MSP430 馬上轉(zhuǎn)入LPM3 睡眠模式來降低功耗?;径〞r器1 被編程用來每205 毫秒中斷MSP430 一次?;径〞r器1的中斷信號喚醒MSP430 并重復(fù)測量周期更新顯示。
圖1 顯示的是本應(yīng)用的電路原理圖。其中MSP430F413 U1 是系統(tǒng)的核心部分。參考文獻(xiàn)[1]是這個芯片的技術(shù)資料。LCD1 是一由MSP430F413內(nèi)部集成的LCD 驅(qū)動器驅(qū)動的兩位低壓靜態(tài)液晶顯示器。R03 連接到Vss R13 和R23, 懸空將LCD 外圍電路設(shè)置為靜態(tài)LCD 驅(qū)動模式。這里方便的選用了一個40KHz 的低頻晶振,與本應(yīng)用中采用的超聲波傳感器的諧振頻率相匹配。R12 作為復(fù)位線的上拉電阻,內(nèi)部集成的掉電保護(hù)電路可以預(yù)防掉電情況。C9 位于靠近芯片電源線的位置,提供MSP430 的電源耦合。14 腳的接插件(J1) 提供JTAG接口與MSP430 相連,可使用MSP430FLASH 仿真工具進(jìn)行在線調(diào)試和編程LED1 用來指示測量周期。端口引腳P1.5 被定義為輸出超聲波發(fā)射器所需要的40KHz 方波ACLK信號。
傳感器的輸出驅(qū)動電路直接由9V 電池供電并提供18Vpp 驅(qū)動超聲波發(fā)射器。18Vpp 是通過一個二進(jìn)制非門CD4049(U4)橋電路實(shí)現(xiàn)的。參考文獻(xiàn)[6]是它的技術(shù)資料。其中一個非門用來為驅(qū)動器的一側(cè)提供180 度的相移信號。另一側(cè)由相內(nèi)信號驅(qū)動。這種結(jié)構(gòu)使輸出端的電壓提高了一倍,為發(fā)射傳感器提供了18Vpp 電壓。兩個門并聯(lián)連接以便每一側(cè)能夠?yàn)閭鞲衅魈峁┳銐虻尿?qū)動電流。電容C6 C7 阻斷了到傳感器的直流通路。因?yàn)镃D4049 工作于9V 而MSP430 工作于Vcc 3.6V。 MSP430 和輸出驅(qū)動器之間的邏輯電平是不匹配的,雙極性晶體管Q1 就作為這兩種邏輯電平之間的轉(zhuǎn)換器。
運(yùn)算放大器U3 是TI 公司的高速運(yùn)算放大器TLV2771 。參考文獻(xiàn)[5]是它的技術(shù)資料。這個放大器具有高增益帶寬并在40KHz 時提供充分的高增益。運(yùn)算放大器連接成反相放大器構(gòu)造。R7、R5 設(shè)置增益為55、C5 提供高頻滾降。R3、R4 偏置非反相輸入端,為運(yùn)算放大器的單輸入工作提供一個虛擬中間值。放大后的超聲波信號在這個虛擬中間值。上下波動傳感器RX1 的高Q 值提供選擇性并丟棄除了40KHz 之外的頻率。運(yùn)算放大器的輸出端連接到比較器A 的輸入端CA0 (即端口引腳P1.6)。 比較器A 的參考電平內(nèi)部選擇為0.5Vcc 。當(dāng)接收到回聲時電壓高于參考電平從而觸發(fā)比較器A 的輸出CAOUT 。調(diào)整R3 可以得到需要的靈敏度并優(yōu)化測量范圍。
MSP430 和超聲波信號放大器電路由9V 電池經(jīng)TI 公司的LDO 芯片TPS77001調(diào)制后的3.6V 電壓供電。參考文獻(xiàn)[4]是它的技術(shù)資料。電阻R1和R2 調(diào)整穩(wěn)壓器輸出電壓為3.6V。 C1和C2 是推薦使用的穩(wěn)壓器的正常工作的供電電容。發(fā)射器的驅(qū)動電路是由9V 電池直接供電的。開關(guān)S1 是本應(yīng)用的電源開關(guān)。
圖2 顯示的是12 周期的40KHz 脈沖序列的波形軌跡圖。我們注意到19.2V 的峰峰電壓波動。方波頂部的正弦響鈴波是由于傳感器內(nèi)部的諧振。
圖3 顯示的是一個完整測量周期的波形軌跡。軌跡1顯示的是發(fā)射傳感器輸出端的12周期的40KHz脈沖序列。軌跡2 顯示的是接收傳感器輸出經(jīng)運(yùn)算放大器放大后在引腳1上的輸出。軌跡上的第一個脈沖序列信號,代表直接從發(fā)射器上收到的信號被MSP430忽略。接下去的脈沖序列代表目標(biāo)反射的回聲,被MSP430 用于測量。軌跡3 顯示的是MSP430 測得的時間間隔的寬度。這個寬度代表該脈沖序列從系統(tǒng)到達(dá)目標(biāo)再返回所花的時間,顯然它取決于所測量的距離。
圖1
圖2
圖3
軟件Ultrasonic.s43
設(shè)備初始化子程序
這個子程序初始化及設(shè)置外圍電路。首先關(guān)閉看門狗電路,采用一個軟件延時讓低頻晶振穩(wěn)定,將FLL+倍頻器設(shè)置為64 來產(chǎn)生2.56MHz 的MCLK頻率。P1.0 設(shè)置為輸出控制LED。未使用的端口引腳設(shè)置為輸出,端口引腳P1.5 設(shè)置為輸出帶緩沖的40KHz ACLK。頻率基本定時器1 啟動并設(shè)置為提供一個150Hz LCD 頻率并每205 毫秒中斷CPU 開始一次測量周期比較器A 內(nèi)部參考電平設(shè)置為0.5Vcc ,CAPD 位設(shè)置為關(guān)閉比較器輸入引腳的輸入緩沖。LCD 模塊打開并在本應(yīng)用中設(shè)置為靜態(tài)模式驅(qū)動兩位靜態(tài)LCD 。LCD存儲器清零,LCD 的初始顯示為00。基本定時器1 中斷和全局中斷打開,這樣基本定時器1 就可以周期性中斷CPU。
主循環(huán)程序
主循環(huán)用存儲在DIGITS 緩沖區(qū)內(nèi)的值更新液晶顯示器然后MSP430置于LPM3 睡眠模式。MSP430 維持在睡眠模式直至基本定時器1 中斷發(fā)生及BT_ISR 返回活動模式。這時就開始一個測量周期定時器A 設(shè)置為16 位增計(jì)數(shù)模式,選擇ALCK 作為其時鐘源。CCR1 設(shè)置為比較模式,初始值為12 以便在P1.5 引腳上輸出12 個周期的40KHz 的脈沖序列接下去是一個36ACLK 周期的延時,保證輸出傳感器穩(wěn)定這是通過設(shè)置CCR1為初始值36 的比較模式實(shí)現(xiàn)的,在CCR1 處于比較等待狀態(tài)時,MSP430保持LPM0 狀態(tài)。
然后系統(tǒng)切換到通過接收傳感器接收回聲。比較器A 被設(shè)置為等待回聲,在回聲到達(dá)的瞬間提供一個捕獲中斷。定時器A 計(jì)數(shù)值從捕獲比較寄存器CCR1 中得到。這個值就是超聲波序列從發(fā)射傳感器到達(dá)目標(biāo)然后返回這段距離所需的時間。計(jì)數(shù)值加上48 加以調(diào)整,以補(bǔ)償12 個周期脈沖序列和36 個周期發(fā)射傳感器穩(wěn)定延時的損失。CCR1調(diào)整后的值就是脈沖序列發(fā)出時刻到回聲到達(dá)系統(tǒng)這段時間的準(zhǔn)確值。然后,就調(diào)用計(jì)算子程序計(jì)算實(shí)際距離單位為英寸并返回結(jié)果。如果結(jié)果超出范圍,回聲信號就接收不到,比較器A 也不會產(chǎn)生捕獲中斷。MSP430 保持LPM 狀態(tài)知道下一個基本定時器1 中斷將其喚醒,通過檢測其CCTL1 控制寄存器中的CAIFG 位來確“E” 。程序最終返回到主程序,更新LCD 顯示并返回LPM3 睡眠模式。下一個基本定時器1 中斷將MSP430 喚醒至活動狀態(tài)重復(fù)程序執(zhí)行過程。
計(jì)算子程序
計(jì)算子程序負(fù)責(zé)本應(yīng)用中的數(shù)學(xué)計(jì)算。CCR1 中調(diào)整后的16 位數(shù)值存儲為變量Result, 這個值就代表超聲波序列從系統(tǒng)到目標(biāo)然后返回系統(tǒng)這段距離所需的時間。因?yàn)槎〞r器A 計(jì)數(shù)間隔為25 微秒,對應(yīng)的時間值為Result25 微秒假設(shè)室溫下聲音的速度為1100 英寸/秒,可以看出,從定時器A計(jì)數(shù)值得到的Result 每6 個值對應(yīng)于1 英寸的距離。
為了采用MSP430 現(xiàn)有的整數(shù)計(jì)算達(dá)到要求的精度,16 位的Result 首先乘以100 然后除以6。16位*16位的乘法是由子程序Mu100 完成的,32位的結(jié)果存儲在變量htX100_msw 和htX100_lsw 中,然后除以6 并將結(jié)果保存在變量DIGITS 中DIGITS 中的值是二進(jìn)制格式的,由hex2bcd 子程序?qū)⑦@個二進(jìn)制值轉(zhuǎn)換成BCD碼然后丟棄BCD 碼,的最后兩個數(shù)字來補(bǔ)償前面所作的與100 的乘法。兩位的結(jié)果值返回到變量DIGITS中。
BT_ISR 子程序
基本定時器1 中斷子程序BT_ISR 對保存在堆棧中的狀態(tài)寄存器SR 中的位進(jìn)行操作以使MSP430 能夠返回活動狀態(tài)繼續(xù)執(zhí)行主循環(huán)中LPM3之后的程序代碼。
顯示子程序
這個子程序用變量DIGITS 的值更新兩位靜態(tài)LCD 顯示。靜態(tài)顯示器的段值存儲在查尋表LCD_Tab 中。通過將DIGITS中的數(shù)字與LCD_Tab 查尋表中的位置相關(guān)聯(lián),LCD 存儲器就可以裝入所需要的段值。
延時子程序
這個子程序產(chǎn)生一個16 位的軟件延時。由于軟件減計(jì)數(shù)的變量處于堆棧的頂部(TOS),寄存器不會受到影響。延時時間到后,子程序返回前堆棧指針(SP)恢復(fù)到原始值。
結(jié)論
內(nèi)部集成的模擬比較器A、帶硬件捕獲/比較寄存器的16 位定時器A、基本定時器1、 LCD 驅(qū)動電路簡化了