版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 創(chuàng)新設(shè)計(jì)與實(shí)踐</b></p><p> 實(shí)訓(xùn)題目: 基于S08單片機(jī)的自動(dòng)尋跡小車設(shè)計(jì) </p><p> 專業(yè)班級(jí): 自動(dòng)化 </p><p> 學(xué)生姓名: </p><p> 學(xué) 號(hào):
2、 </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)地點(diǎn): </p><p> 2010年 12 月 20 日</p><p> 創(chuàng)新設(shè)計(jì)與實(shí)訓(xùn)任務(wù)書</p><p>&l
3、t;b> 緒論</b></p><p><b> 1.1 設(shè)計(jì)背景</b></p><p> 為加強(qiáng)大學(xué)生實(shí)踐、創(chuàng)新能力和團(tuán)隊(duì)精神的培養(yǎng),促進(jìn)高等教育教學(xué)改革,</p><p> 受教育部高等教育司委托(教高司函[2005]201 號(hào)文,附件1),由教育部高等學(xué)校自動(dòng)化專業(yè)教學(xué)指導(dǎo)分委員會(huì)(以下簡稱自動(dòng)化分教指委)主
4、辦全國大學(xué)生智能汽車競賽。該競賽以“立足培養(yǎng)、重在參與、鼓勵(lì)探索、追求卓越”為指導(dǎo)思想,是以智能汽車為競賽平臺(tái)的多學(xué)科專業(yè)交叉的創(chuàng)意性科技競賽,是面向全國大學(xué)生的一種具有探索性的工程實(shí)踐活動(dòng),旨在促進(jìn)高等學(xué)校素質(zhì)教育,培養(yǎng)大學(xué)生的綜合知識(shí)運(yùn)用能力、基本工程實(shí)踐能力和創(chuàng)新意識(shí),激發(fā)大學(xué)生從事科學(xué)研究與探索的興趣和潛能,倡導(dǎo)理論聯(lián)系實(shí)際、求真務(wù)實(shí)的學(xué)風(fēng)和團(tuán)隊(duì)協(xié)作的人文精神。</p><p> 該競賽分競速賽與創(chuàng)意賽
5、兩類比賽。競速賽是在規(guī)定的模型汽車平臺(tái)上,使</p><p> 用飛思卡爾半導(dǎo)體公司的8 位、16 位微控制器作為核心控制模塊,通過增加道</p><p> 路傳感器、電機(jī)驅(qū)動(dòng)電路以及編寫相應(yīng)軟件,制作一部能夠自主識(shí)別道路的模型</p><p> 汽車,按照規(guī)定路線行進(jìn),以完成時(shí)間最短者為優(yōu)勝。創(chuàng)意賽在統(tǒng)一比賽平臺(tái)上,</p><p>
6、 充分發(fā)揮參賽隊(duì)伍想象力,以特定任務(wù)為創(chuàng)意目標(biāo),完成研制作品,由競賽專家</p><p> 組觀摩作品現(xiàn)場展示、質(zhì)疑、現(xiàn)場觀眾投票等環(huán)節(jié),最終決定比賽名次。該競賽</p><p> 涵蓋了控制、模式識(shí)別、傳感技術(shù)、電子、電氣、計(jì)算機(jī)、機(jī)械等多個(gè)學(xué)科知識(shí)。</p><p> 該競賽以飛思卡爾半導(dǎo)體公司為協(xié)辦方,已成功舉辦了五屆,曾得到了原教</p>
7、<p> 育部副部長吳啟迪教授、原高教司張堯?qū)W司長及理工處領(lǐng)導(dǎo)、飛思卡爾公司與各</p><p> 高校師生的高度評(píng)價(jià),已發(fā)展成全國26 個(gè)省(自治區(qū))、直轄市的300 余所高校廣泛參與的全國大學(xué)生智能汽車競賽。第三、四、五屆連續(xù)被教育部批準(zhǔn)列入國家教學(xué)質(zhì)量與教學(xué)改革工程資助項(xiàng)目之一(附件2,教高函[2010]13 號(hào))。飛思卡爾公司在2010 年8 月26 與國家教育部國際合作交流司簽署了關(guān)于
8、“高等學(xué)校人才培養(yǎng)戰(zhàn)略合作協(xié)議”,此協(xié)議將繼續(xù)贊助全國大學(xué)生“飛思卡爾” 杯智能汽車競賽。</p><p> 1.2 設(shè)計(jì)的意義</p><p> 智能車競賽與教育部已舉辦的數(shù)學(xué)建模、電子設(shè)計(jì)、機(jī)械設(shè)計(jì)、結(jié)構(gòu)設(shè)計(jì)4大專業(yè)競賽不同,是以迅猛發(fā)展的汽車電子為背景,涵蓋了控制、模式識(shí)別、傳感技術(shù)、電子、電氣、計(jì)算機(jī)、機(jī)械等多個(gè)學(xué)科交叉的科技創(chuàng)意性比賽。 引導(dǎo)和激勵(lì)學(xué)生實(shí)事求是、刻苦鉆研、勇
9、于創(chuàng)新、多出成果、提高素質(zhì),發(fā)現(xiàn)和培養(yǎng)一批在學(xué)術(shù)科技上有作為、有潛力的優(yōu)秀人才。 </p><p> 1.3 設(shè)計(jì)所需的設(shè)備</p><p> 采用組委會(huì)提供的標(biāo)準(zhǔn)賽車底盤(賽車MATIZ,配備標(biāo)準(zhǔn)驅(qū)動(dòng)電機(jī)RS-380SH、轉(zhuǎn)向舵機(jī)和可充電蓄電池);單片機(jī)FREESCALE的8位單片機(jī)MC9S08AW60開發(fā)評(píng)估板;傳感器采用紅外反射式對管及觸發(fā)電路;電機(jī)驅(qū)動(dòng)采用基于33886芯片的
10、H-Bridge驅(qū)動(dòng)電路。</p><p><b> 車模介紹</b></p><p><b> ◆車模:G768</b></p><p> ◆電機(jī):RS380-ST/3545,</p><p> ◆舵機(jī):FUTABA3010</p><p><b> 2
11、 總體設(shè)計(jì)</b></p><p> 2.1 小車系統(tǒng)可分為6個(gè)部分:</p><p> ◆電源管理:穩(wěn)定電壓,使系統(tǒng)電壓穩(wěn)定在要求的電壓范圍</p><p> ◆光電傳感器:檢測路徑,校正小車在跑道上的位置</p><p> ◆車速傳感:實(shí)時(shí)檢測小車當(dāng)前的速度</p><p> ◆參數(shù)選擇:
12、根據(jù)小車當(dāng)前的狀態(tài),確定算法的參數(shù)</p><p> ◆驅(qū)動(dòng)電機(jī):根據(jù)小車的速度、位置,增減速度</p><p> ◆轉(zhuǎn)向電機(jī):控制小車的方向</p><p><b> 2.2 跑道</b></p><p> 小車跑道寬度50CM,中間黑線20mm,小車從出發(fā)去出發(fā),跑完一圈后,在起始線后1米范圍內(nèi)自動(dòng)停下來。
13、</p><p><b> 3 硬件電路設(shè)計(jì)</b></p><p> 3.1 傳感器的選擇</p><p> 光電式傳感器是利用光電器件把光信號(hào)轉(zhuǎn)換成電信號(hào)的裝置。光電式傳感器工作時(shí),先將被測量轉(zhuǎn)換為光量的變化,然后通過光電器件再把光量的變化轉(zhuǎn)換為相應(yīng)的電量變化,從而實(shí)現(xiàn)非電量的測量。光電式傳感器的核心(敏感元件)是光電器件,光電器
14、件的基礎(chǔ)是光電效應(yīng)。本設(shè)計(jì)采用采用A/D轉(zhuǎn)換的光電對管紅外光耦傳感器,當(dāng)發(fā)光二極管由A→B導(dǎo)通時(shí),會(huì)發(fā)出紅外線,經(jīng)小車跑道散射,紅外接收二極管在接收到紅外線時(shí)會(huì)由C→D導(dǎo)通,從而使OUT1的電壓由+5V變?yōu)?0.7。 </p><p><b> 3.2 車速檢測</b></p><p> 電動(dòng)機(jī)的測速有很多方法,常見的有測速發(fā)電機(jī)測速、霍爾傳感器測速、編碼器測速
15、、光電碼盤測速等。測速發(fā)電機(jī)測速適合大型電機(jī)的測速。霍爾傳感器測速的方法具有抗干擾能力強(qiáng),準(zhǔn)確可靠地特點(diǎn),但是測速分度較低,結(jié)構(gòu)也比較復(fù)雜。編碼器測速,不但使用方便,運(yùn)行可靠穩(wěn)定而且分辨率高,也是目前智能車大賽中普遍使用的測速裝置,但是價(jià)格有點(diǎn)高。我們將著重介紹光電碼盤測速,這種測速方法比較簡單、容易操作,而且編碼器也是基于光電碼盤測速的原理。</p><p> 接下來的是電路部分,需要用到槽型光耦,槽型光耦的
16、外形成一個(gè)“凹”字型,一邊是個(gè)紅外發(fā)射管另一邊是接收管,它們都被塑料殼包起來,中間留了一條很細(xì)的窄縫,沒有障礙物時(shí)接收管能接受到紅外線,有東西擋住中間時(shí)接收管就接收不到了。在選擇槽型光耦時(shí)中間縫越細(xì)小說明管子性能越好。</p><p> 從右圖電路中可以看出沒有遮擋時(shí),發(fā)射管發(fā)出的光線直接被接收管接收,接收管導(dǎo)通集電極電位為低電平,當(dāng)光線被遮擋時(shí),接收管接受不到光線,處于截止?fàn)顟B(tài),集電極為高電平,后面串了個(gè)CD
17、40106BC施密特觸發(fā)器的作用是對信號(hào)整形,遮光物體進(jìn)入和離開時(shí)都有一個(gè)過程,這就使得信號(hào)變化也有一個(gè)過程,不是規(guī)則的方波,不能直接提供給MCU,加上施密特觸發(fā)器以后,通過閥值觸發(fā),就變成規(guī)則的電平信號(hào)了。將方波信號(hào)送入測速芯片CD4040BC,可在Q0—Q11管腳輸出小車的速度。鏈接電路圖、CD4040BC封裝圖如下:</p><p><b> 3.3 電源管理</b></p&
18、gt;<p> 通過穩(wěn)壓芯片LM2940將電池電壓7.2V將為5V供單片機(jī)和光電傳感器,使用一個(gè)普通二極管將另一路輸出電壓鉗制到5.7V向舵機(jī)供電。電路圖如下:</p><p><b> 3.4 轉(zhuǎn)向電機(jī)</b></p><p> 1、舵機(jī)內(nèi)部結(jié)構(gòu):由舵盤、齒輪組、位置反饋電位計(jì)、直流電機(jī)、控制電路板等組成</p><p>
19、; 2、工作原理:脈寬信號(hào)給定參考位置,舵機(jī)內(nèi)部電路通過反饋控制調(diào)節(jié)舵盤角位。舵盤角位由PWM控制信號(hào)的脈寬決定。 </p><p><b> 3、舵機(jī)基本參數(shù):</b></p><p> 型 號(hào): S3010 </p><p> 電 壓: 4.0 ~ 6.0 [V]</p><p> 角度控制:1
20、76;/ 400us</p><p> 工作速度: 0.16 + 0.02 </p><p> 堵轉(zhuǎn)力矩: 6.5 + 1.3 [ Kg.cm] </p><p><b> 3.5 驅(qū)動(dòng)電機(jī)</b></p><p> 電機(jī)驅(qū)動(dòng)電路,我們在此使用MC33886芯片直接驅(qū)動(dòng)。</p><p&g
21、t; ◆MC33886特性:工作電壓:5-40V</p><p> ◆導(dǎo)通電阻: 120毫歐姆</p><p> ◆輸入信號(hào):TTL/CMOS</p><p> ◆PWM頻率:< 10KHz</p><p> ◆短路保護(hù)、欠壓保護(hù)、過溫保護(hù)等</p><p><b> 4 系統(tǒng)軟件設(shè)計(jì)&l
22、t;/b></p><p> 在智能車系統(tǒng)的設(shè)計(jì)中,硬件是基礎(chǔ),沒有一個(gè)好的硬件平臺(tái),軟件就無法運(yùn)行。對于智能車系統(tǒng)來說,軟件的核心是控制算法。而完成這些任務(wù)的編程語言有匯編語言和C語言。軟件部分是整個(gè)智能車系統(tǒng)的靈魂,在硬件方面各參賽隊(duì)之間大同小異,真正體現(xiàn)各參賽隊(duì)智能車的優(yōu)勢和最后決定比賽成績好壞的往往是軟件部分,尤其是核心控制算法的設(shè)計(jì)。</p><p><b>
23、 4.1 控制算法</b></p><p> PID(Proportional Integral Differential)控制是比例、積分、微分控制的簡稱。在自動(dòng)控制領(lǐng)域中,PID控制是歷史最久、生命力最強(qiáng)的基本控制方式。</p><p> PID控制器的原理是根據(jù)系統(tǒng)的被調(diào)量實(shí)測值與設(shè)定值之間的偏差,利用偏差的比例、積分、微分三個(gè)環(huán)節(jié)的不同組合計(jì)算出對廣義被控對象的控
24、制量。</p><p> 常規(guī)PID控制系統(tǒng)原理框圖</p><p> PID控制算法可分為位置型和增量型兩種:</p><p><b> (1)位置型算法</b></p><p> 模擬調(diào)節(jié)器的調(diào)節(jié)動(dòng)作是連續(xù)的,任何瞬間的輸出控制量 u 都對應(yīng)于執(zhí)行機(jī)構(gòu)(如調(diào)節(jié)閥)的位置。數(shù)字控制器的輸出控制量也和閥門位置相對
25、應(yīng),故稱為位置型算式(簡稱位置式)。</p><p><b> (2)增量型算法</b></p><p> 增量型算法僅僅是在算法設(shè)計(jì)上的改進(jìn),其輸出是相對于上次控制輸出量的增量形式,并沒有改變位置型算法的本質(zhì),即它仍然反映執(zhí)行機(jī)構(gòu)的位置開度。如果希望輸出控制量的增量,則必須采用具有保持位置功能的執(zhí)行機(jī)構(gòu)。</p><p> 4.2 主程
26、序流程圖</p><p> 主程序流程圖如圖所示。系統(tǒng)首先對設(shè)備進(jìn)行初始化,然后選擇進(jìn)入?yún)?shù)修改程序。參數(shù)設(shè)定完之后打開中斷,最后循環(huán)執(zhí)行位置速度控制程序。</p><p> 4.3 程序的初始化</p><p> 初始化部分包括參數(shù)的讀取、PID初始化、定時(shí)器和脈沖計(jì)數(shù)器的初始化、I/O端口的初始化、PWM控制器的初始化和鍵盤顯示控制器7279的初始化。&l
27、t;/p><p> 圖4.2 初始化程序流程圖</p><p> 4.4 位置速度控制</p><p> 程序首先讀取前方傳感器組的狀態(tài)來判斷賽車和黑線的位置關(guān)系,通過該位置關(guān)系給出相應(yīng)的轉(zhuǎn)向舵機(jī)的轉(zhuǎn)角和電機(jī)的轉(zhuǎn)速。具體程序流程圖如圖。</p><p> 圖4.3 位置速度控制程序</p><p> 4.5 中斷
28、處理程序</p><p> 中斷處理程序每20毫秒執(zhí)行一次,中斷處理函數(shù)的主要目的是定時(shí)讀取脈沖計(jì)數(shù)器的值并把該值反饋給PID控制程序,然后調(diào)用PID控制程序。圖給出了程序流程圖。</p><p> 4.6 PID控制程序</p><p> 系統(tǒng)采用增量式的速度PID,具體流程圖如圖4.5 。</p><p> 圖4.5 PID控制程
29、序</p><p><b> 5 系統(tǒng)調(diào)試</b></p><p><b> 5.1 開發(fā)工具</b></p><p> 程序的開發(fā)是在組委會(huì)提供的CodeWarrior IDE下進(jìn)行的,包括源程序的編寫、編譯和鏈接,并最終生成可執(zhí)行文件。</p><p> CodeWarrior 6.2
30、 是面向以HC1和S12為CPU的單片機(jī)嵌入式應(yīng)用開發(fā)軟件包。包括集成開發(fā)環(huán)境IDE、處理器專家?guī)臁⑷酒抡?、可視化參?shù)顯示工具、項(xiàng)目工程管理器、C交叉編譯器、匯編器、鏈接器以及調(diào)試器。</p><p><b> 5.2 調(diào)試過程</b></p><p> 我們使用的是單片機(jī)本身配套的BDM,在調(diào)試時(shí),把程序編譯下載到S08AC60單片機(jī)內(nèi),運(yùn)行后可通過內(nèi)存窗口
31、查看程序運(yùn)行狀況。根據(jù)小車在模擬跑道上的狀況調(diào)整參數(shù),完善硬件、軟件設(shè)計(jì),最終達(dá)到理想的水平。</p><p><b> 總 結(jié) </b></p><p> 在此份報(bào)告中,我主要介紹了智能車準(zhǔn)備的基本思路,包括電路、軟件、以及最重要的控制算法的創(chuàng)新思想。</p><p> 在電路方面,我們以模塊形式分類,在電源管理、電機(jī)驅(qū)動(dòng)、舵機(jī)驅(qū)動(dòng)
32、、傳感器、速度檢測,這五個(gè)模塊分別設(shè)計(jì),在查找資料的基礎(chǔ)上確定合適的最優(yōu)方案;然后我加以實(shí)驗(yàn),最后以報(bào)告中所提到的形式?jīng)Q定了我們最終的電路。</p><p> 在算法方面,我們使用C語言編程,利用比賽推薦的開發(fā)工具調(diào)試程序,經(jīng)過小組成員不斷討論、改進(jìn),終于設(shè)計(jì)出一套比較通用的,穩(wěn)定的程序。在這套算法中,我們結(jié)合路況調(diào)整車速,做到直線加速,彎道減速,保證在最短時(shí)間跑完全程。</p><p>
33、; 雖然成功的完成了智能車的設(shè)計(jì)制作,但是賽車的整體性能還有可提高的環(huán)節(jié),我們在以下方面還有待于更大的提高。路線識(shí)別方面,如果合理的調(diào)整紅外裝置,則可以更遠(yuǎn)的探測路線,以便做好彎道前的準(zhǔn)備,這樣便可以在直道上更充分的加速。在循線算法方面,更多的閱讀文獻(xiàn),查閱資料,可以使得理論更加成熟,也可以更有效的完善算法。</p><p><b> 參 考 文 獻(xiàn)</b></p><
34、;p> 1 王威.嵌入式微控制器S08AW原理與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2009.</p><p> 2 陳杰. 傳感器與檢測技術(shù)[M].北京:高教出版社,2004.</p><p> 3 邵貝貝 龔光華.單片機(jī)認(rèn)識(shí)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2006.</p><p> 4 閻石.數(shù)字電子技術(shù)基礎(chǔ)(第三版). 北京:
35、高等教育出版社,1989</p><p> 5 陳懂,劉瑢,金世俊.智能小車的多傳感器數(shù)據(jù)融合.現(xiàn)代電子技術(shù),2005,第六期</p><p> 6 臧杰,閻巖. 汽車構(gòu)造[M]. 北京. 機(jī)械工業(yè)出版社.2005</p><p> 7 沈長生.常用電子元器件使用一讀通[M].北京. 人民郵電出版社.2004 </p><p> 8
36、宗光華.機(jī)器人的創(chuàng)意設(shè)計(jì)與實(shí)踐[M].北京. 北京航空航天大學(xué)出版社.2004</p><p> 9 張偉等.Protel DXP高級(jí)應(yīng)用[M].北京. 人民郵電出版社.2002 </p><p> 10 張文春. 汽車?yán)碚揫M].北京.機(jī)械工業(yè)出版社.2005</p><p> 11 王曉明. 電動(dòng)機(jī)的單片機(jī)控制[M].北京. 北京航空航天大學(xué)出版社.200
37、2</p><p><b> 附表1:硬件電路圖</b></p><p><b> 附表2:程序源代碼</b></p><p> #include <hidef.h> /* for EnableInterrupts macro */</p><p> #include "
38、;derivative.h" /* include peripheral declarations */</p><p> #include <math.h></p><p> /*********************************定義舵機(jī)變量******************************************/</p>
39、<p> int ad_data[12]; /*定義數(shù)組,存放12路ad轉(zhuǎn)化后的值*/</p><p> int ad_add=0;</p><p> int ad_average=0 ;</p><p> int AD,Turn; </p><p> int mid_flag,left_close,right_
40、close;</p><p> char Zhuanjiao[]={180,170,160,150,140,130,121,113,106,100,95,90,85,80,74,67,59,50,40,30,20,10,0};</p><p> int flag0,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag10,
41、flag11;</p><p> /*********************************定義電機(jī)變量******************************************/</p><p> #define Stop1 TPM2C0V=2500;PTCD_PTCD6=0;PTFD_PTFD7=0;//能耗 </p><p> #
42、define Stop2 TPM2C0V=1500;PTCD_PTCD6=1;PTFD_PTFD7=0;//反轉(zhuǎn)</p><p> int cangshu[]={6,6,6,5,5,4,4,3,3,0,0,0,0,0,-3,-3,-4,-4,-5,-5,-6,-6,-6,}; </p><p> //char ShuruSudu[]={35,35,35,35,38,38,40,40,
43、42,42,45,45,45,42,42,40,40,38,38,35,35,35,35};</p><p> //char Shuruspeed[]={23,23,23,23,24,25,26,27,28,29,35,35,35,29,28,27,26,25,24,23,23,23,23}; //沖出跑道</p><p> char Shuruspeed[]={12,12,12,13
44、,14,15,16,17,18,19,20,20,20,19,18,17,16,15,14,13,12,12,12};//剛好</p><p> // char Shuruspeed[]={8,8,8,7,7,8,9,9,10,11,13,13,13,11,10,9,9,8,7,7,8,8,8};</p><p> int speed,a,b;</p><p>
45、<b> int u=0;</b></p><p><b> int v,w;</b></p><p><b> int uk;</b></p><p><b> int m,n;</b></p><p> int zw[]={0,0,0,0,0
46、,0,0,0,0,0,0};</p><p><b> int r;</b></p><p> int l[]={0}; </p><p> int circle=0; </p><p> typedef struct </p><p><b> {</b>&l
47、t;/p><p> int NextPoint; </p><p> int ThisPoint; //設(shè)定目標(biāo) Desired value</p><p> int Kp; //比例常數(shù) Proportional Const</p><p> int Ki; /
48、/積分常數(shù) Integral Const</p><p> int Kd; //微分常數(shù) Derivative Const</p><p> int LastError; //Error[-1]</p><p> int PrevError; //Error[-2]</p><p> int
49、 SumError; //Sums of Errors</p><p> } speedPID ;</p><p> speedPID sPID; /* *pp=&sPID; */</p><p> typedef struct </p><p><b> {</b>&
50、lt;/p><p> int NextPoint;</p><p> int ThisPoint; //設(shè)定目標(biāo) Desired value</p><p> int Kp; //比例常數(shù) Proportional Const</p><p> int Ki; //積分常數(shù)
51、Integral Const</p><p> int Kd; //微分常數(shù) Derivative Const</p><p> int LastError; //Error[-1]</p><p> int PrevError; //Error[-2]</p><p> int Su
52、mError; //Sums of Errors</p><p> } steerPID ;</p><p> steerPID DjPID; /*, *pp=&DjPID; */</p><p> /*************************************************************
53、************/</p><p> void ADCInit(void)</p><p><b> {</b></p><p> ADC1CFG=0X00; /*A/D初始化,高速模式,8位精度,ADCK=總線頻率*/</p><p> ADC1SC2=0X00;
54、 /*軟件觸發(fā),比較功能禁止*/</p><p> APCTL1=0XFF; /*AD0~AD7使能*/</p><p> APCTL2=0XFF; /*AD8-AD15使能*/</p><p> ADC1SC1=0X00; /*禁止轉(zhuǎn)換完成中斷,單詞轉(zhuǎn)換,
55、選擇AD0,并啟動(dòng)了轉(zhuǎn)換*/</p><p><b> }</b></p><p> /*************************************************************************/ </p><p> void get_data(void)</p><p>
56、;<b> { </b></p><p> ad_add=0; /*采集*/</p><p> ADC1SC1=0X00; /*選擇AD通道0,若轉(zhuǎn)化沒有結(jié)束則等待,否則將轉(zhuǎn)化結(jié)果存放入ad_data[0]中*/</p><p> for(;!ADC1SC1_COCO;);</p
57、><p> ad_data[0]=ADC1RL;</p><p> ad_add=ad_add+ad_data[0] ;</p><p> ADC1SC1=0X01;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[1]=ADC1RL;</p><
58、;p> ad_add=ad_add+ad_data[1] ;</p><p> ADC1SC1=0X02;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[2]=ADC1RL;</p><p> ad_add=ad_add+ad_data[2] ;</p><
59、p> ADC1SC1=0X03;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[3]=ADC1RL;</p><p> ad_add=ad_add+ad_data[3] ;</p><p> ADC1SC1=0X04;</p><p> for(;!A
60、DC1SC1_COCO;);</p><p> ad_data[4]=ADC1RL;</p><p> ad_add=ad_add+ad_data[4];</p><p> ADC1SC1=0X05;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[5]=ADC
61、1RL;</p><p> ad_add=ad_add+ad_data[5] ;</p><p> ADC1SC1=0X06;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[6]=ADC1RL;</p><p> ad_add=ad_add+ad_data[6
62、] ; </p><p> ADC1SC1=0X07;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[7]=ADC1RL;</p><p> ad_add=ad_add+ad_data[7];</p><p> ADC1SC1=0X08;</p>
63、<p> for(;!ADC1SC1_COCO;);</p><p> ad_data[8]=ADC1RL;</p><p> ad_add=ad_add+ad_data[8];</p><p> ADC1SC1=0X09;</p><p> for(;!ADC1SC1_COCO;);</p><p
64、> ad_data[9]=ADC1RL;</p><p> ad_add=ad_add+ad_data[9] ;</p><p> ADC1SC1=0X0A;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[10]=ADC1RL;</p><p> ad
65、_add=ad_add+ad_data[10];</p><p> ADC1SC1=0X0B;</p><p> for(;!ADC1SC1_COCO;);</p><p> ad_data[11]=ADC1RL;</p><p> ad_add=ad_add+ad_data[11]; </p><p>
66、 ad_average= ad_add /7;</p><p> /*************************************************************************/ </p><p> if(ad_data[0]>=ad_average)</p><p><b> {</b><
67、;/p><p><b> flag0=1;</b></p><p><b> }</b></p><p> if(ad_data[0]<ad_average)</p><p><b> {</b></p><p><b> flag
68、0=0;</b></p><p><b> }</b></p><p> if(ad_data[1]>=ad_average)</p><p><b> {</b></p><p> flag1=300;</p><p><b> }&l
69、t;/b></p><p> if(ad_data[1]<ad_average)</p><p><b> {</b></p><p><b> flag1=0;</b></p><p><b> }</b></p><p> if
70、(ad_data[2]>=ad_average)</p><p><b> {</b></p><p><b> flag2=5;</b></p><p><b> }</b></p><p> if(ad_data[2]<ad_average)</p
71、><p><b> {</b></p><p><b> flag2=0; </b></p><p><b> }</b></p><p> if(ad_data[3]>=ad_average)</p><p><b> {<
72、/b></p><p> flag3=700;</p><p><b> }</b></p><p> if(ad_data[3]<ad_average) </p><p><b> {</b></p><p><b> flag3=0; &
73、lt;/b></p><p><b> }</b></p><p> if(ad_data[4]>=ad_average)</p><p><b> {</b></p><p><b> flag4=8;</b></p><p>&l
74、t;b> }</b></p><p> if(ad_data[4]<ad_average)</p><p><b> {</b></p><p><b> flag4=0;</b></p><p><b> }</b></p>&
75、lt;p> if(ad_data[5]>=ad_average)</p><p><b> {</b></p><p> flag5=1100;</p><p><b> }</b></p><p> if(ad_data[5]<ad_average)</p>
76、<p><b> {</b></p><p><b> flag5=0; </b></p><p><b> }</b></p><p> if(ad_data[6]>=ad_average)</p><p><b> {</b&g
77、t;</p><p><b> flag6=13;</b></p><p><b> }</b></p><p> if(ad_data[6]<ad_average)</p><p><b> {</b></p><p><b>
78、 flag6=0; </b></p><p><b> }</b></p><p> if(ad_data[7]>=ad_average)</p><p><b> {</b></p><p> flag7=1500;</p><p><b&
79、gt; }</b></p><p> if(ad_data[7]<ad_average)</p><p><b> {</b></p><p><b> flag7=0; </b></p><p><b> }</b></p><
80、p> if(ad_data[8]>=ad_average)</p><p><b> {</b></p><p><b> flag8=17;</b></p><p><b> }</b></p><p> if(ad_data[8]<ad_aver
81、age)</p><p><b> {</b></p><p><b> flag8=0;</b></p><p><b> }</b></p><p> if(ad_data[9]>=ad_average)</p><p><b&g
82、t; {</b></p><p> flag9=1900;</p><p><b> }</b></p><p> if(ad_data[9]<ad_average)</p><p><b> {</b></p><p><b> fl
83、ag9=0; </b></p><p><b> }</b></p><p> if(ad_data[10]>=ad_average)</p><p><b> {</b></p><p> flag10=21;</p><p><b>
84、 }</b></p><p> if(ad_data[10]<ad_average)</p><p><b> {</b></p><p> flag10=0; </p><p><b> }</b></p><p> if(ad_data[11]
85、>=ad_average)</p><p><b> {</b></p><p> flag11=2300;</p><p><b> }</b></p><p> if(ad_data[11]<ad_average)</p><p><b>
86、 {</b></p><p><b> flag11=0;</b></p><p><b> } </b></p><p> AD=flag0+flag1+flag2+flag3+flag4+flag5+flag6+flag7+flag8+flag9+flag10+flag11;</p>
87、;<p> /**********************************************************************************/ </p><p> if(right_close==0)</p><p><b> {</b></p><p> if(AD== 1)<
88、/p><p><b> {</b></p><p> Turn=0;mid_flag=0;left_close=1; </p><p><b> }</b></p><p> if(AD== 301)</p><p><b> {</b><
89、/p><p> Turn=1;mid_flag=0;left_close=1;</p><p><b> }</b></p><p> if(AD== 300)</p><p><b> {</b></p><p> Turn=2;mid_flag=0;left_clo
90、se=1;</p><p><b> }</b></p><p> if(AD== 305)</p><p><b> {</b></p><p> Turn=3;mid_flag=0;left_close=1;</p><p><b> }</b&
91、gt;</p><p> if(AD== 5)</p><p><b> {</b></p><p> Turn=4; mid_flag=0;left_close=1; </p><p><b> }</b></p><p> if(AD== 705)</p&
92、gt;<p><b> {</b></p><p> Turn=5; mid_flag=0;left_close=1;</p><p><b> }</b></p><p> if(AD== 700)</p><p><b> {</b></p&g
93、t;<p> Turn=6;mid_flag=0; left_close=1; </p><p><b> }</b></p><p> if(AD== 708)</p><p><b> {</b></p><p> Turn=7;mid_flag=0; left_clo
94、se=1;</p><p><b> }</b></p><p> if(AD== 8)</p><p><b> {</b></p><p> Turn=8; mid_flag=0;left_close=1; </p><p><b> } </
95、b></p><p><b> }</b></p><p> if(AD== 1108)</p><p><b> {</b></p><p> Turn=9;mid_flag=1;left_close=0;right_close=0; </p><p>
96、<b> }</b></p><p> if(AD== 1100)</p><p><b> {</b></p><p> Turn=10; mid_flag=1;left_close=0;right_close=0;</p><p><b> }</b></p
97、><p> if(AD== 1113)</p><p><b> {</b></p><p> Turn=11;mid_flag=1;left_close=0;right_close=0; </p><p><b> }</b></p><p> if(AD==13)
98、</p><p><b> {</b></p><p> Turn=12;mid_flag=1;left_close=0;right_close=0; </p><p><b> }</b></p><p> if(AD== 1513)</p><p><b&g
99、t; {</b></p><p> Turn=13;mid_flag=1;left_close=0;right_close=0; </p><p><b> }</b></p><p> if(left_close==0)</p><p><b> {</b></p&g
100、t;<p> if(AD== 1500)</p><p><b> {</b></p><p> Turn=14; mid_flag=0; right_close=1;</p><p><b> }</b></p><p> if(AD== 1517)</p>
101、<p><b> {</b></p><p> Turn=15; mid_flag=0;right_close=1; </p><p><b> }</b></p><p> if(AD== 17)</p><p><b> {</b></p>
102、;<p> Turn=16; mid_flag=0; right_close=1;</p><p><b> }</b></p><p> if(AD== 1917)</p><p><b> {</b></p><p> Turn=17; mid_flag=0; right
103、_close=1; </p><p><b> }</b></p><p> if(AD== 1900)</p><p><b> {</b></p><p> Turn=18; mid_flag=0; right_close=1; </p><p><b>
104、; }</b></p><p> if(AD== 1921)</p><p><b> {</b></p><p> Turn=19;mid_flag=0; right_close=1;</p><p><b> }</b></p><p> if(
105、AD== 21)</p><p><b> {</b></p><p> Turn=20; mid_flag=0; right_close=1;</p><p><b> }</b></p><p> if(AD== 2321)</p><p><b>
106、 {</b></p><p> Turn=21; mid_flag=0; right_close=1;</p><p><b> }</b></p><p> if(AD== 2300)</p><p><b> {</b></p><p> Turn
107、=22;mid_flag=0; right_close=1; </p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p> /*************************PID初始化**
108、********************/</p><p> void PIDInit(void)</p><p><b> {</b></p><p> sPID.ThisPoint=0; //設(shè)定目標(biāo) Desired value</p><p> sPID.Kp=0; //
109、比例常數(shù) Proportional Const</p><p> sPID.Ki=0; //積分常數(shù) Integral Const</p><p> sPID.Kd=0; //微分常數(shù) Derivative Const</p><p> sPID.LastError=0; //Error[-1]&l
110、t;/p><p> sPID.PrevError=0; //Error[-2]</p><p> sPID.SumError=0; //Sums of Errors </p><p> DjPID.ThisPoint=0; //設(shè)定目標(biāo) Desired value 302</p><p> DjPI
111、D.Kp=1; //比例常數(shù) Proportional Const 50</p><p> DjPID.Ki=1; //積分常數(shù) Integral Const</p><p> DjPID.Kd=3; //微分常數(shù) Derivative Const</p><p> DjPID.La
112、stError=0; //Error[-1]</p><p> DjPID.PrevError=0; //Error[-2]</p><p> DjPID.SumError=0; //Sums of Errors </p><p><b> }</b></p><p> /****
113、*********************IO初始化**********************/</p><p> void IOInit(void)</p><p><b> {</b></p><p> PTGDD_PTGDD4=0; //G4復(fù)位按鍵</p><p> PTGPE_PTGPE4=1;
114、</p><p> PTGDD_PTGDD3=1; /*G3連接計(jì)數(shù)芯片4040清零管腳,高電平清零*/</p><p> PTGD_PTGD3=0; </p><p> PTGDD_PTGDD1=1; /*G1拉高蜂鳴器,高電平有效,強(qiáng)驅(qū)動(dòng)*/</p><p> PTGDS_PTGDS1=1;</p>
115、<p> PTGD_PTGD1=1;</p><p> PTGD_PTGD1=0;</p><p> PTEDD=0x00; /*E 測速計(jì)數(shù)輸入*/</p><p> PTCDD_PTCDD6=1; /*C6連接驅(qū)動(dòng)芯片386的IN1*/</p><p> PTFDD_PTFDD7=1; /* F7連接驅(qū)
116、動(dòng)芯片386的IN2*/</p><p> PTCD_PTCD6=0;</p><p> PTFD_PTFD7=1;</p><p><b> }</b></p><p> /*************************時(shí)鐘初始化**********************/</p><
117、p> void ICGInit(void)</p><p><b> {</b></p><p> ICGC1=0x78; /*fll系數(shù)為p=1,外部晶振*/ </p><p> ICGC2=0x20; /*倍頻因子N=8,分頻因子R=1*/</p><p><b>
118、}</b></p><p> /*************************電機(jī)舵機(jī)初始化**********************/</p><p> void servoInit(void)</p><p><b> { </b></p><p> TPM2SC=0x0F;
119、 /*總線時(shí)鐘128分頻*/</p><p> TPM2MOD=2500;</p><p> TPM2C1SC=0x28; /*舵機(jī)初始化------通道0設(shè)置邊緣對齊的PWM,中斷請求不允許*/</p><p> TPM2C1V=185; </p><p> TPM2C0SC=0x28;
120、 /*電機(jī)初始化------通道0設(shè)置邊緣對齊的PWM,中斷請求不允許*/</p><p> TPM2C0V=0; /*設(shè)定初始占空比,舵機(jī)處于中間位置*/</p><p><b> }</b></p><p> /*************************延時(shí)****************
121、************/</p><p> void delay(int de){</p><p> while(de--){ __RESET_WATCHDOG();}</p><p><b> }</b></p><p> void delay1(int de)</p><p>&l
122、t;b> {</b></p><p> int i=100;</p><p> while(de--)</p><p> while(i--)</p><p> __RESET_WATCHDOG();</p><p><b> } </b></p>&l
123、t;p> void delay2(int count) /* 延時(shí)子程序*/</p><p><b> { </b></p><p> int i,j,k;</p><p> for(i=0;i<count;i++)</p><p><b> {
124、 </b></p><p> for(j=0;j<100;j++)</p><p><b> { </b></p><p> for(k=0;k<800;k++)</p><p><b> {</b></p><p> __RESET
125、_WATCHDOG(); /*復(fù)位看門狗計(jì)數(shù)器*/</p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p>
126、<p> /*************************溢出中斷處理****************** **/</p><p> interrupt VectorNumber_Vtpm3ovf void TPM3OVF_ISR(void)</p><p><b> { </b></p><p> DisableI
127、nterrupts;</p><p> if((TPM3SC & 0x80)==0x80)</p><p><b> {</b></p><p> TPM3SC_TOF = 0;</p><p><b> }</b></p><p> speed=PTED&
128、amp;0x3F;;</p><p> PTGD_PTGD3=1;//計(jì)數(shù)器清零</p><p> PTGD_PTGD3=0;</p><p> if((Turn>7)&&(Turn<15)) </p><p><b> {</b></p><p><b&
129、gt; l[0]=1;</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p><b> l[0]=0;</b></p><
130、p> if(Turn>14) r=1;</p><p> if(Turn<8) r=2;</p><p><b> }</b></p><p> zw[10]=zw[9];</p><p> zw[9]=zw[8];</p><p> zw[8]=zw[7];<
131、/p><p> zw[7]=zw[6];</p><p> zw[6]=zw[5];</p><p> zw[5]=zw[4];</p><p> zw[4]=zw[3];</p><p> zw[3]=zw[2];</p><p> zw[2]=zw[1];</p>&l
132、t;p> zw[1]=zw[0];</p><p> zw[0]=l[0];</p><p> EnableInterrupts;</p><p><b> } </b></p><p> /*********************速度PID****************************/&
133、lt;/p><p> int speedPIDCalc (speedPID *pp)</p><p><b> {</b></p><p> int Error,dError;</p><p> Error=pp->ThisPoint-pp->NextPoint; //偏差e(k)</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)---基于單片機(jī)的自動(dòng)尋跡小車
- 基于atmega8單片機(jī)尋跡小車設(shè)計(jì)
- 基于單片機(jī)的智能尋跡小車畢業(yè)設(shè)計(jì)
- 基于單片機(jī)的智能尋跡小車設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 自動(dòng)尋跡小車論文
- 基于51單片機(jī)的智能尋跡小車
- 自動(dòng)尋跡智能電動(dòng)小車設(shè)計(jì)【開題報(bào)告】
- 自動(dòng)尋跡智能電動(dòng)小車設(shè)計(jì)開題報(bào)告
- 基于單片機(jī)的尋光、尋跡小車.rar
- 基于單片機(jī)的尋光、尋跡小車.rar
- 自動(dòng)尋跡智能電動(dòng)小車設(shè)計(jì)【文獻(xiàn)綜述】
- 智能機(jī)器小車(紅外遙控、自動(dòng)尋跡)
- 尋跡小車課程設(shè)計(jì)報(bào)告
- 自動(dòng)避障尋跡小車硬件設(shè)計(jì)畢業(yè)論文
- 畢業(yè)設(shè)計(jì)--智能機(jī)器小車-紅外遙控、自動(dòng)尋跡
- 基于攝像頭的尋跡小車設(shè)計(jì)
- 基于單片機(jī)的自動(dòng)避障小車設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)設(shè)計(jì)基于單片機(jī)的自動(dòng)往返小車
- 畢業(yè)論文----基于以太網(wǎng)的自動(dòng)尋跡小車
- 智能尋跡滅火小車
評(píng)論
0/150
提交評(píng)論