一、設(shè)計(jì)設(shè)計(jì)背景及概述
1.1 設(shè)計(jì)背景
基于紅外或射頻的遙控車(chē)技術(shù)已經(jīng)相當(dāng)成熟,但藍(lán)牙遙控車(chē)這一領(lǐng)域尚屬新鮮,這款增強(qiáng)51核的“三防”8位單片機(jī),以其高性能及易于開(kāi)發(fā)讓我很是欣喜,再加上能夠磨練自己的嵌入式編程的能力,鍛煉和隊(duì)友共同完成項(xiàng)目的團(tuán)隊(duì)合作能力,我們便自然而然地產(chǎn)生了親手制作一款藍(lán)牙遙控車(chē)的想法。
1.2 設(shè)計(jì)概述
主控芯片為深聯(lián)華SLH89F5162,開(kāi)發(fā)環(huán)境為Keil 4;測(cè)距方式為超聲波回聲測(cè)距,使用模塊HC-SR04完成;通訊方式為藍(lán)牙2.0,車(chē)體使用HC-05藍(lán)牙串口模塊,PC使用自帶藍(lán)牙適配器;總電源使用2節(jié)3500mAh/3.7V的UltraFire鋰離子充電電池串聯(lián)供電;MCU電源則由LM7805穩(wěn)壓芯片對(duì)7.4V總電源進(jìn)行處理后供給;車(chē)體驅(qū)動(dòng)電機(jī)使用2個(gè)減速比為1:48的6~9V直流有刷電機(jī),驅(qū)動(dòng)使用TOSHIBA-ULN2003APG芯片;測(cè)溫模塊使用單總線架構(gòu)的DALLAS/18B20芯片;上位機(jī)操作系統(tǒng)為Windows 7,界面采用MFC編寫(xiě),IDE為VC6。
二、項(xiàng)目設(shè)計(jì)原理
2.1原理概述
上位機(jī)程序使用藍(lán)牙與車(chē)體進(jìn)行通信,發(fā)送指令,車(chē)體接收到指令后執(zhí)行相應(yīng)的操作。本設(shè)計(jì)中,小車(chē)可以實(shí)現(xiàn)直行、轉(zhuǎn)彎、加速和減速等四個(gè)動(dòng)作,同時(shí)會(huì)采集所在區(qū)域的溫度信息返回上位機(jī),配合以車(chē)體上的超聲波模塊,可對(duì)小車(chē)正前方進(jìn)行測(cè)距,如發(fā)現(xiàn)距離過(guò)近,則會(huì)自動(dòng)停止,并向上位機(jī)請(qǐng)求轉(zhuǎn)彎指令。上位機(jī)軟件在發(fā)送指令的同時(shí),還接收小車(chē)返回的移動(dòng)信息,在軟件繪圖區(qū)域繪制小車(chē)行走的軌跡,并顯示溫度等信息。
2.2硬件設(shè)計(jì)原理
紅色為電源線,黑色為地線,藍(lán)色為MCU與外部設(shè)備的連接線。主要需要進(jìn)一步說(shuō)明的模塊有DC/DC的7805芯片、測(cè)溫模塊18B20、驅(qū)動(dòng)芯片ULN2003APG、超聲波模塊HC-SR04及藍(lán)牙串口模塊HC-05。
2.3 各模塊介紹
2.3.1 穩(wěn)壓模塊LM7805
78XX系列的后兩位即是其可固定產(chǎn)生的7805 系列為 3 端正穩(wěn)壓電路,TO-220 封裝,能提供固定的輸出電壓5V,應(yīng)用范圍廣。內(nèi)含過(guò)流、過(guò)熱和過(guò)載保護(hù)電路。帶散熱片時(shí),輸出電流可達(dá) 1A。雖然是固定穩(wěn)壓電路,但使用外接元件,可獲得不同的電壓和電流。電壓。
輸入端IN為2節(jié)3.7V鋰離子電池串聯(lián)產(chǎn)生的7~8V的輸入電壓,輸出端OUT接C1電解電容濾波穩(wěn)壓,并接綠色LED1和限流電阻R1顯示供電狀態(tài)。
VCC端正接二極管D0防反接,同時(shí)并接C0電解電容穩(wěn)壓濾波。
2.3.2 測(cè)溫模塊DS18B20
DS18B20 數(shù)字溫度計(jì)提供9 位溫度讀數(shù),指示器件的溫度信息經(jīng)過(guò)單線接口送入DS18B20 或從DS18B20 送出。因此從中央處理器到DS18B20 僅需連接一條線(和地)讀寫(xiě)和完成溫度變換所需的電源可以由數(shù)據(jù)線本身提供,而不需要外部電源。DALLAS公司的18B20產(chǎn)品有多種封裝,本設(shè)計(jì)采用的是上圖左側(cè)的TO-92封裝。
由于DS18B20只有3條線,數(shù)據(jù)線選擇了沒(méi)有特殊功能的P4.1引腳。18B20采用了獨(dú)特的單總線通信架構(gòu),所以其對(duì)于時(shí)序的要求非常高,下面主要講一講18B20的復(fù)位、寫(xiě)入一位和讀取一位,寫(xiě)字節(jié)及讀字節(jié)只是寫(xiě)一位及讀一位的重復(fù),本文就不再贅述。
2.3.2.1 復(fù)位時(shí)序
復(fù)位需要MCU將總線拉低,保持至少480 us后,再將總線拉高15~60 us,隨后等待最長(zhǎng)240 us,檢測(cè)總線上18B20是否將總線拉低(存在)。復(fù)位是18B20最重要的操作,每次通信之前必須進(jìn)行復(fù)位。
2.3.2.2 寫(xiě)一位時(shí)序
在寫(xiě)數(shù)據(jù)時(shí)間隙的前 15 us總線需要是被MCU拉置低電平,而后則將是18B20對(duì)總線數(shù)據(jù)的采樣時(shí)間,采樣時(shí)間在 15~60 us,采樣時(shí)間內(nèi)如果MCU將總線拉高則表示寫(xiě)“1”,如果MCU將總線拉低則表示寫(xiě)“0”。每一位的發(fā)送都應(yīng)該有一個(gè)至少 15 us 的低電平起始位,隨后的數(shù)據(jù)“0”或“1”應(yīng)該在45 us 內(nèi)完成。整個(gè)位的發(fā)送時(shí)間應(yīng)該保持在 60~120 us,否則不能保證通信的正常。
2.3.2.3 讀一位時(shí)序
讀時(shí)間隙時(shí)控制時(shí)的采樣時(shí)間應(yīng)該更加的精確才行,讀時(shí)間隙時(shí)也是必須先由MCU產(chǎn)生至少1 us的低電平,表示讀時(shí)間的起始。隨后在總線被釋放后的15 us 中 18B20 會(huì)發(fā)送內(nèi)部數(shù)據(jù)位,這時(shí)MCU如果發(fā)現(xiàn)總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數(shù)據(jù)“0”。每一位的讀取之前都由控制器加一個(gè)起始信號(hào)。
注意:如圖8所示,必須在讀間隙開(kāi)始的 15 us 內(nèi)讀取數(shù)據(jù)位才可以保證通信的正確。
2.3.2.4 字節(jié)讀寫(xiě)說(shuō)明
從圖9代碼中的左右移可以看出,18B20在通信時(shí),以 8 位“0”或“1”為一個(gè)字節(jié),字節(jié)的讀或?qū)懯菑母呶婚_(kāi)始的,即 Bit7到 Bit0 圖9 DS18B20 讀寫(xiě)字節(jié)C代碼實(shí)現(xiàn)。
2.3.3 電機(jī)驅(qū)動(dòng)模塊ULN2003APG
ULN2003是高耐壓、大電流七路達(dá)林頓驅(qū)動(dòng)器陣列,是集電極開(kāi)路(OC)輸出的反向器。單個(gè)引腳最大驅(qū)動(dòng)電流可以達(dá)到500mA。通常應(yīng)用時(shí)是把負(fù)載的一端接到電源上,另一端接到輸出引腳(10~16)上,這樣當(dāng)輸入端為高電平時(shí),輸出端就反轉(zhuǎn)為低電平,導(dǎo)通負(fù)載。
由于安芯一號(hào)自帶的PWM0,PWM1為P4.6和P2.7,故ULN2003的2個(gè)輸入口選擇了P4.6和P2.7,輸出端則分別連接到2個(gè)直流電機(jī)的一端。此處之所以使用2個(gè)輸入端組成1組輸入,是為了增加ULN2003的帶負(fù)載能力,將2個(gè)達(dá)林頓管并聯(lián)使用,從而實(shí)現(xiàn)了1A的最大驅(qū)動(dòng)電流,驅(qū)動(dòng)低壓直流電機(jī)綽綽有余。
2.3.4 超聲波模塊HC-SR04
HC-SR04超聲波測(cè)距模塊可提供2~400 cm的非接觸式距離感測(cè)功能,測(cè)距精度達(dá)到3 mm;模塊包括超聲波發(fā)射器、接收器與控制電路。
基本工作原理:
1. 采用IO口TRIG觸發(fā)測(cè)距,給至少10 us高電平信號(hào);
2. 模塊自動(dòng)發(fā)送8個(gè)40khz的方波,同時(shí)檢測(cè)有無(wú)信號(hào)返回;
3. 若有信號(hào)返回,則IO口ECHO會(huì)輸出一段持續(xù)時(shí)間和超聲波來(lái)回時(shí)間相同的高電平。
根據(jù)上述工作原理,可以得到測(cè)試距離D=(高電平時(shí)間×聲速)/2。
經(jīng)過(guò)測(cè)試,回響電平一般會(huì)在觸發(fā)信號(hào)發(fā)出后幾十us內(nèi)產(chǎn)生,此時(shí)建議使用定時(shí)器進(jìn)行檢測(cè),如果使用while循環(huán)等待高電平,如果高電平不能正常產(chǎn)生,程序會(huì)卡死在while語(yǔ)句上。
2.3.5 藍(lán)牙串口模塊HC-05
HC-05是一款高性能的主從一體藍(lán)牙串口模塊,可以同各種帶藍(lán)牙功能的電腦、藍(lán)牙主機(jī)、手機(jī)、PDA等智能終端匹配,該模塊支持非常寬的波特率范圍:4800~1382400,并兼容5V或3.3V單片機(jī)系統(tǒng),可以方便的與產(chǎn)品進(jìn)行連接。
由于該模塊是串口轉(zhuǎn)藍(lán)牙模塊,所以需要使用MCU的一個(gè)串口資源,本設(shè)計(jì)使用了5162的串口1。使用時(shí),只需要將HC-05當(dāng)作一條串口線即可,非常方便。
2.4軟件設(shè)計(jì)原理(MCU)
系統(tǒng)上電后開(kāi)啟藍(lán)牙配對(duì)模式,可供上位機(jī)進(jìn)行連接(打開(kāi)串口)。一旦上位機(jī)連接成功并發(fā)送開(kāi)始信號(hào),整機(jī)開(kāi)始全速運(yùn)行,根據(jù)上位機(jī)的指令進(jìn)行移動(dòng),并發(fā)送溫度信號(hào)給上位機(jī),當(dāng)車(chē)體前方出現(xiàn)障礙物時(shí),車(chē)體會(huì)自動(dòng)停止,并向上位機(jī)發(fā)送轉(zhuǎn)彎提示,當(dāng)上位機(jī)發(fā)出停止信號(hào)時(shí),車(chē)體返回一開(kāi)始的等待狀態(tài),直到下一次開(kāi)始信號(hào)到來(lái)。
圖16 總體流程圖
2.5 軟件設(shè)計(jì)原理(上位機(jī))
圖17 上位機(jī)框圖
圖18 上位機(jī)實(shí)際界面
2.5.1 MFC使用控件介紹
2.5.1.1 串口連接:
圖19??????????????????????????????????????????????????? 圖20
圖19所示為上位機(jī)中的串口連接部分,串口選擇范圍為COM1~~~COM20下拉框如圖20所示。
:
關(guān)聯(lián)函數(shù): 作用:選擇串口,初始化串口,設(shè)置波特率
:
關(guān)聯(lián)函數(shù): 作用:關(guān)閉串口,將距離、溫度、狀態(tài)數(shù)據(jù)清除
2.5.1.2 數(shù)據(jù)顯示:
圖21
圖21所示為上位機(jī)的數(shù)據(jù)顯示部分,“前”為小車(chē)距離前方最近障礙物的距離,最大顯示為255cm;“溫度”為小車(chē)所處位置的實(shí)際溫度;“狀態(tài)”為小車(chē)當(dāng)前的行進(jìn)狀態(tài),分為“向前”,“左轉(zhuǎn)中”,“右轉(zhuǎn)中”三種狀態(tài)。
共用體表示溫度:在共用體中,不同的變量占用同一段內(nèi)存。我們可以使用共用體的這個(gè)特質(zhì)來(lái)表示溫度。在串口接收的數(shù)據(jù)中,表示溫度的數(shù)據(jù)被分為4個(gè)字符型數(shù)據(jù),此時(shí)我們定義一個(gè)共用體tem在處理函數(shù)中。
將接收到的四個(gè)字符數(shù)據(jù)依次放入是s[0]至s[3]中,此時(shí),共用體中的浮點(diǎn)數(shù)t表示的就是這四個(gè)字節(jié)所對(duì)應(yīng)的溫度數(shù)據(jù)。
2.5.1.3 指令按鈕:
圖22
圖22所示為上位機(jī)對(duì)小車(chē)發(fā)送指令和清除上位機(jī)上數(shù)據(jù)的按鈕模塊,共分為六個(gè)按鈕,分別為“前進(jìn)”、“加速”、“減速”、“左轉(zhuǎn)”、“右轉(zhuǎn)”和“清除”。
“前進(jìn)”:發(fā)送“GOAHEAD”指令;
“加速”:發(fā)送“ACCEL”指令;
“減速”:發(fā)送“SLOWD”指令;
“左轉(zhuǎn)”:發(fā)送“GOLEFT”指令;
“右轉(zhuǎn)”:發(fā)送“GORIGHT”指令;
“清除”:清除當(dāng)前顯示的距離、溫度、狀態(tài)數(shù)據(jù)以及小車(chē)行駛軌跡,將畫(huà)圖界面上的小車(chē)重新定位至起點(diǎn)。
2.5.1.4 畫(huà)圖控件:
圖23
圖23所示為上位機(jī)界面中的畫(huà)圖模塊。
畫(huà)圖模塊的基本框架是調(diào)用VC++中的畫(huà)圖控件,背景色為白色;方塊表示小車(chē);紅色箭頭所處位置表示車(chē)頭,藍(lán)色圓圈表示小車(chē)行駛軌跡。
1.小車(chē)由最初位置開(kāi)始前進(jìn),此時(shí)小車(chē)行駛軌跡如圖24所示。
圖24
2.小車(chē)前方遇到障礙物,小車(chē)右轉(zhuǎn)前進(jìn),此時(shí)小車(chē)行駛軌跡如圖25所示。
圖25
小車(chē)右轉(zhuǎn)前進(jìn)一段距離,前方探測(cè)到無(wú)障礙物,小車(chē)左轉(zhuǎn)回到原先的前進(jìn)方向,此時(shí)小車(chē)行駛軌跡如圖26所示。
圖26
從這幾個(gè)狀態(tài)看出,上位機(jī)界面可以很好的反映出小車(chē)在地面上所行駛的軌跡。
畫(huà)圖同步問(wèn)題:在繪制小車(chē)行駛軌跡時(shí)最大的問(wèn)題,是上位機(jī)上小車(chē)行駛軌跡與小車(chē)在地面上的行駛軌跡同步變化,且不受界面窗口最小化的影響。
要解決這一問(wèn)題,就需要定義兩個(gè)設(shè)備上下文。在此項(xiàng)目的MFC程序中,我們定義了兩個(gè)設(shè)備上下文,CDC* pDC;//屏幕DC,CDC MemDC;//內(nèi)存DC同時(shí)定義CBitmap bmp;//位圖全局緩存,我們通過(guò)全局緩存bmp將屏幕DC和內(nèi)存DC關(guān)聯(lián)起來(lái)。
在上位機(jī)運(yùn)行過(guò)程中,我們先將小車(chē)的軌跡變化畫(huà)入內(nèi)存DC,然后在MFC程序的畫(huà)圖函數(shù)中,再將內(nèi)存DC畫(huà)入屏幕DC。經(jīng)過(guò)這樣的處理上位機(jī)上小車(chē)的軌跡變化就可與地面上的變化同步,且不受窗口最小化的影響。
三、項(xiàng)目設(shè)計(jì)框圖
3.1硬件設(shè)計(jì)框圖
3.2軟件設(shè)計(jì)框圖
四、測(cè)試結(jié)果
小車(chē)基本實(shí)現(xiàn)了和上位機(jī)之間的藍(lán)牙通信,可以依據(jù)上位機(jī)發(fā)出的指令作出相應(yīng)的動(dòng)作,如直行、左右轉(zhuǎn)彎、加減速等,并能夠檢測(cè)前方障礙物以及采集溫度。
PCB實(shí)物圖
實(shí)物圖
上位機(jī)數(shù)據(jù)采集
?
評(píng)論
查看更多