章杰瑞+周屹
摘要:市場上智能小車普遍存在功能單一、擴(kuò)展能力差等特點(diǎn)。基于此提出了一種基于Arduino和PIC18F45K22單片機(jī)為核心、以智能小車作為研究對象的小車開發(fā)研究平臺(tái)。整個(gè)系統(tǒng)由電源、控制模塊、電機(jī)驅(qū)動(dòng)、紅外收發(fā)和LCD顯示五部分構(gòu)成。Arduino為控制主機(jī),通過制定的通信協(xié)議與PIC從機(jī)端進(jìn)行通信,基于該平臺(tái)可實(shí)現(xiàn)紅外避障、尋跡、手機(jī)藍(lán)牙遙控等功能,同時(shí)也可通過平臺(tái)的擴(kuò)展模塊對智能小車進(jìn)行研究與開發(fā),提高了小車硬件平臺(tái)的利用率。
關(guān)鍵詞:Arduino;PIC18F45K22單片機(jī);智能小車;開發(fā)平臺(tái);通信協(xié)議
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)29-0187-04
Abstract:This paper introduces a Based on the Arduino and PIC18F45K22 single-chip as the core, with the smart car as the object of study of car development research platform. The system is composed of a power supply, control module, motor drive, infrared transceiver and LCD display five parts.Arduino for host control, through the formulation of communication protocol and pic from the terminal to communicate. Based on the platform can realize infrared obstacle avoidance, tracing, Bluetooth mobile phone remote control functions, but also through the expansion modules of the platform of the intelligent vehicle for research and development, improve the utilization rate of the robot hardware platform, is a promising and research Meaning of the smart car development platform.
Key words:Arduino;PIC18F45K22 single-chip;smart car;development platform;communication protocol
隨著單片機(jī)及自動(dòng)化控制技術(shù)的普及,智能小車已逐漸融入我們的生活中?,F(xiàn)今大多數(shù)智能小車普遍存在功能單一性、可擴(kuò)展性不強(qiáng)等問題,并且各種智能小車之間存在的品牌和產(chǎn)商的差異,其硬件模塊也不盡相同,給程序的移植和功能擴(kuò)展帶來一定的阻力,降低了智能小車的通用性[1]。針對上述的問題,將智能小車的底層驅(qū)動(dòng)模塊和控制模塊分離出來,只需對Arduino結(jié)合通信協(xié)議進(jìn)行編程,即可在平臺(tái)上實(shí)現(xiàn)智能小車的多種功能;同時(shí)將兩塊單片機(jī)的端口資源進(jìn)行擴(kuò)展,構(gòu)成整個(gè)平臺(tái)的硬件電路部分,提高了平臺(tái)的通用性。
1 智能小車平臺(tái)硬件設(shè)計(jì)
智能小車平臺(tái)的硬件部分以模塊化方法進(jìn)行設(shè)計(jì),其內(nèi)容包括電源模塊、控制模塊、電機(jī)驅(qū)動(dòng)電路模塊、LCD顯示模塊、紅外收發(fā)功能模塊等,圖1為硬件設(shè)計(jì)框圖;圖2為智能小車平臺(tái)的實(shí)物圖。
2 智能小車開發(fā)平臺(tái)PCB設(shè)計(jì)
在PCB圖繪制過程中,Arduino控制模塊參考Arduino UNO進(jìn)行設(shè)計(jì)。電源模塊由多種不同的電壓構(gòu)成,在信號(hào)線和電源線上的線寬設(shè)計(jì)也有一定的區(qū)別。其PCB設(shè)計(jì)圖如圖3所示。
2.1 電源模塊設(shè)計(jì)
電源模塊在整個(gè)系統(tǒng)設(shè)計(jì)過程中占有舉足輕重的地位,該模塊設(shè)計(jì)的穩(wěn)定性決定了整個(gè)平臺(tái)設(shè)計(jì)的成敗。圖4為電源模塊的設(shè)計(jì)框圖。
該平臺(tái)的主要電源為一塊12V、7200mA的可充電式鋰電池提供,經(jīng)過保險(xiǎn)、逆流保護(hù)、穩(wěn)壓等措施變壓至其他電壓值供給其他模塊。12V電源供給電機(jī)使用,Arduino和PIC單片機(jī)工作電壓為5V,顯示模塊、電機(jī)驅(qū)動(dòng)芯片、紅外收發(fā)模塊的工作電壓均為5V,此外Arduino可提供5V和3.3V雙電壓。同時(shí)電源設(shè)計(jì)中留出一個(gè)穩(wěn)壓芯片的擴(kuò)展位,為后續(xù)擴(kuò)展外部傳感器留出電源擴(kuò)展的余地。
2.2 控制模塊設(shè)計(jì)
控制模塊在整個(gè)系統(tǒng)中起到核心控制的作用。系統(tǒng)設(shè)計(jì)中采用Arduino和PIC兩個(gè)控制單元,以主從通信方式控制整個(gè)平臺(tái)的正常運(yùn)作。主從雙方通過SPI總線進(jìn)行數(shù)據(jù)交互。設(shè)計(jì)過程中,Arduino模塊以ATMEGA328p單片機(jī)為控制核心,該模塊參考Arduino UNO進(jìn)行設(shè)計(jì)[2]。Arduino主要負(fù)責(zé)控制命令關(guān)鍵詞的發(fā)送和從機(jī)數(shù)據(jù)的接收,并不直接參與底層硬件模塊的控制工作;PIC單片機(jī)主要負(fù)責(zé)接收主機(jī)發(fā)送來的命令關(guān)鍵詞,根據(jù)不同的命令執(zhí)行相應(yīng)的子函數(shù),從而實(shí)現(xiàn)不同的功能。其控制框圖如圖5所示。
2.3 電機(jī)驅(qū)動(dòng)模塊設(shè)計(jì)
電機(jī)驅(qū)動(dòng)模塊中采用L298N作為電機(jī)驅(qū)動(dòng)芯片,該芯片內(nèi)含兩個(gè)H橋的高電壓大電流全橋式驅(qū)動(dòng)器,搭載外部續(xù)流二極管保護(hù)電路,即可實(shí)現(xiàn)兩個(gè)電機(jī)的運(yùn)動(dòng)姿態(tài)控制[3]。其設(shè)計(jì)電路圖如圖6所示。
由于智能小車的電機(jī)不帶有轉(zhuǎn)速編碼盤或其他測速傳感器,通過設(shè)定PWM輸出腳的脈沖信號(hào)占空比大小來調(diào)節(jié)小車的速度。使能PWM控制端之后,改變控制信號(hào)輸入腳的電平可以使小車實(shí)現(xiàn)多種姿態(tài)的變化,包括前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、原地旋轉(zhuǎn)等。endprint
2.4 LCD顯示模塊設(shè)計(jì)
LCD顯示模塊主要由LCD1602和背光、對比度調(diào)節(jié)電路構(gòu)成,該模塊主要用于顯示小車平臺(tái)正在執(zhí)行某個(gè)功能的相關(guān)信息。設(shè)計(jì)中采用了四線制的方式進(jìn)行顯示數(shù)據(jù)的傳輸[4],節(jié)約了PIC單片機(jī)的I/O端口,其設(shè)計(jì)電路圖如圖7所示。
2.5 紅外收發(fā)模塊設(shè)計(jì)
紅外收發(fā)模塊的設(shè)計(jì)包括紅外發(fā)射頭和接收頭的驅(qū)動(dòng)電路設(shè)計(jì),其中兩個(gè)紅外發(fā)射頭采用PNP三極管進(jìn)行驅(qū)動(dòng)[5],接收端有相應(yīng)的指示燈作為數(shù)據(jù)接收指示。紅外發(fā)射頭放置在PCB的頂層,接收頭放置在PCB的底層,兩個(gè)接收頭的接收面正對各自的發(fā)射頭正前方,并且兩個(gè)發(fā)射頭和接收頭呈一定角度分布在智能小車的車頭兩側(cè),有效降低紅外信號(hào)的誤接收率。同時(shí)調(diào)整紅外發(fā)射頭驅(qū)動(dòng)電路中的可調(diào)電阻,可增加或減少通過紅外發(fā)射頭的電流。借助該模塊可實(shí)現(xiàn)智能小車紅外避障功能。
3 軟件設(shè)計(jì)
Arduino和PIC單片機(jī)的通信建立在SPI通信協(xié)議上,Arduino工作為SPI主模式,PIC單片機(jī)工作為SPI從模式。SPI是串行外設(shè)接口(Serial Peripheral Interface)的縮寫,這是一種高速、全雙工、同步的通信總線,主機(jī)發(fā)送一個(gè)字節(jié)數(shù)據(jù)的同時(shí)也將接收一個(gè)字節(jié)的數(shù)據(jù)。該通信總線一般由四條通信線路組成,分別是數(shù)據(jù)輸出線、數(shù)據(jù)輸入線、時(shí)鐘線、片選線[6]。
軟件設(shè)計(jì)主要建立在Arduino和PIC單片機(jī)兩個(gè)控制模塊上,Arduino模塊的程序設(shè)計(jì)在Arduino IDE上實(shí)現(xiàn),其編程環(huán)境集成了大量的官方庫函數(shù)[7],充分提高了開發(fā)進(jìn)度。PIC單片機(jī)的程序設(shè)計(jì)在MPLAB IDE上實(shí)現(xiàn)。由于其開發(fā)環(huán)境沒有集成相應(yīng)的C語言編譯器,所以還需下載編譯器進(jìn)行安裝,并在開發(fā)環(huán)境中指定編譯器的路徑[8]。軟件設(shè)計(jì)內(nèi)容主要包括主機(jī)和從機(jī)的通信程序設(shè)計(jì)、通信協(xié)議頭文件設(shè)計(jì)和從機(jī)數(shù)據(jù)處理、硬件控制等內(nèi)容。
3.1 主機(jī)程序設(shè)計(jì)
主機(jī)程序設(shè)計(jì)中,關(guān)鍵函數(shù)包括SPI連接、SPI通信初始化、SPI數(shù)據(jù)發(fā)送和接收函數(shù)等,主機(jī)與從機(jī)的SPI通信是否能成功建立起來是實(shí)現(xiàn)其他功能函數(shù)的重要前提。SPI總線初始化函數(shù)進(jìn)行SPI功能的初始化,包括片選引腳的選中和輸入輸出模式設(shè)定、數(shù)據(jù)傳輸?shù)姆绞?、時(shí)鐘的極性和相位等內(nèi)容。設(shè)置完成之后,loop主函數(shù)部分即可調(diào)用相應(yīng)的功能庫函數(shù)。這個(gè)過程包括片選信號(hào)端電平拉低、發(fā)送命令關(guān)鍵詞和數(shù)據(jù)、片選信號(hào)端電平拉高三個(gè)步驟,配合相應(yīng)的時(shí)序即可完成一個(gè)字節(jié)或多個(gè)字節(jié)數(shù)據(jù)的發(fā)送與接收[9],其程序流程圖如圖8所示。
3.2 從機(jī)程序設(shè)計(jì)
從機(jī)的程序設(shè)計(jì)內(nèi)容包括初始化和子函數(shù)的調(diào)用兩大部分。PIC單片機(jī)配置位的設(shè)定包括芯片振蕩器模式的選擇、關(guān)閉看門狗、禁用后臺(tái)調(diào)試器以及代碼區(qū)、數(shù)據(jù)區(qū)和引導(dǎo)區(qū)中數(shù)據(jù)有無保護(hù)的設(shè)置等內(nèi)容。配置位設(shè)置完成之后,從機(jī)的SPI初始化需和主機(jī)SPI初始化的通信時(shí)序應(yīng)保持一致。程序設(shè)計(jì)中,接收主機(jī)的數(shù)據(jù)采用中斷響應(yīng)的方式進(jìn)行接收。接收成功之后,通過關(guān)鍵命令字的判斷進(jìn)入相應(yīng)的子函數(shù),再通過數(shù)據(jù)的判斷進(jìn)行底層硬件的控制,實(shí)現(xiàn)相應(yīng)的功能,其程序流程圖如圖9所示。
4 智能小車平臺(tái)擴(kuò)展設(shè)計(jì)
該智能小車平臺(tái)與其他的智能小車最大的不同點(diǎn)是其具有擴(kuò)展接口功能?;诖斯δ芸梢栽谛≤嚿陷p易添加更多外設(shè)實(shí)現(xiàn)豐富的功能,同時(shí)也可基于擴(kuò)展端口進(jìn)行智能小車的開發(fā)與研究,具有一定的實(shí)際應(yīng)用意義[10]。
4.1 Arduino功能擴(kuò)展設(shè)計(jì)
Arduino模塊具有14個(gè)數(shù)字輸入輸出端口、6個(gè)模擬輸入輸出端口。由于其本身具有擴(kuò)展性較強(qiáng)的特點(diǎn),可以使用多種外設(shè)或傳感器模塊與其搭配,實(shí)現(xiàn)功能豐富的電子制作。擴(kuò)展模塊設(shè)計(jì)中將上述端口進(jìn)行外擴(kuò),將上述的每個(gè)數(shù)字端口和模擬端口均加入VCC、GND兩個(gè)引腳,該擴(kuò)展方法實(shí)現(xiàn)的“一口三線”接口,與大多數(shù)Arduino傳感器擴(kuò)展模塊接口相匹配。擴(kuò)展之后降低了傳感器或其他模塊與Arduino連接時(shí)接線的復(fù)雜度,同時(shí)如果多個(gè)模塊與其相連,解決了VCC、GND資源不夠的問題[11],圖10為擴(kuò)展模塊的設(shè)計(jì)框圖。
4.2 PIC18F45K22功能擴(kuò)展設(shè)計(jì)
PIC18F45K22是一款內(nèi)部資源豐富的8位單片機(jī),不僅擁有多路比較/捕捉/PWM功能,同時(shí)其靈活的振蕩器設(shè)計(jì)給時(shí)鐘部分提供了多樣的選擇,是一款功能強(qiáng)大的高性能單片機(jī)。設(shè)計(jì)過程中將未使用的AD端口進(jìn)行擴(kuò)展,擴(kuò)展方法與Arduino的擴(kuò)展方法一樣,為傳感器或其他模塊擴(kuò)展提供更加人性化的接口。
5 示例功能
示例功能部分主要介紹了基于該平臺(tái)實(shí)現(xiàn)的兩個(gè)實(shí)際功能:紅外避障和藍(lán)牙遙控。上述功能是基于該平臺(tái)的硬件和軟件模塊來設(shè)計(jì)實(shí)現(xiàn)的,用于平臺(tái)的實(shí)際功能演示。
5.1 紅外避障
該功能基于平臺(tái)的兩組紅外收發(fā)器實(shí)現(xiàn)智能小車的自動(dòng)避障功能。設(shè)計(jì)中采用外部中斷和定時(shí)器中斷的方式來檢測紅外接收頭的信號(hào)輸出腳電壓的變化情況,有效降低紅外信號(hào)檢測的滯后性,從而提高智能小車對障礙物的檢測靈敏度。通過調(diào)節(jié)PWM信號(hào)的占空比實(shí)現(xiàn)智能小車的運(yùn)動(dòng)速度調(diào)節(jié);調(diào)節(jié)小車避障動(dòng)作的延時(shí)參數(shù)和紅外發(fā)射頭可調(diào)電阻阻值可調(diào)整智能小車的避障效果。
5.2 藍(lán)牙遙控
該功能基于Arduino連接一塊藍(lán)牙模塊和一款手機(jī)APP藍(lán)牙遙控實(shí)現(xiàn)手持設(shè)備遙控智能小車。Arduino模塊通過串口接收藍(lán)牙模塊從設(shè)備端接收的數(shù)據(jù)并進(jìn)行解析,將解析結(jié)果的控制邏輯和APP手勢控制邏輯進(jìn)行判斷和處理,即可實(shí)現(xiàn)手持設(shè)備無線遙控智能小車的效果。通過手勢的前后左右操控可讓小車實(shí)現(xiàn)相對應(yīng)的功能。手持設(shè)備控制軟件采用第三方開發(fā)的一款A(yù)PP,該軟件支持藍(lán)牙連接,具備藍(lán)牙數(shù)據(jù)發(fā)送和接收功能,其主界面如圖11所示。
6 總結(jié)endprint