




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
摘要本文主要設(shè)計制作一輛基于線性CCD自主循跡行駛的智能車,采用飛思卡爾半導體公司生產(chǎn)的32位單片機MK60DN512VLQ10作為核心處理器,主要通過TSL1401線性CCD采集賽道的一維圖像信息,反饋給單片機控制舵機轉(zhuǎn)向,電機調(diào)速,使小車按照事先架設(shè)好的跑道自主行駛,并且能通過ST188紅外對管識別出終點(跟邊線垂直的黑線段)自動停車。硬件系統(tǒng)由單片機模塊,TSL1401線性CCD模塊、電源管理模塊、電機驅(qū)動模塊、OLED人機交互模塊、光電對管模塊以及電機、舵機和編碼器組成。軟件系統(tǒng)主要由IAR進行開發(fā),控制算法主要采用PID控制。關(guān)鍵詞智能車;線性CCD;PIDAbstractThispapermainlyintroducesthedesignaboutasmartcarwithautomatictrackingfunctionbasedonlinearCCD.ThecontrolsystemusestheFreescaleSemiconductor's32-bitmicrocontrollerMK60DN512VLQ10asthecoreprocessor.TheTSL1401linearCCDacquiresone-dimensionalimageinformation,whichisfeedbackedtoTheMCU.ThentheMCUcontrolsservo’sdirection,motor’sspeed,sothecarcanautomaticallydriveinaccordancewithbeforehandtrack,identifytheend(theblacklineverticalwithsideline)andstopautomaticallybytheST188.Thehardwaresystemincludesamicrocontrollermodule,aTSL1401linearCCDmodule,apowermanagementmodule,amotordrivemodule,twoOLEDmodules,fourphotoelectrictubemodules,amotor,aservoandaencoder.ThesoftwaresystemisdevelopedbyIARandthecontrolalgorithmmainlyusesPIDcontrol.KeywordsSmartCar;LinerCCD;PIDPAGEPAGE21.引言汽車行業(yè)的發(fā)展已經(jīng)超過了100多年,自1980年以來,智能理論控制技術(shù)在交通運輸工程中已經(jīng)被越來越廣泛的運用,智能汽車的概念在這一背景下也就相應(yīng)產(chǎn)生和發(fā)展[1]。隨著科學技術(shù)與現(xiàn)代汽車工業(yè)的結(jié)合發(fā)展,兩者的產(chǎn)物“智能汽車”能像機器人一樣,可以自動地進行環(huán)境的感知,規(guī)劃和決策的運行控制[2]。智能車系統(tǒng)是一個綜合多技術(shù)領(lǐng)域系統(tǒng),其包含了自動控制、模式識別、傳感技術(shù)、電子、電氣、計算機、機械與汽車等多個學科專業(yè)[3]。因此,對智能車技術(shù)的研究能夠促進計算機技術(shù)、車輛控制理論、攝像頭[4]等多傳感器信息融合技術(shù)等技術(shù)的快速發(fā)展;可以提高車輛的控制能力和輔助駕駛水平,對優(yōu)化交通設(shè)施,緩解和改善交通問題具有積極的意義;改善工業(yè)人員工作環(huán)境,提高安全系數(shù),同時還可以提高工業(yè)的智能化水平,提高產(chǎn)量。為人類的生產(chǎn)生活帶來越來越多的便利,使人類的生活質(zhì)量越來越高。智能車最大的要求就是能夠自動循跡,像全國“飛思卡爾”杯智能車比賽、瑞薩杯智能車比賽等比賽都是要求智能車能夠自動循跡。而光電傳感器的選用在自動循跡智能車系統(tǒng)中更是一個關(guān)鍵的問題。傳統(tǒng)的紅外對管,激光管在前瞻和穩(wěn)定性方面都存在一定的缺陷[5],線性CCD是新興的光電傳感器,第八屆全國飛思卡爾杯智能車比賽中就對TSL1401線性CCD傳感器進行了第一次使用,與傳統(tǒng)的紅外對管,激光等光電傳感器相比,線性CCD具有很多優(yōu)點,尤其是在線性度和圖像均勻性等方面,采集到的數(shù)據(jù)便于單片機處理。實驗表明,線性CCD的前瞻比較遠,能達到1.2米左右。隨著對智能車輛速度增加的要求,需要跟蹤處理越來越多路況,如路口,避障等。對于以上的情況,線性CCD能夠利用其本身的特點有效的予以解決,尤其是在對于智能車輛的提速問題上。隨著線性CCD技術(shù)的不斷提高與發(fā)展,線性程度自然會持續(xù)提高,提取的圖像信息會變得更加的穩(wěn)定有效,前瞻會變得更寬更遠,因此必定會加快推進智能車速度提高的進步[6]。本智能車系統(tǒng)就是基于線性CCD為基礎(chǔ)而設(shè)計的。2.設(shè)計方案思路2.1單片機的選擇方案一:采用傳統(tǒng)的8位40引腳單片機STC89C52作為主控芯片,該MCU是臺灣宏晶公司的產(chǎn)品,具有低功耗,高性能,編程簡單等特點,應(yīng)用在很多領(lǐng)域。方案二:使用飛思卡爾半導體公司的32位144引腳單片機MK60DN512VLQ10作為主控芯片,該MCU外設(shè)資源多,運算速度快,精度高??紤]到本次智能車系統(tǒng)設(shè)計有一定的復雜性,要求主控芯片帶有AD,PWM,正交解碼等功能,并且要用到的引腳數(shù)目比較多,因此本次設(shè)計選用了K60作為主控芯片。2.2電機驅(qū)動的選擇方案一:使用2片BTN7971半橋芯片搭成一個全橋驅(qū)動電機,電路搭建簡單,理論驅(qū)動電流達到50A,但是芯片容易發(fā)燙。方案二:用4個MOS管LR7843構(gòu)成H橋和一個MOS驅(qū)動芯片IRF2184驅(qū)動電機運轉(zhuǎn),雖然電路組建有點復雜,但是理論驅(qū)動電流能達到160A并且電路穩(wěn)定不會發(fā)燙。方案三:采用LN298電機驅(qū)動模塊,電路簡單,但是驅(qū)動電流只能達到2A,達不到理想驅(qū)動效果。考慮到系統(tǒng)電路的穩(wěn)定性,本次設(shè)計選用了方案二。2.3顯示模塊的選擇方案一:使用常用的LCD1602作為液晶顯示器,顯示字母和數(shù)字比較方便,控制簡單,成本低,整屏能顯示16*2個字符,與單片機并口連接,接線引腳多。方案二:使用LCD12864作為液晶顯示器,自帶中文字庫,分辨率為128*64,與單片機并口連接,但是價格昂貴。方案三:采用0.96寸OLED12864顯示器,采用4線同步串行SPI接線方式,接線簡單,高分辨率,為128*64,顯示效果遠遠超過LCD[7]。考慮到成本,電路接線,顯示效果等因素,本次設(shè)計選用了方案三。3.總體設(shè)計3.1系統(tǒng)設(shè)計要求本課題要求設(shè)計制作一套基于線性CCD的自主行駛小車系統(tǒng)。本系統(tǒng)場地是在一個白色地面上用黑色絕緣膠帶布置兩根邊線,兩根邊線內(nèi)是小車要行駛的道路,小車能通過線性CCD識別出該道路,并能自主沿著道路前進,到達終點時會自動停止,終點為跟邊線垂直的黑線段(黑色絕緣膠帶)。在道路中間含十字路口,要求能識別出該十字路口,并正確通過該十字路口。3.2系統(tǒng)總體設(shè)計方案本系統(tǒng)的最小控制核心MCU為MK60DN512VLQ10;線性CCD用支架固定在小車中心離地30cm處,前瞻60cm(能準確提取邊線且不失真),使用4個MOS管搭成H橋作為電機驅(qū)動模塊[8],大大增加電機驅(qū)動能力;光電傳感器模塊由四個ST188光電對管構(gòu)成,在車身底部“一”字排開,用以檢測終點。電源模塊采用飛思卡爾的7.2V電池給電機供電,同時經(jīng)TPS7350芯片輸出5V穩(wěn)壓給CCD模塊、編碼器供電;經(jīng)TL1963芯片輸出6V穩(wěn)壓給舵機供電;經(jīng)TPS7333芯片輸出3.3V穩(wěn)壓給單片機、OLED模塊供電。TSL1401線性CCD采回的圖像數(shù)據(jù)傳遞給單片機處理,單片機利用PID算法控制舵機轉(zhuǎn)變方向,調(diào)節(jié)電機速度,從而完成小車智能循跡[9]。系統(tǒng)由K60為最小控制核心模塊、TSL1401線性CCD模塊、電源管理模塊、電機驅(qū)動模塊、OLED12864液晶人機交互模塊、ST188光電對管模塊以及電機、舵機和編碼器組成。系統(tǒng)框圖如圖3-1所示。圖3-1系統(tǒng)框圖系統(tǒng)各個模塊功能設(shè)計如下:1、通過TSL1401線性CCD獲取道路的一維圖像信息(128個像素點的電壓),然后給單片機進行數(shù)據(jù)處理;2、采用MK60DN512VLQ10單片機為主控芯片對外圍電路進行實時控制;3、光電對管用以檢測起跑線,到達終點后,控制停車;4、伺服舵機帶動小車兩前輪控制小車轉(zhuǎn)向;5、電機驅(qū)動電路驅(qū)動直流電機帶動小車兩后輪運轉(zhuǎn);6、采用兩片OLED12864顯示屏,一片顯示CCD采回的圖像波形,另一片結(jié)合五向按鍵做人機交互界面,調(diào)節(jié)PID參數(shù),節(jié)省多次下載程序的時間,大大提高調(diào)車效率;7、采用500線歐姆龍編碼器反饋電機轉(zhuǎn)速,精確控制小車速度,有效提高系統(tǒng)的穩(wěn)定性。4.硬件設(shè)計4.1飛思卡爾32位單片機MK60DN512VLQ10介紹及其最小系統(tǒng)本設(shè)計使用的MCU是飛思卡爾半導體公司生產(chǎn)的32位MK60DN512VLQ10單片機,是飛思卡爾公司推薦的K60系列的32位增強型單片機。該芯片以飛思卡爾最新的閃存技術(shù),并且具有功耗低,性能高,精度高等特點,特別是多路快速的16位模數(shù)轉(zhuǎn)換(ADC)、數(shù)模轉(zhuǎn)換(DAC)和可編程增益運放(PGA)等功能強大、高效率的信號轉(zhuǎn)換,調(diào)節(jié)和控制模塊。K60還具有以太網(wǎng),全功能USB、硬件加密和篡改檢測功能,具有豐富的模擬通信,定時和控制外設(shè),還包括單精度浮點型運算單元,NAND閃存控制器和DRAM控制器[10]。本設(shè)計的MK60DN512VLQ10單片機的最小系統(tǒng)如圖4-1所示。圖4-1K60單片機最小系統(tǒng)4.2電源模塊的設(shè)計本智能小車采用飛思卡爾公司的7.2V電池給RS540直流電機供電,除此之外,系統(tǒng)還需要6V、5V、3.3V、12V給系統(tǒng)其他模塊供電。4.2.16V穩(wěn)壓電源設(shè)計由于舵機需要用到6V電源給其供電,本次設(shè)計選用了德州儀器生產(chǎn)的TL1963A電源管理芯片,可調(diào)輸出電壓范圍為1.21V~20V,輸出電流能達1.5A,驅(qū)動舵機的效果比較明顯,其電路原理圖如圖4-2所示。圖4-26V穩(wěn)壓電源原理圖通過查詢芯片的Datasheet可知,TL1963A的輸出電壓計算公式為,因此電阻R1配1K,R2配3.9K,經(jīng)計算VOUT=1.21*(1+3.9/1)=5.929V≈6V。4.2.25V穩(wěn)壓電源設(shè)計為了提高電池的使用時間,通常需要調(diào)節(jié)壓差(輸入輸出電壓差小),使用功耗小(靜態(tài)電流?。€有就是能夠有欠壓信號使單片機復位,德州儀器生產(chǎn)的TPS73XX系列就符合這一功能的低壓差穩(wěn)壓器。因此5V電源模塊部分就采用TPS7350Q芯片,最大輸出電流達500mA,輸出電壓精度高,噪聲小,內(nèi)部帶過流過壓保護,另一個優(yōu)點就是該芯片外圍元器件少,電路搭建簡單,符合智能車設(shè)計要求[11]。其電路原理圖如圖4-3所示。圖4-35V穩(wěn)壓電路原理圖在本系統(tǒng)中,5V穩(wěn)壓模塊給TSL1401線性CCD模塊,500線歐姆龍編碼器,5V至12V升壓模塊供電,經(jīng)計算CCD模塊供電需要100mA,編碼器供電只需幾十mA,升壓模塊需耗電100mA,因此使用TPS7350Q符合系統(tǒng)供電要求。4.2.33.3V穩(wěn)壓電源設(shè)計因為MCU的供電需要3.3V供電,為此選用了TPS7333Q作為電源管理IC,輸出3.3V電壓,同TPS7350Q一樣,輸出精度高,帶過壓過熱保護功能,輸出電流達500mA,電路原理圖如圖4-4所示。圖4-43.3V穩(wěn)壓電路原理圖輸出的3.3V電壓給單片機供電以為,還給OLED顯示模塊供電,單片機供電需要200mA,由于用到了2片OLED液晶屏,所以耗電200mA,因此總的供電量也是合理符合的。4.2.412V穩(wěn)壓電源設(shè)計由于IRF2184需要12V供電,因此比較使用了DCDC-5V12V升壓模塊,因為該模塊已經(jīng)集成化,所以比較穩(wěn)定,紋波比較小。其外觀圖如圖4-5所示。圖4-5B0512S外觀圖4.3電機驅(qū)動模塊電機驅(qū)動電路一般采用H全橋驅(qū)動直流電機,一般的橋式電機驅(qū)動電路分為單極性和雙極性,但是雙極性電路輸出的電壓含有比較多的交流成分,極易造成電機消磁和發(fā)燙,因此最后選擇了直流電動機可逆單極型驅(qū)動器,采用4個功率元件N溝道m(xù)os管搭建而成,額定輸出電流達到150A以上,驅(qū)動效果理想,使直流電機的轉(zhuǎn)速和扭矩都明顯提高。其電路原理圖如圖4-6所示。圖4-6電機驅(qū)動原理圖為了驅(qū)動MOS管LR7843,為此使用了mos管驅(qū)動芯片IRF2184,IRF2184的驅(qū)動電壓是12V,因此用了5V-12VDCDC升壓模塊,同時為了不讓驅(qū)動部分的大電流回流到單片機最小系統(tǒng)把單片機燒掉,因此在單片機輸出引腳和驅(qū)動之間加了隔離芯片74HC02,該芯片是4通道2輸入或非門,不僅能進行電平轉(zhuǎn)換,而且還能根據(jù)單片機輸出高低電平控制電機正反轉(zhuǎn),使用起來更方便。4.4OLED顯示模塊本次設(shè)計用到的是OLED12864液晶顯示模塊,OLED的英文名為OrganicLight-EmittingDide,中文名為有機型發(fā)光二極管,該屏幕輕薄,省電,已經(jīng)在MP3等播放器上得到了廣泛的應(yīng)用,OLED12864分辨率為128*64,能顯示中文字符,大小只有0.96寸,并且成本低,實物圖如圖4-7所示。圖4-70.96寸OLED12864實物圖為了調(diào)試方便,使用了2片OLED屏幕,一片讀取CCD采集的賽道信息,另一片用五向按鍵調(diào)節(jié)PID參數(shù)。單片機采用4線SPI驅(qū)動液晶顯示,通過控制片選端CS選擇驅(qū)動哪片OLED,模塊的電路原理圖如圖4-8所示。圖4-8OLED12864液晶屏原理圖4.5五向按鍵模塊本次設(shè)計的按鍵部分采用了五向按鍵,小巧方便,在硬件設(shè)計上原本需要占據(jù)5個I/O口,但本設(shè)計采用了AD按鍵,把5個引腳同時掛在同一個I/O口上,利用5個方向引腳電壓的差異識別出哪個方向鍵按下,大大節(jié)省了I/O口資源。按鍵模塊配合OLED模塊使用,進行人機交互,縮短了系統(tǒng)調(diào)試時間,按鍵模塊電路原理圖如圖4-9所示。圖4-9五向AD按鍵原理圖4.6TSL1401線性CCD模塊線性CCD是本系統(tǒng)的核心部分,就好比小車的“眼睛”,非常重要。本次設(shè)計中的CCD模塊采用了北京龍邱科技公司的TSL1401模塊,如圖4-10所示。圖4-10TSL1401模塊實物圖4.6.1線性CCD模塊引腳定義SI:串行輸入口。經(jīng)過單片機的IO口控制數(shù)據(jù)起始位。CLK:時鐘引腳。經(jīng)過單片機的IO口控制電荷的轉(zhuǎn)換和像素的輸出。AO:模擬輸出。經(jīng)過單片機的ADC口進行數(shù)據(jù)采集。 VDD:+5V電源供電。GND:接地。4.6.2線性CCD模塊工作原理TSL1401線性CCD模塊中有光電二極管128個成線性分布。都有積分電路與各個光電二極管相互對應(yīng),這些積分電路稱為像素。采樣的像素采集的灰度值與感應(yīng)到的光的強度以及積分的時間成正比。除了128個像素以外,模塊還包含邏輯開關(guān)控制電路以及移位寄存器電路。每個像素的積分和復位由SI引腳控制;CLK引腳在電路中的作用是順序輸出每一個像素電壓值。TSL1401線性CCD模塊的內(nèi)部結(jié)構(gòu)如圖4-11所示。圖4-11TSL1401模塊內(nèi)部結(jié)構(gòu)圖能夠從圖中看到像素電路、開關(guān)邏輯控制電路以及位移寄存器電路。還有一個增益調(diào)整模塊,對輸出電壓可調(diào)增益,所以不需要其他放大模塊進行放大,AO口輸出的電壓可以直接給單片機AD采樣進行處理。一般都是從CIK引腳的下降沿進行AD采樣。4.7ST188紅外對管模塊終點為跟邊線垂直的黑線段(黑色絕緣膠帶),小車到終點是要自動檢測到,如果也用CCD檢測,可能會造成誤判,小車轉(zhuǎn)彎時也可能當作終點而停車,所以專門用了ST188紅外對管模塊來檢測終點線,其外形如圖4-11所示。圖4-11ST188外觀引腳圖其中A、K引腳是紅外發(fā)射極的正負極,E、C引腳是接受極的正負極,能檢測范圍是4-13mm,無須接觸,電路原理圖如圖4-12所示。圖4-12ST188紅外對管接線原理圖工作原理:當檢測到黑線時(無紅外線反射),A、K未導通,C、E截至,輸出高電平,相反當檢測到白線時(有紅外線反射),A、K導通,C、E也導通,輸出端為低電平[12]。考慮到在測量過程中會出現(xiàn)比較大的死區(qū)電壓,為此加了運放進行比較器調(diào)節(jié),同時用電位器還能進行閾值調(diào)節(jié),方便靈活。為了直觀反映檢測效果,運放輸出端加了指示燈,黑線指示燈亮,白線指示燈滅。另外終點線有2段黑線,所以用了4個ST188檢測,根據(jù)黑線段的間距進行合理分布,在車模底部一字排開,無論什么情況都有2個ST188同時檢測到2條黑線段,使單片機控制小車停車。4.7500線歐姆龍編碼器智能車要完成閉環(huán)控制,必須能夠反饋速度,本系統(tǒng)采用了歐姆龍公司生產(chǎn)的500線E6A2-CW3C雙相編碼器進行反饋,轉(zhuǎn)一圈能輸出500個脈沖,實物圖如圖4-13所示。圖4-13500線編碼器實物圖編碼器一段通過齒輪跟電機連在一起,模塊有4根接線,褐色連5V,藍色連GND,黑色連A相,白色連B相,利用K60的正交解碼功能檢測脈沖數(shù)據(jù)[13]。因為A,B兩相的相位相差90度,所以可以通過對比是A相超前還是B相超前進行正反轉(zhuǎn)判斷,并且也能在A、B相的上升(下降)沿進行脈沖計數(shù),反饋給單片機測速。如果A,B相引腳直接接單片機正交解碼引腳,測到的是尖峰波(并非方波),單片機不能正常處理,因此加了10k的上拉電阻后,就能得到正常的方波給單片機測速,與單片機連接口如圖4-14所示。圖4-14編碼器引腳接線圖4.9SD-5舵機小車的轉(zhuǎn)向舵機使用的是北京科宇通博科技有限公司生產(chǎn)的SD-5舵機,它的工作電壓是6V,并且自帶堵轉(zhuǎn)保護電路,力矩是5000g,回中較準確,定位較精確,只需300Hz頻率PWM波就能進行方向控制,操作簡單。SD-5舵機實物圖如圖4-15所示。圖4-15SD-5舵機實物圖4.10RS-540直流電機本系統(tǒng)使用了RS540大功率直流電機,工作時電壓為7.2V,空載時電流為1.72A,最大的工作電流可以達到9.71A,最大工作功率達到61.75W,完全符合小車速度需要,電機實物圖如圖4-16所示;圖4-16RS540電機實物圖4.11小車車模使用飛思卡爾智能汽車競賽的B模型,實物圖如圖4-17所示。圖4-17飛思卡爾比賽B車模5.軟件設(shè)計硬件平臺搭好后,就需要軟件的開發(fā),小車只有通過軟硬件的有機結(jié)果,才能實現(xiàn)自動循跡功能,本系統(tǒng)軟件開發(fā)使用的是IAR,其界面如圖所示,IAR有多種版本,有編譯ARV的,stm8的,ARM的,因為K60是ARM內(nèi)核的,因此選擇了IARForARM版本進行安裝。IAR是目前最簡單和最完備的嵌入式開發(fā)工具,利用IAR開發(fā)有許多優(yōu)點,能夠最大化地優(yōu)化代碼,節(jié)約硬件資源,大大地降低開發(fā)成本。本次設(shè)計軟件編寫使用了通俗易懂,可移植性較強的C語言,在電腦上安裝好IAR軟件后,根據(jù)使用說明建立一個工程項目,進行程序編寫和在線調(diào)試,界面如圖5-1所示,詳細的源程序見附件。圖5-1IAR界面圖5.1總體方案程序主要要實現(xiàn)的功能是:通過TSL1401線性CCD傳感器采集的128個一維圖像信息,傳遞給單片機進行判斷處理,單片機根據(jù)PD算法,判斷小車與中線的偏差輸出PWM波控制舵機打角多少,使小車始終沿跑道中線行駛,為了控制小車的速度,使小車能閉環(huán)穩(wěn)定跑,通過反饋編碼器的轉(zhuǎn)速給單片機,單片機利用PI算法同樣輸出PWM波控制電機速率。當ST188光電對管模塊檢測到終點線后,單片機控制小車停車。為了在調(diào)試過程中方便快捷,提高效率,利用了K60的flash擦寫功能,在OLED液晶屏上使用五向按鍵改變PID參數(shù),直接在小車上調(diào)試,省去了多次下載程序的時間,并且能對調(diào)試理想的參數(shù)進行保存,下次開機后還能讀取上一次保存的參數(shù),明顯提高調(diào)車效率。5.2主程序設(shè)計程序上電后,先關(guān)總中斷,然后串口、CCD、PIT0、FTM0、FTM1、OLED、ADC、FLASH、按鍵等各模塊初始化,然后開總中斷,進入main函數(shù),開始各子函數(shù)調(diào)用。首先開始CCD的采集,CCD采集的128個像素點的電壓通過單片機AD采樣,然后二值化后通過PD算法輸出PWM波控制舵機打角轉(zhuǎn)向,編碼器正交解碼返回脈沖數(shù)給單片機通過PI算法輸出PWM波給電機調(diào)速,并且執(zhí)行AD按鍵掃描程序,執(zhí)行按鍵事件進行OLED屏幕參數(shù)調(diào)節(jié)(PID參數(shù))。以上子程序都在PIT0中斷中執(zhí)行,在PIT0中斷中,1ms進一次中斷,為一個控制周期,共分4個控制周期,第一個控制周期內(nèi)CCD曝光計算,第二個控制周期內(nèi)進行獲取編碼器脈沖數(shù)后進行PI調(diào)速,第三個周期內(nèi)進行內(nèi)進行位置解算,PD算法控制舵機轉(zhuǎn)向,第四個周期為按鍵掃描,進行人機互動。Main函數(shù)內(nèi)做兩件事:一是判斷終點線,一旦檢測到,就直接電機不使能停車;二是CCD計算曝光時間(20ms一次),會在后面CCD部分講到。主程序框圖如圖5-2所示。圖5-2系統(tǒng)主程序框圖5.3各子程序模塊設(shè)計接下來開始介紹各個子程序部分的設(shè)計,由于各程序中基本上都用到了PID控制算法,先介紹下PID控制原理。PID控制算法為使用較早,較為經(jīng)典的控制方法之一。PID控制器根據(jù)系統(tǒng)的過去信息(I)、當前信息(P)和將來信息(D)三個參數(shù)進行控制。P為系統(tǒng)偏差的比例,I為系統(tǒng)偏差的積分,D為系統(tǒng)偏差的微分。PID控制算法優(yōu)點有很多,使用起來方便簡單,魯棒性能比較好,因此在工業(yè)上得到了普遍的運用。PID控制系統(tǒng)由三部分組成,分別是控制對象、執(zhí)行機構(gòu)以及模擬調(diào)節(jié)器,如圖5-3所示。圖5-3PID控制系統(tǒng)原理框圖PID調(diào)節(jié)器是一種線性調(diào)節(jié)器,e(t)為給定的量r(t)和實際輸出的量c(t)之間的偏差:,然后將系統(tǒng)偏差的比例(P)、積分(I)、微分(D)根據(jù)某種線性組合關(guān)系組合成控制量,最終對控制量一起控制,因此叫PID調(diào)節(jié)器[14]。但是在實際生產(chǎn)應(yīng)用中,常常會根據(jù)相關(guān)控制要求需要將P、I、D進行適當?shù)慕M合,來達到有效控制被控對象的目的。比如,P調(diào)節(jié)器,PI調(diào)節(jié)器,PD調(diào)節(jié)器,PID調(diào)節(jié)器等。一般的PID調(diào)節(jié)控制規(guī)律為:上式中,KP是比例系數(shù),KI是積分常數(shù),KD是微分常數(shù)。各校正環(huán)節(jié)的在系統(tǒng)控制中作用是:比例環(huán)節(jié)(P):作用是一旦系統(tǒng)出現(xiàn)了偏差,比例調(diào)節(jié)環(huán)節(jié)馬上進行調(diào)節(jié),抑制偏差的產(chǎn)生,但是也有缺點,就是系統(tǒng)會產(chǎn)生余差;(2)積分環(huán)節(jié)(I):主要作用是為了消除比例環(huán)節(jié)產(chǎn)生的余差,提高系統(tǒng)的無差度。積分環(huán)節(jié)作用與積分時間常數(shù)有關(guān)系,積分時間常數(shù)越大,那么積分作用就越弱,反之則正好相反;(3)微分環(huán)節(jié)(D):主要反映了系統(tǒng)的偏差變化的預(yù)見性,在系統(tǒng)偏差還未變大時就產(chǎn)生抑制調(diào)節(jié),有效減少系統(tǒng)的調(diào)節(jié)時間。5.3.1TSL1401線性CCD程序設(shè)計由于因線性CCD的輸出信號與周圍環(huán)境的光線有關(guān)系,一般情況下,晚上燈光效果比白天會使輸出的電壓低,當線性CCD背對光線比正對著光線輸出電壓低,輸出電壓大小和CCD曝光量大小直接相關(guān)。曝光量取決于CCD模塊所選用的鏡頭光圈的大小和程序所控制CDD曝光時間多少,因為鏡頭光圈大小已經(jīng)固定不能改變,因此使用軟件改變曝光時間,本次設(shè)計采用了自適應(yīng)曝光時間算法調(diào)節(jié)曝光量[15]。程序流程圖如圖5-4所示。圖5-4CCD自適應(yīng)曝光曝光程序框圖曝光控制原理:先發(fā)送一次啟動和移位時序信號,因為TSL1401每128個時鐘序列的前18個周期是內(nèi)部復位,先將積分電壓清零,第18個周期以后才開始積分。中斷程序就是根據(jù)曝光時間的大小在適合的曝光點使CCD復位。下一個20ms到達后再重采樣數(shù)據(jù),采集到數(shù)據(jù)對應(yīng)的曝光時間就是系統(tǒng)輸出內(nèi)部復位序列到下一次采樣的時間。例如曝光時間為7ms,則曝光點為13ms。自適應(yīng)曝光程序有效解決了CCD的曝光受光線影響問題。5.3.2電機PI算法調(diào)速程序設(shè)計PI調(diào)節(jié)器是在自動控制中常常用到,該調(diào)節(jié)器主要作用是能快速進行系統(tǒng)反映,并且能消除系統(tǒng)穩(wěn)態(tài)誤差,結(jié)合了比例環(huán)節(jié)和積分環(huán)節(jié)兩者的優(yōu)點。本次設(shè)計用到了增量式PI調(diào)節(jié)器,其公式為,其中KP為比例系數(shù),KI為積分時間,輸出為位置增量。軟件編寫思路:進入中斷后,通過正交解碼獲取的編碼器脈沖數(shù)和給定的速度的偏差,利用PI算法輸出PWM波控制電機,不斷的刷新,能在短時間內(nèi)控制電機速度達到預(yù)期設(shè)定的速度。流程圖如圖5-5所示。圖5-5電機PI調(diào)速算法程序框圖5.3.3舵機PD算法轉(zhuǎn)向程序設(shè)計小車轉(zhuǎn)向通過單片機輸出PWM波占空比控制舵機打角,在數(shù)據(jù)處理過程中,使用邊緣檢測法檢測軌跡。將CCD傳感器取回的128個數(shù)據(jù)點根據(jù)閾值二值化后依次坐標化為0至127,由于白線為高電平(1),黑線為低電平(0),就可以得到左右邊界值。依據(jù)“中線位置=(左邊位置+右邊位置)/2”,就得到中線位置。根據(jù)中線位置與中間值63的偏差,對舵機進行控制,對于一側(cè)丟現(xiàn)情況(彎道)可以使用補線方法求中線位置,對于兩側(cè)都丟現(xiàn)(十字路口)可以采用保持上次中線位置值作為本次中線位置值使用的方法。舵機轉(zhuǎn)向利用PD算法,其核心算法為,其中KP為比例系數(shù),KD為微分系數(shù)。使用PD算法可用既能快速反映抑制偏差,又有偏差預(yù)見性,防止偏差的變大,程序流程圖如圖5-6所示。圖5-6舵機PD轉(zhuǎn)向控制算法5.3.4五向按鍵掃描程序部分設(shè)計使用了AD掃描按鍵,在PIT中斷中設(shè)置4ms的按鍵中斷,根據(jù)各按鍵的電壓不同,判斷當前被按下的是什么鍵,利用switch、case函數(shù)對不同的按鍵進行相應(yīng)事件處理,比如在OLED屏幕上進行檔位的調(diào)節(jié),PID參數(shù)的調(diào)節(jié),CCD曝光閾值的調(diào)節(jié),具體程序流程圖如圖5-7所示。圖5-7AD按鍵事件處理程序框圖5.3.5終點停車程序的設(shè)計因為終點線是2條間隔的黑線段,已經(jīng)計算過布局了4個ST188模塊,無論什么情況,都會同時有2個檢測到黑線(高電平),因此在主程序中,不斷的檢測4個ST188光電對管所對應(yīng)的輸入電壓,一旦有2個引腳同時都是高電平,那么則判斷出檢測到了終點線,就把電機驅(qū)動的使能角拉低,不使能。程序流程圖如圖5-8所示。圖5-8終點停車程序框圖6.制作與調(diào)試硬件部分組裝完畢后,接下來就是測試各個功能模塊能否正常工作。用J-link仿真器給主板下載程序。首先要測試CCD能否檢測跑道信息并在OLED12864上正常顯示出來,問題就出來了,OLED屏幕上顯示CCD的采樣數(shù)據(jù)在抖動(很不穩(wěn)定),起先認為是程序的采集問題,但是參考了官方的歷程,程序采集沒問題,最后還是從硬件開始查問題來源,用示波器開始一番測試,把問題鎖定在了CCD的5V電源供電處,5V電源的紋波很大,都達到了500mv左右,在5V和GND之間加了濾波大電容還是不見成效。詢問了指導老師后,老師看了畫的原理圖,經(jīng)過一番分析,最后把問題源頭指向了12V升壓部分,因為那里用到了220uH的電感,有一個高頻存在,直接導致了大紋波的存在,還跟PCB布線有一定的關(guān)系,由于高頻布線這方面不是很了解,在老師的建議下,使用了DC-DC電源模塊,5V轉(zhuǎn)12V,已經(jīng)產(chǎn)品集成化,因此紋波會比較小。然后第二次做板,換了DC-DC模塊,也有80mv左右的紋波,CCD采樣數(shù)據(jù)點個別在OLED液晶屏上也存在略微跳動,在老師的建議下,在5V和GND間加了一個大電容濾波,問題就基本解決了。采集到的CCD圖像如圖6-1所示。圖6-1CCD采集的圖像信息其次,需要驗證SD-5舵機能否正常轉(zhuǎn)向,舵機的工作原理就是內(nèi)部有一個20ms周期,50Hz頻率的基準脈沖,高電平在0.5ms-2.5m區(qū)間正負90度轉(zhuǎn)動,因此燒寫了一個測試程序:單片機輸出一個50Hz的方波,按鍵改變占空比的大小,觀察舵機轉(zhuǎn)動情況,結(jié)果舵機工作正常。確定了舵機能正常工作后,軟件調(diào)整舵機平衡位置并固定好。接下來就剩下電機功能的驗證了,直流電機一般用PWM波調(diào)速,改變占空比的大小就能達到調(diào)速的效果了。改變占空比的大小一般用定頻調(diào)寬,因此單片機輸出10k頻率的PWM波,按鍵調(diào)節(jié)改變增大占空比,觀察電機能否加速,結(jié)果電機也能正常工作。確定了各模塊都能正常工作后,最后就是系統(tǒng)整體的調(diào)試,為了減少程序下載時間,在另一片OLED上編寫了一個調(diào)試界面,包括電池電壓,PID參數(shù),CCD閾值,曝光時間,速度檔位設(shè)定等,可以直接通過五向按鍵在OLED界面上改變參數(shù),無需電腦調(diào)試,方便快捷。調(diào)試界面如圖6-2所示。圖6-2調(diào)試界面PID參數(shù)調(diào)試開始時,大致設(shè)一個比例(P)參數(shù),從小到大慢慢試,直到系統(tǒng)出現(xiàn)震蕩為止,選取此時P值的60%-70%為P參數(shù),再開始微調(diào)調(diào)積分參數(shù)(I)和微分參數(shù)(D),直到系統(tǒng)達到穩(wěn)定為止,由于電機的P、D參數(shù)和舵機的P、I參數(shù)是相互影響的,因此需要耐心調(diào)試才能使系統(tǒng)達到比較穩(wěn)定的效果,并且不同的不同的速度檔位各自的PID參數(shù)也是不同的。圖6-2調(diào)試界面的參數(shù)小車速度為1.8m/s時的各個參數(shù)。小車在跑道上試跑過程中,存在這樣一個問題,已經(jīng)能穩(wěn)定跑的PID參數(shù)保存好后,一段時間后就又不能跑了,看了硬件也沒損壞,調(diào)試了半天也百思不得其解。后來看了CCD采集上來的圖像后,才知道原來CCD鏡頭的前瞻改變了,因此確定了一個比較合適的前瞻后(60cm距離,能準確提取邊線且不失真),用熱熔膠把鏡頭和支架固定死,然后才開始PID參數(shù)的調(diào)節(jié),之后的調(diào)試沒有出現(xiàn)上訴問題,前一天保存的參數(shù),第二天還是能夠穩(wěn)定運行。在調(diào)試過程中,還出現(xiàn)了這樣一個問題,由于電機速度快,小車有時沖出跑道后會側(cè)翻,直接導致舵機堵轉(zhuǎn)損壞和輪子磨損,很是損壞硬件。后來經(jīng)身邊同學提醒,可以在車頭前加一個防撞裝置,聽取了同學的意見后,用廢棄的pcb板割了一個防撞裝置裝在車頭,防撞效果比較明顯。經(jīng)過半個多月的調(diào)試,基本能實現(xiàn)設(shè)計要求。7.結(jié)論本系統(tǒng)是設(shè)計一輛自動循跡小車,跑道是本系統(tǒng)場地是在一個白色地面上用黑色絕緣膠帶布置兩根邊線,兩根邊線內(nèi)是小車要行駛的道路。以MK60DN512VLQ10單片機最小系統(tǒng)作為核心控制模塊,利用TSL1401線性CCD采集的128個一維圖像(道路信息檢測),然后通過PD算法輸出PWM波控制舵機帶動小車前輪轉(zhuǎn)向,使小車行駛在預(yù)先架構(gòu)好的跑道中間,通過500線歐姆龍編碼器正交解碼后獲得計數(shù)值反饋給單片機通過PI算法輸出PWM波控制小車電機調(diào)速。檢測4個ST188模塊的輸入引腳,有2個同時為高電平表示檢測到終點線(跟邊線垂直的黑線段),則控制小車停車。在經(jīng)過軟件和硬件兩方面的綜合調(diào)試后,最后完成了本次設(shè)計要求,基本實現(xiàn)了小車的各項功能。本次設(shè)計積累的經(jīng)驗相信會在今后的設(shè)計中帶給我很多的幫助和借鑒。參考文獻[1]趙永利.光電式自主循跡小車控制系統(tǒng)設(shè)計與研究[D].四川:西南交通大學出版社,2011[2]胡海峰,史忠科,徐德文.智能汽車發(fā)展研究[J].計算機應(yīng)用與研究,2004,(6),20~23[3]付夢印,鄧志紅,劉彤.智能車輛導航技術(shù)[M].北京:科學出版社,2009[4]鄧岳.基于MC9S12DG128單片機智能車設(shè)計與實現(xiàn)[J].微型電腦應(yīng)用,2008,24(1),67~69[5]王諦,高久淳,姚培.循跡智能車系統(tǒng)中光電傳感器的應(yīng)用[J].應(yīng)用科學,2010,(11):106[6]趙萬欣,陳思屹.基于TSL1401線性CCD的智能巡線小車[J].工業(yè)控制計算機,2014,27(2),121~122[7]WangXQ,LanMJ,ZhengZH.DesignandImplementationofOLEDDriversBasedonWindowsCE[J].Microcomputer&ItsApplications,2011,(20):17~20[8]張鵬飛,齊曉慧.基于N溝道MOS管H橋驅(qū)動電路設(shè)計與制作[J].科技信息,2012,(20),147~149[9]雷永鋒,劉勇,黃喜恒.基于線性CCD的智能循跡小車設(shè)計[J].科技視界,2014,(21),34~35[10]王超藝.基于Cortex-M4內(nèi)核的Kinetis微控制器的應(yīng)用研究[D].江蘇:蘇州大學,2011[11]王明順,沈謀全.基于TPS7350的智能車電源設(shè)計[J].電子產(chǎn)品世界,2006,(24),75~78[12]蘭羽.基于紅外傳感器ST188的自動循跡小車設(shè)計[J].電子設(shè)計工程,2013,21(3),64~66[13]谷海壽,顏湘武,曲偉.正交解碼電路和捕獲單元在轉(zhuǎn)角和轉(zhuǎn)速測量中的應(yīng)用[J].電氣應(yīng)用,2005,24(1),112~115[14]MATU(S)UR.CalculationofallstabilizingPIandPIDcontrollers[J].InternationalJournalofMathematicsandComputersinSimulation,2011,(03):224~231[15]董杰君,朱煦,劉思淼,潘雯鈺.基于線性CCD光電智能車的路徑識別方法[J].數(shù)字化用戶,2013,(24),89~90謝辭這次畢業(yè)設(shè)計是我大學四年的最后一個設(shè)計制作,也可以說是成果展示。這次畢業(yè)設(shè)計能夠圓滿成功,首先我要感謝在理論和技術(shù)上支持和指導我的王韜老師,是他孜孜不倦的指導,使我的實物不斷的完善,最后能順利完成各項功能,還有對我畢業(yè)論文一次又一次的修改,才有這篇論文的的定稿。其次我要感謝身邊同學默默的幫助支持,有幾次當調(diào)試遇到瓶頸想要放棄時,是他們開導我要勇于面對,并且和我一起想解決的辦法。最后我還要感謝我的母校臺州學院給了我學習和實踐的平臺,讓我在大學四年中沒有虛度光陰,使我可以充分地利用實驗室和圖書館的軟硬件資源,充分提高自己的各項能力,為以后走出校園,踏上社會打下良好的基礎(chǔ)。附件附件1:小車整體實物圖附件2:小車主板原理圖附件3:小車主板PCB附件4:元器件清單器件類別型號參數(shù)數(shù)量單片機MK60DN512VLQ101個芯片TPS73501個TPS73331個TL19631個LR78434個IRF21842個74HC021個液晶屏OLED128642片蜂鳴器貼片有源1個直流電機RS5401個按鍵五向按鍵1個兩腳按鍵2個線性CCDTSL14011個紅外對管ST1884個編碼器500線歐姆龍1個舵機SD-51個車模飛思卡爾比賽B車模1個DC-DC升壓模塊B0512S1個電阻510歐姆6個1K3個2K1個3.9K1個5.1K1個10K15個20K1個100K1個390K2個非極性電容0.1uf10個1uf8個極性電容10uf鉭電容6個470uf/50V電解電容4個680uf/50V電解電容1個LED燈紅色4個藍色3個排針20P2條FPC排線6P1條杜邦線20P1條開關(guān)鈕子開關(guān)1個電池飛思卡爾7.2V可充電池1個附件5:主要程序主程序:#include"common.h"#include"include.h"#defineBAT_ADADC1_SE9_OSInituint8CCD_TIME=2;uint8ADV[128]={0};//聲明數(shù)組,用于存放采集的線性數(shù)值uint16g_n1MSEventCount=0;int16Speed_Back=0;int16serve_mid=1535;int16BAT_ADV=0;externuint8flag_CCD_BX;externuint8ADJ_Flag;voidPIT0_IRQHandler();voidPIT1_IRQHandler();voidmain(void){DisableInterrupts;//關(guān)總中斷uart_init(UART5,115200);tsl1401_init(10);adc_init(BAT_AD);//電池電壓采集初始化PAGEPAGE38sound_init();OLED_Init();led_init(LED0);led_init(LED1);Servo_PWM_init();FTM_PWM_init(FTM1,FTM_CH1,50,20000,serve_mid);Moter_init();//電機初始化使能方向pwmMoto_PWM(150);FTM2_QUAD_init();//正交解碼初始化KEY_ALL_init();pit_init_ms(PIT0,1); //10ms按鍵定時器掃描初始化set_vector_handler(PIT0_VECTORn,PIT0_IRQHandler);enable_irq(PIT0_IRQn);pit_init_ms(PIT1,10); //10ms按鍵定時器掃描初始化set_vector_handler(PIT1_VECTORn,PIT1_IRQHandler);enable_irq(PIT1_IRQn);uart_putstr(UART5,"taizhouuniversity2014\r\n");Dis_LOGO();led(LED0,LED_ON);led(LED1,LED_OFF);kaiji_fmq();EnableInterrupts;InitTasks();while(1){if(TIME1flag_20ms==1)//CCD20ms曝光控制周期{TIME1flag_20ms=0;}//*****************終點線檢測*****************//if((gpio_get(PORTB,1))&&(gpio_get(PORTB,2))){gpio_set(PORTD,12,0);//關(guān)閉電機使能}if((gpio_get(PORTB,1))&&(gpio_get(PORTB,3)))gpio_set(PORTD,12,0);//關(guān)閉電機使能}if((gpio_get(PORTB,1))&&(gpio_get(PORTB,4))){gpio_set(PORTD,12,0);//關(guān)閉電機使能}if((gpio_get(PORTB,2))&&(gpio_get(PORTB,3))){gpio_set(PORTD,12,0);//關(guān)閉電機使能}if((gpio_get(PORTB,2))&&(gpio_get(PORTB,4))){gpio_set(PORTD,12,0);//關(guān)閉電機使能}if((gpio_get(PORTB,3))&&(gpio_get(PORTB,4))){gpio_set(PORTD,12,0);//關(guān)閉電機使能}}}u32pitt0;u8Time_1401=0;u8speed_time=0;voidPIT0_IRQHandler(){UpdateTimers(); PIT_Flag_Clear(PIT0);g_n1MSEventCount++;if(g_n1MSEventCount==1)//電機PI算法調(diào)速{Speed_Back=FTM2_CNT;FTM2_CNT=0;Moto_PID(SET_SPEED,Speed_Back); }if(g_n1MSEventCount==2)//CCD曝光點計算{Time_1401++;if(Time_1401>=CCD_TIME){ tsl1401_time_isr();Time_1401=0;}}if(g_n1MSEventCount==3)//舵機PD算法轉(zhuǎn)向{pianyanfa();servo_PD();}if(g_n1MSEventCount==4)//按鍵掃描程序{key_IRQHandler(); }if(g_n1MSEventCount>=5) {g_n1MSEventCount=0;}}提取中線程序:voidmiddle_draw(void)//取中線{bytei=0;//左右中標志byteR_flag=0,L_flag=0,Z_flag=0;image();//二值化for(i=64;i>0;i--)//中間開始往左邊找黑線{if((SD[i]==1)&&(SD[i-1]==0)&&(SD[i-2]==0)&&(SD[i-3]==0))//&&(SD[i-3]==0)&&(SD[i-5]==0)&&(SD[i-4]==0)//當前點為1(白)左邊連續(xù)為黑(0)則為黑線{zuo_qi=i-1;//左起點標志位/*從中心向兩邊找如果一個點位白點向左三個點位黑點則該點位左七點*/}}for(i=64;i<129;i++)//中間開始往右尋線{if((SD[i]==1)&&(SD[i+1]==0)&&(SD[i+2]==0)&&(SD[i+3]==0))//&&(SD[i+3]==0))&&(SD[i+5]==0)&&(SD[i+4]==0){you_qi=i+1;//右邊黑線標志位}/*從中心向兩邊找如果一個點位白點向右三個點位黑點則該點位右起點*/}midlle=(you_qi+zuo_qi)/2;//中心點用于判斷注意分開middle是左右起點相加/2if(midlle<54)L_flag=1;/*左邊則定義為1進入左轉(zhuǎn)彎*/R_flag=0;if(midlle>74)R_flag=1;L_flag=0;if((midlle<74)||(midlle>54))Z_flag=1;/*如果中心在64*/R_flag=0;/*右邊則定義為進入右轉(zhuǎn)*/L_flag=0;if(L_flag==1)//左轉(zhuǎn)標志位{for(i=40;i<128;i++)//40開始向右尋線,這里是左邊丟線尋線{if((SD[i]==1)&&(SD[i+1]==0)&&(SD[i+2]==0)&&(SD[i+3]==0))//&&(SD[i+5]==0)&&(SD[i+4]==0))//&&(SD[i+3]==0)){Ryou_qi=i+1;//右轉(zhuǎn)彎的做起點//認為左轉(zhuǎn)彎右邊點middle=(Ryou_qi+0)/2;//補中點(右點+0左點)/2/*從中心向兩邊找如果一個點位白點向右三個點位黑點則該點位左七點*/}}if(Ryou_qi>70)//判斷丟左線情況下補的中線是否超過70右線丟失{for(i=90;i>0;i--)//掃描左線{if((SD[i]==1)&&(SD[i-1]==0)&&(SD[i-2]==0)&&(SD[i-3]==0)){Lzuo_qi=i-1;//左轉(zhuǎn)彎的右起點//個人認為是左轉(zhuǎn)彎的左起點middle=(128+Lzuo_qi)/2;//補出中線(左起點+右點128)/2}}//endforif(Lzuo_qi>10)//判斷左起點{Z_flag=1;/*如果中心在64*/R_flag=0;/*右邊則定義為*/L_flag=0;/*進入左轉(zhuǎn)彎*/}}}/*******************右轉(zhuǎn)*******************/elseif(R_flag==1)//右轉(zhuǎn){for(i=88;i>0;i--)//右線丟失,尋左線{if((SD[i]==1)&&(SD[i-1]==0)&&(SD[i-2]==0)&&(SD[i-3]==0))//&&(SD[i-5]==0)&&(SD[i-4]==0))//&&(SD[i-3]==0){Lzuo_qi=i-1;//左轉(zhuǎn)彎的右起點//右轉(zhuǎn)彎的左起點middle=(128+Lzuo_qi)/2;//補中線}}if(Lzuo_qi<58){for(i=38;i<128;i++){if((SD[i]==1)&&(SD[i+1]==0)&&(SD[i+2]==0)&&(SD[i+3]==0))//&&(SD[i+5]==0)&&(SD[i+4]==0))//&&(SD[i+3]==0)){Ryou_qi=i+1;//右轉(zhuǎn)彎的左起點//右轉(zhuǎn)彎的右起點middle=(Ryou_qi+0)/2;/*從中心向兩邊找如果一個點位白點向右三個點位黑點則該點位左七點*/}}if(Ryou_qi<118){Z_flag=1;/*如果中心在64*/R_flag=0;/*右邊則定義為*/L_flag=0;/*進入左轉(zhuǎn)彎*/}}}//end右轉(zhuǎn)elseif(Z_flag==1)//在中間標志位{for(i=64;i>0;i--)//尋左線{if((SD[i]==1)&&(SD[i-1]==0)&&(SD[i-2]==0)&&(SD[i-3]==0))//&&(SD[i-5]==0)&&(SD[i-4]==0))//&&(SD[i-3]==0){Zzuo_qi=i-1;//中間條件下的左起點/*從中心向兩邊找如果一個點位白點向左三個點位黑點則該點位左七點*/}}for(i=64;i<128;i++)//尋右線{if((SD[i]==1)&&(SD[i+1]==0)&&(SD[i+2]==0)&&(SD[i+3]==0))//&&(SD[i+5]==0)&&(SD[i+4]==0))//&&(SD[i+3]==0)){Zyou_qi=i+1;//中間條件下的右起點}/*從中心向兩邊找如果一個點位白點向右三個點位黑點則該點位左七點*/}middle=(Zzuo_qi+Zyou_qi)/2;//取中點if(middle<54)L_flag=1;R_flag=0;if(middle>74)R_flag=1;L_flag=0;if((middle<74)||(middle>54))Z_flag=1;R_flag=0;L_flag=0;}}CCD自適應(yīng)曝光及二值化程序:#include"common.h"#include"include.h"externfloatevv;externu16SD[128];//聲明數(shù)組,用于存放采集的線性數(shù)值externu16ccdV[126];//去掉最左邊兩個點的126個ccd值externintzuo_qi;externintyou_qi;externintLzuo_qi;externintRyou_qi;externintZzuo_qi;externintZyou_qi;externfloatthreshold;externvolatileintmidlle;externvolatileintmiddle;externu8zhang_ai_flag;//障礙標志位externu8shi_zi_flag;//十字標志位externu8stop_flag;//isr中/*******************************功能說明:CCD初始化**************************/voidCCD_init(void){gpio_init(PORTD,14,GPO,HIGH);//ccd2SI2ptd15//ccd1SI1ptd14gpio_init(PORTC,1,GPO,HIGH);//ccd2clkftm0ch1ptc2//ccd1ftmch0ptc1adc_init(ADC1,SE7a);//ADC1_SE4b//ccd2adptc8ADC1_SE4b--PTC8//ccd1adADC1_SE7a--PTE3}/*******************功能說明:CCD啟動程序********************/voidStartIntegration(void){unsignedchari;SI_SetVal();/*SI=1*/SamplingDelay();CLK_SetVal();/*CLK=1*/SamplingDelay();SI_ClrVal();/*SI=0*/SamplingDelay();CLK_ClrVal();/*CLK=0*/for(i=0;i<127;i++){SamplingDelay();SamplingDelay();CLK_SetVal();/*CLK=1*/SamplingDelay();SamplingDelay();CLK_ClrVal();/*CLK=0*/}SamplingDelay();SamplingDelay();CLK_SetVal();/*CLK=1*/SamplingDelay();SamplingDelay();CLK_ClrVal();/*CLK=0*/}/****************功能說明:采集程序8位*ImageData=ad_once(ADC1,AD6a,ADC_8bit);*************************************************************************/voidImageCapture(unsignedchar*ImageData){//數(shù)組ImageData存貯128個像素點unsignedchari;//延時用externu8AtemP;SI_SetVal();/*SI=1*/SamplingDelay();CLK_SetVal();/*CLK=1*/SamplingDelay();SI_ClrVal();/*SI=0*/SamplingDelay();//200nsfor(i=0;i<50;i++){SamplingDelay();//200ns}*ImageData=ad_once(ADC1,AD6a,ADC_8bit);//此段循環(huán)128次AD采集數(shù)據(jù)從這里開始ImageData++;CLK_ClrVal();/*CLK=0*/for(i=0;i<127;i++){SamplingDelay();SamplingDelay();CLK_SetVal();/*CLK=1*/SamplingDelay();SamplingDelay();//SamplingPixel2~128//SamplingPixel2~1282開始ccd數(shù)據(jù)這里開始采集*ImageData=ad_once(ADC1,SE7a,ADC_8bit);ImageData++;CLK_ClrVal();/*CLK=0*/}SamplingDelay();SamplingDelay();CLK_SetVal();/*CLK=1*/SamplingDelay();SamplingDelay();CLK_ClrVal();/*CLK=0*/}/*************函數(shù)名稱:CalculateIntegrationTime*功能說明:計算曝光時間****************/externu8Pixel[128];/*128個像素點的平均AD值*/u8PixelAverageValue;/*128個像素點的平均電壓值的10倍*/u8PixelAverageVoltage;/*設(shè)定目標平均電壓值,實際電壓的10倍*/s16TargetPixelAverageVoltage=30;/*設(shè)定目標平均電壓值與實際值的偏差,實際電壓的10倍*/s16PixelAverageVoltageError=0;/*設(shè)定目標平均電壓值允許的偏差,實際電壓的10倍*/s16TargetPixelAverageVoltageAllowError=2;/*曝光時間,單位ms*/u8IntegrationTime=10;voidCalculateIntegrationTime(void){//計算曝光時間/*計算128個像素點的平均AD值*/PixelAverageValue=PixelAverage(128,Pixel);/*計算128個像素點的平均電壓值,實際值的10倍*/PixelAverageVoltage=(unsignedchar)((int)PixelAverageValue*25/128);PixelAverageVoltageError=TargetPixelAverageVoltage-PixelAverageVoltage;if(PixelAverageVoltageError<-TargetPixelAverageVoltageAllowError)IntegrationTime--;if(PixelAverageVoltageError>TargetPixelAverageVoltageAllowError)IntegrationTime++;if(IntegrationTime<=1)IntegrationTime=1;if(IntegrationTime>=20)IntegrationTime=20;}voidimage(){chari=0;u16ccdmax=0;u16ccdmin=255;u8whitepoint_cout=0;for(i=0;i<126;i++)//去掉左邊的兩個壞點{ccdV[i]=Pixel[i+2];}for(i=0;i<126;i++)//拿到最大最小值{if(ccdV[i]>ccdmax)ccdmax=ccdV[i];if(ccdV[i]<ccdmin)ccdmin=ccdV[i];}evv=ccdmax+ccdmin;//最大+最小threshold=ccdmax*0.5+6;//(max+min)*threshold_ratio0.6正常//閾值evv*0.518for(i=0;i<128;i++){if(Pixel[i]<threshold)//二值化,比閾值大是1比閾值小是0即白1,黑0{SD[i]=0;//二值化數(shù)據(jù)保存在sd【】數(shù)組中}else{SD[i]=1;}}電機PI調(diào)速程序:voidMoto_PI(int16std_speed,int16now_speed){speed_error=std_speed-now_speed;M_PWM=M_PWM+((SPEED_Kp*(speed_error-pre_speed_error))+(SPEED_Ki*speed_error)+(SPEED_Kd*(speed_error-(2*pre_speed_error)+last_speed_error)));if(M_PWM>=900){M_PWM=900;}if(M_PWM<=-900){M_PWM=-900;}Moto_PWM(M_PWM);last_speed_error=pre_speed_error;pre_speed_error=speed_error;}舵機PD轉(zhuǎn)向程序:voidservo_PD(){ z_err0=(int16)(zhongjian-63); z_err=z_err0-z_err1; steerpwm2=serve_mid+(int)(SD5_kp*z_err0+SD5_kd*z_err); z_err1=z_err0;if(steerpwm2<1280)steerpwm2=1280;elseif(steerpwm2>1840)steerpwm2=1840; last_z_cha=last_z_dty-steerpwm2; Servo_PWM(steerpwm2); last_dty=steerpwm2;}基于C8051F單片機直流電動機反饋控制系統(tǒng)的設(shè)計與研究基于單片機的嵌入式Web服務(wù)器的研究MOTOROLA單片機MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基于增強型51系列單片機的TCP/IP協(xié)議棧的實現(xiàn)基于單片機的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機的交流伺服電機運動控制系統(tǒng)研究與開發(fā)基于單片機的泵管內(nèi)壁硬度測試儀的研制基于單片機的自動找平控制系統(tǒng)研究基于C8051F040單片機的嵌入式系統(tǒng)開發(fā)HYPERLINK"/deta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第13課 西歐經(jīng)濟和社會的發(fā)展(新教學設(shè)計)2023-2024學年九年級上冊歷史(部編版)
- 100米跑終點沖刺跑 教學設(shè)計-2023-2024學年高中體育與健康人教版必修第一冊
- 2024年山東水發(fā)水電第三季度社會招聘筆試參考題庫附帶答案詳解
- 2024年12月漯河舞陽縣事業(yè)單位公開招引人才20名筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 第1課 勝日尋芳賞春光 輕吟慢嚼悟春語-《春》教學設(shè)計七年級語文上冊同步高效課堂(統(tǒng)編版2024)
- 第十三章第2節(jié) 內(nèi)能 教學設(shè)計 -2024-2025學年人教版物理九年級上學期
- 2025年湖北工業(yè)職業(yè)技術(shù)學院單招職業(yè)適應(yīng)性測試題庫及答案1套
- Unit 10 I've had this bike for three years!Section A 1a-1c教學設(shè)計 2024-2025學年人教版八年級英語下冊
- 2025年湖南大眾傳媒職業(yè)技術(shù)學院單招職業(yè)傾向性測試題庫完整
- 2025年微波介質(zhì)陶瓷項目合作計劃書
- 春天的氣息-教學設(shè)計教案
- GB/T 41855-2022小型游樂設(shè)施轉(zhuǎn)椅
- 2023年蘇州衛(wèi)生職業(yè)技術(shù)學院高職單招(英語)試題庫含答案解析
- GB/T 20308-2020產(chǎn)品幾何技術(shù)規(guī)范(GPS)矩陣模型
- GB/T 18098-2000工業(yè)炸藥爆炸后有毒氣體含量的測定
- 男孩女孩動起來健康運動知識PPT模板
- 鐵路道岔知識課件
- 自考公共關(guān)系學課件
- 森林害蟲防治方法課件
- 各種el34名膽電子管評測
- 超分子化學-杯芳烴課件
評論
0/150
提交評論