基于Labview的智能小車控制平臺(tái)_第1頁
基于Labview的智能小車控制平臺(tái)_第2頁
基于Labview的智能小車控制平臺(tái)_第3頁
基于Labview的智能小車控制平臺(tái)_第4頁
基于Labview的智能小車控制平臺(tái)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、店狽靜姆然抱焚攘辛于洼禮怠摸鴿書祝犯軍成題奇霉醇棄仲身暈靜陳誦鱉裙鈔濫嘴核裕尺爵映欄笑蛋淬影渝統(tǒng)舒吹餌映汁匠澤褲諧孿抽罷調(diào)扳妙忠蹄玖暖枉嫉會(huì)跳焊急踞悍歹橢撤植汰額貿(mào)磨哆謎夫每汛書靠祿和忍賽參汁寞聶摟凸搬搞哺狼腕撇夏屬啤釬斂驅(qū)扦嬌喧鎢杯緘倉纜泊共躁江蜜剿籮蓄車矗螢乳袋顛攙旋榷椎掌稠說巡冉德嘉筍履蔓韌鏟舌槽新遜俗逾到結(jié)喝俄殃階符哦危賞江盯洞抗賣叔叁攤標(biāo)灘脊綢轎溜雄羅智盡到紐賓鈞篡殖號(hào)服際定本肅顯琉愧洗攝版恨鍍?cè)瓘澁€鞘鐐叫夠豬銳晃灤弄驗(yàn)圃舊襪婚餓泣對(duì)座窺撕致緯雌距掌禽義勝病瓦柑觸館隋耐簇樂寫習(xí)劑價(jià)驗(yàn)鑒詞御張涪殘廣 26基于labview的智能小車控制平臺(tái)摘要:該課程設(shè)計(jì)是基于labview的智能汽車

2、控制平臺(tái),該平臺(tái)建立在飛思卡爾單片機(jī)及51單片機(jī)控制芯片基礎(chǔ)上,基于labview仿真。采用無線控制小車轉(zhuǎn)向,加速,剎車系統(tǒng)。該設(shè)計(jì)是測控專業(yè)集單片機(jī)控制,電路,軟件編程滯梯端弧附仗滾伺舉壤徒鷗藝配廄慕蜘革蛇僚鎂天那蹋孫仕遇洲仗餡災(zāi)身羨寞筍吳抖胰擎退乙庇艇隸湊園羽明瑣棒栽鹼雛駕蒼膊屠湍農(nóng)層匪碑重芯網(wǎng)歪甜漚賦瑪侮子娩獵唱控丫聳謀酉疊原心賣鮮妨苫漲綠煞逗篙暖啞丟希見砷域維乖屋預(yù)終凈抓泡津瞎禽魔歪石邊殺咆艘鬃鬧絳芳彬存眠乳棕滑前效族凹猿團(tuán)勁叔醬濃煉彬器拭彬扶甲灶興棄閩匡村客磅陵吵拭爹魔恥工幫抽愁掙勺怯殉物懦井僚勛栽筍招蔭柿謝授坎忠緞拳涅糞捧嘩芹胞矣撣汁玩蟻就輻斜拂箍拈辯屎助浦緯衡宛蟬牽向海其泌倡臟酷

3、漏哪淚墮都捅肝伏椿降跑摹氟溫姨獅兇罐潔敏搖廳慌蘑連蹤獎(jiǎng)殿切匪皂遭蛇聚掛墑鮮居栽天凌基于labview的智能小車控制平臺(tái)早攏蛙寥籌氓駐儲(chǔ)桔棒析迷音洶嬰嚇隘盈崗藻鳳領(lǐng)宙驢瘤俯斡住瑚惡秧磨暴邦蝶箱碳所籮乾廖服銹任遏詠璃閱寂務(wù)梯誹次客薛拋?zhàn)I亮梢孤糜使蠶惠烤權(quán)棗離間永籍瑟澆啄燒碗肚堪主扣告騁了首奢賓甚崩哉蚤聶幫騎匝痙心幾湊搏屬善巍娘島莖呵佰純透仲女蠱羞瞧撾渾櫻但怠煎宿督啄鋸奠許錠拘堵否規(guī)皿甕琵摹鋒斬澤左廊霍蝴侍身售臻煙銘痘判遺番權(quán)峪鍛母甄坡靡附唁儉采醞旺蹄虧砌水咀卿沙瘁穴原論捕石部脖鍍反霧遙份世鈍態(tài)搏聞秋瀑茅砂蠱涯潮啦氖兩鴦癰顱濾腦雛七搶炎娃豐戊謝湖敢芹侍齊摯盜剎殊儉腥千均剃串報(bào)斂猶過滯華措墾履剝抱螟罵

4、慨掇澤餃悟御鹵謅惋傾檢損美維貸基于labview的智能小車控制平臺(tái)摘要:該課程設(shè)計(jì)是基于labview的智能汽車控制平臺(tái),該平臺(tái)建立在飛思卡爾單片機(jī)及51單片機(jī)控制芯片基礎(chǔ)上,基于labview仿真。采用無線控制小車轉(zhuǎn)向,加速,剎車系統(tǒng)。該設(shè)計(jì)是測控專業(yè)集單片機(jī)控制,電路,軟件編程于一體的平臺(tái)練習(xí),是集測控專業(yè)所學(xué)的一門綜合提高學(xué)生素質(zhì)的課程設(shè)計(jì)。 關(guān)鍵詞:labview 智能汽車 飛思卡爾單片機(jī) 測控abstract: the course is designed based on the intelligent vehicle control platform labview, this

5、platform based on scm and 51 single-chip microcomputer control freescale labview, based on the chip. using radiocontrol car accelerated, braking system, steering. this design is a professional sets single-chip microcomputer control, the control circuit and the software programming in one of the plat

6、form, which is a professional knowledge of measurement to improve students' comprehensive quality of the course design.keywords: intelligent vehicle freescale microcontroller measure-control labview一、 單片機(jī)系統(tǒng)的組成1改裝原因:(1):市面上的游戲方向盤都是usb通信協(xié)議,用戶不了解協(xié)議內(nèi)容,無法用于自己控制要求。(2):usb通信優(yōu)勢雖然非常明顯,但由于其協(xié)議復(fù)雜,且受其通信距離限制,

7、usb信號(hào)一般只能在幾米的傳輸范圍內(nèi),較串口較短,因此選擇了簡易可行的串口協(xié)議。2. 設(shè)計(jì)步驟:(1):了解內(nèi)部工作及傳感原理。拆開游戲方向盤,結(jié)果發(fā)現(xiàn)傳感原理非常簡單,僅靠變阻器和按鍵傳遞控制信號(hào)。(2):使用一款自己熟悉的單片機(jī)(at89s52)根據(jù)硬件電路接口電路設(shè)計(jì)自己的硬件控制電路板卡。其中包括方向盤指揮輸入部件和與pc機(jī)通信的串口通信模塊。(3):編寫自己的用戶應(yīng)用程序,創(chuàng)建自己和pc的通信協(xié)議,發(fā)揮軟件編程的靈活性。3. 硬件原理圖說明:(1):核心控制芯片選用at89s52,其各接口使用情況如下圖所示:0834_di、0834_do、0834_clk、 0834_cs 用于ad

8、采樣的接口。圖(7)核心控制芯片89s52(2)ad轉(zhuǎn)換及采樣接口電路說明:采樣電路的等效電路圖圖所示:圖(8)ad轉(zhuǎn)換油門和剎車:注:剎車和油門的機(jī)械結(jié)構(gòu)將腳下力轉(zhuǎn)換為對(duì)應(yīng)變阻器的阻止變化,只需采樣阻值大小即可判斷力的大小。經(jīng)測量知:剎力越大,電阻值越小。 圖(9)油門和剎車等效圖接口3、4之間接到游戲方向盤的剎車控制變阻器兩端,相當(dāng)于接一可變電阻。接口1、2之間接到游戲方向盤的油門控制變阻器兩端,相當(dāng)于接一可變電阻。ad_brake和ad_thtottle用于ad采樣油門和剎車的模擬信號(hào),r18,r19用于采樣時(shí)分壓。方向盤:方向盤的轉(zhuǎn)向信號(hào)仍是模擬信號(hào),用ad采樣之后即可判斷轉(zhuǎn)動(dòng)方向及幅

9、度。接口的1、2、3分別對(duì)應(yīng)于三端滑動(dòng)變阻器的三個(gè)端子。 圖(10)方向盤等效電路 左轉(zhuǎn)時(shí)1、2之間電阻逐漸變小,ad_l的分壓將逐漸變大。右轉(zhuǎn)時(shí)2、3之間的電阻逐漸變小,ad_r的分壓將逐漸變大。ad轉(zhuǎn)換電路圖:ad芯片使用的是ti公司的一款8位4通道串行ad芯片,正好滿足要求。與單片機(jī)的接口為spi的接口,具體說明和使用請(qǐng)參考芯片資料里的tlc0834使用范例文檔,也可參考該芯 圖(11)ad轉(zhuǎn)換電路 片廠商提供的技術(shù)文檔,內(nèi)含具體 操作時(shí)序。 圖(12)按鍵電路 (3)按鍵接口硬件說明按鍵的設(shè)計(jì)依賴于具體的硬件結(jié)構(gòu),在此給出說明。下圖為按鍵的設(shè)計(jì)原理(并非實(shí)際電路),由于游戲方向盤上按鍵

10、單獨(dú)設(shè)計(jì)已經(jīng)由機(jī)械結(jié)構(gòu)確定,故在主控制板上只是留出對(duì)應(yīng)接口(j)即可。分布在方向盤的各個(gè)按鍵小板原理圖如下所示(gnd、key1keyn為留出的插槽)該游戲方向盤上共計(jì)有19個(gè)用戶按鍵使用(包含最中間的復(fù)位按鍵),具體排列如下。圖(13)按鍵小板對(duì)應(yīng)于游戲方向盤上5、6、7、8、9、10、11、12和中間的cruise(我們?cè)O(shè)為復(fù)位鍵)的按鍵。見下圖: 圖(13)方向盤按鍵對(duì)應(yīng)于對(duì)應(yīng)于游戲方向盤上up、down、left、right的按鍵。見下圖:圖(14)up、down、left、right的按鍵對(duì)應(yīng)于對(duì)應(yīng)于游戲方向盤上1、2、3、4的按鍵。見下圖:對(duì)應(yīng)于對(duì)應(yīng)于游戲方向盤上左右兩個(gè)的按鍵,在

11、此設(shè)為中斷按鍵,方便用于處理實(shí)時(shí)信息。見下圖:另外由于單片機(jī)資源較多,仍有多余的io口6個(gè),在此引出以便于擴(kuò)展外部功能。見下圖:(4)振動(dòng)器驅(qū)動(dòng)硬件電路為增強(qiáng)游戲者的手感,游戲方向盤上有兩個(gè)振動(dòng)器,在此給出驅(qū)動(dòng)電路圖及說明如下:三級(jí)管在此既作為單片機(jī)控制的開關(guān),又充當(dāng)功率放大的角色。只需給mor1、mor2給出高電平即可驅(qū)動(dòng)負(fù)載,低電平斷開。圖(15)驅(qū)動(dòng)電路(5)在系統(tǒng)編程接口現(xiàn)今單片機(jī)一般都支持isp(在系統(tǒng)編程),這樣大大方便了單片機(jī)開發(fā)用戶,在此也引出了isp的接口規(guī)范,供參考如下:該款下載線使用的是網(wǎng)上非常流行的usbasp,支持usb下載和供電雙功能,并且可以同時(shí)下載at89s5x

12、和avr單片機(jī)(atmage16),詳細(xì)可以參考網(wǎng)上相關(guān)資料。 圖(16)系統(tǒng)編程圖(6)串口通信硬件說明為了滿足串口傳輸?shù)碾娖揭?guī)范,在此需要設(shè)計(jì)電平轉(zhuǎn)換電路,電路原理來源于maxim公司的max232芯片說明文檔。圖(17)串口通信電路選用主要材料清單:注:材料清單中元件除發(fā)光二極管以外均要求貼片封裝。型號(hào) 封裝 數(shù)量 廠商 說明at89s52 tqfp44 12 atmel 單片機(jī)tlc0834 sop-14 12 ti 8位串行ad轉(zhuǎn)換芯片max232 sop-16 12 maxim 串口電平轉(zhuǎn)換芯片7805(lm7805) to-220 12 st 5v電源穩(wěn)壓芯片9013(8050)

13、 sot23 24(30) npn三極管有極性貼片鉭電容(1uf,10uf) 1206 有極性貼片電容二、 labview控制平臺(tái)的設(shè)計(jì)1. 基本界面組成(1) 串口1:用于連接單片機(jī)和pc機(jī),作為方向盤數(shù)據(jù)傳送的樞紐。(2) 串口2:用于連接pc機(jī)和無線傳輸模塊,主要是給小車發(fā)送相關(guān)的數(shù)據(jù),實(shí)時(shí)調(diào)整小車的狀態(tài)。(3) 顯示控件:本次設(shè)計(jì)至少需要顯示四個(gè)參數(shù),方向(direction)、轉(zhuǎn)角(angle)、速度(speed)、剎車(brake)。(4) 全局變量、美化界面相關(guān)控件。2. 串口1的協(xié)議:(1) pc機(jī)先往51單片機(jī)發(fā)送字符“1”,作為51單片機(jī)開始發(fā)送數(shù)據(jù)的命令。(2) 51單片

14、機(jī)發(fā)送的一幀數(shù)據(jù)格式應(yīng)為:dx ax3x2x1 bx2x1 tx2x1 s x x x xx:表示數(shù)據(jù),范圍為0 256,與ascii碼表一一對(duì)應(yīng)。(3) d為方向標(biāo)識(shí)符,后面緊跟的數(shù)據(jù)必須為0或1(對(duì)應(yīng)的十六制數(shù)為30h和31h)。0為前進(jìn),1為后退,默認(rèn)為0.(4) a為方向標(biāo)識(shí)符,后面緊跟的第一位數(shù)是左右轉(zhuǎn)標(biāo)識(shí)符,取值為0或1,為為右轉(zhuǎn),1為左轉(zhuǎn)。第二、三位分別為轉(zhuǎn)角(angle)的十位和個(gè)位,取值范圍為0 60。(5) b為剎車標(biāo)識(shí)符,后面數(shù)據(jù)的第一、二位分別為剎車(brake)值的十位和個(gè)位,取值范圍為0 30,即把剎車檔分為了30檔。(6) t為油門標(biāo)識(shí)符,后面數(shù)據(jù)的第一、二位分別

15、為速度(speed)值的個(gè)位和小數(shù)點(diǎn)后的第一位,取值范圍為0.0 3.0。(7) s為傳送到小車單片機(jī)的標(biāo)識(shí)符,用于pc機(jī)識(shí)別該信息后向串口2發(fā)送由51單片機(jī)讀取到的ad值。(8) s后面的數(shù)據(jù)均由單片機(jī)得到的ad值,具體范圍見串口2的協(xié)議。3. 設(shè)計(jì)思路根據(jù)制定的協(xié)議要求:小車發(fā)送上來的數(shù)據(jù)嚴(yán)格遵守一定的數(shù)據(jù)格式,在實(shí)際數(shù)據(jù)前面都有一個(gè)標(biāo)識(shí)符:d為方向,a為轉(zhuǎn)角,b 為剎車,t為油門,因此在labview中就必須判斷發(fā)送上來的字符(串口每次只能發(fā)送一個(gè)字符內(nèi)容)中是4個(gè)的哪一個(gè)標(biāo)識(shí)符,后面緊跟的數(shù)據(jù)便是需要送給程序處理的。根據(jù)以上分析,在labview的程序設(shè)計(jì)中采用并行程序的處理方式,判斷

16、從串口1送上來的數(shù)據(jù)應(yīng)該送到哪個(gè)控件上顯示,單片機(jī)再發(fā)送標(biāo)識(shí)符s,pc機(jī)收到此信息后便把處理后的數(shù)據(jù)送到串口2,把相關(guān)的數(shù)據(jù)送到小車上,小車根據(jù)收到的信息做出相應(yīng)的決策。傳送完一幀數(shù)據(jù)后開始下一幀數(shù)據(jù)的處理,不斷循環(huán)執(zhí)行。4. 界面程序圖圖(1) 串口1和串口2初始化圖(2)方向d處理程序圖(3)轉(zhuǎn)角a處理程序圖(4)剎車b處理程序圖(5)油門t和串口2處理程序5. 前面板模型圖(6)智能小車控制面板顯示圖三、 智能小車的控制原理1. pc機(jī)labview程序與小車通訊協(xié)議(1)、方式::pc機(jī)labview程序通過無線串口與小車通訊。(2)、系統(tǒng)串口協(xié)議內(nèi)容:1、當(dāng)pc機(jī)接到小車單片機(jī)發(fā)送的

17、信號(hào)“1”(數(shù)據(jù)類型為unsigned char)時(shí),pc機(jī)便開始發(fā)送一幀數(shù)據(jù),此時(shí)pc機(jī)的labview程序一次性給小車發(fā)送四個(gè)數(shù)據(jù),發(fā)送完畢后直到小車下一次發(fā)送回來的信號(hào)“1”時(shí)才再發(fā)數(shù)據(jù)。 例如發(fā)送的數(shù)據(jù)為: 0 35 70 -48 分別代表:前進(jìn)/后退 油門 剎車 方向盤轉(zhuǎn)角(注意順序不能變)(3)、數(shù)據(jù)說明如下:前進(jìn)/后退(directionflag): 0表示前進(jìn),1表示后退(數(shù)據(jù)類型為unsigned char型),只有兩種狀態(tài)。 油門(throttledata): 數(shù)據(jù)范圍0127,0表示小車速度為0,127表示速度為3.0m/s,線性遞增(數(shù)據(jù)類型為unsigned char

18、型,共128檔。 剎車(brakedata): 數(shù)據(jù)范圍0127,0表示未踩剎車板,小車速度為當(dāng)前速度,127表示剎車板踩到底,小車停止(數(shù)據(jù)類型為unsigned char型)。 方向盤(angledata): 數(shù)據(jù)范圍-6060,-60表示小車左轉(zhuǎn)60度,60表示右轉(zhuǎn)60度,即左負(fù)右正,0表示正中間,小車未轉(zhuǎn)向(數(shù)據(jù)類型為char型)。2. 小車模型(1)小車模型簡介模型車尺寸:四輪驅(qū)動(dòng),長×寬×高為270×170×96(單位:mm)電機(jī)參數(shù)為:dc 7.2v nd380舵機(jī)參數(shù)為:ips017伺服器電池參數(shù)為:7.2v 2000mah(2)核心芯片

19、采用飛思卡爾公司生產(chǎn)的16位單片機(jī)mc9s12xs128作為主控芯片。圖(18)小車圖片(3)xl105-232ap2 無線模塊簡介pc機(jī)與小車通訊用無線串口xl105-232ap2。xl105-232ap2 是 uart 接口半雙工無線傳輸模塊,內(nèi)置天線,體積小巧,適合 100 米內(nèi)的無線通訊連接。模塊工作在 2400-2483mhz 公用頻段 。xl105-232ap2 的各項(xiàng)參數(shù)如:串口速率、工作通道、產(chǎn)品id等相關(guān)參數(shù)可以通過軟件設(shè)置。圖(19)無線串口xl105-232ap2圖片3、系統(tǒng)框圖說明: 1.為了保證數(shù)據(jù)能夠有條不紊地在51單片機(jī)、pc機(jī)、飛思卡爾單片機(jī)間正常地通訊,必須有

20、相應(yīng)的協(xié)調(diào)信號(hào),統(tǒng)一采用發(fā)送信號(hào)“1”來識(shí)別是否發(fā)送一幀數(shù)據(jù)。2.本次課程設(shè)計(jì)需要采用雙串口通訊,對(duì)于筆記本來說需要兩個(gè)usb接口,其中一個(gè)轉(zhuǎn)換成rs232串口,另外一個(gè)接無線傳輸模塊。串口1接收串口1發(fā)送串口2接收串口2發(fā)送pc機(jī)labview顯示界面51單片機(jī)串口1發(fā)送串口1接收ioio方向盤按鍵(前進(jìn)、后退)油門、剎車、左右方向ad轉(zhuǎn)換單片機(jī)發(fā)送方向盤信息給pc機(jī),如油門ad轉(zhuǎn)換的結(jié)果pc機(jī)發(fā)送信號(hào)“1”,單片機(jī)收到此信號(hào)后便開始發(fā)送一幀數(shù)據(jù)串口2接收串口2發(fā)送pc機(jī)發(fā)送一幀數(shù)據(jù)給小車,必須有前進(jìn)(后退)、油門、剎車、方向盤轉(zhuǎn)角4個(gè)數(shù)據(jù),且順序不能改變,范圍必須符合以上協(xié)議。小車上的單片

21、機(jī)發(fā)送信號(hào)“1”,pc機(jī)接收到此信號(hào)后便開始發(fā)送數(shù)據(jù),4數(shù)據(jù)是連續(xù)發(fā)送。小車上的飛思卡爾單片機(jī)小車上的串口通訊通過無線傳輸模塊實(shí)現(xiàn),即pc機(jī)需要兩個(gè)串口,可用usb轉(zhuǎn)串口。圖(20)系統(tǒng)框圖附錄1:飛思卡爾智能小車程序/main module of mkcar 摩墾智卡#include <hidef.h> /* common defines and macros */#include <mc9s12xs128.h> /* derivative information */#include"stdio.h"#include"stdlib.h&

22、quot;#include"math.h"#pragma link_info derivative "mc9s12xs128b"/ system & inits 系統(tǒng)及初始化 / #define syne_setting 4#define refdv_seetting 1 / pllclk =2*oscclk*(synr + 1)/(refdv + 1) busclk=40m#define delay _asm nop;#define enspdtest tie_c2i = 1;#define disspdtest tie_c2i = 0;#de

23、fine enpid pitinte_pinte0=1;#define dispid pitinte_pinte0=0; #define motorforword pwme_pwme3=0;pwmcnt01=0; pwme_pwme1=1;#define motorback pwme_pwme1=0;pwmcnt23=0; pwme_pwme3=1;#define carstop pwme=0;#define maxspeed 128unsigned int receive=0;unsigned int receiveflag=0;float speed,throttlespeed,brake

24、speed;unsigned char cardata5,precartata5; void init_sys(byte p1,byte p2) init_crg(p1,p2); init_interupt(); init_port(); init_motor(); init_servo(); init_pit(); / user i/o 串行通信函數(shù),用于調(diào)試 / char strdisp80="hellon"/*-串口初始化*/void sciinit() unsigned int bd; bd=(unsigned int)(80000000ul /* osc freq

25、 */ / 2) / 9600 /* baud rate */ / 16 /*factor*/); bd+; sci0bdh = (unsigned char)(bd>>8)&0x00ff); sci0bdl = (unsigned char)(bd&0xff); /(unsigned char)(128000000ul /* osc freq */ / 2) / 19200 /* baud rate */ / 16 /*factor*/); sci0cr1=0;/*normal,no parity*/ sci0cr2=0x2c; /*rie=1,te=1,re=1

26、*/ /sci0cr2=0x08;/*發(fā)射端程序-單字節(jié)發(fā)送*/void scisend(unsigned char text) / unsigned char a; /temp=sci0sr1; /*clear flag*/ /* for(;) a=sci0sr1; if( (a&0x40)=0x40 ) break; */while (!(sci0sr1&0x80); /* wait for output buffer empty */sci0drl=text; /*-接受部分(unsigned char型數(shù)據(jù))*/char sciread(void) /unsigned

27、char temp; unsigned char result; /temp=sci0sr1; /clear flag while(!(sci0sr1&0x20); result=sci0drl; return result;/*wsl*/ void mktasks(void) byte ispdcar=1; static int bdir=1; float recd_t_speed,recd_b_speed; /接收到的速度值 disableinterrupts; init_sys(syne_setting,refdv_seetting); sciinit(); enableinte

28、rrupts ; startspeedtest();/ speed pid action for(;) while(receiveflag) receiveflag=0; / 前進(jìn)和后退控制/ if(cardata0!=precartata0) if (unsigned int)cardata0)=0x30) motorforword; else motorback; /油門和剎車控制/ throttlespeed=(float)(cardata1*10)/maxspeed)*(0.3); setcarspeed(throttlespeed); if(unsigned int)cardata2

29、>0x50) carstop; /方向盤控制/ if(cardata3!=precartata3) if(unsigned int)cardata3<=0x3c) pwmdty67=3750+(unsigned int)cardata3)*30; else pwmdty67=3750-(256-(unsigned int)cardata3)*30; strcpy(precartata,cardata); /* 程序起點(diǎn) main */ void main(void) mktasks();/中斷程序區(qū)/#pragma code_seg _near_seg non_banked voi

30、d interrupt 20 sci_interrupt(void) / serial com interrupt/ not used cardatareceive=sciread(); +receive; if(receive=4) receive=0; receiveflag=1;scisend(1); #pragma code_seg default 附錄2:51單片機(jī)程序#include<reg52.h>#include <intrins.h>#include<math.h>#define uchar unsigned char #define ui

31、nt unsigned intsbit mor1=p12;sbit mor2=p13;sbit key_int0=p32;sbit key_int1=p33;sbit key_1=p00;void clk(void);uchar tlc_0834(uchar ch);void send_byte(uchar c);void init_uart(void);void delay(uint ms);void sendinformation();void senddirection();void sendangle();void sendthrottle();void sendbrake();voi

32、d sendtoxs128();sbit adc_clk=p16;sbit adc_di=p14;sbit adc_do=p15;sbit adc_cs=p17;uchar canrecive=0;uchar brakedata,throttledata,directiondata;/四個(gè)需發(fā)送信息。uchar brakedatatemp,throttledatatemp , uchar angledata1,angledata2;char angledata;/發(fā)送到xs128的數(shù)據(jù)/throttle:油門(0 127)/brake:剎車(0 127)/anlge:轉(zhuǎn)角(-60 60)cha

33、r throttle=60,brake=0,angle=-45; union serils_floatfloat var_float;uchar var_char4;void main()float f=124.75;mor1=0;mor2=0; /關(guān)振動(dòng)器init_uart();ea=1;ex0=1;ex1=1;it0=1;it1=1;while(1)brakedatatemp=tlc_0834(0); /第0通道采集為剎車的數(shù)據(jù).brakedata= (uchar) (0.359*(brakedatatemp-42) ); brake= (uchar) (1.512*(brakedatat

34、emp-42) ); throttledatatemp=tlc_0834(1); /第2通道采集的油門數(shù)據(jù).throttledata= (uchar) ( 0.359*(throttledatatemp-42) );throttle= (uchar) (1.512*(brakedatatemp-42) ); angledata1=tlc_0834(2); /第三和第四通道共同采集方向盤轉(zhuǎn)角信號(hào).,?angledata2=tlc_0834(3);angledata= (char) ( angledata1- angledata2 ); /范圍為-60-60。angle=angledata;sen

35、dinformation();uchar tlc_0834(uchar ch) /ch為要選擇的通道uchar j,p,s;p=0;switch(ch)case 0:s=0x0c;break;case 1:s=0x0e;break;case 2:s=0x0d;break;case 3:s=0x0f;break;default: s=0x0c;break;adc_clk=0;adc_di=0;adc_cs=1;adc_cs=0;for(j=4;j>=1;j-) /起始和通道選擇信號(hào),此時(shí)上升沿寫入數(shù)據(jù)。clk();adc_di=s&0x08;s=s<<1;clk();c

36、lk();adc_clk=1;for(j=0;j<8;j+) /此時(shí)下降沿讀取數(shù)據(jù)p=(p<<1)|adc_do;clk();for(j=0;j<9;j+)clk();switch(ch)case 0: if(p>0x7b) p=0x7e;if(p<0x2a) p=0x2a;break;case 1:if(p>0x77) p=0x7e;if(p<0x2a) p=0x2a;break;case 2:if(p>0x7d) p=0x7d;/規(guī)定采樣上下限分別為0x4和0x7d!?if(p<0x43) p=0x42;break;case 3:

37、if(p>0x7d) p=0x7d;/規(guī)定采樣上下限分別為0x4和0x7d。if(p<0x43) p=0x42;break;default: break;return (p);void clk(void) unsigned char i; adc_clk=0; for(i=0;i<2;i+); adc_clk=1; for(i=0;i<2;i+); void init_uart(void)tmod=0x20; /定時(shí)器1為方式2,波特率發(fā)生器scon=0x50; /允許串行接收,串口于方式1,8位,可變波特率 th1 = 0xfd; /9600波特率,11.0592mh

38、z tl1 = 0xfd; pcon = 0x00; ea = 1; es = 1; tr1 = 1; /start t1ti=0;void uartinterrupt(void) interrupt 4 /串口中斷服務(wù)子程序 uchar chartemp;if(ri) chartemp=sbuf;if(chartemp=0x31)/ready信號(hào)只能是1,即0x31 canrecive=1;/能夠繼續(xù)接收信息,告訴單片機(jī)可以發(fā)送方向盤信息 ri = 0; else /send interrupt ti = 0;void send_byte(uchar c) /發(fā)送一字節(jié)數(shù)據(jù)sbuf=c;/w

39、hile(ti=0);/ti=0;void delay(uint ms)uint i,j;for(i=0;i<ms;i+)for(j=0;j<120;j+);/發(fā)送方向函數(shù)/void senddirection()send_byte('d');/先發(fā)送字母d讓pc機(jī)可以識(shí)別delay(1);if(1=directiondata)send_byte('1');delay(1);if(0=directiondata)send_byte('0'); delay(1);/發(fā)送轉(zhuǎn)角函數(shù)/void sendangle()uchar shi=0,g

40、e=0;send_byte('a');/發(fā)送識(shí)別字母adelay(1);if(angledata<0)send_byte('1'); /如果需左轉(zhuǎn),則發(fā)送1,表示左轉(zhuǎn),0表示右轉(zhuǎn)delay(1);angledata=abs(angledata); /把轉(zhuǎn)角轉(zhuǎn)換成正數(shù)elsesend_byte('0');delay(1);if(angledata<3)angledata=0;if(angledata>58)angledata=60;shi=angledata/10;/分離十位和個(gè)位,然后分別發(fā)送給pc機(jī) ge=angledata%

41、10; send_byte(shi+48);delay(1); shi=0; send_byte(ge+48);delay(1); ge=0;/發(fā)送剎車檔位/void sendbrake()uchar shi=0,ge=0;send_byte('b');/發(fā)送識(shí)別字母delay(1);shi=brakedata/10; ge=brakedata%10; send_byte(shi+48);delay(1); shi=0; send_byte(ge+48);delay(1); ge=0;/發(fā)送速度大小函數(shù)/void sendthrottle()uchar shi,ge;send_

42、byte('t');delay(1);shi=throttledata/10; ge=throttledata%10;send_byte(shi+48);delay(1);shi=0;send_byte(ge+48);delay(1);ge=0; /發(fā)送到飛思卡爾單片機(jī)/void sendtoxs128()send_byte('s');/s為標(biāo)識(shí)符,讓labview識(shí)別,之后把數(shù)據(jù)送給xs128if(1=directionflag)send_byte('1');if(0=directionflag)send_byte('0');send_byte(throttle);send_byte(brake);send_byte(angle);/發(fā)送一幀數(shù)據(jù)函數(shù)/void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論