摘要:單片機(jī)與PC串行通信可用于實(shí)時(shí)控制系統(tǒng)中。本文首先簡單介紹了實(shí)時(shí)控制系統(tǒng)中的微處理器系統(tǒng),接著定義了串口通信協(xié)議,并在此基礎(chǔ)上采用多線程編程工具CserialPort類,用VC++編寫基于對(duì)話框的MFC串口通信程序來控制移動(dòng)機(jī)器人的行進(jìn)。通過實(shí)驗(yàn)驗(yàn)證,該串口通信設(shè)計(jì)方案能較好地控制移動(dòng)機(jī)器人,達(dá)到了預(yù)期效果。
關(guān)鍵字:PC機(jī) 單片機(jī) 通信協(xié)議 CserialPort類 VC++
1 引言
對(duì)于傳統(tǒng)的移動(dòng)機(jī)器人,多采用紅外遙控的方式控制移動(dòng)機(jī)器人的行進(jìn),而目前移動(dòng)機(jī)器人的自主行進(jìn)方式還不太成熟,所以采用串口通訊的方式來控制移動(dòng)移動(dòng)機(jī)器人的行進(jìn)也是不錯(cuò)的選擇。并且串口通訊簡單靈活易控制,通訊過程中所采用的協(xié)議具有統(tǒng)一的標(biāo)準(zhǔn)。因此,無論是在工控系統(tǒng)、遙感控制、實(shí)時(shí)控制系統(tǒng)中都得到了廣泛應(yīng)用。
2 實(shí)時(shí)控制系統(tǒng)介紹
實(shí)時(shí)控制系統(tǒng)主要包括上位機(jī)(PC機(jī))、單片機(jī)、串口通信模塊以及2.4G的無線攝像頭視頻采集模塊。該系統(tǒng)主要實(shí)現(xiàn)功能是利用2.4G的無線攝像頭采集移動(dòng)機(jī)器人周邊的環(huán)境,根據(jù)不同的環(huán)境給單片機(jī)發(fā)送不同指令,實(shí)現(xiàn)方法是利用串口通信把上位機(jī)(PC機(jī))所發(fā)送指令通過串口發(fā)送到單片機(jī),進(jìn)而遠(yuǎn)程控制移動(dòng)機(jī)器人的行進(jìn)。
3 串行通信設(shè)計(jì)
串行通信設(shè)計(jì)包括選擇合適的微處理器系統(tǒng)、制定串口通信協(xié)議、串口通信編程、人機(jī)控制界面。其主要目的是通過串口通信把PC機(jī)發(fā)送的不同組合指令給單片機(jī),單片機(jī)解析出相應(yīng)指令,根據(jù)指令來控制機(jī)器人的前、后、左、右運(yùn)動(dòng)。
3.1 微處理器系統(tǒng)。AT89C2051是Atmel 公司生產(chǎn)的與MCS-51系列兼容的單片機(jī)。內(nèi)含:一個(gè)精密模擬比較器、2k字節(jié)的FlashEEPROM、15根I/O引線、128字節(jié)RAM、1個(gè)五向量兩級(jí)中斷結(jié)構(gòu)、2個(gè)16位定時(shí)器/計(jì)數(shù)器,1個(gè)全雙工串行口等。由于該系統(tǒng)用于簡單的移動(dòng)機(jī)器人控制,且從性價(jià)比方面考慮,AT89C2051完全滿足設(shè)計(jì)的要求。
3.2 串口通信協(xié)議。通訊口設(shè)置為“9600,N,8,1”,控制指令為:88HT88H ,T有四種可能,分別為01H、02H、03H、04H,對(duì)應(yīng)的控制分別為前、后、左、右。其中確認(rèn)幀為67H。當(dāng)單片機(jī)收到的控制指令為所定義的格式時(shí),即接收到的信號(hào)無差錯(cuò),確定為控制機(jī)器人行進(jìn),單片機(jī)就發(fā)送確認(rèn)幀67H給PC機(jī),如果在某一時(shí)間間隔內(nèi)未收到確認(rèn)幀就重新發(fā)送指令。
3.3 串口通信編程。PC機(jī)通過串口發(fā)送指令給單片機(jī),通過串口發(fā)送指令就必須涉及到串口通信程序。對(duì)串口通信編程的方式很多,如Cserial 類、Windows API串口編程、MSCOMM控件、Qt串口、多線程編程工具CserialPort類,在此選用了CSerialPort類。CSerialPort類是基于多線程的,由Remon Spekreijse提供的免費(fèi)串口類。在該類中,其主程序工作流程仍然是打開串口、配置串口、讀寫操作以及關(guān)閉串口。
3.3.1 設(shè)置串口參數(shù)InitPort()。串口的通信參數(shù)一般涉及到波特率、串口號(hào)、奇偶校驗(yàn)方式、數(shù)據(jù)位、停止位等。在CserialPort類中用串口初始化函數(shù)InitPort來設(shè)置串口參數(shù)。
3.3.2 串口通信檢測StartMonitoring()。在串口通信中,對(duì)于串口接收的一端,因?yàn)椴恢篮螘r(shí)數(shù)據(jù)到來,也不知道有多少數(shù)據(jù)需要被接收。因而需要一個(gè)串口通信檢測線程來檢測串口事件的響應(yīng)(串口接受數(shù)據(jù)、流控制事件以及其他串口事件)。在此就串口接收數(shù)據(jù)而言,通過開啟串口通信檢測線程StartMonitoring()來隨時(shí)檢測串口是否接受到數(shù)據(jù),一旦檢測到該事件就以消息方式來通知主程序,激發(fā)消息處理函數(shù)來進(jìn)行數(shù)據(jù)處理。對(duì)于串口發(fā)送的一端,可直接向串口發(fā)送數(shù)據(jù)。
3.3.3 串口發(fā)送數(shù)據(jù)WriteToPort()。在打開串口并啟動(dòng)串口通信檢測線程后,可調(diào)用WriteToPort()來發(fā)送數(shù)據(jù)。而對(duì)串口接收一端通過編寫串口接收函數(shù)即可。
3.3.4 停止或暫停線程檢測StopMonitoring()。用來暫停或停止對(duì)串口的檢測。
3.3.5 關(guān)閉串口ClosePort()。關(guān)閉串口和停止或暫停線程檢測有很大的區(qū)別,即使停止了對(duì)串口的檢測,但串口資源仍然被暫時(shí),為了釋放該資源,就必須調(diào)用關(guān)閉串口函數(shù)。一旦關(guān)閉串口后,要想重新對(duì)串口通信則必須從InitPort()開始。
4 控制界面設(shè)計(jì)
對(duì)移動(dòng)機(jī)器人的控制方式即通過鍵盤或按鈕控制來發(fā)送指令,鍵盤控制是利用鍵盤上的上下左右鍵控制,按鈕控制則通過界面上點(diǎn)擊四個(gè)方向控件(前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn))來發(fā)送指令,這些指令分別對(duì)應(yīng)的是移動(dòng)機(jī)器人的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)。
5 室內(nèi)行走實(shí)驗(yàn)
基于前面所述的串口通信系統(tǒng)設(shè)計(jì),在室內(nèi)對(duì)移動(dòng)機(jī)器人進(jìn)行了遙操作,該系統(tǒng)基本能實(shí)現(xiàn)以下功能:根據(jù)攝像頭采集到的移動(dòng)機(jī)器人周邊環(huán)境,可以用兩種不同的方式來控制移動(dòng)機(jī)器人的前、后、左、右運(yùn)動(dòng),基本上能實(shí)現(xiàn)機(jī)器人安全、可靠、穩(wěn)定的行進(jìn)。不過在實(shí)驗(yàn)過程中還存在一些不足之處,由于2.4G無線攝像頭傳輸?shù)臄?shù)據(jù)有一定的延遲,導(dǎo)致在控制的過程中還不能太精確。所以在接下來的工作中會(huì)利用無線傳輸模塊和相應(yīng)的視頻采集模塊來提高視頻數(shù)據(jù)的傳輸效率和質(zhì)量,進(jìn)而更加準(zhǔn)確的控制機(jī)器人的運(yùn)動(dòng)。
6 總結(jié)
該系統(tǒng)基本實(shí)現(xiàn)設(shè)計(jì)所需功能。由于軟硬件知識(shí)比較簡單,容易掌握,編程易實(shí)現(xiàn),且設(shè)計(jì)界面友好,開發(fā)周期短,比較適合小型的實(shí)時(shí)控制系統(tǒng),在實(shí)際應(yīng)用中也取得了較好的效果。
參考文獻(xiàn)
[1] 謝印忠,張保洲.MScomm控件在自動(dòng)測控系統(tǒng)中的應(yīng)用[J].電腦學(xué)習(xí),2009(4)
[2] 曾自強(qiáng),王玉菡.用VC++實(shí)現(xiàn)單片機(jī)與PC機(jī)串口通信的三種方法[J].自動(dòng)化與儀器儀表,2005(3)
[3] 杜梅,賈輝然.基于VC 的PC機(jī)與單片機(jī)無線串行通信的實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2007(1)