謝偉成,伍彩云,陳正光
(沈陽理工大學(xué) 裝備工程學(xué)院,遼寧沈陽,110159)
隨著汽車工業(yè)和公路運(yùn)輸業(yè)的發(fā)展,汽車走進(jìn)千家萬戶。駕駛汽車長途行駛的機(jī)率日益增加,而在高速公路上行駛時(shí)變換車速的頻率較少,基本以較為穩(wěn)定的速度形式。若長途駕駛時(shí)駕駛員右腳一直在控制油門時(shí),久而久之駕駛員便會感到疲勞,易發(fā)生交通事故,對駕駛安全距離的控制可以保證駕駛員人身安全,為此本文利用單片機(jī)對安全距離控制系統(tǒng)進(jìn)行設(shè)計(jì)。
本系統(tǒng)基于超聲波測距的舵機(jī)控制及報(bào)警功能,主要是通過軟件設(shè)計(jì)代碼并進(jìn)行Proteus仿真,最后完成實(shí)物設(shè)計(jì)。系統(tǒng)以AT89C51 作為主控芯片,外加3 個(gè)獨(dú)立按鍵,超聲波模塊和LCD 顯示屏構(gòu)成。利用超聲波模塊測量與目標(biāo)距離,并在LCD 上顯示距離,LCD 上一行顯示所設(shè)置的上下限,下一行顯示實(shí)時(shí)距離,用三個(gè)獨(dú)立按鍵控制距離上下限,當(dāng)實(shí)際測量距離不在范圍內(nèi)時(shí),蜂鳴器報(bào)警并且舵機(jī)開始工作,直至測量距離恢復(fù)至規(guī)定范圍內(nèi),通過軟件仿真完成上述功能,并且制作出實(shí)物。系統(tǒng)結(jié)構(gòu)框圖如圖1 所示。
本設(shè)計(jì)采用AT89C51 單片機(jī)為主控芯片,晶振電路,復(fù)位電路,時(shí)鐘電路等構(gòu)成了單片機(jī)最小系統(tǒng)[1]。最小系統(tǒng)包括單片機(jī)和必要的電源等所需的部件,電源、時(shí)鐘等電路是單片機(jī)運(yùn)行的必要條件,可以使單片機(jī)始終處于正常運(yùn)行狀態(tài)。最小系統(tǒng)可通過其內(nèi)存擴(kuò)展、A/D 擴(kuò)展可以使單片機(jī)完成更復(fù)雜的功能。
本設(shè)計(jì)所采用的HC-SR04 超聲波模塊主要是由兩個(gè)通用的壓電陶瓷超聲傳感器,并加外圍信號處理電路構(gòu)成的。兩個(gè)壓電陶瓷超聲傳感器,一個(gè)用于發(fā)出超聲波信號,一個(gè)用于接收反射回來的超聲波信號。超聲波探頭需要來自單片機(jī)I/O 口的至少10μs 的脈沖信號來驅(qū)動HC-SR04 超聲波探頭。此時(shí)超聲波探頭會主動發(fā)出8 個(gè)40kHz 的方波信號,ECHO引腳會發(fā)出ECHO 信號啟動定時(shí)器。當(dāng)超聲波探頭檢測到回波信號時(shí),回波引腳將拉下大電流電平,定時(shí)器將停止計(jì)時(shí)。此時(shí)T0 記錄的持續(xù)高電平時(shí)間為超聲波往返時(shí)間。
LCD1602 已經(jīng)很常見了,所以本設(shè)計(jì)采用LCD1602,在LCD1602 的第一行顯示設(shè)置的距離范圍閾值的上下限,第二行顯示所測得距離的實(shí)時(shí)數(shù)值。字符型LCD 通常有14 條引腳線或16 條引腳線的 LCD。本設(shè)計(jì)布線結(jié)構(gòu)如圖2 所示。
獨(dú)立按鍵式直接用I/O 口線構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)式每個(gè)按鍵單獨(dú)占用一根I/O 口線,每個(gè)按鍵的工作不會影響其他I/O 口線的狀態(tài)。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單,將常開按鍵的一端接地,另一端接一個(gè)I/O 口,但每個(gè)按鍵必須占用一個(gè)I/O 口線,適用于按鍵需求不是很多的設(shè)計(jì)中。獨(dú)立式鍵盤的實(shí)現(xiàn)方法是利用單片機(jī)I/O 口讀取口的電平高低來判斷是否有鍵按下。根據(jù)本設(shè)計(jì)的需要選用了獨(dú)立式鍵盤接法。
舵機(jī)內(nèi)部有一個(gè)參考電壓,微處理器產(chǎn)生的PWM 信號通過信號線進(jìn)入舵機(jī)產(chǎn)生直流偏置電壓,與舵機(jī)內(nèi)部的參考電壓進(jìn)行比較,得到電壓差輸出。正負(fù)電壓差輸出到電機(jī)驅(qū)動芯片,以確定正負(fù)旋轉(zhuǎn)。當(dāng)舵機(jī)開始轉(zhuǎn)動時(shí),由舵機(jī)內(nèi)部的級聯(lián)減速器帶動電位器轉(zhuǎn)動,使電壓差為零,電機(jī)停止轉(zhuǎn)動。
本文所使用的是方法是定時(shí)器+中斷,定時(shí)器每0.5ms中斷一次,需要中斷40 次才能達(dá)到20ms。同時(shí)需要一個(gè)全局變量來記錄中斷的次數(shù),當(dāng)中斷達(dá)到40 次時(shí),全局變量重新清零。當(dāng)中斷次數(shù)小于a 時(shí),信號線輸出高電平,否則輸出零。此時(shí)a 的值對應(yīng)關(guān)系如下(1—0 度,2—45 度,3—90 度,4—135 度,5—180 度)。該方法其實(shí)就是產(chǎn)生PWM,通過控制PWM 占空比來控制舵機(jī)旋轉(zhuǎn)角度。
系統(tǒng)主要包括超聲波模塊,LCD 顯示,按鍵控制模塊,舵機(jī)控制模塊,其中,顯示模塊第一行顯示的是預(yù)先設(shè)置的安全距離上下限,第二行顯示的是實(shí)時(shí)距離數(shù)值,HC-SR04超聲波模塊將距離轉(zhuǎn)變電壓輸入給AT89C51 單片機(jī),單片機(jī)將其預(yù)設(shè)的安全距離進(jìn)行比較,如果不在安全范圍內(nèi),系統(tǒng)報(bào)警并且觸發(fā)舵機(jī)開始工作,改變小車運(yùn)行速度,直至其在安全范圍內(nèi),實(shí)現(xiàn)安全距離控制功能。按鍵模塊能夠?qū)崿F(xiàn)對安全距離的修改和設(shè)置。結(jié)合以上各個(gè)模塊,整體仿真電路如圖3 所示。
系統(tǒng)軟件設(shè)計(jì)流程圖如圖4 所示,本設(shè)計(jì)先進(jìn)行程序初始化,再調(diào)用超聲波模塊,利用函數(shù)計(jì)算出距離,然后調(diào)用按鍵函數(shù),設(shè)置距離閾值范圍,LCD 驅(qū)動函數(shù)調(diào)取實(shí)時(shí)距離數(shù)值以及設(shè)置的距離閾值范圍數(shù)值進(jìn)行顯示,再將測得的距離范圍數(shù)值與設(shè)置的距離閾值范圍進(jìn)行比較,最后根據(jù)比較結(jié)果,若測得的距離范圍數(shù)值在設(shè)置范圍閾值內(nèi),則不調(diào)用蜂鳴器及舵機(jī)驅(qū)動函數(shù),若測得的距離范圍數(shù)值在設(shè)置范圍閾值外,則調(diào)用蜂鳴器及舵機(jī)驅(qū)動函數(shù),使之工作。
圖4 主程序流程圖
單片機(jī)引腳觸發(fā)Trig測距,給至少 10μs 的高電平信號,模塊自動發(fā)送 8 個(gè)40kHz 的方波,自動檢測是否有信號返回,有信號返回,通過ECHO 輸出一高電平,可使用單片機(jī)定時(shí)器計(jì)算高電平持續(xù)的時(shí)間,超聲波從發(fā)射到返回的時(shí)間計(jì)算公式:測試距離=(高電平時(shí)間?聲速(340M/S))/2[3]。超聲波模塊流程圖如圖5所示。
圖5 超聲波模塊流程圖
LCD 顯示程序最重要的是LCD 顯示的驅(qū)動函數(shù),當(dāng)定義完驅(qū)動函數(shù)后,將讀取的距離測量值,設(shè)置的所需要顯示的內(nèi)容利用驅(qū)動函數(shù)里的顯示函數(shù)顯示即可。本設(shè)計(jì)中LCD 第一行顯示距離范圍閾值的上下限,第二行顯示實(shí)時(shí)檢測距離數(shù)值,流程圖如圖6 所示。
圖6 LCD 模塊流程圖
鍵盤去抖動是單片機(jī)對鍵盤處理的一個(gè)重要的過程。目前的技術(shù)有硬件去抖動和軟件去抖動,本設(shè)計(jì)選擇了軟件去抖動,通過先查尋按鍵當(dāng)有低電平出現(xiàn)時(shí)立即延10~200ms以避開抖動(經(jīng)典值為20ms),延時(shí)結(jié)束后再讀一次I/O口的值,這一次的值如果為1 表示低電平的時(shí)間不到10~200 ms,視為干擾信號。當(dāng)讀出的值是0 時(shí)則表示有按鍵按下,調(diào)用相應(yīng)的處理程序。本設(shè)計(jì)中共有三個(gè)按鍵,分別為設(shè)置鍵,增加鍵,減少鍵,用于設(shè)置距離范圍閾值。
利用定時(shí)器+中斷,使單片機(jī)產(chǎn)生周期為20ms,高電平t 等于0.5ms-2.5ms 之間的這樣一個(gè)方波。高電平在一個(gè)周期(20ms)的持續(xù)時(shí)間與一個(gè)周期持續(xù)時(shí)間之比即可換算為對應(yīng)的舵機(jī)角度(0.5ms--0度,1ms--45 度,1.5ms--90 度,2ms--135 度,2.5ms--180 度)。本設(shè)計(jì)中,測得的實(shí)時(shí)距離數(shù)值是否在預(yù)先設(shè)置的距離范圍閾值內(nèi),將決定舵機(jī)是否工作,流程圖如圖7 所示。
圖7 舵機(jī)模塊流程圖
系統(tǒng)測試時(shí),預(yù)先設(shè)置的安全距離上限為280cm,下限是20cm,放置小車距離目標(biāo)40cm 時(shí),硬件系統(tǒng)測試結(jié)果如圖8 所示,液晶顯示屏上行顯示L:20,H:280,第二行顯示00040cm,與測量值一致,舵機(jī)未運(yùn)行,蜂鳴器未報(bào)警,小車處于安全距離范圍內(nèi)。
圖8 實(shí)物演示(安全距離范圍內(nèi))
將小車放置距離目標(biāo)5cm 時(shí),硬件系統(tǒng)測試結(jié)果如圖9 所示,液晶顯示屏上行顯示L:20,H:280,第二行顯示00005cm,與測量值一致,由于測量值未在安全距離范圍外,此時(shí)舵機(jī)開始運(yùn)行,蜂鳴器報(bào)警。系統(tǒng)各個(gè)模塊能夠按照事先設(shè)計(jì)好的功能運(yùn)行,系統(tǒng)的軟件指令運(yùn)行正常,液晶屏能夠?qū)崟r(shí)顯示數(shù)值,具有很好的實(shí)時(shí)性,滿足安全距離控制功能,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
圖9 實(shí)物演示(安全距離范圍外)
本文結(jié)合超聲波的特性設(shè)計(jì)了一個(gè)簡單實(shí)用的安全距離控制系統(tǒng)。當(dāng)小車與目標(biāo)的距離不在范圍內(nèi)時(shí),系統(tǒng)中的舵機(jī)啟動運(yùn)行,控制小車油門,使小車重新進(jìn)入目標(biāo)范圍內(nèi),并通過LCD 顯示距離和預(yù)先設(shè)置范圍。當(dāng)實(shí)際測量距離不在范圍內(nèi)時(shí),蜂鳴器報(bào)警并且舵機(jī)開始工作,直至測量距離恢復(fù)至規(guī)定范圍內(nèi)。若經(jīng)過大量實(shí)測以及調(diào)試,該系統(tǒng)可以實(shí)現(xiàn)安全距離控制。該設(shè)計(jì)可用于汽車定速巡航等方面,能夠一定程度上為用戶帶來便利,具有很好的應(yīng)用價(jià)值。