




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE34基于能力風(fēng)暴機(jī)器人的無(wú)線通信目錄一、概述1二、正文3HYPERLINK2.1設(shè)計(jì)的目標(biāo)和實(shí)現(xiàn)的主要功能3HYPERLINK2.1硬件電路設(shè)計(jì)及描述4HYPERLINK2.3軟件流程圖及描述11HYPERLINK2.4源程序代碼18HYPERLINK2.5調(diào)試結(jié)果29三、課程設(shè)計(jì)總結(jié)HYPERLINK3.1設(shè)計(jì)中主要問(wèn)題及最終解決方法30HYPERLINK3.2個(gè)人總結(jié)32參考文獻(xiàn)及資料35一概述本課題基于廣茂達(dá)公司生產(chǎn)的能力風(fēng)暴機(jī)器人及其配件。配件包括小型無(wú)線攝像機(jī)及無(wú)線視頻接收器,無(wú)線通信模塊(兩套),滅火配件(只用電風(fēng)扇及其固定支架)。通信方式采用串口通信,利用兩個(gè)微功率無(wú)線通訊模塊收發(fā)指令,一個(gè)連接在PC上發(fā)射命令,另一個(gè)接在能力風(fēng)暴機(jī)器人上,接收PC發(fā)來(lái)的指令。機(jī)器人根據(jù)接收的指令執(zhí)行各種運(yùn)動(dòng),可以實(shí)時(shí)控制機(jī)器人的運(yùn)動(dòng)速度,旋轉(zhuǎn)角度,并能控制電風(fēng)扇的開(kāi)關(guān)實(shí)現(xiàn)滅火功能。由于沒(méi)有視頻采集卡,加上時(shí)間有限,以及本人能力有限等原因,視頻模塊的功能沒(méi)有實(shí)現(xiàn)(也是本次設(shè)計(jì)比較遺憾的地方),其余功能都可以實(shí)現(xiàn)。并且可以做到實(shí)時(shí)接收命令,進(jìn)而實(shí)現(xiàn)了對(duì)機(jī)器人的實(shí)時(shí)控制。二正文HYPERLINK2.1設(shè)計(jì)的目標(biāo)和實(shí)現(xiàn)的主要功能主要功能:實(shí)時(shí)采集現(xiàn)場(chǎng)圖像信息,通過(guò)PC實(shí)時(shí)控制機(jī)器人運(yùn)行軌跡,可以控制其運(yùn)動(dòng)速度,旋轉(zhuǎn)角度以及滅火風(fēng)扇的開(kāi)關(guān)等功能,可通也可讓機(jī)器人在場(chǎng)地進(jìn)行自主漫游(避障運(yùn)動(dòng),錄像),實(shí)現(xiàn)示意圖:輔助器件及工具:能力風(fēng)暴智能機(jī)器人;小型無(wú)線攝像機(jī)及無(wú)線視頻接收器;無(wú)線通訊模塊2套;滅火配件一套(電風(fēng)扇及風(fēng)扇支架);電焊,接線,萬(wàn)用表及其他工具HYPERLINK2.2設(shè)計(jì)的描述及硬件電路設(shè)計(jì)設(shè)計(jì)過(guò)程:1.上位機(jī)程序的編寫(xiě)2.上位機(jī)程序調(diào)試(用串口調(diào)試精靈調(diào)試)3.編寫(xiě)單片機(jī)收發(fā)測(cè)試程序4.上位機(jī)與單片機(jī)通信調(diào)試5.編寫(xiě)單片機(jī)主程序(風(fēng)扇控制模塊先不添加)6.調(diào)試主程序7.電風(fēng)扇安裝及調(diào)試8.無(wú)線通信模塊安裝及調(diào)試硬件及電路:1.滅火裝置:滅火風(fēng)扇電機(jī)葉片直流電機(jī)滅火風(fēng)扇的安裝如圖,再固定在機(jī)器人底盤(pán)上直流電機(jī)的引線接法從上面的電路圖可以看出,單片機(jī)P3.2引腳(OUT6)接了一個(gè)驅(qū)動(dòng)芯片MC2803可提供較大的電流能驅(qū)動(dòng)直流電機(jī)??蓪⒅绷麟姍C(jī)的兩個(gè)引腳分別接在DO6的1、3引腳,當(dāng)P3.2輸出高電平時(shí)啟動(dòng)電動(dòng)機(jī),此時(shí)發(fā)光二極管LD3點(diǎn)亮,輸出低電平時(shí)關(guān)閉電動(dòng)機(jī),發(fā)光二極管熄滅。應(yīng)注意,單片機(jī)復(fù)位后P2.3引腳為高電平。2.無(wú)線通信模塊的安裝:由于無(wú)線通信模塊調(diào)試和查找錯(cuò)誤都比較麻煩,所以這一步一般要放在最后調(diào)試。也就是確保PC和單片機(jī)之間通過(guò)串口線可以實(shí)現(xiàn)準(zhǔn)確的通信。無(wú)線通信模塊實(shí)物圖排線上A/TX和B/RX可接RS232等,RXD和TXD為T(mén)TL電平的接口。單片機(jī)與無(wú)線通信模塊的焊接實(shí)物圖上面兩根線是無(wú)線通信模塊的電源線和地線,我把兩根線分別接在了DO6的2和1引腳,DO6口前面的圖上有。由上面這張電路圖可以看出JP1的2,3引腳分別接在了串口電平轉(zhuǎn)換MAX232AESE芯片上,所以可以將無(wú)線通信模塊的A/TX引線接在USB口的3引腳,B/RX引線接USB的2引腳,焊接時(shí)注意,需要實(shí)際的測(cè)試USB的2,3引腳與單片機(jī)引腳的鏈接方式,以防出錯(cuò)。上位機(jī)與無(wú)線通信模塊的連接連接時(shí)只需將RS232與3對(duì)應(yīng)的引線接在無(wú)線通信模塊的B/RX端,與2對(duì)應(yīng)的引線接A/TX端。另外,要為無(wú)線通信模塊提供3.6—5V的電源。在調(diào)試無(wú)線通信模塊時(shí)關(guān)于ABC跳線的選擇一定要先斷掉電源,不然,跳線不會(huì)起作用,因?yàn)椋瑹o(wú)線通信模塊的單片機(jī)只在接通電源初始化時(shí)去讀取ABC的值。最后,我把單片機(jī)的外接12MHZ晶振換成了11.0592MHZ才最終實(shí)現(xiàn)了無(wú)線通信,換晶振時(shí)要注意,一定要非常小心,不然可能會(huì)弄壞主板。最終實(shí)物圖HYPERLINK2.3軟件流程及描述上位機(jī)程序(VB編寫(xiě)):PC控制界面效果圖(VB編寫(xiě))可實(shí)現(xiàn)模塊及各模塊功能1.運(yùn)行模式模塊機(jī)器人兩種工作方式,一種是自動(dòng)運(yùn)行,此時(shí)可以自行進(jìn)行壁障運(yùn)動(dòng),并拍攝錄像(這里只是設(shè)想);第二種方式為遠(yuǎn)程控制,接到此命令后機(jī)器人即停止自動(dòng)運(yùn)行模式,準(zhǔn)備接受命令。2.運(yùn)動(dòng)控制模塊該模塊包括前進(jìn),停止,后退,左轉(zhuǎn)和右轉(zhuǎn)功能。點(diǎn)擊前進(jìn)按鈕,上位機(jī)給機(jī)器人發(fā)送前進(jìn)指令同時(shí)發(fā)送前進(jìn)時(shí)的轉(zhuǎn)速,后退時(shí)同理。轉(zhuǎn)彎按鈕后的列表框的內(nèi)容為“”“10”“20”“50”“90”,第一個(gè)表示讓機(jī)器人一直轉(zhuǎn),直到接到新的指令,其余4項(xiàng)分別代表旋轉(zhuǎn)的角度。該列表框只能選擇不能輸入。3.現(xiàn)場(chǎng)參數(shù)模塊該模塊為前進(jìn)和后退提供轉(zhuǎn)速,列表框提供了30到100不等的轉(zhuǎn)速,與轉(zhuǎn)彎列表框不同的是該列表框可以通過(guò)鍵盤(pán)直接輸入數(shù)值。4.滅火控制模塊該模塊兩個(gè)功能按鈕,分別命令機(jī)器人開(kāi)啟滅火風(fēng)扇和關(guān)閉滅火風(fēng)扇。5.視頻設(shè)置模塊沒(méi)有視頻采集卡,而且感覺(jué)難度應(yīng)該挺大。時(shí)間有限不做要求。6.通信設(shè)置模塊此處只做標(biāo)示示用,因?yàn)閱纹瑱C(jī)的程序要提前寫(xiě)入,修改其波特率雖然可以實(shí)現(xiàn),但是用途不是很大,此處只是為了讓界面更美觀一些。主要控件的屬性控件類型名稱屬性FormForm默認(rèn)CommandButtonGoaheadCaption=前進(jìn)StopCaption=停止GobackCaption=后退TurnleftCaption=左轉(zhuǎn)彎TurnrightCaption=右轉(zhuǎn)彎OpenfanCaption=滅火StopfanCaption=停止QuitCaption=退出TextBoxText1用于顯示發(fā)送的命令MSCommMSComm1默認(rèn)TimerTimer1定時(shí)時(shí)間500msTimer2定時(shí)時(shí)間10msOptionButtonAutomoveCaption=自動(dòng)運(yùn)行ControlmoveCaption=遠(yuǎn)程控制ListBoxLeftangleCaption=角度RightangleCaption=角度ComboBoxCombogoaheadCaption=前進(jìn)轉(zhuǎn)速CombogobackCaption=后退轉(zhuǎn)速通信規(guī)則:上位機(jī)發(fā)送一個(gè)字符"S"表示通信開(kāi)始,這時(shí)單片機(jī)準(zhǔn)備接受命令,500ms后上位機(jī)發(fā)送命令內(nèi)容,發(fā)送一個(gè)”E”表示本次通信結(jié)束??刂泼钣袃煞N格式,一種為只有一個(gè)字符的命令,另一種是一個(gè)字符+運(yùn)行參數(shù)(參數(shù)以字符格式發(fā)送)各字符含義如下表字符OTACGPBLRQ命令開(kāi)風(fēng)扇關(guān)風(fēng)扇自動(dòng)運(yùn)行遠(yuǎn)程控制前進(jìn)停止后退左轉(zhuǎn)彎又轉(zhuǎn)彎待機(jī)命令注:當(dāng)上位機(jī)程序關(guān)閉時(shí),程序退出前自動(dòng)給機(jī)器人發(fā)送一個(gè)字符“Q”(該命令不是以“S”開(kāi)頭,“E”結(jié)尾),接到此字符,機(jī)器人將停止一切活動(dòng),進(jìn)入待命狀態(tài)。以后還可以發(fā)送其他指令使機(jī)器人運(yùn)行。單片機(jī)程序程序流程圖HYPERLINK2.4源程序代碼上位機(jī)源程序代碼(VB):Constcon_openfanAsString="O"'開(kāi)風(fēng)扇命令字符OConstcon_stopfanAsString="T"'關(guān)風(fēng)扇命令字符TConstcon_automoveAsString="A"'自動(dòng)運(yùn)行命令字符AConstcon_controlmoveAsString="C"'控制運(yùn)動(dòng)命令字符CConstcon_goaheadAsString="G"'前進(jìn)命令字符GConstcon_stopAsString="P"'停止命令字符PConstcon_gobackAsString="B"'后退命令字符BConstcon_turnleftAsString="L"'左轉(zhuǎn)命令字符LConstcon_turnrightAsString="R"'右轉(zhuǎn)命令字符RConstcon_startAsString="S"'開(kāi)始接受命令的標(biāo)志Constcon_endAsString="E"'命令發(fā)送完畢的標(biāo)志Constcon_quitAsString="Q"s'上位機(jī)程序關(guān)閉,命令機(jī)器人停止一切活動(dòng)PrivatecommandsAsString'要發(fā)送的命令及參數(shù)PrivateSubForm_Load()MSComm1.Settings="9600,n,8,1"'設(shè)置數(shù)據(jù)傳輸率和發(fā)送字符格式MSComm1.CommPort=1'設(shè)置通訊串口MSComm1.OutBufferSize=512'設(shè)置發(fā)送緩沖區(qū)512ByteMSComm1.OutBufferCount=0EndSubPrivateSubSendMessage()'定義發(fā)送子過(guò)程IfNotMSComm1.PortOpenThen'如果沒(méi)有開(kāi)串口則打開(kāi)串口MSComm1.PortOpen=TrueEndIfMSComm1.Output=con_start'發(fā)送開(kāi)始命令標(biāo)志Timer1.Enabled=True'打開(kāi)定時(shí)器EndSubPrivateSubAutomove_Click()'自動(dòng)運(yùn)行commands=con_automove'需要發(fā)送的命令送commandsCallSendMessage'發(fā)送命令Text1.Text=con_start&commands&con_end'顯示發(fā)送字符串的內(nèi)容EndSubPrivateSubControlmove_Click()'人工控制運(yùn)行commands=con_controlmoveCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubOpenfan_Click()'開(kāi)風(fēng)扇命令commands=con_openfanCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubStopfan_Click()'關(guān)閉風(fēng)扇命令commands=con_stopfanCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubGoahead_Click()'前進(jìn)命令commands=con_goahead&Combogoahead.TextCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubStop_Click()'停止命令commands=con_stopCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubGoback_Click()'后退命令commands=con_goback&Combogoback.TextCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubTurnleft_Click()'左轉(zhuǎn)命令commands=con_turnleft&Leftangle.TextCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubTurnright_Click()'右轉(zhuǎn)命令commands=con_turnright&Rightangle.TextCallSendMessageText1.Text=con_start&commands&con_endEndSubPrivateSubTimer1_Timer()MSComm1.Output=commands&con_end'發(fā)送命令以及命令結(jié)束標(biāo)志Timer1=FalseEndSubPrivateSubQuit_Click()'發(fā)送待機(jī)命令,并在timer2里推出程序IfNotMSComm1.PortOpenThen'如果沒(méi)有開(kāi)串口則打開(kāi)串口MSComm1.PortOpen=TrueEndIfMSComm1.Output=con_quit'發(fā)送上位機(jī)程序關(guān)閉命令Timer2.Enabled=TrueEndSubPrivateSubTimer2_Timer()UnloadMeEndSub單片機(jī)源程序:#include"M51Robot.H"http://頭文件定義,請(qǐng)勿刪除#include"reg51.h"#include<stdio.h>#include<stdarg.h>typedefunsignedcharBYTE;typedefunsignedshortWORD;sbitOUT6=P3^2;//電扇控制0關(guān)閉,1啟動(dòng)conststart_receive='S';//開(kāi)始接受命令標(biāo)示符constopen_fan='O';//開(kāi)啟風(fēng)扇命令conststop_fan='T';//關(guān)閉風(fēng)扇命令constcontrol_move='C';//遠(yuǎn)程控制命令constauto_move='A';//自動(dòng)控制命令constgo_ahead='G';//前進(jìn)命令constgo_back='B';//后退命令conststop_move='P';//停止命令constturn_left='L';//左轉(zhuǎn)命令constturn_right='R';//右轉(zhuǎn)命令constend_receive='E';//命令結(jié)束標(biāo)示符constwait_orders='Q';//停止一切動(dòng)作等待命令,待機(jī)BYTEReceive();//接受一個(gè)字符,接到字符才返回BYTEBumper();//返回碰撞方向voidAutoMove();//避障運(yùn)動(dòng)voidControlFan(intx);//電扇控制,x=0關(guān)閉,x=1開(kāi)啟voidGoAhead(intx);//前進(jìn)voidStop();//停止voidGoBack(intx);//后退voidTurnLeft(intx);//左轉(zhuǎn),x為轉(zhuǎn)角voidTurnRight(intx);//右轉(zhuǎn),x為轉(zhuǎn)角voidWaitOrders();//上位機(jī)程序退出時(shí),停止一切正在進(jìn)行的動(dòng)作,待機(jī)可以接受命令voidSerial_Set(WORDiBaud);//設(shè)置串口波特率(0,9600,0,8,1)BYTEtemp;//全局變量接受命令externcharxdataShowBuf[33];//在擴(kuò)展數(shù)據(jù)中聲明一個(gè)數(shù)組,用來(lái)顯示voidmain(){BYTEorders[8];//存儲(chǔ)命令字符unsignedintcount;//字符計(jì)數(shù)器unsignedintorderdata;//控制運(yùn)動(dòng)參數(shù)unsignedinti;unsignedintab; InitRobot(); Serial_Set(9600);//設(shè)置波特率為9600晶振頻率11.0592MHZ OUT6=0;//初始化后電扇是開(kāi)啟的,所以首先要關(guān)閉電風(fēng)扇 sprintf(ShowBuf,"HelloPaul!Let'sGo!"); PutString(ShowBuf); while(1) { temp=Receive(); if(temp==wait_orders) { WaitOrders(); continue; } if(temp==start_receive) { //初始化參數(shù) count=-1; orderdata=0; ab=1; while(1)//接收要執(zhí)行的命令 { temp=Receive();//接收到才返回 if(temp==end_receive)break; count++; orders[count]=temp; } //計(jì)算運(yùn)動(dòng)參數(shù)第一個(gè)字符為命令符,將字符參數(shù)轉(zhuǎn)換為整型參數(shù) for(i=count;i>0;i--) { orderdata=orderdata+(orders[i]-'0')*ab; ab=10*ab; } //sprintf(ShowBuf,"%d",count);//程序調(diào)試時(shí)用 sprintf(ShowBuf,"%d",orderdata);//程序調(diào)試時(shí)用 PutString(ShowBuf); if(orders[0]==open_fan) { ControlFan(1); } if(orders[0]==stop_fan) { ControlFan(0); } if(orders[0]==go_ahead) { GoAhead(orderdata); } if(orders[0]==go_back) { GoBack(orderdata); } if(orders[0]==stop_move) { Stop(); } if(orders[0]==turn_left) { TurnLeft(orderdata); } if(orders[0]==turn_right) { TurnRight(orderdata); } if(orders[0]==auto_move) { AutoMove(); } if(orders[0]==control_move) { Stop(); } } } }//以下為子函數(shù)//串口工作方式及波特率設(shè)置,晶振更換為11.0592MHZ后voidSerial_Set(WORDiBaud){xdataBYTEbaud;if(iBaud==9600){baud=0xFA;}//計(jì)算過(guò)if(iBaud==19200){baud=0xDC;}//未算if(iBaud==38400){baud=0xFE;}//未算if(iBaud==4800){baud=0x70;}//未算if(iBaud==2400){baud=0xE6;}//未算if(iBaud==1200){baud=0xCC;}//未算 if(iBaud==600){baud=0x98;}//未算 if(iBaud==300){baud=0x30;}//未算//初始化串行口和波特率發(fā)生器SCON=0x50;//串口工作方式1,允許接受PCON=PCON|0x80;//波特率加倍TMOD=0x20;//定時(shí)器T1工作方式2自動(dòng)重裝TH1=baud;//定時(shí)常數(shù)TL1=baud;//定時(shí)常數(shù)TR1=1;//啟動(dòng)定時(shí)器TI=0;//發(fā)送標(biāo)志位復(fù)位RI=0; //接受標(biāo)志位復(fù)位}//接受命令,接到一個(gè)字符才返回BYTEReceive(){xdataBYTEcdata;while(!RI);//查詢RI=0;cdata=SBUF;returncdata;}//返回碰撞方向,左前,右前,前方三個(gè)方向參數(shù)由試驗(yàn)得出BYTEBumper(){xdataunsignedintbmpr;bmpr=AI(8);if(bmpr>=110&&bmpr<=140)return1;//leftfrontif(bmpr>=240&&bmpr<=260)return2;//rightfrontif(bmpr>=370)return3;//frontreturn0;}//電扇控制voidControlFan(intx){if(x==0)//關(guān)閉{OUT6=0;}if(x==1)//開(kāi)啟{OUT6=1;}}//前進(jìn)voidGoAhead(intx){Stop();SetMoto(0,x);SetMoto(1,x);}//后退voidGoBack(intx){Stop();SetMoto(0,-x);SetMoto(1,-x);}//后退voidStop(){SetMoto(0,0);SetMoto(1,0);}//左轉(zhuǎn),對(duì)于不同的旋轉(zhuǎn)角度由于電機(jī)性能的影響,延時(shí)時(shí)間不成比例voidTurnLeft(intx){Stop();SetMoto(0,-40);SetMoto(1,40);if(x==0)return;//如果是0則一直轉(zhuǎn)elseif(x<=10){wait(0.8);}elseif(x<=20){wait(1.3);}elseif(x<=50){wait(2.5);}elseif(x<=90){wait(4.4);}Stop();}//右轉(zhuǎn)voidTurnRight(intx){Stop();SetMoto(0,40);SetMoto(1,-40);if(x==0)return;elseif(x<=10){wait(0.8);}elseif(x<=20){wait(1.3);}elseif(x<=50){wait(2.5);}elseif(x<=90){wait(4.4);}Stop();}//上位機(jī)程序退出時(shí),待機(jī),等待新的命令voidWaitOrders(){Stop();//關(guān)驅(qū)動(dòng)電機(jī)ControlFan(0);//關(guān)風(fēng)扇}//避障運(yùn)動(dòng)voidAutoMove(){ unsignedcharir=0;//紅外檢測(cè)信號(hào) unsignedcharbmp=0;//碰撞檢測(cè)變量 while(1) { if(RI)break;//檢測(cè)到有新命令到則結(jié)束 GoAhead(80); bmp=Bumper();//碰撞檢測(cè) ir=ir_detector();//紅外檢測(cè)if(bmp==1&&(ir!=2||ir!=3))//如果左前方有碰撞,右前方或者前方?jīng)]有障礙 { Stop();//停止運(yùn)動(dòng) GoBack(80); wait(0.2); TurnRight(20); continue; } elseif(bmp==2&&(ir!=1||ir!=3))//如果右前方有碰撞,左方或前方?jīng)]有障礙 { Stop();//停止運(yùn)動(dòng) GoBack(80); wait(0.2); TurnLeft(20); continue; } elseif(bmp==3)//如果前方有碰撞 { Stop(); GoBack(80); wait(0.2); if(ir!=1)//左邊無(wú)障礙 { TurnLeft(20); } elseif(ir!=2) { TurnRight(20); } continue; } elseif(bmp)//其他情況 { Stop(); GoBack(80); wait(0.2); TurnRight(90); TurnRight(90); GoAhead(80); } } }單片機(jī)與上位機(jī)通信調(diào)試程序:?jiǎn)纹瑱C(jī)發(fā)送,上位機(jī)用串口測(cè)試精靈接收#include"M51Robot.H"/*頭文件定義,請(qǐng)勿刪除*/#include"reg51.h"#include<stdio.h>#include<stdarg.h>typedefunsignedcharBYTE;typedefunsignedshortWORD;voidSerial_Set(WORDiBaud);//串口波特率設(shè)置voidmain(){BYTEcount; InitRobot(); Serial_Set(4800); count=0x00; while(1) { SCI_Send(count); wait(1); count++; }}//串口工作方式及波特率設(shè)置晶振頻率為12MHZvoidSerial_Set(WORDiBaud){xdataBYTEbaud;if(iBaud==9600){baud=0xF9;}//VJC自帶為0xF8if(iBaud==19200){baud=0xFD;}//VJC自帶為0xFCif(iBaud==38400){baud=0xFE;}//VJC自帶為0xFEif(iBaud==4800){baud=0xF3;}//VJC自帶為0xF0if(iBaud==2400){baud=0xE6;}//VJC自帶為0xE0if(iBaud==1200){baud=0xCC;}//VJC自帶為0xC0 if(iBaud==600){baud=0x98;}//自定義 if(iBaud==300){baud=0x30;}//自定義//初始化串行口和波特率發(fā)生器SCON=0x50;//串口工作方式1,允許接受PCON=PCON|0x80;//波特率加倍TMOD=0x20;//定時(shí)器T1工作方式2自動(dòng)重裝TH1=baud;//定時(shí)常數(shù)TL1=baud;//定時(shí)常數(shù)TR1=1;//啟動(dòng)定時(shí)器TI=0;//發(fā)送標(biāo)志位清零RI=0; //接受標(biāo)志位清零}HYPERLINK2.5調(diào)試結(jié)果經(jīng)過(guò)無(wú)數(shù)次測(cè)驗(yàn)最終實(shí)現(xiàn)了預(yù)期的所有功能。最后的無(wú)線通信模塊測(cè)試出現(xiàn)了比較嚴(yán)重的問(wèn)題,由于無(wú)線通信模塊波特率在出廠時(shí)被寫(xiě)死為9600bit/s(咨詢過(guò)客服),而先前通過(guò)串口線測(cè)試得出PC與單片機(jī)的波特率為(4800,2400,1200)時(shí)才能準(zhǔn)確通信,所以造成無(wú)線通信模塊不能使用。波特率為9600時(shí)傳輸?shù)臄?shù)據(jù)會(huì)出現(xiàn)規(guī)律性的錯(cuò)誤,也嘗試過(guò)修正單片機(jī)接收到的數(shù)據(jù)的方法,但是效果不理想,在征得指導(dǎo)老師同意的前提下,我更換了單片機(jī)的外接晶振,將12MHZ的晶振換成了11.0592MHZ,經(jīng)測(cè)試用廠家提供的軟件向單片機(jī)寫(xiě)程序時(shí)不會(huì)出現(xiàn)錯(cuò)誤,最終實(shí)現(xiàn)了無(wú)線通信,圓滿的完成了這次單片機(jī)應(yīng)用課題的設(shè)計(jì)。三設(shè)計(jì)總結(jié)HYPERLINK3.1設(shè)計(jì)中主要問(wèn)題及最終解決方法上位機(jī)程序可用串口測(cè)試精靈調(diào)試,測(cè)試精靈可從網(wǎng)上下載。測(cè)試時(shí)一根兩端均為母頭的串口線將串口1和串口2連接,上位機(jī)程序可通過(guò)串口1發(fā)送,用測(cè)試精靈通過(guò)串口2接受。串口線自制時(shí),將兩個(gè)母頭用一根線連接,第一個(gè)頭的2,3引腳分別接第二個(gè)頭的3,2引腳。單片機(jī)收發(fā)數(shù)據(jù)測(cè)試環(huán)節(jié),可以將下載線當(dāng)串口用,但應(yīng)在RUN狀態(tài)下運(yùn)行。VJC系統(tǒng)自帶庫(kù)函數(shù)有一些錯(cuò)誤,特別是串口通信波特率的設(shè)置,由于按其庫(kù)函數(shù)設(shè)置的波特率與PC的波特率相差較大,造成測(cè)試初期單片機(jī)與PC通信產(chǎn)生亂碼,浪費(fèi)大量的時(shí)間卻很難發(fā)現(xiàn)問(wèn)題。所以對(duì)于波特率的設(shè)置,建議用戶自己寫(xiě)一個(gè)專門(mén)的函數(shù),這樣方便調(diào)試提同時(shí)也提高了程序的可移植性。VJC庫(kù)函數(shù)中SCI_Receive()函數(shù)查詢方式讀取接收緩存里的字符,當(dāng)有收到新指令時(shí)返回該指令字符(一個(gè)字符),當(dāng)沒(méi)有指令收到時(shí)返回一個(gè)字符‘0’電風(fēng)扇電動(dòng)機(jī)插座。由于機(jī)器人是新機(jī)型,與廠家給的資料不配套,找不到資料上提供的接口。查看電路原理圖后,發(fā)現(xiàn)DO3—DO6由單片機(jī)I/O口接一驅(qū)動(dòng)芯片MC2803可以作為電扇電動(dòng)機(jī)的動(dòng)力源。接法,將電動(dòng)機(jī)接線插在DO6(對(duì)應(yīng)單片機(jī)P3.2口)的OUT引腳和地引腳上,使用時(shí)應(yīng)注意,由于單片機(jī)復(fù)位后各I/O口引腳為高電平,所以初始化后記得將P3.2引腳復(fù)位(即關(guān)閉電風(fēng)扇)。無(wú)線通信模塊,咨詢過(guò)客服,她說(shuō)無(wú)線通訊模塊的波特率在出廠時(shí)已寫(xiě)死為9600,但是我認(rèn)為如果出廠時(shí)就寫(xiě)死為9600那么它的ABC跳線的作用就只是選擇無(wú)線通信模塊的頻率了,這個(gè)感覺(jué)意義不太大,自己當(dāng)時(shí)也進(jìn)行過(guò)跳線測(cè)試,但是現(xiàn)在想來(lái),當(dāng)時(shí)我的測(cè)試并不準(zhǔn),因?yàn)槲疫M(jìn)行跳線選擇的時(shí)候只切斷了機(jī)器人上的電源,并沒(méi)有將PC上的無(wú)線通訊模塊的電源切斷,所以造成有時(shí)候會(huì)無(wú)法接受到數(shù)據(jù)。由于自己當(dāng)時(shí)對(duì)跳線的工作原理并不太清楚,也過(guò)于相信客服,所以當(dāng)時(shí)并沒(méi)有認(rèn)真仔細(xì)的校核,也沒(méi)有仔細(xì)的去思考這個(gè)問(wèn)題,這里是我的失誤。如果無(wú)線通信模塊可以用4800的波特率那么完全沒(méi)有必要更換晶振。接上無(wú)線通信模塊后,當(dāng)向單片機(jī)寫(xiě)程序時(shí),有時(shí)候經(jīng)常會(huì)出現(xiàn)串口被占用,而導(dǎo)致不能下載的問(wèn)題。關(guān)閉電腦上所有程序以及更換串口都不能解決,將計(jì)算機(jī)重啟后還是不行,這時(shí)很有可能是無(wú)線通訊模塊在占用單片機(jī)的串口,解決方法將機(jī)器人無(wú)線通信模塊的連接線斷開(kāi)。在單片機(jī)與PC通信時(shí),低速率時(shí)(4800bps或以下)很正常,提高速率則遇到以下問(wèn)題:PC機(jī)向單片機(jī)發(fā)送數(shù)據(jù)問(wèn)題不大,但是單片機(jī)向PC機(jī)發(fā)送時(shí)產(chǎn)生誤碼,速率越高,誤碼越多。分析原因應(yīng)該是單片機(jī)使用的晶振頻率不是常用波特率的整數(shù)倍,分頻后有誤差,如果連續(xù)發(fā)送,誤差積累就會(huì)產(chǎn)生誤碼,而且,頻率越高誤碼越多。如果偏差太大可能根本就不能正常通信。解決方法,使用特殊晶振如11.0592MHZ,或者使用其他波特率,盡量使單片機(jī)波特率發(fā)生器的定時(shí)常數(shù)接近整數(shù),也可以使用較小的波特率如1200,600等。為了提高通信的準(zhǔn)確率,也可一個(gè)指令發(fā)送多次。使用VB生成的EXE上位機(jī)程序在使用時(shí),要保證PC里裝有VB(VC)否則程序可能無(wú)法使用。HYPERLINK3.2個(gè)人總結(jié)這個(gè)學(xué)期剛剛學(xué)過(guò)單片機(jī)的理論知識(shí),初學(xué)單片機(jī)感覺(jué)很抽象,很多東西都
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 燃料整改報(bào)告范文
- 請(qǐng)求贊助報(bào)告范文
- 浙江國(guó)企招聘2024溫州市國(guó)有資本投資運(yùn)營(yíng)有限公司招聘3人筆試參考題庫(kù)附帶答案詳解
- 二零二五年度獨(dú)立財(cái)務(wù)顧問(wèn)代理記賬免責(zé)條款
- 二零二五年度股權(quán)激勵(lì)與股東利益共享協(xié)議
- 二零二五年度藥房藥品質(zhì)量管理員聘用合同
- 二零二五年度鋁合金門(mén)窗工程綠色施工與材料供應(yīng)合同
- 2025年茶山茶葉品牌授權(quán)合作承包協(xié)議
- 2025年度集體合同簽訂前的準(zhǔn)備工作規(guī)范
- 2025年度物流企業(yè)貨車(chē)司機(jī)勞動(dòng)爭(zhēng)議處理與仲裁協(xié)議
- 早產(chǎn)臨床防治指南(2024版)解讀
- 司馬遷與《史記·管晏列傳》
- 全國(guó)身份證前六位、區(qū)號(hào)、郵編-編碼大全
- 艾草種植基地合同(2篇)
- 幼兒園小班音樂(lè)游戲《聽(tīng)聲學(xué)走》課件
- 《公債經(jīng)濟(jì)學(xué)》課程教學(xué)大綱
- 《產(chǎn)后出血預(yù)防與處理指南(2023)》解讀課件
- 趣味語(yǔ)文課程設(shè)計(jì)
- 外研版(2019)必修 第一冊(cè)Unit 1 A New Start revision 課件
- 肺部感染臨床路徑
- 高中英語(yǔ)3500詞(亂序版)
評(píng)論
0/150
提交評(píng)論