版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄TOC\o"1-5"\h\z摘要IAbstractI\o"CurrentDocument"引言1\o"CurrentDocument"MCU模型車的結構組成及工作原理2\o"CurrentDocument"2.1傳感器基板22.2傳感器子基板32.3CPU主板4\o"CurrentDocument"2.4馬達驅動電路5\o"CurrentDocument"2.5伺服舵機控制電路8\o"CurrentDocument"2.6發(fā)光二極管電路92.7開/關電路102.8電源10\o"CurrentDocument"MCU模型車的幾何模型、運動學模型和動力學模型分析11\o"CurrentDocument"3.1模型車幾何模型的建立與分析:11\o"CurrentDocument"3.2模型車動力學模型的建立與分析:123.3模型車運動學模型的建立與分析:16MCU模型車在指定軌道上運行的程序設計17\o"CurrentDocument"影響MCU模型車穩(wěn)定運行的因素31結論32致謝錯誤!未定義書簽。參考文獻錯誤!未定義書簽。1引言MCU模型車的設計與制作起源于由日本社團法人全國高中協(xié)會等主辦的“JAPANMCU模型車大賽(英文:JapanMicomCarRally)”,目前這項賽事已經在日本成功舉辦了十余屆。由于這項大賽的科技層次較高,并且具有很強的競爭性和觀賞性,如今“JAPANMCU模型車大賽”已經成為日本國內的全國性重大賽事。2007年,由瑞薩科技冠名贊助的“瑞薩超級MCU模型車大賽”首次在北京舉行,并被教育部列為“全國大學生IT&AT就業(yè)技能大賽”系列賽事之一。這個活動的目的是提高學生的制作能力和編程技巧水平,并培養(yǎng)業(yè)界相關人才。該項賽事首次舉辦就吸引了四十多所高校的六十多支參賽隊伍,其中不乏許多知名高校。此次大賽的成功舉辦,不僅在于高校和大學生們對此項賽事的關注,更在于對大家對專業(yè)人才培養(yǎng)和鍛煉的重視。該項賽事還將繼續(xù)在我國舉辦。在高興的同時,我們也應該清楚地看到,我國選手的MCU模型車在科技含量與創(chuàng)新層次上與國外高水平選手還有一定的差距。因此,為提高我國MCU模型車賽事的觀賞性和賽事水平的競爭力,同時也為了提高我國高校大學生的科研能力、制作能力及創(chuàng)新層次,加強對MCU模型車的理論研究和科技創(chuàng)新具有一定的實際意義。
2MCU模型車的結構組成及工作原理MCU模型車基本上由以下幾部分組成:傳感器基板,傳感器子基板,H8/3048F-ONE型號的CPU主板,馬達驅動基板等。其整體結構如圖1所示。圖1傳感器基板位于模型車的最前方,用于檢測賽道信息。而傳感器子基板則被固定在模型車車身上,對傳感器輸出的信號進行初步的預處理。安裝在中心位置的CPU主板是整個模型車的核心部件,可以對模型車的各控制電路發(fā)出控制指令。位于車身最后的馬達驅動基板是模型車驅動電路的集合體,在CPU的控制下它可以完成對左右馬達和伺服舵機的驅動。21傳感器基板如圖2所示,傳感器基板主要由8個一字等距排開的傳感器組成。每個傳感器都可以識別賽道上的黑白顏色,通過發(fā)光二極管顯示傳感器檢測到的狀態(tài),并能將其轉化為數(shù)字信號“0”或“1”輸出。傳感器基板作為整個模型車控制系統(tǒng)的起始端,就好比人的眼睛,能讀取賽道路面信息,為模型車要產生的相應動作提供必要依據(jù),其作用不可忽視。同時,其識別精度及響應時間都將對整個控制過程造成較大的影響。傳感器主要由兩部分組成,利用“白色反射光線,黑色吸收光線”的原理,一部分發(fā)射光線,另一部分接收光線。發(fā)射光線部分為發(fā)光二極管,其發(fā)射到賽道上的光線為紅外線,并不能被肉眼察覺。接受光線部分為光傳感器S7136,它能判斷出是否有光線被反射到其接受面上,并能將其轉化為數(shù)字信號“0”或“1”輸出。傳感器的工作原理為:如果賽道上光線集中的地方是白色(光線由傳感器的發(fā)光部分射出),光線將會被反射,并且被傳感器的光線接收部分接收。這樣,傳感器輸出數(shù)字信號“0”,賽道上的該處被認為是“白色”,同時,具有指示作用的發(fā)光二極管工作。同理,如果賽道上光線集中的地方是黑色,光線將會被吸收,不能被光線接收部分接收,傳感器輸出數(shù)字信號“1”,該處將會被認為是“黑色”,具有指示作用的發(fā)光二極管不工作。傳感器基板上的藍色方形旋鈕為可調電阻,可以調節(jié)傳感器的靈敏度。當傳感器在賽道上的白線處正常工作,黑線處不工作時,傳感器靈敏度的調節(jié)工作就可以結束了。如果賽道上有灰色,要通過調節(jié)旋鈕使發(fā)光二極管在灰色處也能正常工作,模型車才能夠在整個賽道上順利運行。光傳感器S7136主要由震蕩電路、時鐘信號發(fā)生電路、發(fā)光二極管驅動電路、緩沖放大電路、標準電壓發(fā)生電路、比較電路、信號處理電路、輸出電路等組成。它屬于標準元件,共有四個引腳,此處不對其內部結構做過多介紹。傳感器基板的電路如圖3所示:發(fā)射紅外線的發(fā)光二極管(LED2)的陰極與光傳感器S7136(接收光線部分)的引腳1連接,陽極通過旋鈕調節(jié)電阻(該電阻可以調節(jié)LDE2的輸出)與電源相連。S7136的引腳3是輸出端,并與發(fā)光二極管(LED1)相連。因為在數(shù)字電路中“0”通常表示0V,“1”通常表示“5”V,因此,當S7136接收到光線時,引腳3輸出“0”,LED1工作。反之,當S7136沒有接收到光線時,引腳3輸出“1”,LED1不工作。為了將每個光傳感器引腳3的輸出值送到CPU做后續(xù)處理,引腳3還與接口CN1的引腳2-9分別相連。另外,光傳感器S7136的引腳2和引腳4還要分別與電源和地相連,這樣就構成了完整的傳感器基板電路。圖3要注意:此時由傳感器基板輸出的信號為:“1”代表“黑色”,“0”代表“白色”。這與人們通常的思維習慣相矛盾。為了便于在設計程序時理解起來更方便,還需要對傳感器基板的輸出信號做進一步的處理。這就是下面要介紹的傳感器子基板的作用。2.2傳感器子基板傳感器子基板的作用是將來自傳感器的輸入信號取反,使輸出信號滿足:當賽道顏色
為白色時輸出值為“1”,當賽道顏色為黑色時輸出值為“0”。從而符合人們的思維習慣。又因為來自傳感器的輸入信號并不是非常清楚,因此傳感器子基板同時還具有波形成型和防止信號抖動的功能。傳感器子基板的外觀如圖4所示。由上述內容可知:傳感器基板與傳感器子基板間的關系密切,理論上可以將二者合為一體,放到一塊板子上。但是,考慮到傳感器基板的重量會影響到伺服舵機轉向的快速性,因此將傳感器子基板固定在車身上以減輕傳感器基板的重量。圖5為傳感器子基板的電路圖:電路中,利用非門電路將輸入信號取反,并采用元件74HC04實現(xiàn)該功能。圖中電阻起到限流的作用。經過轉化后的信號分別與接口CN12的圖6圖示即為模型車的CPU主板。該主板采用由日本瑞薩科技生產的H8/3048F-ONE芯片。它是整個模型車的核心,也是提高模型車性能的關鍵所在。它的主要作用是利用控制程序對模型車的各驅動部分發(fā)出控制指令,從而實現(xiàn)對整個MCU模型車系統(tǒng)的程序控制。CPU主板的結構較復雜。共有11個接口,分別為接口1至B,其中大部分為8位接口,還有4個是少于8位的接口。另外,主板上還有一個4位的DIP開關,可以調節(jié)控制馬達轉速的PWM輸出值。CPU主板的核心部分為H8/3048F-ONE芯片,該芯片共有100個引腳,可以實現(xiàn)對整個模型車的程序控制。而控制程序的輸入還需要通過一個導入開關才能實現(xiàn)。然而,雖然主板上有11個接口,但是整個模型車系統(tǒng)只用到了接口7和接口B兩個接口,使整個系統(tǒng)并未變得特別復雜。模型車開始工作后,該CPU主板從接口7讀取傳感器數(shù)值,經過執(zhí)行芯片中定義的接口程序和創(chuàng)建的主控制程序得出左、右馬達和伺服舵機的響應動作及其輸出值,并將其通過接口B輸出到馬達驅動基板,以達到對模型車驅動系統(tǒng)控制的目的。2.4馬達驅動電路馬達驅動電路位于馬達驅動基板上(馬達驅動基板整體外觀如圖7所示),其作用是根據(jù)微處理器的指令來控制馬達。但是來自微處理器的信號非常微弱,即使把馬達直接與信號線相連,也不會產生任何響應。為了能控制馬達,這個微弱的控制信號必須轉化成可以誘發(fā)數(shù)百至數(shù)千毫安電流的信號。圖7要使馬達旋轉,只需施加相應的電壓。而要使馬達停止,只需撤掉電壓即可。但是,要如何才能實現(xiàn)速度的精確控制呢?下面將對這個問題進行詳述的討論。采用調節(jié)電阻可以改變電壓。但是,這個調節(jié)電阻必須具有很大的熱容量,因為馬達工作時,將有大量的電流流向馬達。對于沒有施加到馬達上的過剩電壓,將會在電阻上以熱輻射的形勢被消耗掉。而此處采用的方法是不斷重復高速的開、關操作來進行電壓控制,其最終的結果就好像是高低電平間的某個電壓值被輸出。在固定的周期內,重復的開、關操作可以控制開、關比率的改變。這種控制方法稱為“脈寬調制”,簡稱為PWM控制。脈寬的開通比率稱為工作比率。當在一個周期內開通寬度被設定為50%時,可以稱作工作比率為50%。還可以簡稱為PWM50%。下圖即為脈寬調制(PWM)的示意圖。圖8不過“PWM”聽起來有些難以理解。其實手動“接通”、“斷開”馬達與電池線的連接也被稱為PWM。當接通時間較長時,馬達旋轉速度快。當斷開時間較長時,馬達旋轉速度慢。手動“接通”、“斷開”操作的執(zhí)行可以在數(shù)秒內完成,但是,如果采用微處理器的話,這個過程只需要數(shù)毫秒。當這個PWM信號與馬達相連時,馬達的旋轉速度就可以按照程序的設定來工作,哪怕只發(fā)生微小的變化。這樣一來,精細的速度控制就能夠實現(xiàn)了。當電路中連有發(fā)光二極管時,發(fā)光二極管的明亮程度可以通過PWM來改變。如果用CPU進行PWM控制,這項工作可以在數(shù)毫秒,甚至數(shù)微秒內完成。一個平穩(wěn)的馬達控制就可以實現(xiàn)了。這里,之所以采用脈寬控制,而不采用電壓控制,是因為CPU非常善于處理數(shù)字值“0”和“1”,對于類似于xV這樣的值處理起來則非常困難。雖然通過改變“0”、“1”的寬度表現(xiàn)的就像是電壓控制一樣,但實際上卻是PWM控制。馬達正、反轉以及剎車的控制是通過H橋電路來實現(xiàn)的。H橋電路的原理圖如圖9所示,馬達位于中心位置,4個開關分別位于兩側,共同構成一個H形。改變4個開關的狀態(tài)就可以實現(xiàn)馬達正、反轉以及剎車的控制。此處的開關,是由FET(場效應晶體管)組成的控制開關。P溝型FET用在電源正極,N溝型FET被用在負極。對于P溝型FET而言,當G端電壓<S端電壓時,導通電流。而對于N溝型FET而言,當G端電壓>S端電壓時,導通電流。也就是說,無論是P溝型還是N溝型的FET,只要D端與,端有電壓,就會有電流從其中導通。圖9必須注意:左側或右側的兩個FET不能同時接通。因為,如果那樣的話,10V的電源與接地之間就沒有任何負載存在了,就好像短路一樣。它將會燒毀FET或者導線。馬達在實現(xiàn)正、反轉以及剎車的控制過程中,H橋電路的左側和右側兩個FET的G端電壓總是相同的。因此,可將左右兩側的上下兩個FET的G端分別相連,以簡化電路。
當H橋電路被連接到整個控制電路中,并且執(zhí)行PWM控制時,F(xiàn)ET將會變得很熱。這是因為,當信號從FET的門輸入,并且PWM控制在FET的D端與S端執(zhí)行時,根據(jù)圖10中的“理想波形”圖可知,由于P溝型FET和N溝型FET反應迅速,正轉與剎車之間可以實現(xiàn)平穩(wěn)的轉換。然而實際波形中卻存在延時,并不能立即執(zhí)行。事實上,F(xiàn)ET由開變關時的延時要比由關變開時的延時長。正如圖10中的“實際波形”所示。雖然延時很小,但是同側的兩個FET都將會因延時造成短時間導通,引起電路短路,并產生大量的熱能。j:BrakeNormalrotationONj:BrakeNormalrotationONxjr1rONOFFMotorGatePchFBTOperationNchFBTOperationBrake[rotationrake【**s87ns3L_._.….is;225ns-?\…7Motor?GateiPchFETOperationNchFETOperationONOFFCNOFF理想波形實際波形圖10從接通到實際開始產生反應的延時的持續(xù)時間稱為“接通延時”,第一次打開到實際接通的時間稱為“上升時間”。從斷開到實際開始產生反應的延時的持續(xù)時間稱為“斷開時間”,第一次斷開到實際斷開的時間稱為“下降時間”。實際上,由斷開到接通的時間是“接通延時+上升時間”,由接通到斷開的時間為“斷開時間+下降時間”。由于延時的作用,馬達驅動電路會產生短路的現(xiàn)象。防止短路的方法是利用電路及FET的開關特性來產生特定的延時,從而使同側的P通道和N通道的FET不同時接通或斷開。馬達驅動基板中用來產生延時的部分是積分電路(圖11所示)。因為有許多有關于積分電路的專業(yè)書籍,此處不對其作過多敘述。積分電路圖如下,并可通過下式計算延時T=CR[s]。其中,電阻值為9.1千歐姆,電容大小為4700皮法,因此,延時T=42.77[us].圖11該電路中采用了74HC14。對于74HC系列產品而言,當輸入電壓為3.5V或者更高時,電信號將會被轉換為數(shù)字信號“1”。在74HC14的實際波形中,電壓達到3.5V所需要的時間大約為50us。這個50us的延時是由上面積分電路產生的。因為,除了FET,數(shù)字品體管對于電壓轉換的延時取決于FET門的容量。綜上所述,我們可以得到較完整的馬達驅動電路。下圖即為左馬達的驅動電路圖。它除了包含積分電路和由FET組成的H橋電路外,還包含了正、反轉變換電路。電路圖中,PB1是PWM的終端,PB2可以改變馬達的正、反轉。當接口PB1信號為“0”時,可以實現(xiàn)馬達制動;為“1”時,執(zhí)行接口PB2能夠實現(xiàn)的操作。而對于PB2的信號而言,為“0”時,馬達正轉;為“1”時,馬達反轉。電路中還采用了分別由74HC08和74HC32實現(xiàn)的與門電路和或門電路。圖12電路分析:品體管元件TR5、TR6、TR7、TR8可以分別將0V—5V的電壓信號轉換為10V—0V的電壓信號。當PB1的信號由“0”變?yōu)椤?”時,F(xiàn)ET2的門電壓由10V變?yōu)?V,F(xiàn)ET2斷開。然而,由于FET2自身延時的作用,F(xiàn)ET2的斷開將會被拖延。此時,由于FET1和FET2均斷開,馬達將進入自由狀態(tài)。由于積分電路也會產生延時,F(xiàn)ET1的門電壓將會在自身延時和積分電路產生的50us延時后由10V變?yōu)?V,F(xiàn)ET1接通。相反,當PB1的信號由“1”變?yōu)椤?”時,F(xiàn)ET1的門電壓由0V變?yōu)?0V,F(xiàn)ET1斷開。同樣由于FET1自身的延時作用,F(xiàn)ET1的斷開將也將會被拖延。此時,由于FET1和FET2均斷開,馬達也會進入自由狀態(tài)。由于積分電路也會產生延時,F(xiàn)ET2的門電壓將會在自身延時和積分電路產生的50us延時后由0V變?yōu)?0V,F(xiàn)ET2接通。對FET3和FET4的分析與FET1和FET2類似。雖然馬達驅動電路能很好的滿足控制要求,可是,在過程中卻去出現(xiàn)了暫時無法控制的自由狀態(tài)。自由狀態(tài)是為了避免短路,而由積分電路產生的。因此,在程序中無法控制這個自由狀態(tài)。改變積分電路中電阻和電容的值,就可以改變自由狀態(tài)存在的時間。2.5伺服舵機控制電路伺服舵機(如圖13所示)為模型車的前輪轉向機構,是模型車不可或缺的重要組成部分。其轉動范圍、響應速度及動作準確性均會對模型車的運行狀態(tài)產生較大影響。伺服舵機的控制方法仍采用PWM控制,這樣不僅能夠保證動作的準確性,而且便于實現(xiàn)。加載到伺服舵機的脈沖周期為16ms,并且伺服舵機的轉角大小取決于脈沖的接通寬度。伺服舵機的旋轉角度與接通脈寬之間的關系為:當接通脈寬為0.7ms時,伺服舵機向左旋轉90度;當接通脈寬為1.5ms時,伺服舵機位于中心位置;當接通脈寬為2.3ms時,伺服舵機向右旋轉90度??刂圃撍欧鏅C的PWM信號由H8微處理器的復位同步脈寬調制模式產生。并且由接口B的第5位輸出。改變控制程序中的ITU4_BRB(ITU4寄存器中的緩沖寄存器)的值就可以實現(xiàn)對接通脈寬的調節(jié)。ZH50圖14ZH50伺服舵機的控制電路圖如圖14所示。雖然接口可以與伺服舵機的引腳1直接相連,但是或門電路仍然作為一個緩沖器而存在于電路中。因為,當電源線錯誤的與引腳1相連或者有噪聲混入且使端腳毀壞時,如果采用直接相連的方法,微處理器的接口將被燒毀,那將是致命的。相比之下,如果采用74HC32作為緩沖器,由于它的結構更簡單、價格更便宜,即使毀壞,也不會造成太大的麻煩。伺服舵機的引腳2是電源供應接口。當為馬達提供電源的電池少于4節(jié)時,JP1的上部短接,直接與電源連接。當電池數(shù)多于4節(jié)時,為了避免電壓過高,供給給伺服舵機的電壓被3端調節(jié)器限定為6V,并且JP1的下部短接。2.6發(fā)光二極管電路馬達驅動基板上連有3個發(fā)光二極管。其中,兩個(LED3和LED2)可以通過微處理器中的控制程序來控制其開/關狀態(tài)。這兩個發(fā)光二極管的負極分別直接與微處理器的接口6和接口7相連,正極與電源相連。限流電阻為1千歐姆。顯而易見,該電路中的導通電流I=(電源電壓一發(fā)光二極管的端電壓)/限流電阻。如果數(shù)字信號“0”從PB7輸出,發(fā)光二極管LED2負極電勢為0V,電流導通,發(fā)光二極管工作。如果數(shù)字信號“1”從PB7輸出,發(fā)光二極管LED2負極電勢為5V,兩端電壓為0V,電流不導通,發(fā)光二極管不工作。發(fā)光二極管LED3的工作原理與上述相同,不同之處是與接口6相連。
IFB&>圖152.7開/關電路馬達驅動基板上還有一個按鈕開關,其作用是使模型車由無限等待狀態(tài)躍變?yōu)殚_始執(zhí)行主控制程序。該按鈕開關通過10千歐姆的限流電阻與接口B的第0位(即PB0)相連。如果按鈕沒被按下,數(shù)字信號“1”將通過限流電阻輸入到PB0。相反,如果按鈕被按下,數(shù)字信號“0”將會通過接地端輸入到PB0。R1Oi0k圖162.8R1Oi0k眾所周知,提升驅動系統(tǒng)的電壓可以提高馬達的旋轉速度。整個模型車系統(tǒng)系統(tǒng)采用8節(jié)AA型電池作為動力源,電壓可以達到9.6V。而這8節(jié)電池為控制系統(tǒng)和驅動系統(tǒng)所共享。對于馬達,即使加載9.6V的電壓也不會出現(xiàn)故障。然而,由于CPU能夠保證正常工作的電壓僅在4.5V-5.5V之間,如果電壓高于5.5V,CPU將會損壞,如果電壓低于4.5V,CPU將會復位。因此,需要三端調節(jié)器(LM2940-5)將CPU控制系統(tǒng)電壓限定為5V。而LM350及其附件部分,將會產生供給給伺服舵機的6V恒定電壓。3MCU模型車的幾何模型、運動學模型和動力學模型分析對MCU模型車的研究,除了要編寫并調試相關的控制程序外,還要對其運動過程作深入的分析。模型車在賽道上的運行過程包括較多種情況,其中最典型的為彎道制動過程。對這些運行情況的綜合分析,有利于我們更好地了解模型車的整個運行過程,并為程序的編寫提供充足的理論依據(jù)和科學的運行參數(shù)。本文以轉彎過程為例,對模型車建立了相關的幾何模型、運動學模型及動力學模型,并做了較詳細的分析。3?1模型車幾何模型的建立與分析:模型車的幾何模型如下:其左右后輪的中心距離T=0.14m,前后輪軸心距W=0.175m。圖17當模型車轉彎時,伺服舵機轉角與左右馬達PWM值之間應保持一個確定的比例關系,使三者之間相互協(xié)調,才能保證模型車在彎道以最佳狀態(tài)通過,其關系可通過下面的推導方法得出。在轉彎過程中,左后輪、后輪軸中心、右后輪以及伺服舵機中心的軌跡為同心圓,并設其軌跡半徑分別為r1、r2、r3和r。同時,設伺服舵機的轉角為0。根據(jù)圖18所示幾何關系,可得出r2與轉角0的關系為:tan0=W/r2而由r2又可得出半徑r1與r3的值:r1=r2-T/2;r3=r2+T/2若假設右馬達的速度比率為100,則可以求得舵機轉向時與之相匹配的左馬達的速度比率,其值為:r1/r3x100。利用上述方法,可以求出右馬達速度比率為100,舵機轉角從1度變至45度時,左馬達相應的速度比率值。并以表格形式列出(參見附件)。若右馬達的速度比率不是100,此時設為x,則左馬達的速度比率為:x/100x(r1/r3x100)。
圖18當在程序中涉及到伺服舵機轉角時,除了降低馬達轉速以外,還要盡可能使左右后輪滿足上述關系,以使伺服舵機和左右馬達在模型車運行過程中達到相互協(xié)調的效果。上面討論的是舵機左轉時,左右馬達的速度比率情況。對于舵機右轉的情況分析,與上述思想相同。如果舵機的中心值調節(jié)合適,因為其具有對稱性,可以通過將左轉時左右馬達的速度比率對換,即可得到右轉時與舵機轉角相對應的速度比率值。3.2模型車動力學模型的建立與分析:在模型車的整個運動過程中,其彎道的動力學分析最具有代表性,難度也最大。本文以模型車彎道制動過程為例,來建立其動力學模型,并作簡要分析。為了使對模型車的分析與汽車更接近,從而具有更深刻的實際意義,此處假設不存在舵機,模型車的轉向依靠左前輪和右前輪的自身轉向來實現(xiàn)。由于模型車的重量較實際汽車的重量輕許多倍,這樣的假設并不會對模型車的理論分析造成太大的誤差。當模型車在水平的彎道上等速行駛時,擬作如下的假設:1)模型車是做平行于路面的平面運動,即只有前進運動、側向運動和繞垂直軸的橫擺運動。不考慮其俯仰運動和側傾運動,及制動時負荷的前后轉移。但計及了做圓周運動時由于向心加速度引起的左右負荷轉移。2)不考慮制動過程中賽道摩擦系數(shù)的變化,即認為附著系數(shù)為常數(shù)。3)只考慮滾動阻力。4)在制動過程中,當某一車輪(i輪)達到附著極限工況時,認為該車輪所受的縱向力、側向力和垂直力滿足下面的關系:F2+(mF)2=(甲F)式中F、F"七分別表示作用于車輪上的縱向力、側向力和垂直力,單位N;中表示縱向道路附著系數(shù);m表示輪胎系數(shù)。下圖為模型車彎道制動動力學模型。oxyz為固結于模型車上的動坐標,o為模型車的重心;x軸、z軸處于模型車縱向垂直于地面的中平分面內,z軸過模型車垂心垂直于地面,指向下放為正;x軸過重心平行于地面,指向模型車前進方向為正;y軸過重心,面對模型車前進方向時,指向右側為正。根據(jù)右手定則確定模型車繞z軸的橫擺角速度丫的正方向為順時針方向。圖19該動力學模型中,模型車具有三個自由度:沿x軸的縱向運動V;沿y軸的側向運動v;繞z軸的轉動丫。根據(jù)達朗貝爾原理,可得到三自由度的模型車運動方程:EF=M(V-Yv)x<EF=M(v-YV)
勇吃」Y
式中M——模型車總質量,單位kg;V一模型車質心處速度在動坐標系中沿x軸方向的速度分量,單位m/s;v一模型車質心處速度在動坐標系中沿y軸方向的速度分量,單位m/s;『——模型車繞z軸的橫擺角速度,單位rad/s;模型車對Z軸的慣性矩,單位kg.m2。設F/L2,3,4)為作用于各輪上的地面制動力(N),其值為:fFfFF=〈PBi腫FziF<9FmziF>9FMizi制動器制動力,N;F——各輪所受的垂直負荷,N。由于模型車前輪無制動,即F和F均為0,因此前輪的地面制動力為0。而模型車MiM2的后輪轉速是靠PWM值控制的。改變驅動后輪的PWM值,就可以改變后輪的轉速。模型車后輪速度改變的過程,即為模型車的制動過程。其制動力的大小與PWM值的改變程度、齒輪嚙合的緊密性及馬達的響應速度密切相關。設車輪的滾動阻力為F,其值為:F=fMg,式中f為滾動阻力系數(shù)。設E(i=1,2,3,4)為各輪所受的側向力,取輪胎系數(shù)m=1,其計算公式為:ka
::二7(9F)2一FM0F2+(ka)2<(9F)2F2+(ka)2>(9F)2且F<9FFka
::二7(9F)2一FM0而各側偏角的計算公式如下:v+v+a?yQa=oV+*y2v一b?y
a=V+?y23V-*12y23V-*12y2V-34?y2"2、134分別表示前后軸輪距,單位為m。而o代表前輪平均轉角,單位為rad。a、b分別表示前輪軸心到重心的距離和后輪軸心到重心的距離,單位為m。其中,模型車各輪垂直負荷的確定方法如下:當模型車處于靜平衡狀態(tài)時,各輪的靜載荷為:F=F=業(yè)一MgF=F=^—Mgz10z202Lz30z402L當模型車轉彎行駛時(右側),左側車輪負荷增大,右側車輪負荷減小,左右各輪負荷轉移量為:△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史——前后懸架側傾角剛度,N?m/rad;h中一一模型車懸掛質量質心至側傾軸線的距離,m;h1、h2——前后側傾中心離地高度,m;M、M一一前后非懸掛質量,kg;|J1|J2h卬、h“——前后非懸掛質量質心至側傾軸線的距離,m;M、一一模型車的懸掛質量,kg;L一模型車前后輪軸的中心距離,m。因此,可知在模型車轉彎制動過程中,各輪所受的垂直動負荷為:F=F+F(i=1,2,3,4)也就是說: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綜上所述,我們可以得到模型車在彎道制動過程中的動力學模型方程:-(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通常情況下,模型車是由直道進入彎道的,因此模型車進入彎道時的初始條件為:V=V,v=0,y=0,V'=0,v=0,y'=0??衫盟碾A龍格庫塔法求解有0m00000關初值的問題,此處不作介紹。模型車在彎道的行駛過程為先做彎道制動運動,穩(wěn)定后再做勻速圓周運動。上面已經對彎道減速制動過程的動力學模型做了詳盡敘述,隨后的勻速圓周運動過程與彎道減速制動過程的分析方法相似,且比較簡單,此處同樣不做過多分析。3.3模型車運動學模型的建立與分析:此處同樣以模型車在彎道的運動過程為例,進行建模分析。不考慮模型車的彎道制動過程,只分析其做勻速圓周運動的過程。模型車在彎道的理想運動狀態(tài)是模型車舵機產生擺角后的運動軌跡與圓弧賽道為一組同心圓。設傳感器基板中心運動軌跡半徑為R,舵機中心運動軌跡半徑為1,圓弧賽道中心半徑為‘°,傳感器基板中心至圓弧賽道中心的距離為d,舵機中心全傳感器基板中心的距離為1。假設模型車在彎道運行過程中,傳感器的狀態(tài)保持不變,也就是說,舵機以恒定的擺角通過彎道,則其運動學模型簡圖如下:圖20由于賽道為指定的賽道,則其彎角中心軌道的半徑,。已知。而1和d的值可以通過測量獲得。又根據(jù)幾何關系得出:R-‘=d,r=\R2+12且W/r=sin0。將上式聯(lián)立,可得到模型車在理想狀態(tài)下彎道運行的最佳舵機擺角值:0=arcsinK=arcsin.叱「=arcsin,叱r\R2+l2\.'(r+d)2+l2并且,可以根據(jù)舵機擺角值求出與之相關的左右馬達的速度之比。然而,模型車在賽道上的運行情況受到諸如:進入彎道前的直道速度、彎道制動過程、輪胎與賽道表面的摩擦系數(shù)、舵機的響應速度等一系列因素的影響,其理論值并不能很好的滿足其運行狀態(tài)。因此,必須通過大量的實驗對其理論值進行修改和校正,才能的到滿意的運行結果。至此,我們已經完成了對模型車在賽道上運行的典型過程(即:彎道運行過程)的幾何模型分析、動力學模型分析和運動學模型分析。而根據(jù)對彎道運行過程的建模與分析,我們又可以很容易得到模型車在任何運行情況下的模型,并能對其做出科學的理論分析。這對于模型車運行狀態(tài)的研究有著至關重要的作用,并能依此對各運行狀態(tài)編寫相關的控制程序,最后經過綜合得到能使模型車在指定賽道上順利運行的主控制程序。4MCU模型車在指定軌道上運行的程序設計MCU模型車是在預先設定好的具有明顯黑白條紋的賽道上運行的,具有自動識別功能的MCU汽車模型。它的自動識別控制主要靠輸入到瑞薩科技所生產的單片機芯片中的控制程序來實現(xiàn)。由于模型車組件較多,結構較復雜,且功能多樣,其中任何一部分出現(xiàn)問題都將會影響模型車的正常運行。為了保證各部分均能按指定的要求工作,我們還需要對每個部分分別進行調試。因此,特為其編寫了兩組程序,分別為測試程序kit05test.c和主程序kit05.c。由于單片機不能直接執(zhí)行C/C++程序,必須將編好的測試程序kit05test.c和主程序kit05.c進行轉換后才能夠輸入到單片機中。以主程序的轉換過程為例:已經編好的程序kit05start.src與kit05.c分別經過匯編和編譯后,生成的文件kit05start.obj和kit05.obj再與文件kit05.sub進行連接,生成kit05.abs,然后再將其進行編譯就可以得到瑞薩單片機所能執(zhí)行的kit05.mot文件。首先,介紹一下程序中定義的一些變量的意義及其計算方法。#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標志著CPU操作時鐘的時間。而TIMER_CYCLE是在ITU0寄存器中設置一毫秒時間所需要的值,它將會被存放到變量ITU0_GRA(通用寄存器A)中,通過與ITU0_CNT(定時器計數(shù)器)進行比較來設定這1ms的時鐘周期。ITU0_CNT好比時鐘的秒針,每隔一段確定的時間間隔,其值就會增加1。它是一個標準值。此處,我們需要讓它循環(huán)一次的時間為一毫秒。單片機上石英晶體的固有頻率為①=24.576MHz,我們取其頻率的1/8,則每一次計數(shù)的時間間隔T=1/f=325.52ns。由于我們要設置的時間為1ms,因此,需要3072次計數(shù),即ITU0_CNT=3072時,結束一個循環(huán)周期。但是,根據(jù)ITU的標準執(zhí)行程序,知道只有當“ITU0_CNT=ITU0_GRA+1”時,才產生一次中斷,即經過一個時鐘周期。因此,需要使ITU0_GRA=3071,也就是說TIMER_CYCLE=3071。PWM_CYCLE是控制PWM周期大小的變量,它被存放到ITU3_GRA(通用寄存器A)中,由于要加載到左馬達、右馬達和伺服舵機的PWM周期為16ms,而定時計數(shù)器ITU3_CNT與ITU3_GRA的標準關系為:當滿足ITU3_CNT=ITU3_GRA+1的條件時,產生一次中斷,ITU3_CNT(ITU3寄存器的定時計數(shù)器)循環(huán)一個周期,該周期即為PWM的周期值。而又知ITU3_CNT=(16x10-3)+[1;(①+8)]=49152。因此,需要使ITU3_GRA=49151,也就是說PWM_CYCLE=49151。變量SERVO_CENTER是在程序中控制伺服舵機面向前方(即:轉角為0)的值。而上面提到,伺服舵機的PWM周期為16ms,當接通脈寬大約為1.5ms時,舵機面向正前方,所以變量SERVO_CENTER的值應該為(1.5x10-3);[1;(①;8)]=4608。然而,由于伺服舵機在生產過程中受各種因素的影響,不可能使每一個舵機的中心值均與理想值相同。因此,要使舵機在轉角值恰為中心值SERVO_CENTER時,面向正前方,還需要對理論值進行調試校正。經過調試后,將該值取為4585。HANDLE_STEP是舵機旋轉1度時,程序中與之對應的舵機轉角值應增大或減小的幅度。對于伺服舵機而言,PWM的接通脈寬為2.3ms時舵機向右旋轉90度,程序中與之對應的轉角值為(2.3x10-3)+[1H①+8)]=7065;PWM的接通脈寬為0.7ms時舵機向左旋轉90度,程序中與之對應的轉角值為(0.7x10-3)-[1-(①;8)]=2150。兩值之差4915即為舵機旋轉180度時要改變的程控值。因此,舵機旋轉1度要改變的程控值為27。然而此處變量HANDLE_STEP的值定義為26,是為了保持其兼容性。MASK2_0是一個十六進制的值,它標志著對傳感器輸入狀態(tài)的限制。其意義為:傳感器基板上的左側4個傳感器中的兩個傳感器輸出值和右側4個傳感器中的0個傳感器輸出值可以被正常使用,其余的全部被掩蓋,值為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”覆蓋。為簡化程序的設計結構,程序中還用到一些函數(shù)。這里,對這些函數(shù)的具體內容及作用作簡單介紹。位轉換函數(shù)charunsignedbit_change(charunsignedin){unsignedcharret;inti;for(i=0;i<8;i++){ret>>=1;ret|=in&0x80;in<<=1;}returnret;}函數(shù)中,變量“in”是位轉換前的8位二進制數(shù)值,變量ret是經過位轉換后函數(shù)的返回值。該函數(shù)的功能是將8位二進制數(shù)的前后對稱的二進制位兩兩互換。其實現(xiàn)過程如下:先將變量ret右移一位,使第7位為0,第0位消失。隨后,對變量ret的第7位與輸入變量in的第7位進行或操作,并將取或后的值存到前者中。由于ret的第7位通常為“0”。因此,或操作后,變量ret的第7位中存放的值就是輸入?yún)?shù)in的第7位的值。最后,將變量in左移一位,結束一次循環(huán)。如此循環(huán)8次后,就能實現(xiàn)函數(shù)預定的位轉換功能。傳感器狀態(tài)讀取函數(shù)unsignedcharsensor_inp(unsignedcharmask){unsignedcharsensor;sensor=P7DR;sensor=bit_change(sensor);sensor&=mask;returnsensor;}因為傳感器子基板的輸出端與CPU主板的接口7相連,所以傳感器值由接口7輸入并將該值存放到變量sensor中。函數(shù)的輸入?yún)?shù)mask可以限制傳感器的輸入狀態(tài),將制定的傳感器位覆蓋為“0”。由于如今的傳感器基板的第0位在最左側,第7位在最右側(與之前的傳感器基板相反),為了保持其兼容性,變量sensor中的值經過位轉換后再次存儲到sensor中。經過位轉換后的傳感器值與函數(shù)的輸入?yún)?shù)mask進行與操作,最終就可得到需要的傳感器狀態(tài)值,并存放到變量sensor中,作為返回值。interrupt_timer0函數(shù)voidinterrupt_timer0(void){ITU0_TSR&=0xfe;cnt0++;cnt1++;該函數(shù)通過中斷產生1ms的時間間隔來執(zhí)行,變量cnt0和cntl的值分別增加1。由于interrupt_timer0函數(shù)執(zhí)行一次需要1ms,因此可以通過檢測主程序中cnt0或cntl的值來測量所持續(xù)的時間。變量ITU0_TSR表示計時器狀態(tài)寄存器,它與0xfe執(zhí)行與操作,并將結果保存到前者中,相當于將ITU0_TSR的第0位置“0”。之所以要在函數(shù)中編寫這一句,是因為當中斷產生時ITU0_TSR的第0位可以自動地變?yōu)椤?”,但是卻不會再自動的由“1”變?yōu)椤?”。因此要利用與操作使第0位置“0”,為下一次操作做準備。等待計時器函數(shù)voidtimer(unsignedlongtimer_set){cnt0=0;While(cnt0<timer_set);}改變函數(shù)輸入?yún)?shù)timer_set的值,可以改變等待計時器的工作時間。例如:取輸入?yún)?shù)timer_set的值為1000,全局變量cnt0首先被初始化為0,接著執(zhí)行while語句,程序轉到cnt0被操作的地方,由于執(zhí)行interrupt_timer0函數(shù)而產生的1ms中斷將使cnt0的值增加1。然后,再次執(zhí)行while語句,如此往復循環(huán),直至cnt0的值為1000時終止,最后可以得出等待計時器函數(shù)的工作時間為1000毫秒,即1s。橫白線檢測函數(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ù)為無參數(shù)函數(shù),主要用來判斷是否已經檢測到直角彎道前具有提示作用的第一條橫白線。如果檢測到橫白線,返回值為1。相反,如果沒有檢測到橫白線,則返回值為0。函數(shù)中,首先將作為返回值的變量ret置0,認為沒有檢測到橫白線。然后,讀取經MASK2_2掩蓋后的傳感器狀態(tài),并將該狀態(tài)值存入變量b中。也就是說,除了左側中間兩個和右側中間兩個傳感器的數(shù)據(jù)能正常使用外,其余各位傳感器輸出值均被置為“0”。當變量b中傳感器的輸入狀態(tài)滿足if語句中列舉的幾種狀態(tài)中的一種時,就可以認為已經檢測到橫白線,變量ret置為1。否則,變量ret仍為0,認為沒有檢測到橫白線。DIP開關狀態(tài)讀取函數(shù)unsignedchardipsw_get(void){unsignedcharsw;sw=~P6DR;sw&=0x0f;returnsw;}由于DIP開關與接口6相連,故從接口6讀取數(shù)據(jù)。如果DIP開關關閉,則接口數(shù)據(jù)為“1”。如果DIP開關打開,則接口數(shù)據(jù)為“0”。因為關閉與“0”對應,而打開與“1”對應,更容易理解。因此這里采用符號“?”對DIP開關的狀態(tài)值進行取反,并將其存放到變量sw中?!?”稱為“邏輯否定”。由于DIP開關只有4位,所以這里采用sw與0cf0的與操作將變量sw的前4位屏蔽。最后,將變量sw作為函數(shù)的返回值。按鈕開關狀態(tài)讀取函數(shù)unsignedcharpushsw_get(void){unsignedcharsw;sw=~PBDR;sw&=0x01;returnsw;}接口B的第0位用來讀取按鈕開關的狀態(tài)數(shù)據(jù)。如果按鈕沒被按下,數(shù)據(jù)為“1”。相反,如果按鈕被按下,則數(shù)據(jù)為“0”。這里同樣采用符號“?”對按鈕開關的狀態(tài)值取反,以便符合人們的思維習慣,容易理解。由于按鈕開關的狀態(tài)值只有一位,因此需要使用語句“sw&=0x01”對第0位以外的其余各位進行屏蔽。最后,將變量sw作為函數(shù)的返回值輸出。發(fā)光二極管控制函數(shù)voidled_out(unsignedcharled){unsignedchardata;led=~led;led<<=6;data=PBDR&0x3f;PBDR=data|led;}對于發(fā)光二極管,接通時信號為“0”,斷開時信號為“1”。因此,為了符合人的邏輯思維,同樣采用符號“?”,對其進行取反,并將取反后的值仍存放在變量led中。由于發(fā)光二極管與接口B的第7位和第6位連接,而變量中的信號在第1位和第2位,因此要將變量led中的值左移6位。為了將信號輸入到接口B中而不引起誤動作,首先要將接口B的第7位和第6位通過語句“data=PBDR&0x3f”置0,然后再利用對變量data和變量led的或操作將變量led中的值輸入到接口B中。這樣,就實現(xiàn)了對發(fā)光二極管的程序控制。馬達速度控制函數(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)/*左馬達*/{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)/*右馬達*/{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ù)無返回值。由于左右馬達的速度控制為PWM控制,而PWM的值又受到模型車CPU主板上DIP開關狀態(tài)的限制。因此,函數(shù)中首先調用“dipsw_get()”函數(shù),來獲得CPU主板上DIP開關的狀態(tài)值,并將其值加5后存放到變量sw_data中。這樣變量sw_data的值就位于5至20之間,并取決于DIP開關的狀態(tài)值。在運用變量sw_data計算馬達的最大速度時,由于計算過程中,數(shù)值較大,可能會造成溢出,而使結果發(fā)生錯誤。因此,暫時將其定為無符號變量,來防止發(fā)生溢出,保證結果的正確性。左馬達的轉速控制過程如下:首先檢測輸入?yún)?shù)accele_l是否大于等于0。如果大于等于0的話,則將接口B的第2位置0,使馬達正轉。接著,計算左馬達的工作比率。雖然,工作比率的設置似乎是靠通用寄存器B來完成的,而實際上,在程序中是靠緩沖寄存器B(ITU3_BRB)來實現(xiàn)的。要注意,通過速度函數(shù)設置的比率并不直接輸出到馬達,而是將“DIP的比率速度函數(shù)設置的比率”輸出到馬達作為控制信號。如果accele_l小于0的話,則將接口B的第2位置1,使馬達反轉。隨后將輸入?yún)?shù)accele_l取相反數(shù),然后再進行工作比率的計算,其計算方法與正轉時的算法相同。對于右馬達的轉速控制分析,與左馬達非常相似。不同之處為:控制右馬達正、反轉的信號由接口B的第3位輸出,并且對右馬達工作比率的設置是依靠ITU4_BRA(ITU4寄存器中的緩沖寄存器A)來實現(xiàn)的。伺服舵機轉角控制函數(shù)voidhandle(intangle){ITU4_BRB=SERVO_CENTER-angle*HANDLE_STEP;}伺服舵機與接口B的第5位相連。由于采用了復位同步脈寬調制模式,改變緩沖寄存器B(ITU4_BRB)的值就可以改變PB5的工作比率,從而改變舵機的轉角值。SERVO_CENTER是伺服舵機的中心值,其對應舵機的轉角值為0度。存放在輸入?yún)?shù)angle中的唯一轉角值是舵機由0度開始,需要轉動的角度。其實現(xiàn)方法為:在中心值的基礎上增加或減少相應的值,并存放到ITU4_BRA中。然而,緩沖寄存器B(ITU4_BRB)中的一個單位并不代表一度。在變量HANDLE_STEP中,存放著1度轉角所對應的值。因此,需要將變量angle與變量HANDLE_STEP相乘后,再在SERVO_CENTER的基礎上進行加減。初始化函數(shù)voidinit(void){P1DDR=0xff;/*I/O接口設置*/P2DDR=0xff;P3DDR=0xff;P4DDR=0xff;P5DDR=0xff;P6DDR=0xf0;P8DDR=0xff;P9DDR=0xf7;PADDR=0xff;PBDR=0xc0;PBDDR=0xfe;ITU0_TCR=0x23;/*ITU0每一秒產生一次中斷*/ITU0_GRA=TIMER_CYCLE;ITU0_IER=0x01;ITU3_TCR=0x23;/*左右馬達和伺服舵機的ITU3、*/ITU_FCR=0x3e;/*ITU4復位同步脈寬調制模式*/ITU3_GRA=PWM_CYCLE;ITU3_GRB=ITU3_BRB=0;ITU4_GRA=ITU4_BRA=0;ITU4_GRB=ITU4_BRB=SERVO_CENTER;ITU_TOER=0x38;/*ITU開始計時*/ITU_STR=0x09;}I/O接口是輸入/輸出接口的簡稱,是執(zhí)行輸入和輸出操作的地方。這里共有11個接口,分別為接口1至接口B。其中,大部分接口為8位,也有一些是少于8位的(例如:接口5只有4位,接口6只有7位,接口8只有5位,接口9只有6位。)。這些接口分別由DDR寄存器和DR寄存器組成。但是,要注意接口7是一個多余的輸入接口,沒有相關的P7DDR寄存器。DDR是“數(shù)據(jù)方向寄存器”的簡稱,它決定輸入——輸出的方向。二進制位為“0”時,表示相應的引腳為輸入引腳。二進制位為“1”時,表示相應的引腳為輸出引腳。以程序中的“PBDDR=0xfe;”語句為例進行分析:它是對接口B各引腳進行的輸入/輸出設置,將十六進制數(shù)0xfe轉換成二進制數(shù)為“11111110",它表示接口B的第1位至第7位引腳均為輸出引腳,只有第0位引腳為輸入引腳。DR是“數(shù)據(jù)寄存器”的簡稱,它可以將數(shù)據(jù)輸出到引腳或從引腳輸入。對于被設置為輸入接口(DDR=0)的引腳,通過讀取數(shù)據(jù)寄存器DR中的數(shù)據(jù)來獲得引腳的電壓水平:輸入給引腳的電壓為低電平時,數(shù)據(jù)寄存器DR中相應的二進制位為“0”;輸入給引腳的電壓為高電平時,數(shù)據(jù)寄存器DR中相應的二進制位為“1”。而對于被設置為輸出接口(DDR=1)的引腳,通過向DR寫入數(shù)據(jù)來輸出引腳的電壓水平:從引腳輸出的電壓為低電平時,向數(shù)據(jù)寄存器DR中相應的二進制位寫入“0”;從引腳輸出的電壓為高電平時,向數(shù)據(jù)寄存器DR中相應的二進制位寫入“1”。因此,程序中的“PBDR=0xco;”語句表示:接口B的引腳6和引腳7為高電平,其余引腳均為低電平。下面以表格的形式介紹一下接口B所連接的具體信號及其作用,以便對程序中為何如此設置PBDDR和PBDR的初始值有所了解。馬達驅動基板接口引腳信號方向具體信號內容二進制值“0”代表的意義二進制值“1”代表的意義1+5V2PB7至基板發(fā)光二極管LED1接通斷開3PB6至基板發(fā)光二極管LED0接通斷開4PB5至基板伺服舵機信號PWM信號5PB4至基板右馬達PWM停止PWM運動6PB3至基板右馬達旋轉方向正轉反轉7PB2至基板左馬達旋轉方向正轉反轉8PB1至基板左馬達PWM停止PWM運動9基板至PB0按鈕按下未按下10接地初始化程序的后一部分是對ITU0寄存器進行設置,使其每隔1ms就產生一次中斷,并設置左、右馬達和伺服舵機的PWM生成方式。程序中,ITU0_TCR(計時器控制寄存器)首先被初始化為0x23,隨后又令“ITU0_GRA=TIMER_CYCLE;”,其意義為:ITU0_CNT(計時計數(shù)器)可以與ITU0_GRA(通用寄存器A)進行比較,而ITU0_CNT每隔特定的一段時間,其值就會增加1,當滿足條件"ITU0_CNT=ITU0_GRA+1”時,也就是說,經過1ms后,ITU0_CNT的自身值將會再次被置為0,為下一次定時計數(shù)做準備。ITU0_IER是計時器中斷允許寄存器,,“ITU0_IER=0x01;”表示允許寄存器產生中斷。程序最后的ITU_STR是計時器開始寄存器,將其初始化為十六進制數(shù)0x09,可以命令計時器開始計時。控制左、右馬達和伺服舵機的PWM生成方式為復位同步脈寬調制模式。該模式采用ITU3寄存器和ITU4寄存器,通過結合輸出3組觸發(fā)的PWM波形。而且,這3組PWM波形的反波形也同時被輸出。但是,必須保證3組波形的周期均相同。因此,程序中首先將ITU3_TCR設置為十六進制數(shù)0x23,即允許ITU3_CNT與ITU3_GRA進行比較。而ITU3_CNT與ITU0_CNT一樣,每隔相同的一段時間,其值就會增加1。又由于ITU3_GRA=PWM_CYCLE,因此當滿足條件"ITU3_CNT=ITU3_GRA+1”時,已經過16ms的時間,這個時間就是3組PWM波形共同具有的循環(huán)周期。程序中,語句“ITU_TOER=0x38”表明:對左、右馬達和伺服舵機進行PWM控制的三組PWM波形是分別從接口PB1、PB4和PB5輸出的觸發(fā)產生的PWM波形的反波形。改變緩沖寄存器ITU3_BRB、ITU4_BRA和ITU4_BRB的值就可以改變通用寄存器ITU3_GRB、ITU4_GRA和ITU4_GRB的值,從而分別實現(xiàn)對左、右馬達和伺服舵機的PWM控制。其中,當ITU3_CNT(ITU3_GRB+1)時,PB1的輸出信號開始翻轉;當ITU3_CNT(ITU4_GRA+1)時,PB4的輸出信號開始翻轉;當ITU3_CNT=(ITU4_GRB+1)時,PB5的輸出信號開始翻轉。所以,改變上述通用寄存器的值就可以達到改變脈寬工作比率的目的。而當ITU3_CNT=(ITU3_GRA+1)時,ITU3_CNT清0,為下一個循環(huán)周期做準備。在介紹上述各函數(shù)時,用到了許多接口寄存器,必須先對這些接口寄存器進行定義,才能在程序中調用它們,從而保證程序的正確運行。H8/3048F-ONE芯片中,對這些具有內置外圍功能的I/O寄存器的定義保存在名為“h8_3048.h”的文件中(見附件)。這里只介紹一些對于有關I/O寄存器定義的理解。以程序中的語句“#definePADDR(*(unsignedchar*)0xfffd1)”為例,其意義是:無論何時,只要程序中出現(xiàn)字符串’PADDR”,它都將會被字符串"(*(unsignedchar*)0xfffd1)"代替。字符串"(*(unsignedchar*)0xfffd1)”中的批號0xfffd1代表具有內置外圍功能(包括I/O接口)的I/O寄存器被分配到存儲器中的地址,而存儲到存儲器地址中的值將作為要輸出或輸入的信號。至此,編寫MCU模型車在指定軌道上運行的主程序及對模型車各部分組件進行檢測的測試程序所需的準備工作已大體完成。利用上述各函數(shù)所能實現(xiàn)的功能及對模型車幾何模型、動力學模型、運動學模型的分析,我們可以得出模型車在當前傳感器顯示的狀態(tài)下理論上應該實現(xiàn)的動作,并用C++程序語句表達出來。這樣就完成了主程序的大體結構設計。然而,由于模型車在賽道上運行時可能出現(xiàn)的情況較多,必然會使理想的主控制程序的整體結構變得較為復雜。一般需要經過多次的調試和修改才能使其滿足控制要求。同時,程序中調用馬達速度控制函數(shù)和伺服舵機轉角控制函數(shù)時,其最優(yōu)參數(shù)的確定同樣離不開實驗的校核與修正。因此,主控制程序具體內容的確定及完善必須以實驗結果為準則。模型車的主控制程序基本上可以分為以下幾塊內容(各程序塊之間主要靠switch(pattern)語句進行有機的連接):等待按鈕開關輸入:這是主體運行程序開始執(zhí)行前的等待過程。該過程可以無限運行,直至按鈕開關被按下。當開關未被按下時,執(zhí)行該部分程序,使發(fā)光二極管LED0和LED1交替閃爍,每個發(fā)光二極管閃爍的時間間隔為0.1s。這樣,只通過簡單的觀察,就可以清楚地判斷出整個程序正處在等待階段。如果開關被按下,則程序的流程轉向下一階段,準備執(zhí)行主體運行程序??捎孟旅娴某绦蛘Z句來實現(xiàn)該等待過程。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;按鈕開關按下后等待一秒鐘:之所以要在按鈕被按下后,等待一段時間再執(zhí)行軌跡控制程序,是為了避免按鈕被按下后,模型車立即快速行駛,可能會與按按鈕的手相撞,從而破壞模型車的正常運行軌跡。由于盲目的等待總會讓人感到焦慮,擔心模型車是否出現(xiàn)故障,因此用兩個發(fā)光二極管分別閃亮0.5秒來指示這1s的等待過程。用C++語句表示為:case1:if(cnt1<500){led_out(0x1);}elseif(cnt1<1000){led_out(0x2);}else{led_out(0x0);pattern=11;cnt1=0;}break;普通軌跡運行過程:該過程包括模型車在直道和圓弧彎道上的運行過程。利用變量“MASK3_3”,在程序中將傳感器基板上中間兩個傳感器的輸出值覆蓋為“0”。相當于只采用左側3個傳感器和右側3個傳感器對賽道的路面狀況進行探測。這樣不僅減少了對不同傳感器狀態(tài)的分析情況,而且利于編程。當傳感器處于賽道中心位置(即伺服舵機擺角為0度)時,可以提升馬達速度。為了避免模型車在運行過程中沖出賽道,傳感器基板越偏離中心位置,伺服舵機的轉角值應該越大,馬達速度越低。同時,還需要考慮模型車轉向時,伺服舵機轉角與左右馬達PWM值之間相互協(xié)調的數(shù)值關系。因此,在程序中,馬達速度控制函數(shù)和伺服舵機轉角控制函數(shù)通常要一起使用。改變舵機的轉角,必然要改變馬達的速度;而改變馬達的速度,則未必要改變舵機的轉角。以傳感器輸入狀態(tài)為0x06為例(如圖21所示)。圖21此時,模型車向左偏離賽道。為了避免其沖出賽道,必然要對舵機轉角和馬達速度進行控制。其程序語句為:case0x06:handle(35);speed(50,28);break;也就是說,根據(jù)對傳感器狀態(tài)變化情況的分析,就可得出模型車應該產生的響應,并以此來校正其偏離中心軌道的距離,使其始終保持在中心軌道附近穩(wěn)定運行。但由于模型車在運行過程中存在許多對其穩(wěn)定性造成影響的因素(如:輪胎與賽道的摩擦系數(shù),各響應動作的延時以及模型車的慣性等),使理論計算的響應值與實際偏差較大。因此,需要通過多次實驗來進行比較校核,才能得到較滿意的響應值。又因為模型車的速度與穩(wěn)定性是一對不可調和的矛盾體,所以要獲得既高速又穩(wěn)定的運行狀態(tài)勢必會遇到很大困難。4)檢測急轉彎結束:模型車在急轉圓弧彎道上運行時,其最佳路徑是與賽道同心的一個圓弧。然而,由于模型車在彎道的運行軌跡很大程度上受到其進入彎道時初速度的影響,使其不可能按理想軌跡運行。為了防止在急轉彎道上由于模型車轉向不及時,使傳感器在模型車轉彎過程中檢測到賽道邊緣的白線,造成傳感器狀態(tài)發(fā)生變化,并引起誤動作,致使模型車沖出賽道。應該讓模型車在急轉過程中始終保持急轉動作,直至其返回到一個比較穩(wěn)定的狀態(tài)(賽道中心附近)時,再恢復它在普通賽道上的運行程序。以右彎道為例(如圖22所示),其程序語句為:case12:if(sensor_inp(MASK3_3)==0x06){pattern=11;}break;
圖225)直角彎道處理過程:直角彎道是整個賽道上,模型車最難以通過的地方。因此在賽道上,直角彎道前一定距離處通常設置有特定標記(兩條有一定間距的橫白線)。當傳感器檢測到這個特定標記(圖23)時,可以被模型車利用,來預知前面即將有直角彎道,并提前采取動作。圖23模型車的直角轉彎過程可分為制動和轉向兩個過程。在制動過程中應該同時調整模型車的位置,使其盡量處在賽道中心附近,并保持傳感器基板與前面的直角彎道平行。以免在彎道處傳感器狀態(tài)的波動使模型車產生誤動作。下面結合兩條橫白線的作用來簡述一下模型車的直角轉彎過程:當傳感器檢測到第一條橫白線時,模型車開始制動,經過一段時間(要保證模型車在這段時間內已經順利地通過了第二條橫白線,以免再次檢測到橫白線時,程序跳轉到上一步)后,模型車繼續(xù)制動,并調節(jié)車身位置使其穩(wěn)定在中心線附近。再經過一段時間,當傳感器的檢測狀態(tài)變?yōu)?x07或0xe0時,表明傳感器已經檢測到直角彎,模型車立即做出響應,開始以最大舵機轉角執(zhí)行轉彎過程。如果傳感器狀態(tài)為0x07,模型車向右轉。如果傳感器狀態(tài)為0xe0,則模型車向左轉。然而,模型車不能一直這樣轉下去,那樣勢必會沖出賽道。以左轉彎為例,對模型車轉彎結束狀態(tài)進行分析(圖24所示):當模型車在轉向過程中回到賽道中心附近,即傳感器狀態(tài)變?yōu)?x60時,可以認為直角彎結束,然后開始再次執(zhí)行普通賽道運行程序。但是,當傳感器狀態(tài)為0xe0(也就是說,模型車剛開始轉彎)時,由于中間的白線具有一定的寬度,很有可能使傳感器狀態(tài)在轉向瞬間變?yōu)?x60,然后模型車誤執(zhí)行普通軌跡運行程序,致使其直接沖出賽道。因此,還要對轉彎過程進行時間上的限定。只有當轉向過程經過一段時間(這個時間要大于傳感器脫離誤動作區(qū)域的時間)后,傳感器狀態(tài)變?yōu)?x60時,才標志著轉彎結束,并開始執(zhí)行普通軌跡運行程序。圖24對于右直角彎結束狀態(tài)的分析,與上述方法相同。因此,整個直角彎道的控制程序語句為:case21:/*檢測到第一條橫白線時的程序*/led_out(0x3);handle(0);speed(0,0);pattern=22;cnt1=0;break;case22:/*跳過第二條橫白線*/if(cnt1>50){cnt1=0;pattern=23;}break;case23:/*制動過程*/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:/*轉向過程*/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:/*左直角彎轉向時間控制*/if(cnt1>450){pattern=32;cnt1=0;}break;case32:/*左直角彎結束*/if(sensor_inp(MASK3_3)==0x60){led_out(0x0);pattern=11;cnt1=0;}bre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綿陽市商業(yè)綜合體商鋪租賃合同4篇
- 2025年度汽車美容養(yǎng)護合同車輛作為抵押的美容養(yǎng)護金融服務協(xié)議3篇
- 2025年度專業(yè)滅鼠滅蚊滅白蟻服務合同(2025年度版)3篇
- 2025年度食品行業(yè)電商運營及推廣服務合同
- 2025年度車輛以租代購合同信用評價體系協(xié)議
- 二零二五年度2025年創(chuàng)新型門面房租賃托管合同
- 2025年度門窗行業(yè)品牌授權銷售與運營合同
- 二零二五年度建筑用鋁合金門窗招標合同范本(防塵降噪)3篇
- 二零二五年度酒店客房預訂與夜生活娛樂服務合同
- 2025年度專業(yè)定制合同履約保函代辦服務合同11篇
- 不同茶葉的沖泡方法
- 光伏發(fā)電并網申辦具體流程
- 建筑勞務專業(yè)分包合同范本(2025年)
- 企業(yè)融資報告特斯拉成功案例分享
- 五年(2020-2024)高考地理真題分類匯編(全國版)專題12區(qū)域發(fā)展解析版
- 《阻燃材料與技術》課件 第8講 阻燃木質材料
- 低空經濟的社會接受度與倫理問題分析
- GB/T 4732.1-2024壓力容器分析設計第1部分:通用要求
- 河北省保定市競秀區(qū)2023-2024學年七年級下學期期末生物學試題(解析版)
- 運動技能學習與控制課件
- 六編元代文學
評論
0/150
提交評論