徐健
(貴州工業(yè)職業(yè)技術(shù)學(xué)院 電子與信息工程分院,貴州 貴陽 550008)
月球車循跡控制模塊總體框圖,如圖1所示(比賽還要完成圖像采集與無線傳輸,這里是其中循跡功能),采用ARM9 芯片S3C2440為主控芯片,通過單片機來控制電機和讀取并處理編碼信息,ARM9 與單片機之間,通過串口通信來控制所輸出的PWM 參數(shù)和讀取單片機處理后的當(dāng)前速度值[1]。
圖1 系統(tǒng)總體框圖
S3C2440 采用ARM920T的RISC處理器,0.13 μm的CMOS 標(biāo)準(zhǔn)宏單元和存儲器單元,ARM920T實現(xiàn)了MMU、AMBA、BUS 和Harvard 高速緩沖體系結(jié)構(gòu),具有獨立的16KB 指令Cache 和16KB數(shù)據(jù)Cache,同時提供一套完整的通用系統(tǒng)外設(shè)[2]。
采取紅外探測法,利用紅外線在不同顏色的物體表面具有不同的反射性質(zhì)的特點,在小車行駛過程中不斷地向地面發(fā)射紅外光,當(dāng)紅外光遇到白色紙質(zhì)地板時,發(fā)生漫反射,反射光被裝在小車上的接收管接收;如果遇到黑線,則紅外光被吸收,小車上的接收管接收不到紅外光。單片機就是否收到反射回來的紅外光為依據(jù),來確定黑線的位置和小車的行走路線。紅外探測器探測距離有限,一般最大不應(yīng)超過15 cm。紅外光的發(fā)送接收,選用型號為RPR220的對管。其循跡模塊如圖2所示。
圖2 循跡電路圖
當(dāng)小車在白色地面行駛時,裝在車下的紅外發(fā)射管發(fā)射紅外線信號,經(jīng)白色反射后,被接收管接收,一旦接收管接收到信號,那么圖中光敏三極管將導(dǎo)通,比較器輸出為低電平;當(dāng)小車行駛到黑色引導(dǎo)線時,紅外線信號被黑色吸收后,光敏三極管截止,比較器輸出高電平,從而實現(xiàn)了通過紅外線檢測信號的功能。
將檢測到的信號送到單片機I/O 口,當(dāng)I/O 口檢測到的信號為高電平時,表明紅外光被地上的黑色引導(dǎo)線吸收了,表明小車處在黑色的引導(dǎo)線上;同理,當(dāng)I/O 口檢測到的信號為低電平時,表明小車行駛在白色地面上。
此種方法容易受到周圍環(huán)境的影響,對檢測到的信號有一定的影響。為消除其影響,制作好以后,將賽車放置賽道白色區(qū)域,用萬用表讀取白色的信號輸出(大概為1 V 左右),同理,將傳感器放置黑線上,讀取黑點值(大概為4 V 左右)。8個傳感器依次檢測一遍,以確保所有傳感器都工作正常,并根據(jù)實際檢測結(jié)果設(shè)定一個閾值電壓,用以區(qū)分黑白。調(diào)節(jié)電位器,同時檢測比較器上參考電壓的值,使賽車能夠很好地區(qū)分被測物體的黑白(大概為3~4 V)。
采用常用的H 橋電機驅(qū)動芯片BD6225 驅(qū)動小車電機,S3C2440 通過串口通信通過單片機產(chǎn)生PWM 波來調(diào)整直流電機的電壓從而控制小車的轉(zhuǎn)速,PWM 由一系列占空比不同的矩形脈沖構(gòu)成,PWM 波的占空比越大,產(chǎn)生的電壓越高,通過其比的變化調(diào)整電機電壓,以致使電流發(fā)生變化從而可以很好地控制電機的轉(zhuǎn)速[3]。
在月球車循跡行走過程中,為了能精確測定黑線位置,并確定小車行走的方向和速度的控制,根據(jù)比賽黑線的寬度,在小車底盤并排裝設(shè)8個紅外探測頭,在電路板制作過程中,根據(jù)實際需要調(diào)整了紅外探測頭之間的距離,使得小車在黑線行駛時確保剛好有2個探頭在黑線上(當(dāng)中間2個探頭在黑線,可以使小車以最快速度向前行走),提高其循跡的可靠性。
小車行走時,為了保證小車始終在8個探頭的其中2個下面,程序設(shè)計過程中,定義了一個數(shù)組
const unsigned char table [7]= {0x3f,0x9f,0xcf,0xe7,0xfc,0xf9,0xf3},
這個數(shù)組是把小車能在兩個探頭下行駛的情況包含進來,例如:當(dāng)小車處于8個探頭的中間2個行駛時(0xe7),根據(jù)算法使小車行駛速度達到最快;當(dāng)采集到傳感器信號值為0x3f 時,表示小車偏離正中心處于靠右,這時根據(jù)算法不斷調(diào)整小車行走方向和速度,通過不斷的修正,最后使小車處于正中央行駛同時保持最快速度行駛。圖3是循跡程序的流程圖。
圖3 程序流程圖
程序設(shè)計主要用到以下幾個函數(shù):
read(fd_sensor,&sensorData,sizeof(unsigned char));讀取傳感器信息
calc_sensor(sensorData,&biasValue,&blackSum);計算出小車偏移黑線值和在黑線上的傳感器數(shù)目
calc_motor(pMotor_L,biasValue);根據(jù)目標(biāo)位置做調(diào)整算法
calc_motor(pMotor_R,biasValue)
程序首先通過讀函數(shù)讀取傳感器采集到的信息,根據(jù)傳感器參數(shù)計算出小車方向,小車偏移的黑線值和在黑線上的傳感器數(shù)目,通過這些信息計算出小車的行駛方向,通過調(diào)整算法使小車以最快的速度行駛在準(zhǔn)確的方向上。
比賽結(jié)果表明本設(shè)計具有結(jié)構(gòu)簡單,容易實現(xiàn)等的特點。小車能按照控制要求平穩(wěn)快速的循黑色軌跡運行。
[1]徐 瑋,沈建良.單片機快速入門[M].北京:北京航空航天大學(xué)出版社,2008.
[2]馬忠梅.ARM&Linux 嵌入式系統(tǒng)教程[M].北京:北京航空航天大學(xué)出版社,2004.
[3]張黃鵬.智能循跡小車的研究[J].科技向?qū)В?011,(32):116-117.