廖志飛,劉海剛,陳慶威,梁植權
(五邑大學 信息工程學院,廣東 江門 529020)
近年來,隨著技術的不斷進步,兩輪自平衡小車[1]以其結構簡單、輕盈小巧、運動靈活、高效節能等特點,在許多個領域得到了較大的發展。本文設計并制作了一臺兩輪小車,用飛思卡爾公司生產的MK60DN512ZVLQ10單片機作為核心控制器,加速度計MMA7260和陀螺儀ENC03作為車身姿態控制測量元件,實現兩輪小車的自平衡。 根據設定速度與小車速度的偏差控制電機的電壓,以實現速度控制,并利用線性CCD采集賽道信息,根據路徑的彎度控制小車兩個輪子的轉速實現轉向控制,從而實現兩輪直立車的尋跡方案。
系統主要由單片機核心控制器、直立控制模塊、速度控制模塊、方向控制模塊等功能模塊構成。直立控制模塊包含陀螺儀及加速度計,將它們安裝在小車的重心位置,這樣能保證傳感器不會太敏感或太遲鈍,兩者的數據融合使小車能保持一定的傾角前進。速度控制模塊:電機驅動模塊驅動直流電機運轉,通過安裝于左、右輪的編碼器測速,與設定速度進行比較,控制小車按設定速度行駛。方向控制模塊:通過安裝于小車運動上方支架上的線性CCD,控制兩輪實現差速轉彎,以控制運動方向.系統框圖如圖1所示。

圖1 系統總體結構圖Fig.1 The overall system structure diagram
兩輪車行走的首要條件是車的直立平衡,我們設計的參考方案如圖2所示。它是通過陀螺儀ENC03采集到車傾斜的角速度w,通過加速度計采集車傾斜的角度θacc,與陀螺儀積分得到的角度θ比較,得到偏差量e2(t)經過比例1/Tg轉換作為反饋量給陀螺儀,偏差量e1(t)與陀螺儀采集到的角速度相加再積分作為車傾斜的角度θ。由于陀螺儀會有積分誤差及溫漂,采用加速度計就可以減少陀螺儀的誤差,加速度由于受外界的干擾比較大,瞬間值不夠準確,所以配合陀螺儀的使用,兩者共同作用來采集車模的傾角[2]。

圖2 陀螺儀、加速度計數據融合框圖Fig.2 Gyroscope accelerometer data fusion
電機驅動采用4個BTS7960組成H橋電路來驅動直流電機的轉動[3],另外采用MK60N512VMD10單片機兩路脈沖計數器,通過編碼器分別測出小車左、右輪的脈沖量。利用4路PWM分別控制兩個電機的正反轉。如圖3所示,當開關QA、QD接通,電機為正向轉動,開關QB、QC接通則電機反向轉動,從而實現電機的正反轉.電流的大小,決定電機的轉速,通過PWM占空比來決定電流的大小,從而間接地控制了電機的轉速。

圖3 H橋電路Fig.3 H bridge circuit
小車的速度控制是建立在小車直立的基礎上的,通過給小車一個設定速度,然后將編碼器測得的小車實際速度與設定速度進行比較,偏差量作為反饋量,經過比例PSPEED、積分ISPEED的和作為速度的輸出,進一步控制PWM的輸出從而使小車按設定速度行走[4],如圖4所示。

圖4 速度控制框圖Fig.4 Block diagram of speed control
小車運行方向控制是通過兩個輪子的差速來實現[5],而差速是由線性CCD采集賽道信息來計算彎道兩邊黑線與直道時兩邊黑線的偏差值來確定。我們比賽使用的CCD型號為TSL1401,屬于線性CCD,與面陣CCD相比,線性CCD只是采集一行的數據,而這一行數據是由線性CCD傳感器128個光電二極管通過積分電路所采集的圖像灰度值[6]。
對于采集回來的128個數據,要確定一個閾值Th,一般情況下為200左右(還能通過撥碼開關根據現場環境亮度來選擇幾個不同的閾值Th),來區分開白色跑道與其它顏色灰暗的非跑道區域。對于白色跑道反饋回來的值肯定是比其它反饋回來的值大,取這些數的一個中值來作為閾值,來區分賽道的黑白點(除了白色賽道,其余都是黑點),就可以判別出白色跑道.然后就可以計算出彎道時與正常跑道的偏差值,將兩邊的偏差值相減再轉換成電壓值加到方向輸出函數中,就可以控制小車的轉向了。程序框圖如圖5所示。

圖5 CCD數據處理框圖Fig.5 CCD data processing
由于比賽的賽道有虛線,所以我們將采集到128個點的數據從中間(第64個點的數據)往兩邊處理(左邊64-0跟右邊64-127的情況是一樣的),目的是尋找兩邊的黑點,與設定的閾值Th相比,如果小于閾值Th,再判斷3個點是否都小于閾值Th,如果是,則認為是檢測到了賽道邊上的黑線。
程序實現部分[7](左邊64-0的64個點檢測部分):
void CCD_DataProcessing(void)
{
for(i=63;i>=0;i--)
{
L_Number=0;
if(gPixel[i] { for(a=i;a>i-4;a--) { if(a<=0) //忽略了最后的四個點,最后幾個點如果為白點都認為是127 { g_iLeft_CCD_Number=i;//把對應的白點號記下 LeftStartflag=1; //左邊確認檢測到了白點 break; } if(gPixel[a] { L_Number++; //判斷 6點,如果有>=4個白點就確認找到了第一個白點 if(L_Number>=3) { g_iLeft_CCD_Number=i;//把對應的白點號記下 LeftStartflag=1; //左邊確認檢測到了白點 break; } } } } if(LeftStartflag==1) { break; } } if ((g_iLeft_CCD_Number >= 60) &&(g_iRight_CCD_Number>=60))//沖出跑道的情況 { g_iLeft_CCD_Number=g_iLeft_CCD_OldNumber;//使用上一次的值 g_iRight_CCD_Number=g_iRight_CCD_OldNumber; } g_iLeft_CCD_OldNumber=g_iLeft_CCD_Number; g_iRight_CCD_OldNumber=g_iRight_CCD_Number; } 文中討論了基于線性CCD的兩輪自平衡小車控制系統的設計思想及實現方法,對系統中通過線性CCD完成對賽道識別的方向控制模塊,以及直立控制模塊、速度控制模塊等模塊的軟硬件進行了分析,并給出了關鍵程序段。通過測試及參加飛思卡爾智能車比賽,證明這個系統是合理的,也提高了小車運行的速度。開展對兩輪自平衡車的深人研究對提高我國在這一領域的科研水平、擴展機器人的應用背景等具有重要的理論及現實意義。 [1]王宜懷,吳瑾,蔣銀珍.嵌入式系統原理與實戰—ARM Cortex-M4 Kinetis微控制器 [M].北京:電子工業出版社,2011. [2]第七屆全國大學生“飛思卡爾”杯智能汽車競賽 電磁組直立行車參考設計方案 [R].飛思卡爾杯智能汽車競賽秘書處,2012. [3]張飛飛,楊雪松.基于MC9S12XS128單片機的路徑圖像識別智能小車[J].甘肅科技,2013,29(13):12-14.ZHANG Fei-fei,YANG Xue-song.Path recognition?of intelligent car based on MC9S12XS128[J].Gansu Science and Technology,2013,29(13):12-14. [4]胥布工.自動控制原理 [M].北京:電子工業出版社,2011 [5]張啟秋,蔡雄友,葉駿輝,等.兩輪自平衡智能小車控制系統的設計與實現[J].五邑大學學報:自然科學版,2013,27(3):57-60.ZHANG Qi-qiu,CAI Xiong-you,YE Jun-hui,et al.Design of the control system for two-wheel self-balancing smart cars[J].Journal of WUYI University:Natural Science Edition,2013,27(3):57-60. [6]趙曉東.線性CCD實驗系統的研究[J].電子測試,2012,5:85-88,97.ZHAO Xiao-dong.Research on linear CCD experimental system[J].Electronic Test,2012(5):85-88,97. [7]王文龍,張少博,陳海峰.一種試驗數據處理軟件設計[J].火箭推進 ,2012(1):76-80.WANG Wen-long,ZHANG Shao-bo,CHEN Hai-feng.Design of a test data processing software [J].Journal of Rocket Propulsion,2012(1):76-80.3 結束語