




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄TOC\o"1-5"\h\z摘要IAbstractI\o"CurrentDocument"引言1\o"CurrentDocument"MCU模型車的結(jié)構(gòu)組成及工作原理2\o"CurrentDocument"2.1傳感器基板22.2傳感器子基板32.3CPU主板4\o"CurrentDocument"2.4馬達(dá)驅(qū)動(dòng)電路5\o"CurrentDocument"2.5伺服舵機(jī)控制電路8\o"CurrentDocument"2.6發(fā)光二極管電路92.7開(kāi)/關(guān)電路102.8電源10\o"CurrentDocument"MCU模型車的幾何模型、運(yùn)動(dòng)學(xué)模型和動(dòng)力學(xué)模型分析11\o"CurrentDocument"3.1模型車幾何模型的建立與分析:11\o"CurrentDocument"3.2模型車動(dòng)力學(xué)模型的建立與分析:123.3模型車運(yùn)動(dòng)學(xué)模型的建立與分析:16MCU模型車在指定軌道上運(yùn)行的程序設(shè)計(jì)17\o"CurrentDocument"影響MCU模型車穩(wěn)定運(yùn)行的因素31結(jié)論32致謝錯(cuò)誤!未定義書(shū)簽。參考文獻(xiàn)錯(cuò)誤!未定義書(shū)簽。1引言MCU模型車的設(shè)計(jì)與制作起源于由日本社團(tuán)法人全國(guó)高中協(xié)會(huì)等主辦的“JAPANMCU模型車大賽(英文:JapanMicomCarRally)”,目前這項(xiàng)賽事已經(jīng)在日本成功舉辦了十余屆。由于這項(xiàng)大賽的科技層次較高,并且具有很強(qiáng)的競(jìng)爭(zhēng)性和觀賞性,如今“JAPANMCU模型車大賽”已經(jīng)成為日本國(guó)內(nèi)的全國(guó)性重大賽事。2007年,由瑞薩科技冠名贊助的“瑞薩超級(jí)MCU模型車大賽”首次在北京舉行,并被教育部列為“全國(guó)大學(xué)生IT&AT就業(yè)技能大賽”系列賽事之一。這個(gè)活動(dòng)的目的是提高學(xué)生的制作能力和編程技巧水平,并培養(yǎng)業(yè)界相關(guān)人才。該項(xiàng)賽事首次舉辦就吸引了四十多所高校的六十多支參賽隊(duì)伍,其中不乏許多知名高校。此次大賽的成功舉辦,不僅在于高校和大學(xué)生們對(duì)此項(xiàng)賽事的關(guān)注,更在于對(duì)大家對(duì)專業(yè)人才培養(yǎng)和鍛煉的重視。該項(xiàng)賽事還將繼續(xù)在我國(guó)舉辦。在高興的同時(shí),我們也應(yīng)該清楚地看到,我國(guó)選手的MCU模型車在科技含量與創(chuàng)新層次上與國(guó)外高水平選手還有一定的差距。因此,為提高我國(guó)MCU模型車賽事的觀賞性和賽事水平的競(jìng)爭(zhēng)力,同時(shí)也為了提高我國(guó)高校大學(xué)生的科研能力、制作能力及創(chuàng)新層次,加強(qiáng)對(duì)MCU模型車的理論研究和科技創(chuàng)新具有一定的實(shí)際意義。
2MCU模型車的結(jié)構(gòu)組成及工作原理MCU模型車基本上由以下幾部分組成:傳感器基板,傳感器子基板,H8/3048F-ONE型號(hào)的CPU主板,馬達(dá)驅(qū)動(dòng)基板等。其整體結(jié)構(gòu)如圖1所示。圖1傳感器基板位于模型車的最前方,用于檢測(cè)賽道信息。而傳感器子基板則被固定在模型車車身上,對(duì)傳感器輸出的信號(hào)進(jìn)行初步的預(yù)處理。安裝在中心位置的CPU主板是整個(gè)模型車的核心部件,可以對(duì)模型車的各控制電路發(fā)出控制指令。位于車身最后的馬達(dá)驅(qū)動(dòng)基板是模型車驅(qū)動(dòng)電路的集合體,在CPU的控制下它可以完成對(duì)左右馬達(dá)和伺服舵機(jī)的驅(qū)動(dòng)。21傳感器基板如圖2所示,傳感器基板主要由8個(gè)一字等距排開(kāi)的傳感器組成。每個(gè)傳感器都可以識(shí)別賽道上的黑白顏色,通過(guò)發(fā)光二極管顯示傳感器檢測(cè)到的狀態(tài),并能將其轉(zhuǎn)化為數(shù)字信號(hào)“0”或“1”輸出。傳感器基板作為整個(gè)模型車控制系統(tǒng)的起始端,就好比人的眼睛,能讀取賽道路面信息,為模型車要產(chǎn)生的相應(yīng)動(dòng)作提供必要依據(jù),其作用不可忽視。同時(shí),其識(shí)別精度及響應(yīng)時(shí)間都將對(duì)整個(gè)控制過(guò)程造成較大的影響。傳感器主要由兩部分組成,利用“白色反射光線,黑色吸收光線”的原理,一部分發(fā)射光線,另一部分接收光線。發(fā)射光線部分為發(fā)光二極管,其發(fā)射到賽道上的光線為紅外線,并不能被肉眼察覺(jué)。接受光線部分為光傳感器S7136,它能判斷出是否有光線被反射到其接受面上,并能將其轉(zhuǎn)化為數(shù)字信號(hào)“0”或“1”輸出。傳感器的工作原理為:如果賽道上光線集中的地方是白色(光線由傳感器的發(fā)光部分射出),光線將會(huì)被反射,并且被傳感器的光線接收部分接收。這樣,傳感器輸出數(shù)字信號(hào)“0”,賽道上的該處被認(rèn)為是“白色”,同時(shí),具有指示作用的發(fā)光二極管工作。同理,如果賽道上光線集中的地方是黑色,光線將會(huì)被吸收,不能被光線接收部分接收,傳感器輸出數(shù)字信號(hào)“1”,該處將會(huì)被認(rèn)為是“黑色”,具有指示作用的發(fā)光二極管不工作。傳感器基板上的藍(lán)色方形旋鈕為可調(diào)電阻,可以調(diào)節(jié)傳感器的靈敏度。當(dāng)傳感器在賽道上的白線處正常工作,黑線處不工作時(shí),傳感器靈敏度的調(diào)節(jié)工作就可以結(jié)束了。如果賽道上有灰色,要通過(guò)調(diào)節(jié)旋鈕使發(fā)光二極管在灰色處也能正常工作,模型車才能夠在整個(gè)賽道上順利運(yùn)行。光傳感器S7136主要由震蕩電路、時(shí)鐘信號(hào)發(fā)生電路、發(fā)光二極管驅(qū)動(dòng)電路、緩沖放大電路、標(biāo)準(zhǔn)電壓發(fā)生電路、比較電路、信號(hào)處理電路、輸出電路等組成。它屬于標(biāo)準(zhǔn)元件,共有四個(gè)引腳,此處不對(duì)其內(nèi)部結(jié)構(gòu)做過(guò)多介紹。傳感器基板的電路如圖3所示:發(fā)射紅外線的發(fā)光二極管(LED2)的陰極與光傳感器S7136(接收光線部分)的引腳1連接,陽(yáng)極通過(guò)旋鈕調(diào)節(jié)電阻(該電阻可以調(diào)節(jié)LDE2的輸出)與電源相連。S7136的引腳3是輸出端,并與發(fā)光二極管(LED1)相連。因?yàn)樵跀?shù)字電路中“0”通常表示0V,“1”通常表示“5”V,因此,當(dāng)S7136接收到光線時(shí),引腳3輸出“0”,LED1工作。反之,當(dāng)S7136沒(méi)有接收到光線時(shí),引腳3輸出“1”,LED1不工作。為了將每個(gè)光傳感器引腳3的輸出值送到CPU做后續(xù)處理,引腳3還與接口CN1的引腳2-9分別相連。另外,光傳感器S7136的引腳2和引腳4還要分別與電源和地相連,這樣就構(gòu)成了完整的傳感器基板電路。圖3要注意:此時(shí)由傳感器基板輸出的信號(hào)為:“1”代表“黑色”,“0”代表“白色”。這與人們通常的思維習(xí)慣相矛盾。為了便于在設(shè)計(jì)程序時(shí)理解起來(lái)更方便,還需要對(duì)傳感器基板的輸出信號(hào)做進(jìn)一步的處理。這就是下面要介紹的傳感器子基板的作用。2.2傳感器子基板傳感器子基板的作用是將來(lái)自傳感器的輸入信號(hào)取反,使輸出信號(hào)滿足:當(dāng)賽道顏色
為白色時(shí)輸出值為“1”,當(dāng)賽道顏色為黑色時(shí)輸出值為“0”。從而符合人們的思維習(xí)慣。又因?yàn)閬?lái)自傳感器的輸入信號(hào)并不是非常清楚,因此傳感器子基板同時(shí)還具有波形成型和防止信號(hào)抖動(dòng)的功能。傳感器子基板的外觀如圖4所示。由上述內(nèi)容可知:傳感器基板與傳感器子基板間的關(guān)系密切,理論上可以將二者合為一體,放到一塊板子上。但是,考慮到傳感器基板的重量會(huì)影響到伺服舵機(jī)轉(zhuǎn)向的快速性,因此將傳感器子基板固定在車身上以減輕傳感器基板的重量。圖5為傳感器子基板的電路圖:電路中,利用非門(mén)電路將輸入信號(hào)取反,并采用元件74HC04實(shí)現(xiàn)該功能。圖中電阻起到限流的作用。經(jīng)過(guò)轉(zhuǎn)化后的信號(hào)分別與接口CN12的圖6圖示即為模型車的CPU主板。該主板采用由日本瑞薩科技生產(chǎn)的H8/3048F-ONE芯片。它是整個(gè)模型車的核心,也是提高模型車性能的關(guān)鍵所在。它的主要作用是利用控制程序?qū)δP蛙嚨母黩?qū)動(dòng)部分發(fā)出控制指令,從而實(shí)現(xiàn)對(duì)整個(gè)MCU模型車系統(tǒng)的程序控制。CPU主板的結(jié)構(gòu)較復(fù)雜。共有11個(gè)接口,分別為接口1至B,其中大部分為8位接口,還有4個(gè)是少于8位的接口。另外,主板上還有一個(gè)4位的DIP開(kāi)關(guān),可以調(diào)節(jié)控制馬達(dá)轉(zhuǎn)速的PWM輸出值。CPU主板的核心部分為H8/3048F-ONE芯片,該芯片共有100個(gè)引腳,可以實(shí)現(xiàn)對(duì)整個(gè)模型車的程序控制。而控制程序的輸入還需要通過(guò)一個(gè)導(dǎo)入開(kāi)關(guān)才能實(shí)現(xiàn)。然而,雖然主板上有11個(gè)接口,但是整個(gè)模型車系統(tǒng)只用到了接口7和接口B兩個(gè)接口,使整個(gè)系統(tǒng)并未變得特別復(fù)雜。模型車開(kāi)始工作后,該CPU主板從接口7讀取傳感器數(shù)值,經(jīng)過(guò)執(zhí)行芯片中定義的接口程序和創(chuàng)建的主控制程序得出左、右馬達(dá)和伺服舵機(jī)的響應(yīng)動(dòng)作及其輸出值,并將其通過(guò)接口B輸出到馬達(dá)驅(qū)動(dòng)基板,以達(dá)到對(duì)模型車驅(qū)動(dòng)系統(tǒng)控制的目的。2.4馬達(dá)驅(qū)動(dòng)電路馬達(dá)驅(qū)動(dòng)電路位于馬達(dá)驅(qū)動(dòng)基板上(馬達(dá)驅(qū)動(dòng)基板整體外觀如圖7所示),其作用是根據(jù)微處理器的指令來(lái)控制馬達(dá)。但是來(lái)自微處理器的信號(hào)非常微弱,即使把馬達(dá)直接與信號(hào)線相連,也不會(huì)產(chǎn)生任何響應(yīng)。為了能控制馬達(dá),這個(gè)微弱的控制信號(hào)必須轉(zhuǎn)化成可以誘發(fā)數(shù)百至數(shù)千毫安電流的信號(hào)。圖7要使馬達(dá)旋轉(zhuǎn),只需施加相應(yīng)的電壓。而要使馬達(dá)停止,只需撤掉電壓即可。但是,要如何才能實(shí)現(xiàn)速度的精確控制呢?下面將對(duì)這個(gè)問(wèn)題進(jìn)行詳述的討論。采用調(diào)節(jié)電阻可以改變電壓。但是,這個(gè)調(diào)節(jié)電阻必須具有很大的熱容量,因?yàn)轳R達(dá)工作時(shí),將有大量的電流流向馬達(dá)。對(duì)于沒(méi)有施加到馬達(dá)上的過(guò)剩電壓,將會(huì)在電阻上以熱輻射的形勢(shì)被消耗掉。而此處采用的方法是不斷重復(fù)高速的開(kāi)、關(guān)操作來(lái)進(jìn)行電壓控制,其最終的結(jié)果就好像是高低電平間的某個(gè)電壓值被輸出。在固定的周期內(nèi),重復(fù)的開(kāi)、關(guān)操作可以控制開(kāi)、關(guān)比率的改變。這種控制方法稱為“脈寬調(diào)制”,簡(jiǎn)稱為PWM控制。脈寬的開(kāi)通比率稱為工作比率。當(dāng)在一個(gè)周期內(nèi)開(kāi)通寬度被設(shè)定為50%時(shí),可以稱作工作比率為50%。還可以簡(jiǎn)稱為PWM50%。下圖即為脈寬調(diào)制(PWM)的示意圖。圖8不過(guò)“PWM”聽(tīng)起來(lái)有些難以理解。其實(shí)手動(dòng)“接通”、“斷開(kāi)”馬達(dá)與電池線的連接也被稱為PWM。當(dāng)接通時(shí)間較長(zhǎng)時(shí),馬達(dá)旋轉(zhuǎn)速度快。當(dāng)斷開(kāi)時(shí)間較長(zhǎng)時(shí),馬達(dá)旋轉(zhuǎn)速度慢。手動(dòng)“接通”、“斷開(kāi)”操作的執(zhí)行可以在數(shù)秒內(nèi)完成,但是,如果采用微處理器的話,這個(gè)過(guò)程只需要數(shù)毫秒。當(dāng)這個(gè)PWM信號(hào)與馬達(dá)相連時(shí),馬達(dá)的旋轉(zhuǎn)速度就可以按照程序的設(shè)定來(lái)工作,哪怕只發(fā)生微小的變化。這樣一來(lái),精細(xì)的速度控制就能夠?qū)崿F(xiàn)了。當(dāng)電路中連有發(fā)光二極管時(shí),發(fā)光二極管的明亮程度可以通過(guò)PWM來(lái)改變。如果用CPU進(jìn)行PWM控制,這項(xiàng)工作可以在數(shù)毫秒,甚至數(shù)微秒內(nèi)完成。一個(gè)平穩(wěn)的馬達(dá)控制就可以實(shí)現(xiàn)了。這里,之所以采用脈寬控制,而不采用電壓控制,是因?yàn)镃PU非常善于處理數(shù)字值“0”和“1”,對(duì)于類似于xV這樣的值處理起來(lái)則非常困難。雖然通過(guò)改變“0”、“1”的寬度表現(xiàn)的就像是電壓控制一樣,但實(shí)際上卻是PWM控制。馬達(dá)正、反轉(zhuǎn)以及剎車的控制是通過(guò)H橋電路來(lái)實(shí)現(xiàn)的。H橋電路的原理圖如圖9所示,馬達(dá)位于中心位置,4個(gè)開(kāi)關(guān)分別位于兩側(cè),共同構(gòu)成一個(gè)H形。改變4個(gè)開(kāi)關(guān)的狀態(tài)就可以實(shí)現(xiàn)馬達(dá)正、反轉(zhuǎn)以及剎車的控制。此處的開(kāi)關(guān),是由FET(場(chǎng)效應(yīng)晶體管)組成的控制開(kāi)關(guān)。P溝型FET用在電源正極,N溝型FET被用在負(fù)極。對(duì)于P溝型FET而言,當(dāng)G端電壓<S端電壓時(shí),導(dǎo)通電流。而對(duì)于N溝型FET而言,當(dāng)G端電壓>S端電壓時(shí),導(dǎo)通電流。也就是說(shuō),無(wú)論是P溝型還是N溝型的FET,只要D端與,端有電壓,就會(huì)有電流從其中導(dǎo)通。圖9必須注意:左側(cè)或右側(cè)的兩個(gè)FET不能同時(shí)接通。因?yàn)?,如果那樣的話?0V的電源與接地之間就沒(méi)有任何負(fù)載存在了,就好像短路一樣。它將會(huì)燒毀FET或者導(dǎo)線。馬達(dá)在實(shí)現(xiàn)正、反轉(zhuǎn)以及剎車的控制過(guò)程中,H橋電路的左側(cè)和右側(cè)兩個(gè)FET的G端電壓總是相同的。因此,可將左右兩側(cè)的上下兩個(gè)FET的G端分別相連,以簡(jiǎn)化電路。
當(dāng)H橋電路被連接到整個(gè)控制電路中,并且執(zhí)行PWM控制時(shí),F(xiàn)ET將會(huì)變得很熱。這是因?yàn)?,?dāng)信號(hào)從FET的門(mén)輸入,并且PWM控制在FET的D端與S端執(zhí)行時(shí),根據(jù)圖10中的“理想波形”圖可知,由于P溝型FET和N溝型FET反應(yīng)迅速,正轉(zhuǎn)與剎車之間可以實(shí)現(xiàn)平穩(wěn)的轉(zhuǎn)換。然而實(shí)際波形中卻存在延時(shí),并不能立即執(zhí)行。事實(shí)上,F(xiàn)ET由開(kāi)變關(guān)時(shí)的延時(shí)要比由關(guān)變開(kāi)時(shí)的延時(shí)長(zhǎng)。正如圖10中的“實(shí)際波形”所示。雖然延時(shí)很小,但是同側(cè)的兩個(gè)FET都將會(huì)因延時(shí)造成短時(shí)間導(dǎo)通,引起電路短路,并產(chǎn)生大量的熱能。j:BrakeNormalrotationONj:BrakeNormalrotationONxjr1rONOFFMotorGatePchFBTOperationNchFBTOperationBrake[rotationrake【**s87ns3L_._.….is;225ns-?\…7Motor?GateiPchFETOperationNchFETOperationONOFFCNOFF理想波形實(shí)際波形圖10從接通到實(shí)際開(kāi)始產(chǎn)生反應(yīng)的延時(shí)的持續(xù)時(shí)間稱為“接通延時(shí)”,第一次打開(kāi)到實(shí)際接通的時(shí)間稱為“上升時(shí)間”。從斷開(kāi)到實(shí)際開(kāi)始產(chǎn)生反應(yīng)的延時(shí)的持續(xù)時(shí)間稱為“斷開(kāi)時(shí)間”,第一次斷開(kāi)到實(shí)際斷開(kāi)的時(shí)間稱為“下降時(shí)間”。實(shí)際上,由斷開(kāi)到接通的時(shí)間是“接通延時(shí)+上升時(shí)間”,由接通到斷開(kāi)的時(shí)間為“斷開(kāi)時(shí)間+下降時(shí)間”。由于延時(shí)的作用,馬達(dá)驅(qū)動(dòng)電路會(huì)產(chǎn)生短路的現(xiàn)象。防止短路的方法是利用電路及FET的開(kāi)關(guān)特性來(lái)產(chǎn)生特定的延時(shí),從而使同側(cè)的P通道和N通道的FET不同時(shí)接通或斷開(kāi)。馬達(dá)驅(qū)動(dòng)基板中用來(lái)產(chǎn)生延時(shí)的部分是積分電路(圖11所示)。因?yàn)橛性S多有關(guān)于積分電路的專業(yè)書(shū)籍,此處不對(duì)其作過(guò)多敘述。積分電路圖如下,并可通過(guò)下式計(jì)算延時(shí)T=CR[s]。其中,電阻值為9.1千歐姆,電容大小為4700皮法,因此,延時(shí)T=42.77[us].圖11該電路中采用了74HC14。對(duì)于74HC系列產(chǎn)品而言,當(dāng)輸入電壓為3.5V或者更高時(shí),電信號(hào)將會(huì)被轉(zhuǎn)換為數(shù)字信號(hào)“1”。在74HC14的實(shí)際波形中,電壓達(dá)到3.5V所需要的時(shí)間大約為50us。這個(gè)50us的延時(shí)是由上面積分電路產(chǎn)生的。因?yàn)?,除了FET,數(shù)字品體管對(duì)于電壓轉(zhuǎn)換的延時(shí)取決于FET門(mén)的容量。綜上所述,我們可以得到較完整的馬達(dá)驅(qū)動(dòng)電路。下圖即為左馬達(dá)的驅(qū)動(dòng)電路圖。它除了包含積分電路和由FET組成的H橋電路外,還包含了正、反轉(zhuǎn)變換電路。電路圖中,PB1是PWM的終端,PB2可以改變馬達(dá)的正、反轉(zhuǎn)。當(dāng)接口PB1信號(hào)為“0”時(shí),可以實(shí)現(xiàn)馬達(dá)制動(dòng);為“1”時(shí),執(zhí)行接口PB2能夠?qū)崿F(xiàn)的操作。而對(duì)于PB2的信號(hào)而言,為“0”時(shí),馬達(dá)正轉(zhuǎn);為“1”時(shí),馬達(dá)反轉(zhuǎn)。電路中還采用了分別由74HC08和74HC32實(shí)現(xiàn)的與門(mén)電路和或門(mén)電路。圖12電路分析:品體管元件TR5、TR6、TR7、TR8可以分別將0V—5V的電壓信號(hào)轉(zhuǎn)換為10V—0V的電壓信號(hào)。當(dāng)PB1的信號(hào)由“0”變?yōu)椤?”時(shí),F(xiàn)ET2的門(mén)電壓由10V變?yōu)?V,F(xiàn)ET2斷開(kāi)。然而,由于FET2自身延時(shí)的作用,F(xiàn)ET2的斷開(kāi)將會(huì)被拖延。此時(shí),由于FET1和FET2均斷開(kāi),馬達(dá)將進(jìn)入自由狀態(tài)。由于積分電路也會(huì)產(chǎn)生延時(shí),F(xiàn)ET1的門(mén)電壓將會(huì)在自身延時(shí)和積分電路產(chǎn)生的50us延時(shí)后由10V變?yōu)?V,F(xiàn)ET1接通。相反,當(dāng)PB1的信號(hào)由“1”變?yōu)椤?”時(shí),F(xiàn)ET1的門(mén)電壓由0V變?yōu)?0V,F(xiàn)ET1斷開(kāi)。同樣由于FET1自身的延時(shí)作用,F(xiàn)ET1的斷開(kāi)將也將會(huì)被拖延。此時(shí),由于FET1和FET2均斷開(kāi),馬達(dá)也會(huì)進(jìn)入自由狀態(tài)。由于積分電路也會(huì)產(chǎn)生延時(shí),F(xiàn)ET2的門(mén)電壓將會(huì)在自身延時(shí)和積分電路產(chǎn)生的50us延時(shí)后由0V變?yōu)?0V,F(xiàn)ET2接通。對(duì)FET3和FET4的分析與FET1和FET2類似。雖然馬達(dá)驅(qū)動(dòng)電路能很好的滿足控制要求,可是,在過(guò)程中卻去出現(xiàn)了暫時(shí)無(wú)法控制的自由狀態(tài)。自由狀態(tài)是為了避免短路,而由積分電路產(chǎn)生的。因此,在程序中無(wú)法控制這個(gè)自由狀態(tài)。改變積分電路中電阻和電容的值,就可以改變自由狀態(tài)存在的時(shí)間。2.5伺服舵機(jī)控制電路伺服舵機(jī)(如圖13所示)為模型車的前輪轉(zhuǎn)向機(jī)構(gòu),是模型車不可或缺的重要組成部分。其轉(zhuǎn)動(dòng)范圍、響應(yīng)速度及動(dòng)作準(zhǔn)確性均會(huì)對(duì)模型車的運(yùn)行狀態(tài)產(chǎn)生較大影響。伺服舵機(jī)的控制方法仍采用PWM控制,這樣不僅能夠保證動(dòng)作的準(zhǔn)確性,而且便于實(shí)現(xiàn)。加載到伺服舵機(jī)的脈沖周期為16ms,并且伺服舵機(jī)的轉(zhuǎn)角大小取決于脈沖的接通寬度。伺服舵機(jī)的旋轉(zhuǎn)角度與接通脈寬之間的關(guān)系為:當(dāng)接通脈寬為0.7ms時(shí),伺服舵機(jī)向左旋轉(zhuǎn)90度;當(dāng)接通脈寬為1.5ms時(shí),伺服舵機(jī)位于中心位置;當(dāng)接通脈寬為2.3ms時(shí),伺服舵機(jī)向右旋轉(zhuǎn)90度。控制該伺服舵機(jī)的PWM信號(hào)由H8微處理器的復(fù)位同步脈寬調(diào)制模式產(chǎn)生。并且由接口B的第5位輸出。改變控制程序中的ITU4_BRB(ITU4寄存器中的緩沖寄存器)的值就可以實(shí)現(xiàn)對(duì)接通脈寬的調(diào)節(jié)。ZH50圖14ZH50伺服舵機(jī)的控制電路圖如圖14所示。雖然接口可以與伺服舵機(jī)的引腳1直接相連,但是或門(mén)電路仍然作為一個(gè)緩沖器而存在于電路中。因?yàn)椋?dāng)電源線錯(cuò)誤的與引腳1相連或者有噪聲混入且使端腳毀壞時(shí),如果采用直接相連的方法,微處理器的接口將被燒毀,那將是致命的。相比之下,如果采用74HC32作為緩沖器,由于它的結(jié)構(gòu)更簡(jiǎn)單、價(jià)格更便宜,即使毀壞,也不會(huì)造成太大的麻煩。伺服舵機(jī)的引腳2是電源供應(yīng)接口。當(dāng)為馬達(dá)提供電源的電池少于4節(jié)時(shí),JP1的上部短接,直接與電源連接。當(dāng)電池?cái)?shù)多于4節(jié)時(shí),為了避免電壓過(guò)高,供給給伺服舵機(jī)的電壓被3端調(diào)節(jié)器限定為6V,并且JP1的下部短接。2.6發(fā)光二極管電路馬達(dá)驅(qū)動(dòng)基板上連有3個(gè)發(fā)光二極管。其中,兩個(gè)(LED3和LED2)可以通過(guò)微處理器中的控制程序來(lái)控制其開(kāi)/關(guān)狀態(tài)。這兩個(gè)發(fā)光二極管的負(fù)極分別直接與微處理器的接口6和接口7相連,正極與電源相連。限流電阻為1千歐姆。顯而易見(jiàn),該電路中的導(dǎo)通電流I=(電源電壓一發(fā)光二極管的端電壓)/限流電阻。如果數(shù)字信號(hào)“0”從PB7輸出,發(fā)光二極管LED2負(fù)極電勢(shì)為0V,電流導(dǎo)通,發(fā)光二極管工作。如果數(shù)字信號(hào)“1”從PB7輸出,發(fā)光二極管LED2負(fù)極電勢(shì)為5V,兩端電壓為0V,電流不導(dǎo)通,發(fā)光二極管不工作。發(fā)光二極管LED3的工作原理與上述相同,不同之處是與接口6相連。
IFB&>圖152.7開(kāi)/關(guān)電路馬達(dá)驅(qū)動(dòng)基板上還有一個(gè)按鈕開(kāi)關(guān),其作用是使模型車由無(wú)限等待狀態(tài)躍變?yōu)殚_(kāi)始執(zhí)行主控制程序。該按鈕開(kāi)關(guān)通過(guò)10千歐姆的限流電阻與接口B的第0位(即PB0)相連。如果按鈕沒(méi)被按下,數(shù)字信號(hào)“1”將通過(guò)限流電阻輸入到PB0。相反,如果按鈕被按下,數(shù)字信號(hào)“0”將會(huì)通過(guò)接地端輸入到PB0。R1Oi0k圖162.8R1Oi0k眾所周知,提升驅(qū)動(dòng)系統(tǒng)的電壓可以提高馬達(dá)的旋轉(zhuǎn)速度。整個(gè)模型車系統(tǒng)系統(tǒng)采用8節(jié)AA型電池作為動(dòng)力源,電壓可以達(dá)到9.6V。而這8節(jié)電池為控制系統(tǒng)和驅(qū)動(dòng)系統(tǒng)所共享。對(duì)于馬達(dá),即使加載9.6V的電壓也不會(huì)出現(xiàn)故障。然而,由于CPU能夠保證正常工作的電壓僅在4.5V-5.5V之間,如果電壓高于5.5V,CPU將會(huì)損壞,如果電壓低于4.5V,CPU將會(huì)復(fù)位。因此,需要三端調(diào)節(jié)器(LM2940-5)將CPU控制系統(tǒng)電壓限定為5V。而LM350及其附件部分,將會(huì)產(chǎn)生供給給伺服舵機(jī)的6V恒定電壓。3MCU模型車的幾何模型、運(yùn)動(dòng)學(xué)模型和動(dòng)力學(xué)模型分析對(duì)MCU模型車的研究,除了要編寫(xiě)并調(diào)試相關(guān)的控制程序外,還要對(duì)其運(yùn)動(dòng)過(guò)程作深入的分析。模型車在賽道上的運(yùn)行過(guò)程包括較多種情況,其中最典型的為彎道制動(dòng)過(guò)程。對(duì)這些運(yùn)行情況的綜合分析,有利于我們更好地了解模型車的整個(gè)運(yùn)行過(guò)程,并為程序的編寫(xiě)提供充足的理論依據(jù)和科學(xué)的運(yùn)行參數(shù)。本文以轉(zhuǎn)彎過(guò)程為例,對(duì)模型車建立了相關(guān)的幾何模型、運(yùn)動(dòng)學(xué)模型及動(dòng)力學(xué)模型,并做了較詳細(xì)的分析。3?1模型車幾何模型的建立與分析:模型車的幾何模型如下:其左右后輪的中心距離T=0.14m,前后輪軸心距W=0.175m。圖17當(dāng)模型車轉(zhuǎn)彎時(shí),伺服舵機(jī)轉(zhuǎn)角與左右馬達(dá)PWM值之間應(yīng)保持一個(gè)確定的比例關(guān)系,使三者之間相互協(xié)調(diào),才能保證模型車在彎道以最佳狀態(tài)通過(guò),其關(guān)系可通過(guò)下面的推導(dǎo)方法得出。在轉(zhuǎn)彎過(guò)程中,左后輪、后輪軸中心、右后輪以及伺服舵機(jī)中心的軌跡為同心圓,并設(shè)其軌跡半徑分別為r1、r2、r3和r。同時(shí),設(shè)伺服舵機(jī)的轉(zhuǎn)角為0。根據(jù)圖18所示幾何關(guān)系,可得出r2與轉(zhuǎn)角0的關(guān)系為:tan0=W/r2而由r2又可得出半徑r1與r3的值:r1=r2-T/2;r3=r2+T/2若假設(shè)右馬達(dá)的速度比率為100,則可以求得舵機(jī)轉(zhuǎn)向時(shí)與之相匹配的左馬達(dá)的速度比率,其值為:r1/r3x100。利用上述方法,可以求出右馬達(dá)速度比率為100,舵機(jī)轉(zhuǎn)角從1度變至45度時(shí),左馬達(dá)相應(yīng)的速度比率值。并以表格形式列出(參見(jiàn)附件)。若右馬達(dá)的速度比率不是100,此時(shí)設(shè)為x,則左馬達(dá)的速度比率為:x/100x(r1/r3x100)。
圖18當(dāng)在程序中涉及到伺服舵機(jī)轉(zhuǎn)角時(shí),除了降低馬達(dá)轉(zhuǎn)速以外,還要盡可能使左右后輪滿足上述關(guān)系,以使伺服舵機(jī)和左右馬達(dá)在模型車運(yùn)行過(guò)程中達(dá)到相互協(xié)調(diào)的效果。上面討論的是舵機(jī)左轉(zhuǎn)時(shí),左右馬達(dá)的速度比率情況。對(duì)于舵機(jī)右轉(zhuǎn)的情況分析,與上述思想相同。如果舵機(jī)的中心值調(diào)節(jié)合適,因?yàn)槠渚哂袑?duì)稱性,可以通過(guò)將左轉(zhuǎn)時(shí)左右馬達(dá)的速度比率對(duì)換,即可得到右轉(zhuǎn)時(shí)與舵機(jī)轉(zhuǎn)角相對(duì)應(yīng)的速度比率值。3.2模型車動(dòng)力學(xué)模型的建立與分析:在模型車的整個(gè)運(yùn)動(dòng)過(guò)程中,其彎道的動(dòng)力學(xué)分析最具有代表性,難度也最大。本文以模型車彎道制動(dòng)過(guò)程為例,來(lái)建立其動(dòng)力學(xué)模型,并作簡(jiǎn)要分析。為了使對(duì)模型車的分析與汽車更接近,從而具有更深刻的實(shí)際意義,此處假設(shè)不存在舵機(jī),模型車的轉(zhuǎn)向依靠左前輪和右前輪的自身轉(zhuǎn)向來(lái)實(shí)現(xiàn)。由于模型車的重量較實(shí)際汽車的重量輕許多倍,這樣的假設(shè)并不會(huì)對(duì)模型車的理論分析造成太大的誤差。當(dāng)模型車在水平的彎道上等速行駛時(shí),擬作如下的假設(shè):1)模型車是做平行于路面的平面運(yùn)動(dòng),即只有前進(jìn)運(yùn)動(dòng)、側(cè)向運(yùn)動(dòng)和繞垂直軸的橫擺運(yùn)動(dòng)。不考慮其俯仰運(yùn)動(dòng)和側(cè)傾運(yùn)動(dòng),及制動(dòng)時(shí)負(fù)荷的前后轉(zhuǎn)移。但計(jì)及了做圓周運(yùn)動(dòng)時(shí)由于向心加速度引起的左右負(fù)荷轉(zhuǎn)移。2)不考慮制動(dòng)過(guò)程中賽道摩擦系數(shù)的變化,即認(rèn)為附著系數(shù)為常數(shù)。3)只考慮滾動(dòng)阻力。4)在制動(dòng)過(guò)程中,當(dāng)某一車輪(i輪)達(dá)到附著極限工況時(shí),認(rèn)為該車輪所受的縱向力、側(cè)向力和垂直力滿足下面的關(guān)系:F2+(mF)2=(甲F)式中F、F"七分別表示作用于車輪上的縱向力、側(cè)向力和垂直力,單位N;中表示縱向道路附著系數(shù);m表示輪胎系數(shù)。下圖為模型車彎道制動(dòng)動(dòng)力學(xué)模型。oxyz為固結(jié)于模型車上的動(dòng)坐標(biāo),o為模型車的重心;x軸、z軸處于模型車縱向垂直于地面的中平分面內(nèi),z軸過(guò)模型車垂心垂直于地面,指向下放為正;x軸過(guò)重心平行于地面,指向模型車前進(jìn)方向?yàn)檎?;y軸過(guò)重心,面對(duì)模型車前進(jìn)方向時(shí),指向右側(cè)為正。根據(jù)右手定則確定模型車?yán)@z軸的橫擺角速度丫的正方向?yàn)轫槙r(shí)針?lè)较颉D19該動(dòng)力學(xué)模型中,模型車具有三個(gè)自由度:沿x軸的縱向運(yùn)動(dòng)V;沿y軸的側(cè)向運(yùn)動(dòng)v;繞z軸的轉(zhuǎn)動(dòng)丫。根據(jù)達(dá)朗貝爾原理,可得到三自由度的模型車運(yùn)動(dòng)方程:EF=M(V-Yv)x<EF=M(v-YV)
勇吃」Y
式中M——模型車總質(zhì)量,單位kg;V一模型車質(zhì)心處速度在動(dòng)坐標(biāo)系中沿x軸方向的速度分量,單位m/s;v一模型車質(zhì)心處速度在動(dòng)坐標(biāo)系中沿y軸方向的速度分量,單位m/s;『——模型車?yán)@z軸的橫擺角速度,單位rad/s;模型車對(duì)Z軸的慣性矩,單位kg.m2。設(shè)F/L2,3,4)為作用于各輪上的地面制動(dòng)力(N),其值為:fFfFF=〈PBi腫FziF<9FmziF>9FMizi制動(dòng)器制動(dòng)力,N;F——各輪所受的垂直負(fù)荷,N。由于模型車前輪無(wú)制動(dòng),即F和F均為0,因此前輪的地面制動(dòng)力為0。而模型車MiM2的后輪轉(zhuǎn)速是靠PWM值控制的。改變驅(qū)動(dòng)后輪的PWM值,就可以改變后輪的轉(zhuǎn)速。模型車后輪速度改變的過(guò)程,即為模型車的制動(dòng)過(guò)程。其制動(dòng)力的大小與PWM值的改變程度、齒輪嚙合的緊密性及馬達(dá)的響應(yīng)速度密切相關(guān)。設(shè)車輪的滾動(dòng)阻力為F,其值為:F=fMg,式中f為滾動(dòng)阻力系數(shù)。設(shè)E(i=1,2,3,4)為各輪所受的側(cè)向力,取輪胎系數(shù)m=1,其計(jì)算公式為:ka
::二7(9F)2一FM0F2+(ka)2<(9F)2F2+(ka)2>(9F)2且F<9FFka
::二7(9F)2一FM0而各側(cè)偏角的計(jì)算公式如下:v+v+a?yQa=oV+*y2v一b?y
a=V+?y23V-*12y23V-*12y2V-34?y2"2、134分別表示前后軸輪距,單位為m。而o代表前輪平均轉(zhuǎn)角,單位為rad。a、b分別表示前輪軸心到重心的距離和后輪軸心到重心的距離,單位為m。其中,模型車各輪垂直負(fù)荷的確定方法如下:當(dāng)模型車處于靜平衡狀態(tài)時(shí),各輪的靜載荷為:F=F=業(yè)一MgF=F=^—Mgz10z202Lz30z402L當(dāng)模型車轉(zhuǎn)彎行駛時(shí)(右側(cè)),左側(cè)車輪負(fù)荷增大,右側(cè)車輪負(fù)荷減小,左右各輪負(fù)荷轉(zhuǎn)移量為:△Fz11=—△Fz12Chb+—hL1M+—MMh)—s巨1t12.(v+YV)=(+1匕1+匕2T—Mg△Fz31=—△Fz41C/m2ha+—hL2M1LL2M-我\.l(v+yV)=(+2匕1+匕2—M,g+,-MR2t34其中,C甲1、C史——前后懸架側(cè)傾角剛度,N?m/rad;h中一一模型車懸掛質(zhì)量質(zhì)心至側(cè)傾軸線的距離,m;h1、h2——前后側(cè)傾中心離地高度,m;M、M一一前后非懸掛質(zhì)量,kg;|J1|J2h卬、h“——前后非懸掛質(zhì)量質(zhì)心至側(cè)傾軸線的距離,m;M、一一模型車的懸掛質(zhì)量,kg;L一模型車前后輪軸的中心距離,m。因此,可知在模型車轉(zhuǎn)彎制動(dòng)過(guò)程中,各輪所受的垂直動(dòng)負(fù)荷為:F=F+F(i=1,2,3,4)也就是說(shuō):F=z1M.「心cTJ/T71/C91h9-+b—hL1+M——^1MshR1M)st12.-(v+YV)Lbg—H(V—Yv)]+(2LC卬1+C92—MgF=z2M.C91h9+b—hL1+M——Mshr1)M.(v+YV)2lLbg-H(V-Yv)]-(91+C92—Msh9gst12F=z3M.2ltag+H(V—Yv)]+(91+C92h9C—M92Rg+ah2+MR2MshR2M)st34.:(v+YV)F=z4M.匕人+a+Mnc_rM)「t34.l(v+YV)Lag+H(V—Yv)]—(2LC91+929C92—M/9ghL2任2MshR2綜上所述,我們可以得到模型車在彎道制動(dòng)過(guò)程中的動(dòng)力學(xué)模型方程:-(F+F)cos8-(E+E)sin8-F-F-F=M(V-yv)(E1+E)cos8-(F+F)sin8+E+E=M(v+yV)vt[(E+E)cos8-(F+F)sin8]a+[(F一F)cos8+(E一E)sin8]-^+12B1B2B2B1212t.(F-F)f-(E+E)b=Iy通常情況下,模型車是由直道進(jìn)入彎道的,因此模型車進(jìn)入彎道時(shí)的初始條件為:V=V,v=0,y=0,V'=0,v=0,y'=0。可利用四階龍格庫(kù)塔法求解有0m00000關(guān)初值的問(wèn)題,此處不作介紹。模型車在彎道的行駛過(guò)程為先做彎道制動(dòng)運(yùn)動(dòng),穩(wěn)定后再做勻速圓周運(yùn)動(dòng)。上面已經(jīng)對(duì)彎道減速制動(dòng)過(guò)程的動(dòng)力學(xué)模型做了詳盡敘述,隨后的勻速圓周運(yùn)動(dòng)過(guò)程與彎道減速制動(dòng)過(guò)程的分析方法相似,且比較簡(jiǎn)單,此處同樣不做過(guò)多分析。3.3模型車運(yùn)動(dòng)學(xué)模型的建立與分析:此處同樣以模型車在彎道的運(yùn)動(dòng)過(guò)程為例,進(jìn)行建模分析。不考慮模型車的彎道制動(dòng)過(guò)程,只分析其做勻速圓周運(yùn)動(dòng)的過(guò)程。模型車在彎道的理想運(yùn)動(dòng)狀態(tài)是模型車舵機(jī)產(chǎn)生擺角后的運(yùn)動(dòng)軌跡與圓弧賽道為一組同心圓。設(shè)傳感器基板中心運(yùn)動(dòng)軌跡半徑為R,舵機(jī)中心運(yùn)動(dòng)軌跡半徑為1,圓弧賽道中心半徑為‘°,傳感器基板中心至圓弧賽道中心的距離為d,舵機(jī)中心全傳感器基板中心的距離為1。假設(shè)模型車在彎道運(yùn)行過(guò)程中,傳感器的狀態(tài)保持不變,也就是說(shuō),舵機(jī)以恒定的擺角通過(guò)彎道,則其運(yùn)動(dòng)學(xué)模型簡(jiǎn)圖如下:圖20由于賽道為指定的賽道,則其彎角中心軌道的半徑,。已知。而1和d的值可以通過(guò)測(cè)量獲得。又根據(jù)幾何關(guān)系得出:R-‘=d,r=\R2+12且W/r=sin0。將上式聯(lián)立,可得到模型車在理想狀態(tài)下彎道運(yùn)行的最佳舵機(jī)擺角值:0=arcsinK=arcsin.叱「=arcsin,叱r\R2+l2\.'(r+d)2+l2并且,可以根據(jù)舵機(jī)擺角值求出與之相關(guān)的左右馬達(dá)的速度之比。然而,模型車在賽道上的運(yùn)行情況受到諸如:進(jìn)入彎道前的直道速度、彎道制動(dòng)過(guò)程、輪胎與賽道表面的摩擦系數(shù)、舵機(jī)的響應(yīng)速度等一系列因素的影響,其理論值并不能很好的滿足其運(yùn)行狀態(tài)。因此,必須通過(guò)大量的實(shí)驗(yàn)對(duì)其理論值進(jìn)行修改和校正,才能的到滿意的運(yùn)行結(jié)果。至此,我們已經(jīng)完成了對(duì)模型車在賽道上運(yùn)行的典型過(guò)程(即:彎道運(yùn)行過(guò)程)的幾何模型分析、動(dòng)力學(xué)模型分析和運(yùn)動(dòng)學(xué)模型分析。而根據(jù)對(duì)彎道運(yùn)行過(guò)程的建模與分析,我們又可以很容易得到模型車在任何運(yùn)行情況下的模型,并能對(duì)其做出科學(xué)的理論分析。這對(duì)于模型車運(yùn)行狀態(tài)的研究有著至關(guān)重要的作用,并能依此對(duì)各運(yùn)行狀態(tài)編寫(xiě)相關(guān)的控制程序,最后經(jīng)過(guò)綜合得到能使模型車在指定賽道上順利運(yùn)行的主控制程序。4MCU模型車在指定軌道上運(yùn)行的程序設(shè)計(jì)MCU模型車是在預(yù)先設(shè)定好的具有明顯黑白條紋的賽道上運(yùn)行的,具有自動(dòng)識(shí)別功能的MCU汽車模型。它的自動(dòng)識(shí)別控制主要靠輸入到瑞薩科技所生產(chǎn)的單片機(jī)芯片中的控制程序來(lái)實(shí)現(xiàn)。由于模型車組件較多,結(jié)構(gòu)較復(fù)雜,且功能多樣,其中任何一部分出現(xiàn)問(wèn)題都將會(huì)影響模型車的正常運(yùn)行。為了保證各部分均能按指定的要求工作,我們還需要對(duì)每個(gè)部分分別進(jìn)行調(diào)試。因此,特為其編寫(xiě)了兩組程序,分別為測(cè)試程序kit05test.c和主程序kit05.c。由于單片機(jī)不能直接執(zhí)行C/C++程序,必須將編好的測(cè)試程序kit05test.c和主程序kit05.c進(jìn)行轉(zhuǎn)換后才能夠輸入到單片機(jī)中。以主程序的轉(zhuǎn)換過(guò)程為例:已經(jīng)編好的程序kit05start.src與kit05.c分別經(jīng)過(guò)匯編和編譯后,生成的文件kit05start.obj和kit05.obj再與文件kit05.sub進(jìn)行連接,生成kit05.abs,然后再將其進(jìn)行編譯就可以得到瑞薩單片機(jī)所能執(zhí)行的kit05.mot文件。首先,介紹一下程序中定義的一些變量的意義及其計(jì)算方法。#defineTIMER_CYCLE3071#definePWM_CYCLE49151#defineSERVO_CENTER4585#defineHANDLE_STEP26#defineMASK2_20x66#defineMASK2_00x60#defineMASK0_20x06#defineMASK3_30xe7#defineMASK0_30x07#defineMASK3_00xe0#defineMASK4_00xf0#defineMASK0_40x0f#defineMASK1_10x81ITU標(biāo)志著CPU操作時(shí)鐘的時(shí)間。而TIMER_CYCLE是在ITU0寄存器中設(shè)置一毫秒時(shí)間所需要的值,它將會(huì)被存放到變量ITU0_GRA(通用寄存器A)中,通過(guò)與ITU0_CNT(定時(shí)器計(jì)數(shù)器)進(jìn)行比較來(lái)設(shè)定這1ms的時(shí)鐘周期。ITU0_CNT好比時(shí)鐘的秒針,每隔一段確定的時(shí)間間隔,其值就會(huì)增加1。它是一個(gè)標(biāo)準(zhǔn)值。此處,我們需要讓它循環(huán)一次的時(shí)間為一毫秒。單片機(jī)上石英晶體的固有頻率為①=24.576MHz,我們?nèi)∑漕l率的1/8,則每一次計(jì)數(shù)的時(shí)間間隔T=1/f=325.52ns。由于我們要設(shè)置的時(shí)間為1ms,因此,需要3072次計(jì)數(shù),即ITU0_CNT=3072時(shí),結(jié)束一個(gè)循環(huán)周期。但是,根據(jù)ITU的標(biāo)準(zhǔn)執(zhí)行程序,知道只有當(dāng)“ITU0_CNT=ITU0_GRA+1”時(shí),才產(chǎn)生一次中斷,即經(jīng)過(guò)一個(gè)時(shí)鐘周期。因此,需要使ITU0_GRA=3071,也就是說(shuō)TIMER_CYCLE=3071。PWM_CYCLE是控制PWM周期大小的變量,它被存放到ITU3_GRA(通用寄存器A)中,由于要加載到左馬達(dá)、右馬達(dá)和伺服舵機(jī)的PWM周期為16ms,而定時(shí)計(jì)數(shù)器ITU3_CNT與ITU3_GRA的標(biāo)準(zhǔn)關(guān)系為:當(dāng)滿足ITU3_CNT=ITU3_GRA+1的條件時(shí),產(chǎn)生一次中斷,ITU3_CNT(ITU3寄存器的定時(shí)計(jì)數(shù)器)循環(huán)一個(gè)周期,該周期即為PWM的周期值。而又知ITU3_CNT=(16x10-3)+[1;(①+8)]=49152。因此,需要使ITU3_GRA=49151,也就是說(shuō)PWM_CYCLE=49151。變量SERVO_CENTER是在程序中控制伺服舵機(jī)面向前方(即:轉(zhuǎn)角為0)的值。而上面提到,伺服舵機(jī)的PWM周期為16ms,當(dāng)接通脈寬大約為1.5ms時(shí),舵機(jī)面向正前方,所以變量SERVO_CENTER的值應(yīng)該為(1.5x10-3);[1;(①;8)]=4608。然而,由于伺服舵機(jī)在生產(chǎn)過(guò)程中受各種因素的影響,不可能使每一個(gè)舵機(jī)的中心值均與理想值相同。因此,要使舵機(jī)在轉(zhuǎn)角值恰為中心值SERVO_CENTER時(shí),面向正前方,還需要對(duì)理論值進(jìn)行調(diào)試校正。經(jīng)過(guò)調(diào)試后,將該值取為4585。HANDLE_STEP是舵機(jī)旋轉(zhuǎn)1度時(shí),程序中與之對(duì)應(yīng)的舵機(jī)轉(zhuǎn)角值應(yīng)增大或減小的幅度。對(duì)于伺服舵機(jī)而言,PWM的接通脈寬為2.3ms時(shí)舵機(jī)向右旋轉(zhuǎn)90度,程序中與之對(duì)應(yīng)的轉(zhuǎn)角值為(2.3x10-3)+[1H①+8)]=7065;PWM的接通脈寬為0.7ms時(shí)舵機(jī)向左旋轉(zhuǎn)90度,程序中與之對(duì)應(yīng)的轉(zhuǎn)角值為(0.7x10-3)-[1-(①;8)]=2150。兩值之差4915即為舵機(jī)旋轉(zhuǎn)180度時(shí)要改變的程控值。因此,舵機(jī)旋轉(zhuǎn)1度要改變的程控值為27。然而此處變量HANDLE_STEP的值定義為26,是為了保持其兼容性。MASK2_0是一個(gè)十六進(jìn)制的值,它標(biāo)志著對(duì)傳感器輸入狀態(tài)的限制。其意義為:傳感器基板上的左側(cè)4個(gè)傳感器中的兩個(gè)傳感器輸出值和右側(cè)4個(gè)傳感器中的0個(gè)傳感器輸出值可以被正常使用,其余的全部被掩蓋,值為0。MASK2_0定義為:傳感器基板上除了第6、5位的輸出值可以正常使用外,其余各位的輸出值均被“0”覆蓋。同理,MASK2_2定義為:傳感器基板上除了第6、5、2、1位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK0_2定義為:傳感器基板上除了第2、1位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK3_3定義為:傳感器基板上除了第7、6、5、2、1、0位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK0_3定義為:傳感器基板上除了第2、1、0位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK3_0定義為:傳感器基板上除了第7、6、5位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK4_0定義為:傳感器基板上除了第7、6、5、4位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK0_4定義為:傳感器基板上除了第3、2、1、0位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。MASK1_1定義為:傳感器基板上除第7、0位的輸出值可以被正常使用外,其余各位的輸出值均被“0”覆蓋。為簡(jiǎn)化程序的設(shè)計(jì)結(jié)構(gòu),程序中還用到一些函數(shù)。這里,對(duì)這些函數(shù)的具體內(nèi)容及作用作簡(jiǎn)單介紹。位轉(zhuǎn)換函數(shù)charunsignedbit_change(charunsignedin){unsignedcharret;inti;for(i=0;i<8;i++){ret>>=1;ret|=in&0x80;in<<=1;}returnret;}函數(shù)中,變量“in”是位轉(zhuǎn)換前的8位二進(jìn)制數(shù)值,變量ret是經(jīng)過(guò)位轉(zhuǎn)換后函數(shù)的返回值。該函數(shù)的功能是將8位二進(jìn)制數(shù)的前后對(duì)稱的二進(jìn)制位兩兩互換。其實(shí)現(xiàn)過(guò)程如下:先將變量ret右移一位,使第7位為0,第0位消失。隨后,對(duì)變量ret的第7位與輸入變量in的第7位進(jìn)行或操作,并將取或后的值存到前者中。由于ret的第7位通常為“0”。因此,或操作后,變量ret的第7位中存放的值就是輸入?yún)?shù)in的第7位的值。最后,將變量in左移一位,結(jié)束一次循環(huán)。如此循環(huán)8次后,就能實(shí)現(xiàn)函數(shù)預(yù)定的位轉(zhuǎn)換功能。傳感器狀態(tài)讀取函數(shù)unsignedcharsensor_inp(unsignedcharmask){unsignedcharsensor;sensor=P7DR;sensor=bit_change(sensor);sensor&=mask;returnsensor;}因?yàn)閭鞲衅髯踊宓妮敵龆伺cCPU主板的接口7相連,所以傳感器值由接口7輸入并將該值存放到變量sensor中。函數(shù)的輸入?yún)?shù)mask可以限制傳感器的輸入狀態(tài),將制定的傳感器位覆蓋為“0”。由于如今的傳感器基板的第0位在最左側(cè),第7位在最右側(cè)(與之前的傳感器基板相反),為了保持其兼容性,變量sensor中的值經(jīng)過(guò)位轉(zhuǎn)換后再次存儲(chǔ)到sensor中。經(jīng)過(guò)位轉(zhuǎn)換后的傳感器值與函數(shù)的輸入?yún)?shù)mask進(jìn)行與操作,最終就可得到需要的傳感器狀態(tài)值,并存放到變量sensor中,作為返回值。interrupt_timer0函數(shù)voidinterrupt_timer0(void){ITU0_TSR&=0xfe;cnt0++;cnt1++;該函數(shù)通過(guò)中斷產(chǎn)生1ms的時(shí)間間隔來(lái)執(zhí)行,變量cnt0和cntl的值分別增加1。由于interrupt_timer0函數(shù)執(zhí)行一次需要1ms,因此可以通過(guò)檢測(cè)主程序中cnt0或cntl的值來(lái)測(cè)量所持續(xù)的時(shí)間。變量ITU0_TSR表示計(jì)時(shí)器狀態(tài)寄存器,它與0xfe執(zhí)行與操作,并將結(jié)果保存到前者中,相當(dāng)于將ITU0_TSR的第0位置“0”。之所以要在函數(shù)中編寫(xiě)這一句,是因?yàn)楫?dāng)中斷產(chǎn)生時(shí)ITU0_TSR的第0位可以自動(dòng)地變?yōu)椤?”,但是卻不會(huì)再自動(dòng)的由“1”變?yōu)椤?”。因此要利用與操作使第0位置“0”,為下一次操作做準(zhǔn)備。等待計(jì)時(shí)器函數(shù)voidtimer(unsignedlongtimer_set){cnt0=0;While(cnt0<timer_set);}改變函數(shù)輸入?yún)?shù)timer_set的值,可以改變等待計(jì)時(shí)器的工作時(shí)間。例如:取輸入?yún)?shù)timer_set的值為1000,全局變量cnt0首先被初始化為0,接著執(zhí)行while語(yǔ)句,程序轉(zhuǎn)到cnt0被操作的地方,由于執(zhí)行interrupt_timer0函數(shù)而產(chǎn)生的1ms中斷將使cnt0的值增加1。然后,再次執(zhí)行while語(yǔ)句,如此往復(fù)循環(huán),直至cnt0的值為1000時(shí)終止,最后可以得出等待計(jì)時(shí)器函數(shù)的工作時(shí)間為1000毫秒,即1s。橫白線檢測(cè)函數(shù)intcheck_crossline(void){unsigndecharb;intret;ret=0;b=sensor_inp(MASK2_2);if(b=0x66||b=0x64||b=0x26||b=0x62||b=0x46){ret=1;}returnret;}該函數(shù)為無(wú)參數(shù)函數(shù),主要用來(lái)判斷是否已經(jīng)檢測(cè)到直角彎道前具有提示作用的第一條橫白線。如果檢測(cè)到橫白線,返回值為1。相反,如果沒(méi)有檢測(cè)到橫白線,則返回值為0。函數(shù)中,首先將作為返回值的變量ret置0,認(rèn)為沒(méi)有檢測(cè)到橫白線。然后,讀取經(jīng)MASK2_2掩蓋后的傳感器狀態(tài),并將該狀態(tài)值存入變量b中。也就是說(shuō),除了左側(cè)中間兩個(gè)和右側(cè)中間兩個(gè)傳感器的數(shù)據(jù)能正常使用外,其余各位傳感器輸出值均被置為“0”。當(dāng)變量b中傳感器的輸入狀態(tài)滿足if語(yǔ)句中列舉的幾種狀態(tài)中的一種時(shí),就可以認(rèn)為已經(jīng)檢測(cè)到橫白線,變量ret置為1。否則,變量ret仍為0,認(rèn)為沒(méi)有檢測(cè)到橫白線。DIP開(kāi)關(guān)狀態(tài)讀取函數(shù)unsignedchardipsw_get(void){unsignedcharsw;sw=~P6DR;sw&=0x0f;returnsw;}由于DIP開(kāi)關(guān)與接口6相連,故從接口6讀取數(shù)據(jù)。如果DIP開(kāi)關(guān)關(guān)閉,則接口數(shù)據(jù)為“1”。如果DIP開(kāi)關(guān)打開(kāi),則接口數(shù)據(jù)為“0”。因?yàn)殛P(guān)閉與“0”對(duì)應(yīng),而打開(kāi)與“1”對(duì)應(yīng),更容易理解。因此這里采用符號(hào)“?”對(duì)DIP開(kāi)關(guān)的狀態(tài)值進(jìn)行取反,并將其存放到變量sw中?!?”稱為“邏輯否定”。由于DIP開(kāi)關(guān)只有4位,所以這里采用sw與0cf0的與操作將變量sw的前4位屏蔽。最后,將變量sw作為函數(shù)的返回值。按鈕開(kāi)關(guān)狀態(tài)讀取函數(shù)unsignedcharpushsw_get(void){unsignedcharsw;sw=~PBDR;sw&=0x01;returnsw;}接口B的第0位用來(lái)讀取按鈕開(kāi)關(guān)的狀態(tài)數(shù)據(jù)。如果按鈕沒(méi)被按下,數(shù)據(jù)為“1”。相反,如果按鈕被按下,則數(shù)據(jù)為“0”。這里同樣采用符號(hào)“?”對(duì)按鈕開(kāi)關(guān)的狀態(tài)值取反,以便符合人們的思維習(xí)慣,容易理解。由于按鈕開(kāi)關(guān)的狀態(tài)值只有一位,因此需要使用語(yǔ)句“sw&=0x01”對(duì)第0位以外的其余各位進(jìn)行屏蔽。最后,將變量sw作為函數(shù)的返回值輸出。發(fā)光二極管控制函數(shù)voidled_out(unsignedcharled){unsignedchardata;led=~led;led<<=6;data=PBDR&0x3f;PBDR=data|led;}對(duì)于發(fā)光二極管,接通時(shí)信號(hào)為“0”,斷開(kāi)時(shí)信號(hào)為“1”。因此,為了符合人的邏輯思維,同樣采用符號(hào)“?”,對(duì)其進(jìn)行取反,并將取反后的值仍存放在變量led中。由于發(fā)光二極管與接口B的第7位和第6位連接,而變量中的信號(hào)在第1位和第2位,因此要將變量led中的值左移6位。為了將信號(hào)輸入到接口B中而不引起誤動(dòng)作,首先要將接口B的第7位和第6位通過(guò)語(yǔ)句“data=PBDR&0x3f”置0,然后再利用對(duì)變量data和變量led的或操作將變量led中的值輸入到接口B中。這樣,就實(shí)現(xiàn)了對(duì)發(fā)光二極管的程序控制。馬達(dá)速度控制函數(shù)voidspeed(intaccele_l,intaccele_r){unsignedcharsw_data;unsignedlongspeed_max;sw_data=dipsw_get()+5;speed_max=(unsignedlong)(PWM_CYCLE-1)*sw_data/20;if(accele_l>=0)/*左馬達(dá)*/{PBDR&=0xfb;ITU3_BRB=speed_max*accele_l/100;}else{PBDR|=0x04;accele_l=-accele_l;ITU3_BRB=speed_max*accele_l/100;}if(accele_r>=0)/*右馬達(dá)*/{PBDR&=0xf7;ITU4_BRA=speed_max*accele_r/100;}else{PBDR|=0x08;accele_r=-accele_r;ITU4_BRA=speed_max*accele_r/100;}}與其它函數(shù)不同,該函數(shù)無(wú)返回值。由于左右馬達(dá)的速度控制為PWM控制,而PWM的值又受到模型車CPU主板上DIP開(kāi)關(guān)狀態(tài)的限制。因此,函數(shù)中首先調(diào)用“dipsw_get()”函數(shù),來(lái)獲得CPU主板上DIP開(kāi)關(guān)的狀態(tài)值,并將其值加5后存放到變量sw_data中。這樣變量sw_data的值就位于5至20之間,并取決于DIP開(kāi)關(guān)的狀態(tài)值。在運(yùn)用變量sw_data計(jì)算馬達(dá)的最大速度時(shí),由于計(jì)算過(guò)程中,數(shù)值較大,可能會(huì)造成溢出,而使結(jié)果發(fā)生錯(cuò)誤。因此,暫時(shí)將其定為無(wú)符號(hào)變量,來(lái)防止發(fā)生溢出,保證結(jié)果的正確性。左馬達(dá)的轉(zhuǎn)速控制過(guò)程如下:首先檢測(cè)輸入?yún)?shù)accele_l是否大于等于0。如果大于等于0的話,則將接口B的第2位置0,使馬達(dá)正轉(zhuǎn)。接著,計(jì)算左馬達(dá)的工作比率。雖然,工作比率的設(shè)置似乎是靠通用寄存器B來(lái)完成的,而實(shí)際上,在程序中是靠緩沖寄存器B(ITU3_BRB)來(lái)實(shí)現(xiàn)的。要注意,通過(guò)速度函數(shù)設(shè)置的比率并不直接輸出到馬達(dá),而是將“DIP的比率速度函數(shù)設(shè)置的比率”輸出到馬達(dá)作為控制信號(hào)。如果accele_l小于0的話,則將接口B的第2位置1,使馬達(dá)反轉(zhuǎn)。隨后將輸入?yún)?shù)accele_l取相反數(shù),然后再進(jìn)行工作比率的計(jì)算,其計(jì)算方法與正轉(zhuǎn)時(shí)的算法相同。對(duì)于右馬達(dá)的轉(zhuǎn)速控制分析,與左馬達(dá)非常相似。不同之處為:控制右馬達(dá)正、反轉(zhuǎn)的信號(hào)由接口B的第3位輸出,并且對(duì)右馬達(dá)工作比率的設(shè)置是依靠ITU4_BRA(ITU4寄存器中的緩沖寄存器A)來(lái)實(shí)現(xiàn)的。伺服舵機(jī)轉(zhuǎn)角控制函數(shù)voidhandle(intangle){ITU4_BRB=SERVO_CENTER-angle*HANDLE_STEP;}伺服舵機(jī)與接口B的第5位相連。由于采用了復(fù)位同步脈寬調(diào)制模式,改變緩沖寄存器B(ITU4_BRB)的值就可以改變PB5的工作比率,從而改變舵機(jī)的轉(zhuǎn)角值。SERVO_CENTER是伺服舵機(jī)的中心值,其對(duì)應(yīng)舵機(jī)的轉(zhuǎn)角值為0度。存放在輸入?yún)?shù)angle中的唯一轉(zhuǎn)角值是舵機(jī)由0度開(kāi)始,需要轉(zhuǎn)動(dòng)的角度。其實(shí)現(xiàn)方法為:在中心值的基礎(chǔ)上增加或減少相應(yīng)的值,并存放到ITU4_BRA中。然而,緩沖寄存器B(ITU4_BRB)中的一個(gè)單位并不代表一度。在變量HANDLE_STEP中,存放著1度轉(zhuǎn)角所對(duì)應(yīng)的值。因此,需要將變量angle與變量HANDLE_STEP相乘后,再在SERVO_CENTER的基礎(chǔ)上進(jìn)行加減。初始化函數(shù)voidinit(void){P1DDR=0xff;/*I/O接口設(shè)置*/P2DDR=0xff;P3DDR=0xff;P4DDR=0xff;P5DDR=0xff;P6DDR=0xf0;P8DDR=0xff;P9DDR=0xf7;PADDR=0xff;PBDR=0xc0;PBDDR=0xfe;ITU0_TCR=0x23;/*ITU0每一秒產(chǎn)生一次中斷*/ITU0_GRA=TIMER_CYCLE;ITU0_IER=0x01;ITU3_TCR=0x23;/*左右馬達(dá)和伺服舵機(jī)的ITU3、*/ITU_FCR=0x3e;/*ITU4復(fù)位同步脈寬調(diào)制模式*/ITU3_GRA=PWM_CYCLE;ITU3_GRB=ITU3_BRB=0;ITU4_GRA=ITU4_BRA=0;ITU4_GRB=ITU4_BRB=SERVO_CENTER;ITU_TOER=0x38;/*ITU開(kāi)始計(jì)時(shí)*/ITU_STR=0x09;}I/O接口是輸入/輸出接口的簡(jiǎn)稱,是執(zhí)行輸入和輸出操作的地方。這里共有11個(gè)接口,分別為接口1至接口B。其中,大部分接口為8位,也有一些是少于8位的(例如:接口5只有4位,接口6只有7位,接口8只有5位,接口9只有6位。)。這些接口分別由DDR寄存器和DR寄存器組成。但是,要注意接口7是一個(gè)多余的輸入接口,沒(méi)有相關(guān)的P7DDR寄存器。DDR是“數(shù)據(jù)方向寄存器”的簡(jiǎn)稱,它決定輸入——輸出的方向。二進(jìn)制位為“0”時(shí),表示相應(yīng)的引腳為輸入引腳。二進(jìn)制位為“1”時(shí),表示相應(yīng)的引腳為輸出引腳。以程序中的“PBDDR=0xfe;”語(yǔ)句為例進(jìn)行分析:它是對(duì)接口B各引腳進(jìn)行的輸入/輸出設(shè)置,將十六進(jìn)制數(shù)0xfe轉(zhuǎn)換成二進(jìn)制數(shù)為“11111110",它表示接口B的第1位至第7位引腳均為輸出引腳,只有第0位引腳為輸入引腳。DR是“數(shù)據(jù)寄存器”的簡(jiǎn)稱,它可以將數(shù)據(jù)輸出到引腳或從引腳輸入。對(duì)于被設(shè)置為輸入接口(DDR=0)的引腳,通過(guò)讀取數(shù)據(jù)寄存器DR中的數(shù)據(jù)來(lái)獲得引腳的電壓水平:輸入給引腳的電壓為低電平時(shí),數(shù)據(jù)寄存器DR中相應(yīng)的二進(jìn)制位為“0”;輸入給引腳的電壓為高電平時(shí),數(shù)據(jù)寄存器DR中相應(yīng)的二進(jìn)制位為“1”。而對(duì)于被設(shè)置為輸出接口(DDR=1)的引腳,通過(guò)向DR寫(xiě)入數(shù)據(jù)來(lái)輸出引腳的電壓水平:從引腳輸出的電壓為低電平時(shí),向數(shù)據(jù)寄存器DR中相應(yīng)的二進(jìn)制位寫(xiě)入“0”;從引腳輸出的電壓為高電平時(shí),向數(shù)據(jù)寄存器DR中相應(yīng)的二進(jìn)制位寫(xiě)入“1”。因此,程序中的“PBDR=0xco;”語(yǔ)句表示:接口B的引腳6和引腳7為高電平,其余引腳均為低電平。下面以表格的形式介紹一下接口B所連接的具體信號(hào)及其作用,以便對(duì)程序中為何如此設(shè)置PBDDR和PBDR的初始值有所了解。馬達(dá)驅(qū)動(dòng)基板接口引腳信號(hào)方向具體信號(hào)內(nèi)容二進(jìn)制值“0”代表的意義二進(jìn)制值“1”代表的意義1+5V2PB7至基板發(fā)光二極管LED1接通斷開(kāi)3PB6至基板發(fā)光二極管LED0接通斷開(kāi)4PB5至基板伺服舵機(jī)信號(hào)PWM信號(hào)5PB4至基板右馬達(dá)PWM停止PWM運(yùn)動(dòng)6PB3至基板右馬達(dá)旋轉(zhuǎn)方向正轉(zhuǎn)反轉(zhuǎn)7PB2至基板左馬達(dá)旋轉(zhuǎn)方向正轉(zhuǎn)反轉(zhuǎn)8PB1至基板左馬達(dá)PWM停止PWM運(yùn)動(dòng)9基板至PB0按鈕按下未按下10接地初始化程序的后一部分是對(duì)ITU0寄存器進(jìn)行設(shè)置,使其每隔1ms就產(chǎn)生一次中斷,并設(shè)置左、右馬達(dá)和伺服舵機(jī)的PWM生成方式。程序中,ITU0_TCR(計(jì)時(shí)器控制寄存器)首先被初始化為0x23,隨后又令“ITU0_GRA=TIMER_CYCLE;”,其意義為:ITU0_CNT(計(jì)時(shí)計(jì)數(shù)器)可以與ITU0_GRA(通用寄存器A)進(jìn)行比較,而ITU0_CNT每隔特定的一段時(shí)間,其值就會(huì)增加1,當(dāng)滿足條件"ITU0_CNT=ITU0_GRA+1”時(shí),也就是說(shuō),經(jīng)過(guò)1ms后,ITU0_CNT的自身值將會(huì)再次被置為0,為下一次定時(shí)計(jì)數(shù)做準(zhǔn)備。ITU0_IER是計(jì)時(shí)器中斷允許寄存器,,“ITU0_IER=0x01;”表示允許寄存器產(chǎn)生中斷。程序最后的ITU_STR是計(jì)時(shí)器開(kāi)始寄存器,將其初始化為十六進(jìn)制數(shù)0x09,可以命令計(jì)時(shí)器開(kāi)始計(jì)時(shí)。控制左、右馬達(dá)和伺服舵機(jī)的PWM生成方式為復(fù)位同步脈寬調(diào)制模式。該模式采用ITU3寄存器和ITU4寄存器,通過(guò)結(jié)合輸出3組觸發(fā)的PWM波形。而且,這3組PWM波形的反波形也同時(shí)被輸出。但是,必須保證3組波形的周期均相同。因此,程序中首先將ITU3_TCR設(shè)置為十六進(jìn)制數(shù)0x23,即允許ITU3_CNT與ITU3_GRA進(jìn)行比較。而ITU3_CNT與ITU0_CNT一樣,每隔相同的一段時(shí)間,其值就會(huì)增加1。又由于ITU3_GRA=PWM_CYCLE,因此當(dāng)滿足條件"ITU3_CNT=ITU3_GRA+1”時(shí),已經(jīng)過(guò)16ms的時(shí)間,這個(gè)時(shí)間就是3組PWM波形共同具有的循環(huán)周期。程序中,語(yǔ)句“ITU_TOER=0x38”表明:對(duì)左、右馬達(dá)和伺服舵機(jī)進(jìn)行PWM控制的三組PWM波形是分別從接口PB1、PB4和PB5輸出的觸發(fā)產(chǎn)生的PWM波形的反波形。改變緩沖寄存器ITU3_BRB、ITU4_BRA和ITU4_BRB的值就可以改變通用寄存器ITU3_GRB、ITU4_GRA和ITU4_GRB的值,從而分別實(shí)現(xiàn)對(duì)左、右馬達(dá)和伺服舵機(jī)的PWM控制。其中,當(dāng)ITU3_CNT(ITU3_GRB+1)時(shí),PB1的輸出信號(hào)開(kāi)始翻轉(zhuǎn);當(dāng)ITU3_CNT(ITU4_GRA+1)時(shí),PB4的輸出信號(hào)開(kāi)始翻轉(zhuǎn);當(dāng)ITU3_CNT=(ITU4_GRB+1)時(shí),PB5的輸出信號(hào)開(kāi)始翻轉(zhuǎn)。所以,改變上述通用寄存器的值就可以達(dá)到改變脈寬工作比率的目的。而當(dāng)ITU3_CNT=(ITU3_GRA+1)時(shí),ITU3_CNT清0,為下一個(gè)循環(huán)周期做準(zhǔn)備。在介紹上述各函數(shù)時(shí),用到了許多接口寄存器,必須先對(duì)這些接口寄存器進(jìn)行定義,才能在程序中調(diào)用它們,從而保證程序的正確運(yùn)行。H8/3048F-ONE芯片中,對(duì)這些具有內(nèi)置外圍功能的I/O寄存器的定義保存在名為“h8_3048.h”的文件中(見(jiàn)附件)。這里只介紹一些對(duì)于有關(guān)I/O寄存器定義的理解。以程序中的語(yǔ)句“#definePADDR(*(unsignedchar*)0xfffd1)”為例,其意義是:無(wú)論何時(shí),只要程序中出現(xiàn)字符串’PADDR”,它都將會(huì)被字符串"(*(unsignedchar*)0xfffd1)"代替。字符串"(*(unsignedchar*)0xfffd1)”中的批號(hào)0xfffd1代表具有內(nèi)置外圍功能(包括I/O接口)的I/O寄存器被分配到存儲(chǔ)器中的地址,而存儲(chǔ)到存儲(chǔ)器地址中的值將作為要輸出或輸入的信號(hào)。至此,編寫(xiě)MCU模型車在指定軌道上運(yùn)行的主程序及對(duì)模型車各部分組件進(jìn)行檢測(cè)的測(cè)試程序所需的準(zhǔn)備工作已大體完成。利用上述各函數(shù)所能實(shí)現(xiàn)的功能及對(duì)模型車幾何模型、動(dòng)力學(xué)模型、運(yùn)動(dòng)學(xué)模型的分析,我們可以得出模型車在當(dāng)前傳感器顯示的狀態(tài)下理論上應(yīng)該實(shí)現(xiàn)的動(dòng)作,并用C++程序語(yǔ)句表達(dá)出來(lái)。這樣就完成了主程序的大體結(jié)構(gòu)設(shè)計(jì)。然而,由于模型車在賽道上運(yùn)行時(shí)可能出現(xiàn)的情況較多,必然會(huì)使理想的主控制程序的整體結(jié)構(gòu)變得較為復(fù)雜。一般需要經(jīng)過(guò)多次的調(diào)試和修改才能使其滿足控制要求。同時(shí),程序中調(diào)用馬達(dá)速度控制函數(shù)和伺服舵機(jī)轉(zhuǎn)角控制函數(shù)時(shí),其最優(yōu)參數(shù)的確定同樣離不開(kāi)實(shí)驗(yàn)的校核與修正。因此,主控制程序具體內(nèi)容的確定及完善必須以實(shí)驗(yàn)結(jié)果為準(zhǔn)則。模型車的主控制程序基本上可以分為以下幾塊內(nèi)容(各程序塊之間主要靠switch(pattern)語(yǔ)句進(jìn)行有機(jī)的連接):等待按鈕開(kāi)關(guān)輸入:這是主體運(yùn)行程序開(kāi)始執(zhí)行前的等待過(guò)程。該過(guò)程可以無(wú)限運(yùn)行,直至按鈕開(kāi)關(guān)被按下。當(dāng)開(kāi)關(guān)未被按下時(shí),執(zhí)行該部分程序,使發(fā)光二極管LED0和LED1交替閃爍,每個(gè)發(fā)光二極管閃爍的時(shí)間間隔為0.1s。這樣,只通過(guò)簡(jiǎn)單的觀察,就可以清楚地判斷出整個(gè)程序正處在等待階段。如果開(kāi)關(guān)被按下,則程序的流程轉(zhuǎn)向下一階段,準(zhǔn)備執(zhí)行主體運(yùn)行程序。可用下面的程序語(yǔ)句來(lái)實(shí)現(xiàn)該等待過(guò)程。case0:if(pushsw_get()){pattern=1;cnt=0;break;}if(cnt1<100){led_out(0x1);}elseif(cnt1<200){led_out(0x2);}else{cnt1=0;}break;按鈕開(kāi)關(guān)按下后等待一秒鐘:之所以要在按鈕被按下后,等待一段時(shí)間再執(zhí)行軌跡控制程序,是為了避免按鈕被按下后,模型車立即快速行駛,可能會(huì)與按按鈕的手相撞,從而破壞模型車的正常運(yùn)行軌跡。由于盲目的等待總會(huì)讓人感到焦慮,擔(dān)心模型車是否出現(xiàn)故障,因此用兩個(gè)發(fā)光二極管分別閃亮0.5秒來(lái)指示這1s的等待過(guò)程。用C++語(yǔ)句表示為:case1:if(cnt1<500){led_out(0x1);}elseif(cnt1<1000){led_out(0x2);}else{led_out(0x0);pattern=11;cnt1=0;}break;普通軌跡運(yùn)行過(guò)程:該過(guò)程包括模型車在直道和圓弧彎道上的運(yùn)行過(guò)程。利用變量“MASK3_3”,在程序中將傳感器基板上中間兩個(gè)傳感器的輸出值覆蓋為“0”。相當(dāng)于只采用左側(cè)3個(gè)傳感器和右側(cè)3個(gè)傳感器對(duì)賽道的路面狀況進(jìn)行探測(cè)。這樣不僅減少了對(duì)不同傳感器狀態(tài)的分析情況,而且利于編程。當(dāng)傳感器處于賽道中心位置(即伺服舵機(jī)擺角為0度)時(shí),可以提升馬達(dá)速度。為了避免模型車在運(yùn)行過(guò)程中沖出賽道,傳感器基板越偏離中心位置,伺服舵機(jī)的轉(zhuǎn)角值應(yīng)該越大,馬達(dá)速度越低。同時(shí),還需要考慮模型車轉(zhuǎn)向時(shí),伺服舵機(jī)轉(zhuǎn)角與左右馬達(dá)PWM值之間相互協(xié)調(diào)的數(shù)值關(guān)系。因此,在程序中,馬達(dá)速度控制函數(shù)和伺服舵機(jī)轉(zhuǎn)角控制函數(shù)通常要一起使用。改變舵機(jī)的轉(zhuǎn)角,必然要改變馬達(dá)的速度;而改變馬達(dá)的速度,則未必要改變舵機(jī)的轉(zhuǎn)角。以傳感器輸入狀態(tài)為0x06為例(如圖21所示)。圖21此時(shí),模型車向左偏離賽道。為了避免其沖出賽道,必然要對(duì)舵機(jī)轉(zhuǎn)角和馬達(dá)速度進(jìn)行控制。其程序語(yǔ)句為:case0x06:handle(35);speed(50,28);break;也就是說(shuō),根據(jù)對(duì)傳感器狀態(tài)變化情況的分析,就可得出模型車應(yīng)該產(chǎn)生的響應(yīng),并以此來(lái)校正其偏離中心軌道的距離,使其始終保持在中心軌道附近穩(wěn)定運(yùn)行。但由于模型車在運(yùn)行過(guò)程中存在許多對(duì)其穩(wěn)定性造成影響的因素(如:輪胎與賽道的摩擦系數(shù),各響應(yīng)動(dòng)作的延時(shí)以及模型車的慣性等),使理論計(jì)算的響應(yīng)值與實(shí)際偏差較大。因此,需要通過(guò)多次實(shí)驗(yàn)來(lái)進(jìn)行比較校核,才能得到較滿意的響應(yīng)值。又因?yàn)槟P蛙嚨乃俣扰c穩(wěn)定性是一對(duì)不可調(diào)和的矛盾體,所以要獲得既高速又穩(wěn)定的運(yùn)行狀態(tài)勢(shì)必會(huì)遇到很大困難。4)檢測(cè)急轉(zhuǎn)彎結(jié)束:模型車在急轉(zhuǎn)圓弧彎道上運(yùn)行時(shí),其最佳路徑是與賽道同心的一個(gè)圓弧。然而,由于模型車在彎道的運(yùn)行軌跡很大程度上受到其進(jìn)入彎道時(shí)初速度的影響,使其不可能按理想軌跡運(yùn)行。為了防止在急轉(zhuǎn)彎道上由于模型車轉(zhuǎn)向不及時(shí),使傳感器在模型車轉(zhuǎn)彎過(guò)程中檢測(cè)到賽道邊緣的白線,造成傳感器狀態(tài)發(fā)生變化,并引起誤動(dòng)作,致使模型車沖出賽道。應(yīng)該讓模型車在急轉(zhuǎn)過(guò)程中始終保持急轉(zhuǎn)動(dòng)作,直至其返回到一個(gè)比較穩(wěn)定的狀態(tài)(賽道中心附近)時(shí),再恢復(fù)它在普通賽道上的運(yùn)行程序。以右彎道為例(如圖22所示),其程序語(yǔ)句為:case12:if(sensor_inp(MASK3_3)==0x06){pattern=11;}break;
圖225)直角彎道處理過(guò)程:直角彎道是整個(gè)賽道上,模型車最難以通過(guò)的地方。因此在賽道上,直角彎道前一定距離處通常設(shè)置有特定標(biāo)記(兩條有一定間距的橫白線)。當(dāng)傳感器檢測(cè)到這個(gè)特定標(biāo)記(圖23)時(shí),可以被模型車?yán)?,?lái)預(yù)知前面即將有直角彎道,并提前采取動(dòng)作。圖23模型車的直角轉(zhuǎn)彎過(guò)程可分為制動(dòng)和轉(zhuǎn)向兩個(gè)過(guò)程。在制動(dòng)過(guò)程中應(yīng)該同時(shí)調(diào)整模型車的位置,使其盡量處在賽道中心附近,并保持傳感器基板與前面的直角彎道平行。以免在彎道處傳感器狀態(tài)的波動(dòng)使模型車產(chǎn)生誤動(dòng)作。下面結(jié)合兩條橫白線的作用來(lái)簡(jiǎn)述一下模型車的直角轉(zhuǎn)彎過(guò)程:當(dāng)傳感器檢測(cè)到第一條橫白線時(shí),模型車開(kāi)始制動(dòng),經(jīng)過(guò)一段時(shí)間(要保證模型車在這段時(shí)間內(nèi)已經(jīng)順利地通過(guò)了第二條橫白線,以免再次檢測(cè)到橫白線時(shí),程序跳轉(zhuǎn)到上一步)后,模型車?yán)^續(xù)制動(dòng),并調(diào)節(jié)車身位置使其穩(wěn)定在中心線附近。再經(jīng)過(guò)一段時(shí)間,當(dāng)傳感器的檢測(cè)狀態(tài)變?yōu)?x07或0xe0時(shí),表明傳感器已經(jīng)檢測(cè)到直角彎,模型車立即做出響應(yīng),開(kāi)始以最大舵機(jī)轉(zhuǎn)角執(zhí)行轉(zhuǎn)彎過(guò)程。如果傳感器狀態(tài)為0x07,模型車向右轉(zhuǎn)。如果傳感器狀態(tài)為0xe0,則模型車向左轉(zhuǎn)。然而,模型車不能一直這樣轉(zhuǎn)下去,那樣勢(shì)必會(huì)沖出賽道。以左轉(zhuǎn)彎為例,對(duì)模型車轉(zhuǎn)彎結(jié)束狀態(tài)進(jìn)行分析(圖24所示):當(dāng)模型車在轉(zhuǎn)向過(guò)程中回到賽道中心附近,即傳感器狀態(tài)變?yōu)?x60時(shí),可以認(rèn)為直角彎結(jié)束,然后開(kāi)始再次執(zhí)行普通賽道運(yùn)行程序。但是,當(dāng)傳感器狀態(tài)為0xe0(也就是說(shuō),模型車剛開(kāi)始轉(zhuǎn)彎)時(shí),由于中間的白線具有一定的寬度,很有可能使傳感器狀態(tài)在轉(zhuǎn)向瞬間變?yōu)?x60,然后模型車誤執(zhí)行普通軌跡運(yùn)行程序,致使其直接沖出賽道。因此,還要對(duì)轉(zhuǎn)彎過(guò)程進(jìn)行時(shí)間上的限定。只有當(dāng)轉(zhuǎn)向過(guò)程經(jīng)過(guò)一段時(shí)間(這個(gè)時(shí)間要大于傳感器脫離誤動(dòng)作區(qū)域的時(shí)間)后,傳感器狀態(tài)變?yōu)?x60時(shí),才標(biāo)志著轉(zhuǎn)彎結(jié)束,并開(kāi)始執(zhí)行普通軌跡運(yùn)行程序。圖24對(duì)于右直角彎結(jié)束狀態(tài)的分析,與上述方法相同。因此,整個(gè)直角彎道的控制程序語(yǔ)句為:case21:/*檢測(cè)到第一條橫白線時(shí)的程序*/led_out(0x3);handle(0);speed(0,0);pattern=22;cnt1=0;break;case22:/*跳過(guò)第二條橫白線*/if(cnt1>50){cnt1=0;pattern=23;}break;case23:/*制動(dòng)過(guò)程*/if(cnt1>50){cnt1=0;pattern=24;break;}switch(sensor_inp(MASK3_3)){case0x00:handle(0);speed(0,0);break;case0x04:handle(0);speed(0,0);break;case0x06:case0x07:case0x03:handle(8);speed(20,18);break;case0x20:handle(0);speed(0,0);break;case0x60:case0xe0:case0xc0:handle(-8);speed(18,20);break;default:break;}break;case24:/*轉(zhuǎn)向過(guò)程*/switch(sensor_inp(MASK3_3)){case0xe0:led_out(0x1);handle(-44);speed(13,30);pattern=31;cnt1=0;break;case0x07:led_out(0x2);handle(44);speed(30,13);pattern=41;cnt1=0;break;case0x00:handle(0);speed(0,0);break;case0x04:case0x06:case0x03:handle(8);speed(20,18);break;case0x20:case0x60:case0xc0:handle(-8);speed(18,20);break;default:break;}break;case31:/*左直角彎轉(zhuǎn)向時(shí)間控制*/if(cnt1>450){pattern=32;cnt1=0;}break;case32:/*左直角彎結(jié)束*/if(sensor_inp(MASK3_3)==0x60){led_out(0x0);pattern=11;cnt1=0;}bre
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于界面斷裂損傷的鋼橋面瀝青鋪裝層粘結(jié)失效行為及機(jī)理研究
- 體育期末教學(xué)工作總結(jié)(20篇)
- 中介電子合同范本
- 施工合同與中標(biāo)合同范本
- 水稻銷售合同范本
- 無(wú)機(jī)-有機(jī)混酸回收廢脫硝催化劑中釩的研究
- 2025年全熱風(fēng)載流焊機(jī)項(xiàng)目合作計(jì)劃書(shū)
- 瘠性陶瓷漿料的穩(wěn)定性判據(jù)研究
- 川西地區(qū)二疊系烴源巖特征及生烴潛力評(píng)價(jià)
- 商業(yè)健康保險(xiǎn)AI智能設(shè)備企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- GB/T 17758-2010單元式空氣調(diào)節(jié)機(jī)
- FZ/T 60011-2016復(fù)合織物剝離強(qiáng)力試驗(yàn)方法
- 剖宮產(chǎn)護(hù)理查房完整版課件
- 《人文關(guān)懷與優(yōu)質(zhì)護(hù)理》醫(yī)院培訓(xùn)課件
- 世界文明與世界宗教課件
- 50097馬工程-國(guó)際組織(第二版)全套課件
- 北師大版二年級(jí)數(shù)學(xué)下冊(cè)導(dǎo)學(xué)案全冊(cè)
- 《愛(ài)國(guó)主義教育》開(kāi)學(xué)第一課課件
- 龍門(mén)吊重點(diǎn)技術(shù)規(guī)格書(shū)
- JJG(交通)054-2009 加速磨光機(jī)檢定規(guī)程-(高清現(xiàn)行)
- H.248協(xié)議正常呼叫流程解析
評(píng)論
0/150
提交評(píng)論