智能車制作全過程(飛思卡爾).doc
《智能車制作全過程(飛思卡爾).doc》由會員分享,可在線閱讀,更多相關(guān)《智能車制作全過程(飛思卡爾).doc(43頁珍藏版)》請在裝配圖網(wǎng)上搜索。
智能車制作全過程(飛思卡爾) 如果我寫得好,請頂我一下,我將再接再厲! (本人在很久以前做的一輛用來比賽的智能車--獲得華北一等獎,全國二等獎,有許多可改進地方.) 下面我們來立即開始我們的智能車之旅: 首先,一個系統(tǒng)中,傳感器至關(guān)重要. "不管你的CPU的速度如何的快,通信機制如何的優(yōu)越,系統(tǒng)的精度永遠無法超越傳感器的精度" .是的,在這個系統(tǒng)中,傳感器的精度,其準確性就顯得至關(guān)重要.如果你問我傳感器的電路,呵呵,我早就和大家分享了,在我發(fā)表的日志中,有一篇<<基于反射式距離傳感器>>的文章就詳細的說明了傳感器的硬件電路以及可以采取的信號采樣方式. 傳感器安裝成一排,如上面排列.(就是個一字排列,沒有什么特別) 接下來,看看我們?nèi)绾翁幚韨鞲衅鞯玫降男畔? 大家看到了.結(jié)構(gòu)很簡單,我們已經(jīng)搞定了傳感器通路.下面我們來看看多機的控制方面的問題: 其實,不管是便宜還是比較貴的舵機,都是一樣的用法.舵機的特點就是不同的占空比方波就對應(yīng)著舵機的不同轉(zhuǎn)角.當(dāng)然不同的舵機有不同的頻率要求.比如我用的這個舵機:方波頻率50HZ.怎么改變占空比?這個不就是PWM模塊的功能嘛.PWM模塊可以輸出任意占空比的方波.只要你控制其中的占空比寄存器,就可以直接控制舵機的轉(zhuǎn)角.你只要將傳感器的狀態(tài)和這個占空比對應(yīng)上,不就OK了?就這么簡單,做到這里,你就可以讓你的車在跑道上跑了! 接下來,我們的工作是讓智能車更加完善:速度要穩(wěn)定. 在當(dāng)前的系統(tǒng)結(jié)構(gòu)中,要使一個系統(tǒng)更穩(wěn)定更可靠,閉環(huán)系統(tǒng)是一個選擇.(如果你不知道什么是閉環(huán)系統(tǒng),可以參照我的文章里面的一篇"基于單片機的PID電機調(diào)速"),既然是一個閉環(huán)系統(tǒng),速度傳感器是必不可少的,用什么樣的傳感器做為速度反饋呢: 仔細看,和后輪之間有一條皮帶的這個貌似電機的東西,就是我的速度傳感器,它的學(xué)名叫"旋轉(zhuǎn)編碼器".這個器件的特點就是:每轉(zhuǎn)一圈,就會從輸出端輸出一定的脈沖,比如我這個旋轉(zhuǎn)編碼器是500線的,就是轉(zhuǎn)一圈輸出500個脈沖.因此,我只要在單位時間內(nèi)計數(shù)輸出端輸出的脈沖數(shù),我就可以計算出車輛的速度.顯然,這個速度可以用來作為PID速度調(diào)節(jié)的反饋. 現(xiàn)在有了反饋,我們需要的是調(diào)節(jié)智能車驅(qū)動電機的速度了,如何來調(diào)速,就成了必須解決的問題了.我用的是驅(qū)動芯片MC33886. 其實,這個芯片就是一個功率放大的模塊. 我們知道,單片機輸出的PWM信號還是TTL信號,是不能直接用來驅(qū)動電機的.非要通過功率模塊的放大不可.這個道理其實很簡單,就像上次我給大家畫的哪個電子琴電路的放大電路一樣: 看上面的那個三極管,就是將TTL電路的電流放大,才能夠來驅(qū)動蜂鳴器.其實這里的這個MC33886就是這樣的一個作用.而且我們自己也完全可以用三極管自己搭建一個這樣的功率放大電路,當(dāng)然,驅(qū)動能力肯定不如這里的這個MC33886(如我們用三極管就搭建了超過MC33886的電路,摩托羅拉就不會賣幾十塊錢一個了.呵呵.)知道了這個MC33886的工作原理,就好說了,一句話,通過PWM來調(diào)節(jié)電機的速度.當(dāng)方波中高電平占的比例大,電機的平均電壓肯定高,轉(zhuǎn)速肯定快.也就是說,PWM的占空比越大,電機轉(zhuǎn)速越高. 看,就這么簡單,這個智能車就做好了.接下來,我們就把我們知道的PID知識放到舵機和直流驅(qū)動電機的控制中去.就可以達到一個比較好的控制效果. 如果要達到更高的水平,肯定機械方面的改造也少不了.當(dāng)然,這不屬于本文的討論范圍.呵呵. 智能車制作全過程(飛思卡爾---舵機篇 發(fā)表于 2008/11/28 10:00:55 感謝大家的支持!如果我寫得好,請頂我一下! 智能車的制作中,看經(jīng)驗來說,舵機的控制是個關(guān)鍵.相比驅(qū)動電機的調(diào)速,舵機的控制對于智能車的整體速度來說要重要的多. PID算法是個經(jīng)典的算法,一定要將舵機的PID調(diào)好,這樣來說即使不進行驅(qū)動電機的調(diào)速(勻速),也能跑出一個很好的成績. 機械方面: 從我們的測試上來看,舵機的力矩比較大,完全足以驅(qū)動前輪的轉(zhuǎn)向.因此舵機的相應(yīng)速度就成了關(guān)鍵.怎么增加舵機的響應(yīng)速度呢?更改舵機的電路?不行,組委會不允許.一個非常有效的辦法是更改舵機連接件的長度.我們來看看示意圖: 從上圖我們能看到,當(dāng)舵機轉(zhuǎn)動時,左右輪子就發(fā)生偏轉(zhuǎn).很明顯,連接件長度增加,就會使舵機轉(zhuǎn)動更小的轉(zhuǎn)角而達到同樣的效果.舵機的特點是轉(zhuǎn)動一定的角度需要一定的時間.不如說(只是比喻,沒有數(shù)據(jù)),舵機轉(zhuǎn)動10度需要2ms,那么要使輪子轉(zhuǎn)動同樣的角度,增長連接件后就只需要轉(zhuǎn)動5度,那么時間是1ms,就能反應(yīng)更快了.據(jù)經(jīng)驗,這個舵機的連接件還有必要修改.大約增長0.5倍~2倍. 在今年中,有人使用了兩個舵機分別控制兩個輪子.想法很好.但今年不允許使用了. 接下來就是軟件上面的問題了. 這里的軟件問題不單單是軟件上的問題,因為我們要牽涉到傳感器的布局問題.其實,沒有人說自己的傳感器布局是最好的,但是肯定有最適合你的算法的.比如說,常規(guī)的傳感器布局是如下圖: 這里好像說到了傳感器,我們只是略微的一提.上圖只是個示意圖,意思就是在中心的地方傳感器比較的密集,在兩邊的地方傳感器比較的稀疏.這樣做是有好處的,大家看車輛在行駛到轉(zhuǎn)彎處的情況: 相信看到這里,大家應(yīng)該是一目了然了,在轉(zhuǎn)彎的時候,車是偏離跑道的,所以兩邊比較稀疏還是比較科學(xué)的,關(guān)于這個,我們將在傳感器中在仔細討論。 在說到接下來的舵機的控制問題,方法比較的多,有人是根據(jù)傳感器的狀態(tài),運用查表法差出舵機應(yīng)該的轉(zhuǎn)角,這個做法簡單,而且具有較好的濾波"效果",能夠?qū)㈠e誤的傳感器狀態(tài)濾掉;還有人根據(jù)計算出來的傳感器的中心點(比如第四個和第五個傳感器檢測到黑線,中心點就是4.5),計算出舵機需要的轉(zhuǎn)角,這個做法也比較的簡單,但是必須有一個濾波的過程,必須要濾掉錯誤的傳感器狀態(tài).比如說:現(xiàn)在傳感器第四個,第五個和第11個檢測到了黑線,顯然第11個應(yīng)該是個傳感器檢測錯誤.應(yīng)該把它濾掉.關(guān)于這個如何濾波,我們待會在后面將進行討論.還有人的做法就是采用PID算法,這個方法比較的好,其實也不是很難,就是PID參數(shù)整定的時候有些麻煩. 大家可以自己選擇喜歡的方法. 關(guān)于濾波,有些許的方法: 1.平均值排序法. 這個方法大家肯定一聽就知道是怎么回事.就是不急于執(zhí)行,先多次檢測被測傳感器,累加,求平均值.這個方法不錯,特別在單片機中.比如:你如果連續(xù)采集8次,累加,最后你只要右移三位(value=value>>3;)就是value=value/8的結(jié)果.畢竟,在單片機中,右移比除法要快嘛. 2.中間值算法. 這個算法也簡單,顧名思義,就是取不大不小的中間的值.這個算法就需要把幾次采集的值排序,然后使用中間的那個值. 3.遞推濾波. 這個濾波方法比較的受認可,但是執(zhí)行起來也有風(fēng)險所在.先說這個算法,就是根據(jù)當(dāng)前值(傳感器的中心點所在值),推算接下來的傳感器中心點的量,如果發(fā)現(xiàn)前后變化劇烈,就視為干擾因素,忽略.這個算法看起來比較的好.但是風(fēng)險就在于:如果出現(xiàn)了錯誤,并且錯誤的中心點成為的當(dāng)前值,那么以錯誤的中心點為基準,正確的中心點就成了干擾.這樣就會出現(xiàn)極端情況.為了避免這個情況,我們應(yīng)該有一個檢查的模塊,檢查當(dāng)前的中心點是否有效.這個檢查,我們也許可以結(jié)合前面兩種方法,在一定時間對中心點的有效性進行檢查. 4.限幅濾波. 這個在舵機的控制中,特別是使用計算的方法獲得PWM信號占空比的(用來控制舵機的轉(zhuǎn)角),更是尤為重要.這個濾波的思路就是規(guī)定一個最大值和一個最小值,當(dāng)計算出的值低于最小值時,令其等于最小值;大于最大值時,令其等于最大值. 智能車制作全過程(飛思卡爾) 發(fā)表于 2008/11/15 22:28:01 如果我寫得好,請頂我一下,我將再接再厲! (本人在很久以前做的一輛用來比賽的智能車--獲得華北一等獎,全國二等獎,有許多可改進地方.) 下面我們來立即開始我們的智能車之旅: 首先,一個系統(tǒng)中,傳感器至關(guān)重要. "不管你的CPU的速度如何的快,通信機制如何的優(yōu)越,系統(tǒng)的精度永遠無法超越傳感器的精度" .是的,在這個系統(tǒng)中,傳感器的精度,其準確性就顯得至關(guān)重要.如果你問我傳感器的電路,呵呵,我早就和大家分享了,在我發(fā)表的日志中,有一篇<<基于反射式距離傳感器>>的文章就詳細的說明了傳感器的硬件電路以及可以采取的信號采樣方式. 傳感器安裝成一排,如上面排列.(就是個一字排列,沒有什么特別) 接下來,看看我們?nèi)绾翁幚韨鞲衅鞯玫降男畔? 大家看到了.結(jié)構(gòu)很簡單,我們已經(jīng)搞定了傳感器通路.下面我們來看看多機的控制方面的問題: 其實,不管是便宜還是比較貴的舵機,都是一樣的用法.舵機的特點就是不同的占空比方波就對應(yīng)著舵機的不同轉(zhuǎn)角.當(dāng)然不同的舵機有不同的頻率要求.比如我用的這個舵機:方波頻率50HZ.怎么改變占空比?這個不就是PWM模塊的功能嘛.PWM模塊可以輸出任意占空比的方波.只要你控制其中的占空比寄存器,就可以直接控制舵機的轉(zhuǎn)角.你只要將傳感器的狀態(tài)和這個占空比對應(yīng)上,不就OK了?就這么簡單,做到這里,你就可以讓你的車在跑道上跑了! 接下來,我們的工作是讓智能車更加完善:速度要穩(wěn)定. 在當(dāng)前的系統(tǒng)結(jié)構(gòu)中,要使一個系統(tǒng)更穩(wěn)定更可靠,閉環(huán)系統(tǒng)是一個選擇.(如果你不知道什么是閉環(huán)系統(tǒng),可以參照我的文章里面的一篇"基于單片機的PID電機調(diào)速"),既然是一個閉環(huán)系統(tǒng),速度傳感器是必不可少的,用什么樣的傳感器做為速度反饋呢: 仔細看,和后輪之間有一條皮帶的這個貌似電機的東西,就是我的速度傳感器,它的學(xué)名叫"旋轉(zhuǎn)編碼器".這個器件的特點就是:每轉(zhuǎn)一圈,就會從輸出端輸出一定的脈沖,比如我這個旋轉(zhuǎn)編碼器是500線的,就是轉(zhuǎn)一圈輸出500個脈沖.因此,我只要在單位時間內(nèi)計數(shù)輸出端輸出的脈沖數(shù),我就可以計算出車輛的速度.顯然,這個速度可以用來作為PID速度調(diào)節(jié)的反饋. 現(xiàn)在有了反饋,我們需要的是調(diào)節(jié)智能車驅(qū)動電機的速度了,如何來調(diào)速,就成了必須解決的問題了.我用的是驅(qū)動芯片MC33886. 其實,這個芯片就是一個功率放大的模塊.我們知道,單片機輸出的PWM信號還是TTL信號,是不能直接用來驅(qū)動電機的.非要通過功率模塊的放大不可.這個道理其實很簡單,就像上次我給大家畫的哪個電子琴電路的放大電路一樣: 看上面的那個三極管,就是將TTL電路的電流放大,才能夠來驅(qū)動蜂鳴器.其實這里的這個MC33886就是這樣的一個作用.而且我們自己也完全可以用三極管自己搭建一個這樣的功率放大電路,當(dāng)然,驅(qū)動能力肯定不如這里的這個MC33886(如我們用三極管就搭建了超過MC33886的電路,摩托羅拉就不會賣幾十塊錢一個了.呵呵.)知道了這個MC33886的工作原理,就好說了,一句話,通過PWM來調(diào)節(jié)電機的速度.當(dāng)方波中高電平占的比例大,電機的平均電壓肯定高,轉(zhuǎn)速肯定快.也就是說,PWM的占空比越大,電機轉(zhuǎn)速越高. 看,就這么簡單,這個智能車就做好了.接下來,我們就把我們知道的PID知識放到舵機和直流驅(qū)動電機的控制中去.就可以達到一個比較好的控制效果. 如果要達到更高的水平,肯定機械方面的改造也少不了.當(dāng)然,這不屬于本文的討論范圍.呵呵. 基于單片機的電子琴設(shè)計 發(fā)表于 2008/11/14 11:02:11 如果我寫得好,請頂我一下,我將再接再厲 很多朋友喜歡搞一些聲光的東西,因為能看到,能聽到,比搞個什么通信濾波要好玩多了.好!我們就開始做個電子琴.甚至做一個簡單的"MP3",呵呵,從簡單開始.我們先做電子琴,下一節(jié)再做"MP3". 首先,因為是發(fā)聲裝置,我們得先了解發(fā)聲的原理是什么,這有助于我們接下來的編程: 1.聲音是由于物體震動產(chǎn)生的. 2.電流的變化通過線圈就可以使磁場發(fā)聲變化. 上圖是一個喇叭的工作原理.不知道大家看明白了沒有.喇叭的電磁鐵的電源是接到我們的發(fā)聲電路上.當(dāng)電路中的電路發(fā)生變化時,電磁鐵的吸引力也發(fā)生變化.因此就會吸合鐵皮.吸合鐵皮的時候也帶動了薄膜的運動.如果這個吸合過程非常的快.那么薄膜就會發(fā)生高頻的震動.這個震動就會發(fā)出聲音. 上面只是一個示意圖.實際上的喇叭并不是磁鐵吸音鐵框的問題,鐵框往往也會換成一個磁鐵,不過是永磁鐵,這樣不但可以吸引,還可以排斥.聲音幅度更大. 好了,總而言之一句話,就是來來回回的震動就會產(chǎn)生聲音. 接下來,我們開始制作吧:電路相當(dāng)?shù)暮唵? 看到了吧,電路非常的簡單.下面是四個鍵盤的按鍵開關(guān).上面就是一個三極管的放大.有人說,我直接接到單片機上就不行.完全可以!我為什么說是個電流放大呢,就是要發(fā)生的功率大,聲音大.如果你將蜂鳴器直接接到單片機的IO口上,當(dāng)然是可以的.但是只是用來驗證用的,聲音太小,實際中是沒有用處的. 不過,我可得提醒你: 你如果這樣接,那就不對了.為什么?問題就在于,單片機的IO口的驅(qū)動能力是絕對有限的,你現(xiàn)在讓它直接驅(qū)動一個功率比較大(比較LED而言)蜂鳴器,是比較吃力的.但是你卻可以這樣設(shè)計: 什么?沒有發(fā)現(xiàn)有什么不同?呵呵,看看,蜂鳴器的電壓方向變了.為什么這樣做,這就是一個開發(fā)經(jīng)驗問題了:單片機的IO口吸收電流的能力要遠遠大于其提供電流的能力.所以不管是驅(qū)動蜂鳴器還是驅(qū)動LED發(fā)光二極管,都要做成低電平有效的這種形式,切實有效! (本人的實驗板,具備上述模塊,其原理圖和上述完全一致.有實驗板的朋友可以接著往下做了) 好了,硬件連接OK了,我們趕緊開始我們的編程吧: 我先說說算法,要實現(xiàn)一定頻率的震動,不就是將IO端口進行一定頻率的開和關(guān)就是了.要進行一定頻率的開和關(guān),就必須有一個計數(shù).在這里,定時計數(shù)器就比較合適了.自動重裝載模式顯然比較合適.我們來看看程序吧(鑒于c語言良好的可閱讀性,我們先用c語言來編寫): #include- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 智能 制作 全過程 卡爾
鏈接地址:http://www.3dchina-expo.com/p-6616605.html