劉鴻輝
(西北民族大學,甘肅蘭州,730106)
基于MSP432 的智能跟隨小車主要由以下幾個部分組成:提供各個模塊工作電壓的電源模塊、對小車進行人工控制的紅外遙控模塊、對實物圖像進行獲取的圖像采集模塊、產(chǎn)生電機驅(qū)動信號的電機驅(qū)動模塊、對所有模塊進行控制與結(jié)合的智能控制模塊。由于各模塊的工作電壓不同有3.3V、5V、12V 等,因此需要一個電源模塊來提供各個模塊的工作電壓。圖像采集模塊采用的是ATK-OV7725 圖像傳感器將采集的圖像傳輸給控制模塊進行識別,從而自動跟隨到達指定地點。紅外遙控模塊是為了方便對小車進行人工控制而添加的模塊。電機驅(qū)動模塊提供各電機工作所需的PWM 信號。智能控制模塊采用的是由TI 公司生產(chǎn)的MSP432 單片機進行控制。具體系統(tǒng)框架見圖1 所示。
圖1 系統(tǒng)框架圖
智能控制模塊采用由TI 公司生產(chǎn)的MSP432 單片機控制。MSP432 是一款32 位的低功耗MCU。MSP432 用與M0+相近的功耗實現(xiàn)了接近Cortex-M4F 的性能。MSP432系列使用Cortex -M4F 內(nèi)核具有超低功耗、應(yīng)用設(shè)計方便、擴展性好等特點。主要還有以下特點:MSP432 系列MCU具有多個低功率操作模式;具有32 位的Cortex -M4F 架構(gòu),針對小封裝的嵌入式應(yīng)用進行了優(yōu)化;具有優(yōu)秀的處理能力與快速中斷處理能力;符合IEEE754 的浮點運算單元(FPU);使用高效的處理器內(nèi)核、系統(tǒng)和儲存器;對時間苛刻的應(yīng)用提供可確定的、高性能的處理;儲存器保護單元為操作系統(tǒng)提供特權(quán)操作模式;串行線調(diào)試和串行線跟蹤減少調(diào)試和跟蹤過程中需求的引腳數(shù);集成多種休眠模式,使功耗更低;從ARM7 處理器系列中移植過來,以獲得更好的性能和更高的電源效率。其主要的資源有:內(nèi)核:低功耗內(nèi)核(可達nA 級);工作頻率:48MHz;工作電壓范圍:1.62~3.7V;運行溫度范圍:-40C°~85C°;存儲器:Flash,128KB 以上、SRAM,32KB 以上;ADC:14 位ADC;通信接口:具有UART、12C、SPI 的通信接口模塊;安全特性:具有內(nèi)部看門狗等安全保護特性;電機控制:具有PWM 功能模塊;調(diào)試接口:具有JTAG 和SWD 程序?qū)懭胝{(diào)試接口等。
智能控制模塊的主要功能是:對OV7725 傳輸來的圖像信號進行處理從而得到小車即將運行的方式,例如用來控制前輪方向的舵機的轉(zhuǎn)向、后輪電機的轉(zhuǎn)速等。對紅外遙控器傳輸來的信號進行處理從而修改小車的運行方式。如前進后退、加速減速等。利用MSP432 中的Timer_A 模塊的A0 產(chǎn)生的PWM 信號用于后輪兩個電機的驅(qū)動、A1 產(chǎn)生的PWM 信號用于舵機的驅(qū)動。
舵機的控制利用了位置PID 算法。所謂PID 控制,就是對偏差進行比例、積分和微分的控制。PID 由3 個單元組成,分別是比例(P)單元、積分(I)單元、微分(D)單位。在工程實踐中,一般P 是必須的,所以衍生出許多組合的PID 控制器,如PD、PI、PID 等。如本次使用的PID 算法:V1=Kongzhi_PID(P1,T1)、P1+=V1。舵機轉(zhuǎn)動的速度根據(jù)舵機的位置與即將的轉(zhuǎn)動角度而計算出用V1 表示,利用微分將值分割出很多小區(qū)間,并區(qū)間的值逐個賦值給控制舵機的寄存器。從而實現(xiàn)了將舵機的轉(zhuǎn)動速度變量變成了PID變量的問題。利用此種算法還可實現(xiàn)。
直流電機中固定部分有主磁極與電刷,固定部分總稱為定子。轉(zhuǎn)動部分由圓柱形鐵心與繞在鐵心上的銅制繞組組成,轉(zhuǎn)動部分也稱為轉(zhuǎn)子。定子上裝設(shè)了一對直流勵磁磁鐵,分別為主磁極N 與S,轉(zhuǎn)子上裝設(shè)了電樞鐵心。電樞鐵心上放置了一個電樞線圈(在真正的電機中往往有很多線圈,此處只放置一個線圈舉例)線圈兩端各連接了兩個銅制換向器。兩個換向器都固定在定子上且與鐵心絕緣,在兩個換向器上分別固定有兩個電刷,其起到的作用是在電樞轉(zhuǎn)動時將與換向器連接的電樞線圈與外電路構(gòu)成電氣連接。在電刷上施加直流電壓U,電樞線圈中的電流方向為N 極下的電樞中有效邊中的電流是同一個方向,而S 極下的電樞中有效邊的電流是另一個方向。根據(jù)左手法則判定,這樣兩個有效邊所受的洛倫茲力的方向一致,電樞開始轉(zhuǎn)動,即電機開始轉(zhuǎn)動。
簡介來說,就是把直流電機中的+和-對應(yīng)接到電池的正負極,電機即可正方向轉(zhuǎn)動。如果是把直流電機中的+和-反對應(yīng)接到電池的負正極,電機即可反方向轉(zhuǎn)動。電機的轉(zhuǎn)速與外接的直流電壓電壓是成正比關(guān)系(實際上由電樞電流決定)。
總而言之,我們可以調(diào)節(jié)加在電機上面的直流電壓的大小,即可實現(xiàn)直流電機轉(zhuǎn)速的調(diào)節(jié),也可以改變直流電機上面所加的直流電壓的極性,即可實現(xiàn)電機的換向。
直流電機的調(diào)速與換向的功能,是由MSP432 單片機來控制的,由于MSP432 單片機的I/O 口的輸出功率較低,即帶負載能力較弱,而直流電機是感性負載需要大電流來驅(qū)動,即需要功率較大,因此需要使用功率放大器來對MSP432 單片機的I/O 口輸出的PWM 信號進行功率放大。在這里,我們選擇了直流電機驅(qū)動芯片TB6612FNG。TB6612FNG 是由東芝半導體公司生產(chǎn)的一款直流電機驅(qū)動器件,它有可以雙通道輸出大電流的MOSFET-H 橋結(jié)構(gòu),最多可以同時驅(qū)動兩個直流電機工作。相比傳統(tǒng)利用雙H橋的電機驅(qū)動芯片L298N 來說它具有更低的損耗與更低的發(fā)熱,并且L298N 還需要外圍電路的輔助,而TB6612FNG的外圍電路極為簡單,只需一個電源濾波器即可。因此使用TB6612FNG 來驅(qū)動電機可以大大減小小車的尺寸。其可以接受的PWM 信號輸入頻率范圍較大,0~100 kHz 的頻率范圍足以滿足我們絕大部分的要求。以下是TB6612FNG 的主要參數(shù):最大輸入電壓:VM=15V、最大輸出電流:IOUTM=3.2A。TB6612FNG 具有短路剎車/正反轉(zhuǎn)/停機等功能模式。內(nèi)置有過熱保護電路與低壓檢測電路。具有良好的電機驅(qū)動性能,切成本較低。作為小車的電機驅(qū)動芯片再好不過。
往往在很多復(fù)雜的地形需要對小車進行人工的遙控控制,所以需要一個紅外遙控模塊進行輔助小車的正常運行,防止意外情況的出現(xiàn),在智能模塊編寫時對于紅外遙控的信息與圖像采集模塊的信息發(fā)生沖突時,會優(yōu)先于對紅外遙控的信息進行處理,防止輸出小車失控的情況出現(xiàn)。
小車的紅外遙控模塊采用一款新型的38kHz 通用的紅外遙控器,其采用的是NEC 編碼格式,因其是基于無線遙控,因此人們使用起來方便、有效,應(yīng)用領(lǐng)域也越來越寬。其主要參數(shù)為:紅外遙控距離:大于8m;發(fā)射管紅外波長:940nm;晶振頻率:455kHz 的晶振;載波頻率:38kHz;編碼格式:NEC。可以看出此款紅外遙控器的功能對于遙控小車來說綽綽有余。紅外遙控器要結(jié)合紅外接收模塊使用,它負責將接收紅外遙控器發(fā)射過來的信息并將其解碼成十六進制碼,這樣才能實現(xiàn)既定的通信。將紅外接收模塊與Arduino 控制器正確連接,在MSP432 中對接收到的信息進行處理,即可實現(xiàn)紅外遙控的效果。
紅外遙控器一共有0-9、#號、*號、上下左右共十六個按鍵。紅外遙控器發(fā)送給編碼器的十六進制數(shù)的值為0x00 到0xFF 共十六個十六進制數(shù)。而每個數(shù)占4 位。其中0x0000 到0x0099 表示0-9,0x00AA 表示# 號,0x00BB表示*號,0x00CC 到0x00FF 表示上下左右。每個數(shù)的前兩位若為00 則表示只按一下,若前兩位為FF 則表示長按。如:紅外接收器收到的十六進制數(shù)為0xFFAA 即表示#號鍵長按。在小車的控制中,#號表示小車開機,需要長按,紅外接收器收到的十六進制數(shù)為0xFFAA;*號表示小車關(guān)機,需要長按,紅外接收器收到的十六進制數(shù)為0xFFBB;上下左右表示小車的行進方向,不長按表示改變運行方向但不改變速度,長按表示改變改變速度不改變運行方向。如:小車此時正在向前運行,點按后鍵小車改變運行方向向后運行,此時長按后鍵小車加速,長按前鍵小車減速。將接收器收到的十六進制數(shù)傳給單片機,由單片機實現(xiàn)對小車的各種運行狀態(tài)的控制。
圖像采集模塊采用的是ATK-OV7725-V11 (其中V11 為版本號)攝像頭模塊,它是由ALIENTEK 公司推出的一款高性能的有著30W 像素的攝像頭模塊。該模塊采用的是由OV 公司生產(chǎn)的一顆僅1/4 英寸的圖像傳感器OV7725,其主要的采集像素為:640×480。該圖像傳感器的體積與以往傳感器相比較小、其工作電壓為3.3V。該圖像傳感器利用SCCB 協(xié)議總線來控制,可以輸出取窗口、整幀、子采樣等各種采樣方式的分辨率,10 位或者8 位的影像數(shù)據(jù)輸出。其 VGA 圖像的輸出最高可以達到60 幀/秒。用戶可以完全控制圖像的質(zhì)量、輸出的數(shù)據(jù)格式與數(shù)據(jù)傳輸?shù)姆绞?。其對圖像的處理功能包括伽瑪曲線、度、色度、白平衡等,并且都可以使用SCCB 來進行編程控制。OV 公司的圖像傳感器具有獨有的較為先進的傳感器技術(shù),通過減少或消除光學上的與電子上的缺陷比如固定圖案的托尾、噪聲、浮散等,來提高圖像的質(zhì)量,從而得到較為清晰并且穩(wěn)定的圖像。ATKOV7725 模塊采用OV7725 傳感器作為核心部件,集成了有源晶振和 FIFO,任意一款MCU 都可控制該模塊和讀取圖像。
對于該模塊的控制,我們只需要關(guān)心兩點:如何存儲圖像數(shù)據(jù)與如何讀取圖像數(shù)據(jù)。
攝像頭模塊存儲圖像數(shù)據(jù)的主要過程為:等待OV7725傳感器的第一個幀同步信號發(fā)出→FIFO 存儲器的寫指針置1→FIFO 存儲器使能→等待OV7725 傳感器的第二個幀同步信號發(fā)出→FIFO 存儲器寫指針禁止。通過以上的5 個主要步驟,即可實現(xiàn)一幀圖像數(shù)據(jù)的存儲功能。值得注意的是:FIFO 存儲器的寫指針禁止操作并不是一定需要進行的,只有當外部的MCU 在讀取完當前這一幀圖像數(shù)據(jù)之前并且此時傳感器不再采集新的一幀圖像數(shù)據(jù)的時候才需要對FIFO存儲器進行寫指針禁止的操作。
當FIFO 存儲器存儲完一幀圖像數(shù)據(jù)以后,就可以進行圖像數(shù)據(jù)的讀取工作了。一幀圖像數(shù)據(jù)的讀取工作的主要過程為:FIFO 存儲器的讀指針置0→給FIFO 存儲器的讀時鐘FIFO_RCLK 使能→讀指針讀取第一個像素數(shù)據(jù)的高字節(jié)→將值傳給FIFO_RCLK→讀指針讀取第一個像素數(shù)據(jù)的低字節(jié)→將值傳給FIFO_RCLK→讀指針讀取第二個像素數(shù)據(jù)高字節(jié)→將值傳給FIFO_RCLK→讀指針讀取剩余的像素數(shù)據(jù)→一幀圖像數(shù)據(jù)讀取完成。
具體過程框圖見圖2 所示,可以看出,攝像頭模塊的圖像數(shù)據(jù)讀取也十分簡單,比如QVGA 模式,RGB565 格式下對于一幀圖像數(shù)據(jù)只需要循環(huán)讀取320×240×2 次即可實現(xiàn)。將數(shù)據(jù)傳入單片機中進行識別控制就可以實現(xiàn)小車的跟隨,例如:在人工的后背上映有一個專門的圖案,并且具有一個此小車的專門識別編號,在小車讀到數(shù)據(jù)時,先對編號進行判斷,此編號是否為本車的編號,若與本車編號一致,開始核對圖案的相似度,若相似度超過90%即可認為需要跟隨。再對圖像的相對位置進行判斷,從而得出小車需要的運行狀態(tài)。編號一致是為了防止不同小車跟隨時出現(xiàn)紊亂現(xiàn)象,圖案是為了保證小車能穩(wěn)定跟隨而不被旁邊的事物影響。相對位置進行改變小車的運行狀態(tài)用到了一個特殊的算法,當圖案偏左時說明小車偏右方,對圖案偏左的角度進行計算,從而得出小車需要轉(zhuǎn)動的角度,根據(jù)此時小車的運行速度與角度即可得出此時小車需要改變的運行方式即舵機需要轉(zhuǎn)動的角度與電機需要的速度。此時即可使小車始終位于被跟隨者的正后方。當被跟隨者消失時,小車會立即停止,并且頂部紅燈開始閃爍,并發(fā)出輕微的警報聲以此來告訴跟隨者此時小車失去目標。此外,小車還需要避障功能,當視野中出現(xiàn)會與小車碰撞的物體時,小車會強行改變運行方式,但是不會讓被跟隨者消失在視野中,若出現(xiàn)無法躲避的物體時小車頂部的藍燈開始閃爍,并發(fā)出輕微的報警聲來告訴被跟隨者小車無法前進。
圖2 圖像數(shù)據(jù)讀取與存儲過程框圖
由于各個模塊的工作電壓不同,所以需要一個電源模塊來提供各個模塊的工作電壓。電源模塊主要由升壓降壓模塊與穩(wěn)壓模塊組成,由于小車配備的電池輸出電壓為12V 并且可能輸出電壓不穩(wěn)定所以需要采用升降壓模塊與穩(wěn)壓模塊進行結(jié)合而成的電源模塊。
如圖3 所示,直流變流電路采用Zeta 斬波電路,因為Zeta 斬波電路可以實現(xiàn)升壓也可以實現(xiàn)降壓,并且電路簡單實現(xiàn)較為簡單。交流逆變電路采用橋式逆變電路,只需要兩個IGBT 與兩個二極管即可實現(xiàn)。全波整流部分采用了全波整流橋式電路,使輸出的直流電壓不會改變并且電路只需要兩個晶閘管即可,實現(xiàn)極為簡單。濾波電路采用大電感濾波,只需一個較大的電感即可實現(xiàn)。直流輸入12V 的電壓將其變?yōu)閭€模塊所需的工作電壓,由于電壓可能出現(xiàn)不穩(wěn)定的現(xiàn)象,將其作為輸入傳給橋式逆變電路,通過單片機的控制將輸入的直流電變?yōu)楦哳l的方波電壓。然后將其輸入到整流回路進行整流將高頻的方波變?yōu)橹绷麟娸敵?,最后到濾波回路將帶有紋波的直流電變成所需的直流電。主電路采用Zeta 斬波電路進行斬波、后經(jīng)高頻逆變得到高頻交流電壓,然后整流濾波的方法,該電源在開環(huán)時,它的負載特性較差,只有加入負反饋,構(gòu)成閉環(huán)控制后,當外加電源電壓或負載變化時,均能自動控制脈沖寬度調(diào)制輸出信號的占空比,從而維持電源的輸出直流電壓在一定的范圍內(nèi)保持不變,最終達到了升降壓與穩(wěn)壓的效果。
圖3 電源模塊流程圖
系統(tǒng)程序框圖如圖4 所示,在小車的程序設(shè)計中紅外控制優(yōu)先于圖像控制,即人工控制高于自動控制。在紅外遙控有信息發(fā)來時,MSP432 對紅外信息優(yōu)先處理,按照紅外遙控信息改變小車的運行狀態(tài)。小車的避障功能會在紅外沒有發(fā)送信息時起到作用對小車的運動狀態(tài)進行修正。當需要避障時,MSP432 對前方障礙物的大小及方位進行估算,進而計算出小車需要改變的速度及允許方向,當距離較近時會緊急使用減速程序?qū)π≤囘M行減速操作防止小車碰上障礙物。只有在小車不處于紅外控制即處于自動智能跟隨行駛MSP432 才會對攝像頭信息進行處理而產(chǎn)生新的運動狀態(tài)從而改變舵機的轉(zhuǎn)向與轉(zhuǎn)速,電機的轉(zhuǎn)速等。
圖4 系統(tǒng)程序框圖
在程序中,紅外接收器將傳來的信息轉(zhuǎn)為一個4 位的十六進制數(shù)傳給MSP432,在程序中有錯誤信息識別功能,當發(fā)來的數(shù)不為4 位的十六進制數(shù)或者其數(shù)與規(guī)定的數(shù)字不符時會對錯誤信息進行過濾刪除從而不影響小車的正常運行,并內(nèi)置蜂鳴器低鳴兩聲告訴操控者信息錯誤需要重新控制。由于小車可能有時需要進行推拉物品,此時可以選擇將避障功能關(guān)閉或者使用紅外控制。部分可以體現(xiàn)紅外控制優(yōu)先于圖像控制的代碼如圖5 所示。只有當紅外控制沒有信息傳遞來時才會啟用圖像控制,而避障功能的函數(shù)內(nèi)置于TuXiang()函數(shù)中,這也就表現(xiàn)了紅外控制優(yōu)于一切自動控制,即人工控制優(yōu)先。
圖5 部分程序示意圖
隨著科技的不斷發(fā)展,智能小車代替人工的行業(yè)越來越多,搬運倉儲行業(yè)首當其沖,一款能夠跟隨人工并且能有紅外遙控優(yōu)先權(quán)的小車顯得尤為突出。在代替人工以及保證安全的同時,它能做到搬運更多物品,造價低,具有很高的性價比。可見,在不久的將來,智能跟隨小車將會在代替人工的企業(yè)中發(fā)揮著它的價值。