隋美麗,楊立平,呂江毅,劉敏杰
(北京電子科技職業(yè)學院 汽車工程學院,北京100176)
在現代生活中,自動控制在生活、科研、軍事等很多領域發(fā)揮了重要的作用。隨著嵌入式技術和通信技術的迅猛發(fā)展,自動控制系統(tǒng)的功能和穩(wěn)定性都得到了很大的提高。自動控制小車的研究涉及單片機與PC機通信接口問題、小車遙控器控制、直流電機的控制方式等[1][2],本文只是對在自動控制的情況下,線控小車控制系統(tǒng)的軟硬件實現進行研究,實現小車前進、后退、轉向和加減速等功能。
以STC12C5201AD單片機為核心,編寫小車驅動程序,使其能接受線控器的控制功能,控制小車前進、后退、左轉、右轉、加速、減速、停止,并且在沒有控制信號輸出時,小車能保持靜止狀態(tài)[3][4]。P1.6、P3.5和P2.1、P3.7控制小車兩個后輪,舵機控制輸出口為P2.5,小車采用RS-485總線協(xié)議來接收線控器命令,并與下載功能一起使用P3.0、P3.1口。圖1為小車硬件電路圖。
小車控制程序接收端串口采用RS-485模式通信,通信參數規(guī)定為:波特率規(guī)定為19200,數據位為8位,停止位為1位,無奇偶校驗,因此,線控器(發(fā)送端)也必須與接收端保持一致。線控器STC12C5202AD主控芯片也必須通過RS-485總線向小車發(fā)送命令來控制小車啟停、轉向、尾燈閃爍等。線控器與小車的通信控制協(xié)議(十六進制)為:
一個完整的控制命令包含14個字節(jié)控制信息,而這些信息中,對于某一小車而言,只有小車左輪轉速(或小車右輪轉速)、正反轉/燈閃、舵機轉角三個字節(jié)信息有效信息,因此,可以對數據包進行精簡。但是,要想獲得一個完整的控制命令包,可以選擇接收30個字節(jié)數據(其中一定包含有一個完整的控制命令包),當接收到30個字節(jié)命令數據后,對數據進行提取,找出其中的關鍵性控制命令字。由于每次取30個字節(jié),會丟失一些數據,但由于系統(tǒng)的主頻較高,每秒接收大量的控制數據并處理,能夠達到對小車的實時控制。
圖1 小車電路圖
系統(tǒng)主要依靠軟件來完成控制命令的接收,數據的分離與提取、控制命令的執(zhí)行。控制命令由串口負責接收,將系統(tǒng)晶振定為22.1184MHz,用定時器T1作為串口波特率發(fā)生器,為了提高傳輸的效率,我們把波特率定為119200bps,而不是常用的9600bps低速傳輸。如果小車端在接收串口命令時采用查詢方式,經常會丟失數據,導致控制實時性較差,因此,本系統(tǒng)采用中斷方式,一旦有控制命令傳來,系統(tǒng)會立刻響應。對于舵機操作,由于要精確輸出周期為20ms的PWM,其高電平范圍在0.5ms~2.5ms之間,也必須采用精確定時來完成,在這里我們選用定時器中斷方式來完成,否則會產生舵機控制抖動情況。而對于直流電機的速度控制,則采用了CPU等待延時方式,不使用定時器資源。串口控制命令接收流程如圖2所示,小車驅動程序流程如圖3所示。
圖2 串口控制命令接收流程圖
圖3 小車驅動程序流程圖
小車驅動程序包含延時子程序、串口初始化子程序、串口接收子程序(中斷方式)、小車后輪正反轉子程序、定時器初始化子程序、舵機控制子程序和主函數等[5]。其實現代碼如下所示:
在小車驅動的軟件設計中,采用了模塊化的設計思想,各模塊間相互獨立,實現功能時又能做到分工合作,經過實際測試,達到了預期設計指標,滿足了線控要求,并且穩(wěn)定性和抗干擾能力強,精度高,誤差低,適用于車模競賽、兒童玩具等各種應用場合,具有一定的推廣應用價值。
[1] 王建飛.基于單片機控制的自動往返小汽車的新設計[J].現代與電子技術,2006,234(19):127-129.
[2] 郭立芝.一種自動往返小車設計與制作[J].河南機電高等專科學校學報,2010,(3):10-13.
[3] 王強.遙控小車控制系統(tǒng)設計[D].青島理工大學,2011.
[4] 王艷.基于51單片機的紅外遙控小車設計和制作[J].北京:電子制作,2010,(06).
[5] 張洪潤,孫悅,張亞凡.單片機原理及應用[M].北京:清華大學出版社,2010.