智能車制作全過程(飛思卡爾).doc
《智能車制作全過程(飛思卡爾).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《智能車制作全過程(飛思卡爾).doc(43頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
智能車制作全過程(飛思卡爾)如果我寫得好,請(qǐng)頂我一下,我將再接再厲!(本人在很久以前做的一輛用來比賽的智能車-獲得華北一等獎(jiǎng),全國(guó)二等獎(jiǎng),有許多可改進(jìn)地方.)下面我們來立即開始我們的智能車之旅: 首先,一個(gè)系統(tǒng)中,傳感器至關(guān)重要. 不管你的CPU的速度如何的快,通信機(jī)制如何的優(yōu)越,系統(tǒng)的精度永遠(yuǎn)無法超越傳感器的精度 .是的,在這個(gè)系統(tǒng)中,傳感器的精度,其準(zhǔn)確性就顯得至關(guān)重要.如果你問我傳感器的電路,呵呵,我早就和大家分享了,在我發(fā)表的日志中,有一篇的文章就詳細(xì)的說明了傳感器的硬件電路以及可以采取的信號(hào)采樣方式. 傳感器安裝成一排,如上面排列.(就是個(gè)一字排列,沒有什么特別) 接下來,看看我們?nèi)绾翁幚韨鞲衅鞯玫降男畔? 大家看到了.結(jié)構(gòu)很簡(jiǎn)單,我們已經(jīng)搞定了傳感器通路.下面我們來看看多機(jī)的控制方面的問題: 其實(shí),不管是便宜還是比較貴的舵機(jī),都是一樣的用法.舵機(jī)的特點(diǎn)就是不同的占空比方波就對(duì)應(yīng)著舵機(jī)的不同轉(zhuǎn)角.當(dāng)然不同的舵機(jī)有不同的頻率要求.比如我用的這個(gè)舵機(jī):方波頻率50HZ.怎么改變占空比?這個(gè)不就是PWM模塊的功能嘛.PWM模塊可以輸出任意占空比的方波.只要你控制其中的占空比寄存器,就可以直接控制舵機(jī)的轉(zhuǎn)角.你只要將傳感器的狀態(tài)和這個(gè)占空比對(duì)應(yīng)上,不就OK了?就這么簡(jiǎn)單,做到這里,你就可以讓你的車在跑道上跑了! 接下來,我們的工作是讓智能車更加完善:速度要穩(wěn)定. 在當(dāng)前的系統(tǒng)結(jié)構(gòu)中,要使一個(gè)系統(tǒng)更穩(wěn)定更可靠,閉環(huán)系統(tǒng)是一個(gè)選擇.(如果你不知道什么是閉環(huán)系統(tǒng),可以參照我的文章里面的一篇基于單片機(jī)的PID電機(jī)調(diào)速),既然是一個(gè)閉環(huán)系統(tǒng),速度傳感器是必不可少的,用什么樣的傳感器做為速度反饋呢:仔細(xì)看,和后輪之間有一條皮帶的這個(gè)貌似電機(jī)的東西,就是我的速度傳感器,它的學(xué)名叫旋轉(zhuǎn)編碼器.這個(gè)器件的特點(diǎn)就是:每轉(zhuǎn)一圈,就會(huì)從輸出端輸出一定的脈沖,比如我這個(gè)旋轉(zhuǎn)編碼器是500線的,就是轉(zhuǎn)一圈輸出500個(gè)脈沖.因此,我只要在單位時(shí)間內(nèi)計(jì)數(shù)輸出端輸出的脈沖數(shù),我就可以計(jì)算出車輛的速度.顯然,這個(gè)速度可以用來作為PID速度調(diào)節(jié)的反饋. 現(xiàn)在有了反饋,我們需要的是調(diào)節(jié)智能車驅(qū)動(dòng)電機(jī)的速度了,如何來調(diào)速,就成了必須解決的問題了.我用的是驅(qū)動(dòng)芯片MC33886. 其實(shí),這個(gè)芯片就是一個(gè)功率放大的模塊.我們知道,單片機(jī)輸出的PWM信號(hào)還是TTL信號(hào),是不能直接用來驅(qū)動(dòng)電機(jī)的.非要通過功率模塊的放大不可.這個(gè)道理其實(shí)很簡(jiǎn)單,就像上次我給大家畫的哪個(gè)電子琴電路的放大電路一樣: 看上面的那個(gè)三極管,就是將TTL電路的電流放大,才能夠來驅(qū)動(dòng)蜂鳴器.其實(shí)這里的這個(gè)MC33886就是這樣的一個(gè)作用.而且我們自己也完全可以用三極管自己搭建一個(gè)這樣的功率放大電路,當(dāng)然,驅(qū)動(dòng)能力肯定不如這里的這個(gè)MC33886(如我們用三極管就搭建了超過MC33886的電路,摩托羅拉就不會(huì)賣幾十塊錢一個(gè)了.呵呵.)知道了這個(gè)MC33886的工作原理,就好說了,一句話,通過PWM來調(diào)節(jié)電機(jī)的速度.當(dāng)方波中高電平占的比例大,電機(jī)的平均電壓肯定高,轉(zhuǎn)速肯定快.也就是說,PWM的占空比越大,電機(jī)轉(zhuǎn)速越高. 看,就這么簡(jiǎn)單,這個(gè)智能車就做好了.接下來,我們就把我們知道的PID知識(shí)放到舵機(jī)和直流驅(qū)動(dòng)電機(jī)的控制中去.就可以達(dá)到一個(gè)比較好的控制效果. 如果要達(dá)到更高的水平,肯定機(jī)械方面的改造也少不了.當(dāng)然,這不屬于本文的討論范圍.呵呵.智能車制作全過程(飛思卡爾-舵機(jī)篇 發(fā)表于 2008/11/28 10:00:55 感謝大家的支持!如果我寫得好,請(qǐng)頂我一下! 智能車的制作中,看經(jīng)驗(yàn)來說,舵機(jī)的控制是個(gè)關(guān)鍵.相比驅(qū)動(dòng)電機(jī)的調(diào)速,舵機(jī)的控制對(duì)于智能車的整體速度來說要重要的多. PID算法是個(gè)經(jīng)典的算法,一定要將舵機(jī)的PID調(diào)好,這樣來說即使不進(jìn)行驅(qū)動(dòng)電機(jī)的調(diào)速(勻速),也能跑出一個(gè)很好的成績(jī). 機(jī)械方面: 從我們的測(cè)試上來看,舵機(jī)的力矩比較大,完全足以驅(qū)動(dòng)前輪的轉(zhuǎn)向.因此舵機(jī)的相應(yīng)速度就成了關(guān)鍵.怎么增加舵機(jī)的響應(yīng)速度呢?更改舵機(jī)的電路?不行,組委會(huì)不允許.一個(gè)非常有效的辦法是更改舵機(jī)連接件的長(zhǎng)度.我們來看看示意圖: 從上圖我們能看到,當(dāng)舵機(jī)轉(zhuǎn)動(dòng)時(shí),左右輪子就發(fā)生偏轉(zhuǎn).很明顯,連接件長(zhǎng)度增加,就會(huì)使舵機(jī)轉(zhuǎn)動(dòng)更小的轉(zhuǎn)角而達(dá)到同樣的效果.舵機(jī)的特點(diǎn)是轉(zhuǎn)動(dòng)一定的角度需要一定的時(shí)間.不如說(只是比喻,沒有數(shù)據(jù)),舵機(jī)轉(zhuǎn)動(dòng)10度需要2ms,那么要使輪子轉(zhuǎn)動(dòng)同樣的角度,增長(zhǎng)連接件后就只需要轉(zhuǎn)動(dòng)5度,那么時(shí)間是1ms,就能反應(yīng)更快了.據(jù)經(jīng)驗(yàn),這個(gè)舵機(jī)的連接件還有必要修改.大約增長(zhǎng)0.5倍2倍.在今年中,有人使用了兩個(gè)舵機(jī)分別控制兩個(gè)輪子.想法很好.但今年不允許使用了. 接下來就是軟件上面的問題了. 這里的軟件問題不單單是軟件上的問題,因?yàn)槲覀円獱可娴絺鞲衅鞯牟季謫栴}.其實(shí),沒有人說自己的傳感器布局是最好的,但是肯定有最適合你的算法的.比如說,常規(guī)的傳感器布局是如下圖: 這里好像說到了傳感器,我們只是略微的一提.上圖只是個(gè)示意圖,意思就是在中心的地方傳感器比較的密集,在兩邊的地方傳感器比較的稀疏.這樣做是有好處的,大家看車輛在行駛到轉(zhuǎn)彎處的情況: 相信看到這里,大家應(yīng)該是一目了然了,在轉(zhuǎn)彎的時(shí)候,車是偏離跑道的,所以兩邊比較稀疏還是比較科學(xué)的,關(guān)于這個(gè),我們將在傳感器中在仔細(xì)討論。 在說到接下來的舵機(jī)的控制問題,方法比較的多,有人是根據(jù)傳感器的狀態(tài),運(yùn)用查表法差出舵機(jī)應(yīng)該的轉(zhuǎn)角,這個(gè)做法簡(jiǎn)單,而且具有較好的濾波效果,能夠?qū)㈠e(cuò)誤的傳感器狀態(tài)濾掉;還有人根據(jù)計(jì)算出來的傳感器的中心點(diǎn)(比如第四個(gè)和第五個(gè)傳感器檢測(cè)到黑線,中心點(diǎn)就是4.5),計(jì)算出舵機(jī)需要的轉(zhuǎn)角,這個(gè)做法也比較的簡(jiǎn)單,但是必須有一個(gè)濾波的過程,必須要濾掉錯(cuò)誤的傳感器狀態(tài).比如說:現(xiàn)在傳感器第四個(gè),第五個(gè)和第11個(gè)檢測(cè)到了黑線,顯然第11個(gè)應(yīng)該是個(gè)傳感器檢測(cè)錯(cuò)誤.應(yīng)該把它濾掉.關(guān)于這個(gè)如何濾波,我們待會(huì)在后面將進(jìn)行討論.還有人的做法就是采用PID算法,這個(gè)方法比較的好,其實(shí)也不是很難,就是PID參數(shù)整定的時(shí)候有些麻煩. 大家可以自己選擇喜歡的方法. 關(guān)于濾波,有些許的方法: 1.平均值排序法. 這個(gè)方法大家肯定一聽就知道是怎么回事.就是不急于執(zhí)行,先多次檢測(cè)被測(cè)傳感器,累加,求平均值.這個(gè)方法不錯(cuò),特別在單片機(jī)中.比如:你如果連續(xù)采集8次,累加,最后你只要右移三位(value=value3;)就是value=value/8的結(jié)果.畢竟,在單片機(jī)中,右移比除法要快嘛. 2.中間值算法. 這個(gè)算法也簡(jiǎn)單,顧名思義,就是取不大不小的中間的值.這個(gè)算法就需要把幾次采集的值排序,然后使用中間的那個(gè)值. 3.遞推濾波. 這個(gè)濾波方法比較的受認(rèn)可,但是執(zhí)行起來也有風(fēng)險(xiǎn)所在.先說這個(gè)算法,就是根據(jù)當(dāng)前值(傳感器的中心點(diǎn)所在值),推算接下來的傳感器中心點(diǎn)的量,如果發(fā)現(xiàn)前后變化劇烈,就視為干擾因素,忽略.這個(gè)算法看起來比較的好.但是風(fēng)險(xiǎn)就在于:如果出現(xiàn)了錯(cuò)誤,并且錯(cuò)誤的中心點(diǎn)成為的當(dāng)前值,那么以錯(cuò)誤的中心點(diǎn)為基準(zhǔn),正確的中心點(diǎn)就成了干擾.這樣就會(huì)出現(xiàn)極端情況.為了避免這個(gè)情況,我們應(yīng)該有一個(gè)檢查的模塊,檢查當(dāng)前的中心點(diǎn)是否有效.這個(gè)檢查,我們也許可以結(jié)合前面兩種方法,在一定時(shí)間對(duì)中心點(diǎn)的有效性進(jìn)行檢查. 4.限幅濾波. 這個(gè)在舵機(jī)的控制中,特別是使用計(jì)算的方法獲得PWM信號(hào)占空比的(用來控制舵機(jī)的轉(zhuǎn)角),更是尤為重要.這個(gè)濾波的思路就是規(guī)定一個(gè)最大值和一個(gè)最小值,當(dāng)計(jì)算出的值低于最小值時(shí),令其等于最小值;大于最大值時(shí),令其等于最大值.智能車制作全過程(飛思卡爾) 發(fā)表于 2008/11/15 22:28:01 如果我寫得好,請(qǐng)頂我一下,我將再接再厲!(本人在很久以前做的一輛用來比賽的智能車-獲得華北一等獎(jiǎng),全國(guó)二等獎(jiǎng),有許多可改進(jìn)地方.)下面我們來立即開始我們的智能車之旅: 首先,一個(gè)系統(tǒng)中,傳感器至關(guān)重要. 不管你的CPU的速度如何的快,通信機(jī)制如何的優(yōu)越,系統(tǒng)的精度永遠(yuǎn)無法超越傳感器的精度 .是的,在這個(gè)系統(tǒng)中,傳感器的精度,其準(zhǔn)確性就顯得至關(guān)重要.如果你問我傳感器的電路,呵呵,我早就和大家分享了,在我發(fā)表的日志中,有一篇的文章就詳細(xì)的說明了傳感器的硬件電路以及可以采取的信號(hào)采樣方式. 傳感器安裝成一排,如上面排列.(就是個(gè)一字排列,沒有什么特別) 接下來,看看我們?nèi)绾翁幚韨鞲衅鞯玫降男畔? 大家看到了.結(jié)構(gòu)很簡(jiǎn)單,我們已經(jīng)搞定了傳感器通路.下面我們來看看多機(jī)的控制方面的問題: 其實(shí),不管是便宜還是比較貴的舵機(jī),都是一樣的用法.舵機(jī)的特點(diǎn)就是不同的占空比方波就對(duì)應(yīng)著舵機(jī)的不同轉(zhuǎn)角.當(dāng)然不同的舵機(jī)有不同的頻率要求.比如我用的這個(gè)舵機(jī):方波頻率50HZ.怎么改變占空比?這個(gè)不就是PWM模塊的功能嘛.PWM模塊可以輸出任意占空比的方波.只要你控制其中的占空比寄存器,就可以直接控制舵機(jī)的轉(zhuǎn)角.你只要將傳感器的狀態(tài)和這個(gè)占空比對(duì)應(yīng)上,不就OK了?就這么簡(jiǎn)單,做到這里,你就可以讓你的車在跑道上跑了! 接下來,我們的工作是讓智能車更加完善:速度要穩(wěn)定. 在當(dāng)前的系統(tǒng)結(jié)構(gòu)中,要使一個(gè)系統(tǒng)更穩(wěn)定更可靠,閉環(huán)系統(tǒng)是一個(gè)選擇.(如果你不知道什么是閉環(huán)系統(tǒng),可以參照我的文章里面的一篇基于單片機(jī)的PID電機(jī)調(diào)速),既然是一個(gè)閉環(huán)系統(tǒng),速度傳感器是必不可少的,用什么樣的傳感器做為速度反饋呢:仔細(xì)看,和后輪之間有一條皮帶的這個(gè)貌似電機(jī)的東西,就是我的速度傳感器,它的學(xué)名叫旋轉(zhuǎn)編碼器.這個(gè)器件的特點(diǎn)就是:每轉(zhuǎn)一圈,就會(huì)從輸出端輸出一定的脈沖,比如我這個(gè)旋轉(zhuǎn)編碼器是500線的,就是轉(zhuǎn)一圈輸出500個(gè)脈沖.因此,我只要在單位時(shí)間內(nèi)計(jì)數(shù)輸出端輸出的脈沖數(shù),我就可以計(jì)算出車輛的速度.顯然,這個(gè)速度可以用來作為PID速度調(diào)節(jié)的反饋. 現(xiàn)在有了反饋,我們需要的是調(diào)節(jié)智能車驅(qū)動(dòng)電機(jī)的速度了,如何來調(diào)速,就成了必須解決的問題了.我用的是驅(qū)動(dòng)芯片MC33886.其實(shí),這個(gè)芯片就是一個(gè)功率放大的模塊.我們知道,單片機(jī)輸出的PWM信號(hào)還是TTL信號(hào),是不能直接用來驅(qū)動(dòng)電機(jī)的.非要通過功率模塊的放大不可.這個(gè)道理其實(shí)很簡(jiǎn)單,就像上次我給大家畫的哪個(gè)電子琴電路的放大電路一樣: 看上面的那個(gè)三極管,就是將TTL電路的電流放大,才能夠來驅(qū)動(dòng)蜂鳴器.其實(shí)這里的這個(gè)MC33886就是這樣的一個(gè)作用.而且我們自己也完全可以用三極管自己搭建一個(gè)這樣的功率放大電路,當(dāng)然,驅(qū)動(dòng)能力肯定不如這里的這個(gè)MC33886(如我們用三極管就搭建了超過MC33886的電路,摩托羅拉就不會(huì)賣幾十塊錢一個(gè)了.呵呵.)知道了這個(gè)MC33886的工作原理,就好說了,一句話,通過PWM來調(diào)節(jié)電機(jī)的速度.當(dāng)方波中高電平占的比例大,電機(jī)的平均電壓肯定高,轉(zhuǎn)速肯定快.也就是說,PWM的占空比越大,電機(jī)轉(zhuǎn)速越高. 看,就這么簡(jiǎn)單,這個(gè)智能車就做好了.接下來,我們就把我們知道的PID知識(shí)放到舵機(jī)和直流驅(qū)動(dòng)電機(jī)的控制中去.就可以達(dá)到一個(gè)比較好的控制效果. 如果要達(dá)到更高的水平,肯定機(jī)械方面的改造也少不了.當(dāng)然,這不屬于本文的討論范圍.呵呵.基于單片機(jī)的電子琴設(shè)計(jì) 發(fā)表于 2008/11/14 11:02:11 如果我寫得好,請(qǐng)頂我一下,我將再接再厲 很多朋友喜歡搞一些聲光的東西,因?yàn)槟芸吹?能聽到,比搞個(gè)什么通信濾波要好玩多了.好!我們就開始做個(gè)電子琴.甚至做一個(gè)簡(jiǎn)單的MP3,呵呵,從簡(jiǎn)單開始.我們先做電子琴,下一節(jié)再做MP3. 首先,因?yàn)槭前l(fā)聲裝置,我們得先了解發(fā)聲的原理是什么,這有助于我們接下來的編程: 1.聲音是由于物體震動(dòng)產(chǎn)生的. 2.電流的變化通過線圈就可以使磁場(chǎng)發(fā)聲變化. 上圖是一個(gè)喇叭的工作原理.不知道大家看明白了沒有.喇叭的電磁鐵的電源是接到我們的發(fā)聲電路上.當(dāng)電路中的電路發(fā)生變化時(shí),電磁鐵的吸引力也發(fā)生變化.因此就會(huì)吸合鐵皮.吸合鐵皮的時(shí)候也帶動(dòng)了薄膜的運(yùn)動(dòng).如果這個(gè)吸合過程非常的快.那么薄膜就會(huì)發(fā)生高頻的震動(dòng).這個(gè)震動(dòng)就會(huì)發(fā)出聲音. 上面只是一個(gè)示意圖.實(shí)際上的喇叭并不是磁鐵吸音鐵框的問題,鐵框往往也會(huì)換成一個(gè)磁鐵,不過是永磁鐵,這樣不但可以吸引,還可以排斥.聲音幅度更大. 好了,總而言之一句話,就是來來回回的震動(dòng)就會(huì)產(chǎn)生聲音. 接下來,我們開始制作吧:電路相當(dāng)?shù)暮?jiǎn)單: 看到了吧,電路非常的簡(jiǎn)單.下面是四個(gè)鍵盤的按鍵開關(guān).上面就是一個(gè)三極管的放大.有人說,我直接接到單片機(jī)上就不行.完全可以!我為什么說是個(gè)電流放大呢,就是要發(fā)生的功率大,聲音大.如果你將蜂鳴器直接接到單片機(jī)的IO口上,當(dāng)然是可以的.但是只是用來驗(yàn)證用的,聲音太小,實(shí)際中是沒有用處的.不過,我可得提醒你:你如果這樣接,那就不對(duì)了.為什么?問題就在于,單片機(jī)的IO口的驅(qū)動(dòng)能力是絕對(duì)有限的,你現(xiàn)在讓它直接驅(qū)動(dòng)一個(gè)功率比較大(比較LED而言)蜂鳴器,是比較吃力的.但是你卻可以這樣設(shè)計(jì): 什么?沒有發(fā)現(xiàn)有什么不同?呵呵,看看,蜂鳴器的電壓方向變了.為什么這樣做,這就是一個(gè)開發(fā)經(jīng)驗(yàn)問題了:單片機(jī)的IO口吸收電流的能力要遠(yuǎn)遠(yuǎn)大于其提供電流的能力.所以不管是驅(qū)動(dòng)蜂鳴器還是驅(qū)動(dòng)LED發(fā)光二極管,都要做成低電平有效的這種形式,切實(shí)有效!(本人的實(shí)驗(yàn)板,具備上述模塊,其原理圖和上述完全一致.有實(shí)驗(yàn)板的朋友可以接著往下做了) 好了,硬件連接OK了,我們趕緊開始我們的編程吧: 我先說說算法,要實(shí)現(xiàn)一定頻率的震動(dòng),不就是將IO端口進(jìn)行一定頻率的開和關(guān)就是了.要進(jìn)行一定頻率的開和關(guān),就必須有一個(gè)計(jì)數(shù).在這里,定時(shí)計(jì)數(shù)器就比較合適了.自動(dòng)重裝載模式顯然比較合適.我們來看看程序吧(鑒于c語言良好的可閱讀性,我們先用c語言來編寫):#include #define uint unsigned int#define uchar unsigned char#define SOUNDER P0_BIT2 /用宏定義端口,直觀.如以后更改,方便#define S1 P2_BIT4#define S2 P2_BIT5#define S3 P2_BIT6#define S4 P2_BIT7#define YES 0#define NO 1int YIN72; /定義一個(gè)音階數(shù)組,存放計(jì)數(shù)器的計(jì)數(shù)初始值.int Dir=3,i;void TimerInit() /計(jì)數(shù)器初始化函數(shù). TMOD=0x21; TL0=0; TH0=0; TH1=0xE8; TL1=0xE8; PCON=0x00; TR0=1; TR1=1; SCON=0x50;void main() / 261 1 /低音叨 頻率261 YIN00= (65536-10000/261/2*100)%256; YIN01= (65536-10000/261/2*100)/256; / 294 2 YIN10= (65536-10000/294/2*100)%256; YIN11= (65536-10000/294/2*100)/256; / 330 3 YIN20= (65536-10000/330/2*100)%256; YIN21= (65536-10000/330/2*100)/256; / 349 4 YIN30= (65536-10000/349/2*100)%256; YIN31= (65536-10000/349/2*100)/256; / 392 5 YIN40= (65536-10000/392/2*100)%256; YIN41= (65536-10000/392/2*100)/256; / 440 6 YIN50= (65536-10000/440/2*100)%256; YIN51= (65536-10000/440/2*100)/256;/ 494 7 YIN60= (65536-10000/492/2*100)%256; YIN61= (65536-10000/492/2*100)/256; EA=1; /開CPU中斷 ET0=1; /開定時(shí)計(jì)數(shù)器中斷 TimerInit(); /調(diào)用初始化計(jì)數(shù)器函數(shù) for(;)/void TimerOverFlow () interrupt 1 /定時(shí)器中段函數(shù) if(S1= =YES) SOUNDER=!SOUNDER; TL0=YIN00; TH0=YIN01;if(S2= = YES) SOUNDER=!SOUNDER; TL0=YIN10;TH0=YIN11;if(S3= =YES) SOUNDER=!SOUNDER; TL0=YIN20;TH0=YIN21;if(S4= =YES) SOUNDER=!SOUNDER; TL0=YIN30;TH0=YIN31; / Clear the flagTF0=0; 相信大家看得明白程序,很簡(jiǎn)單.下載到單片機(jī)上以后,按S1鍵,蜂鳴器發(fā)出低音1(叨)的聲音.按S2發(fā)2(ruan)的聲音.基于單片機(jī)的數(shù)字PID實(shí)現(xiàn)直流電機(jī)調(diào)速(智能車) 發(fā)表于 2008/11/12 9:45:33 現(xiàn)在做很多的智能車,都需要對(duì)車速進(jìn)行控制.或勻速或變速,在調(diào)速算法中,PID的經(jīng)典永垂不朽. 其實(shí),簡(jiǎn)單的51單片機(jī)尚能輕易的實(shí)現(xiàn)平滑良好的調(diào)速,更不用說性能優(yōu)良的單片機(jī).然而,要做到最好,是需要很高的專業(yè)水平和動(dòng)手能力.但是,工程上能達(dá)到我們的目標(biāo)即可. 抱著夠用就好的思想,我們來開始我們的調(diào)速旅程: 所謂的PID是肯定基于一個(gè)閉環(huán)系統(tǒng)而言的,什么是閉環(huán)系統(tǒng)呢,我簡(jiǎn)單的介紹一下:看上面的這個(gè)系統(tǒng),就不是一個(gè)閉環(huán)系統(tǒng),而是一個(gè)開環(huán)系統(tǒng).再看下面的這個(gè)就是閉環(huán)系統(tǒng):上圖這個(gè)系統(tǒng)就是典型的閉環(huán)系統(tǒng).大家也許看出來了,開環(huán)系統(tǒng),就是系統(tǒng)沒有反饋,是個(gè)打開的環(huán),而閉環(huán)系統(tǒng),是有反饋的,是一個(gè)完整的環(huán)形. 正是這個(gè)反饋,就可以將當(dāng)前電機(jī)的轉(zhuǎn)速傳遞給系統(tǒng)控制端,如果電機(jī)轉(zhuǎn)速快了,控制器就讓它慢點(diǎn)(比如可以降低電機(jī)兩端的電壓),同樣,如果速度傳感器檢測(cè)到轉(zhuǎn)速低了,就應(yīng)該讓電機(jī)兩端的電壓提高一點(diǎn).就是在這樣的不斷矯正中,電機(jī)的速度會(huì)保持恒定.當(dāng)然,這個(gè)矯正的周期是非常短的,矯正的速度是很快的. 有人說,不就是多了就少點(diǎn),少了就多點(diǎn)嘛,干嘛使用什么玄乎的PID? 對(duì),你說對(duì)了,多了就少點(diǎn),少了就多點(diǎn)這本身就是PID里面的一種:P控制-只使用了P算法. 接下來我們就看看到底什么是PID,為什么要使用PID,怎么樣使用PID: P-比例 I-積分 D-微分 我們來一條一條的講解P,I,D的含義及其意義: P-比例部分這個(gè)很好理解.比如說,速度傳感器發(fā)現(xiàn),當(dāng)前速度是1200(每分鐘).而我們?cè)O(shè)定的速度值為1000,那么就差別了200,這時(shí),如果我設(shè)定P為0.1,如果輸入的電壓就應(yīng)該是Uo-0.1x200.看到了沒有,這里的比例的意思就是倍數(shù),就是你要把這個(gè)偏差放大多少倍.放大本身就是一個(gè)比例嘛.知道了這個(gè),你就可以寫一個(gè)PID控制里面的P控制了.很多時(shí)候,不需要I和D控制,單單一個(gè)P控制就足夠了.到了這里你就可以控制電機(jī)的速度了. I-積分部分. 這個(gè)積分其實(shí)也很好理解.它是一個(gè)積分運(yùn)算.有的時(shí)候偏差不是很大,所以繼續(xù)運(yùn)行下去,會(huì)使系統(tǒng)存在一個(gè)偏差.但是你如果使用I運(yùn)算將這個(gè)偏差累加起來,到了一定大小的時(shí)候就進(jìn)行處理.這樣就能防止系統(tǒng)的誤差累計(jì).其實(shí),在程序中,這個(gè)過程就是對(duì)一個(gè)小偏差的連續(xù)累加罷了. D-微分部分. 這個(gè)部分也比較好理解.所謂的微分就是對(duì)變量求導(dǎo)唄,意思就是一個(gè)量的變化率唄.所以,微分部分就是能夠?qū)⒆兞孔兓史湃胗?jì)算中.這個(gè)量在邊城中其實(shí)就是求上次的偏差和這次的偏差的差罷了. 其實(shí),在溫度控制中PID還是比較有效的,但是在于電機(jī)控制這種速度經(jīng)常變化的場(chǎng)合,一個(gè)參數(shù)整定好的P控制就能完成任務(wù).為了便于大家的理解,我給大家舉一個(gè)例子吧:關(guān)于對(duì)51單片機(jī)端口上拉電阻的討論 發(fā)表于 2008/11/11 22:28:33 前一段時(shí)間,看到實(shí)驗(yàn)室有個(gè)學(xué)弟設(shè)計(jì)了一個(gè)電路,其中還有一個(gè)鍵盤電路,取其原理是這樣子的: 據(jù)這位師弟的意思是:在沒有按下按鍵的時(shí)候,端口上是低電平,按下按鍵的時(shí)候端口上接上了高電平. 事實(shí)上,電路是不工作的. 問題比較多: 首先,將電源直接接到端口上是絕對(duì)不可以的.當(dāng)按下按鍵的時(shí)候,會(huì)有很大的電流進(jìn)入單片機(jī).在工程上,這種往往應(yīng)該加限流電阻的.一般選擇1K的就可以.如果選擇太大的電阻也不好,因?yàn)殡娮枭厦鎵航堤?造成輸入比應(yīng)有的高電平低,造成錯(cuò)誤. 其次,就算加了限流,這個(gè)電路也是不能工作的.檢查AT89C51的DataSheet就會(huì)發(fā)現(xiàn).技術(shù)手冊(cè)中說:P0口是沒有上拉電阻的端口;P1,P2,P3口帶有上拉電阻.問題就出在這里,什么是上拉電阻,來看看圖:上面這個(gè)圖,是紅外線接收的電路圖,看上面的這個(gè)電阻,就是上拉電阻.我們可以試圖理解一下51單片機(jī)P2口的這個(gè)上拉電阻為這種形式:其中的R就是上拉電阻.如果像我的那個(gè)師弟那樣設(shè)計(jì)電路,電路就成了以下這種形式了:看,從這個(gè)電路上,我們可以清晰的看出,不管你按鍵是否按下,IO端口上都是高電平.問題就在這里,我讓我的這個(gè)師弟測(cè)測(cè)IO端口的電平在按下按鍵前后的變化,結(jié)果果然不出所料:不管他是否按下按鍵,都是高電平! 從這里我們可以看出:DataSheet還是有用的,在設(shè)計(jì)的時(shí)候,有很多細(xì)節(jié),需要注意,否則,可能功虧一簣.基于或門的超級(jí)簡(jiǎn)單的液位傳感器 發(fā)表于 2008/11/11 16:29:04 前一陣子,在實(shí)驗(yàn)室,看到一個(gè)朋友在那里拿著一個(gè)盒子鉆,敲,打.滿頭大汗,嘴里還嘀咕著. 你在做什么呢?我在做一個(gè)液位傳感器,這個(gè)杠桿浮漂真不好弄! 你最近不是做液位控制,你如果用機(jī)械杠桿,你怎么采集數(shù)字信號(hào)到單片機(jī)? 我會(huì)在杠桿上安裝一個(gè)角度傳感器. 看來真是個(gè)麻煩的事情.回頭突然想起,我小學(xué)的時(shí)候,給我媽媽做了一個(gè)檢測(cè)下雨的東西.好像是五年級(jí)的時(shí)候,就是那種平板,下上雨了以后,就會(huì)觸發(fā)相關(guān)的電路(當(dāng)年我是接上了一張生日賀卡里面的音樂芯片). 要說,當(dāng)初,我還記得,書上好像是叫那種電路為或門,當(dāng)初我怎么都不理解,但是現(xiàn)在看來,原理是多么的簡(jiǎn)單. 看看電路:當(dāng)年的電路是這樣子的,就是在板子上有水,就會(huì)接通兩端的電路.很好理解,只有有一處接通,整個(gè)電路就是通的,是一個(gè)邏輯上或的關(guān)系,所以叫或門.當(dāng)然除了或門,肯定還有與門. 既然能夠檢測(cè)到雨水,那怎么就不能檢測(cè)液位呢(這里的液體也是水.),當(dāng)然我們需要的是要將電路進(jìn)行些許的改裝.我就為我這個(gè)朋友設(shè)計(jì)了一個(gè):你看,我分開處理,大不了我挨著掃描一次看看1到11的引腳,哪里檢測(cè)到了水位(檢測(cè)到電壓),我不就可以方便的檢測(cè)到液位了.你可能要說:這個(gè)占用IO口也太多了吧.不要緊!來,實(shí)用一個(gè)138譯碼器不就可以了,有選擇的讀取其中的某個(gè)引腳. 就這么小的一個(gè)小東西,做出來,拿到現(xiàn)場(chǎng)一試-屢試不爽,試驗(yàn)多次,沒有出現(xiàn)過一次誤報(bào),簡(jiǎn)單但是好用. 由這個(gè)問題我們看出來了:小學(xué)教育是多么的重要啊.基于反射式紅外線的測(cè)距傳感器 發(fā)表于 2008/11/9 23:14:13 如果我寫得好,請(qǐng)頂我一下,我將再接再厲! 前陣子做個(gè)小車玩,是走迷宮的那種.苦于沒有所謂的距離傳感器,就自己做個(gè)吧.結(jié)果也犯了不少錯(cuò)誤.現(xiàn)和大家分享. 買了幾個(gè)兩毛錢一個(gè)的發(fā)射管(注意,不是發(fā)光二極管,雖然長(zhǎng)得一樣,但是這個(gè)是發(fā)射紅外線,你可能肉眼看不出它再發(fā)光,但是你若是用手機(jī)或數(shù)碼相機(jī)的攝像頭看,你就會(huì)看到它的光). (發(fā)射管) (接收管) 看來比較簡(jiǎn)單,一個(gè)發(fā)射,一個(gè)接受.發(fā)射管發(fā)射紅外線,遇到遮擋就會(huì)反射回來(遮擋是黑色的除外,因?yàn)楹谏樟思t外線),接收管接收到紅外線以后阻值發(fā)生了變化,因此可以利用電阻分壓改變輸出電壓.看看電路:發(fā)射電路,一開始我就是這樣,一個(gè)限流電阻直接發(fā)射管(紅外線發(fā)光管).后來發(fā)現(xiàn)一個(gè)隨之而來的問題,就是多個(gè)傳感器工作時(shí)電流比較的大,達(dá)到0.5A左右.而且傳感器發(fā)熱嚴(yán)重.要知道,發(fā)熱嚴(yán)重,性能就會(huì)嚴(yán)重的降低.于是想到,是不是可以在需要的時(shí)候開通,不需要的時(shí)候關(guān)閉.形成這種掃描式的.結(jié)果衍生出了以下的電路:這個(gè)電路的原理也是一目了然的:當(dāng)單片機(jī)的IO口輸出高電平時(shí),R1所在的支路有電流I1,因此R2所在的支路就有I1*E(E為三極管的放大倍數(shù),比如我用的是30).這樣,三極管就相當(dāng)于一個(gè)電子開關(guān).單片機(jī)輸出1的時(shí)候,發(fā)光管接通,單片機(jī)輸出0的時(shí)候,發(fā)光管截止.這樣就起到了用單片機(jī)來控制發(fā)光管關(guān)閉的效果. 經(jīng)過實(shí)驗(yàn),發(fā)現(xiàn)該電路效果非常的明顯.在大多數(shù)情況下,電流表幾乎檢測(cè)不到電流的所在.用精密的電流表,發(fā)現(xiàn)電流在5MA左右.而且整個(gè)電路的檢測(cè)距離更遠(yuǎn),更準(zhǔn)確.具體分析其原因是:長(zhǎng)時(shí)間處于發(fā)光狀態(tài),發(fā)熱嚴(yán)重,發(fā)光管效率降低,電阻增大,發(fā)射功率降低.而間歇發(fā)射,發(fā)光管發(fā)光效率更高,更省電. 至于接受電路,我使用的就比較的簡(jiǎn)單. 其中,Sout為信號(hào)的輸出.其實(shí)這個(gè)電路就太簡(jiǎn)單了,你看.紅外線使著接收管的電阻發(fā)生了很大的變化,所以兩個(gè)電阻的比值就發(fā)生了變化,根據(jù)分壓原理,輸出的電壓值也就改變了. 接下來的問題就是對(duì)現(xiàn)在的這個(gè)高電壓和低電壓進(jìn)行處理.有人說,直接接到單片機(jī)上進(jìn)行編程不就可以了?不是的!注意,這里的輸出電壓雖然也有高和低,但是這里的電壓是個(gè)模擬量,不是標(biāo)準(zhǔn)的TTL電平.舉個(gè)例子,我測(cè)得有反射(前方有障礙物)的時(shí)候,電壓是4V,沒有發(fā)射(前方?jīng)]有障礙物)的時(shí)候,電壓是2.1V.顯然,你如果直接接到單片機(jī)上,單片機(jī)收到的都是高電平. 處理的辦法有兩個(gè):使用AD轉(zhuǎn)換或是使用電壓比較器.這兩個(gè)方法各有各自的優(yōu)缺點(diǎn),我們來分析一下: 一.AD轉(zhuǎn)換 大家都知道,就是將輸出的電壓值,用AD芯片進(jìn)行數(shù)字化,比如5V轉(zhuǎn)換成了1200.等等.這樣做的好處是顯而易見的,我們能夠方便的對(duì)數(shù)據(jù)進(jìn)行處理.比如,我們令數(shù)值小于300的表示沒有檢測(cè)到障礙物或是障礙物比較的遠(yuǎn).數(shù)值大于300的表示檢測(cè)到障礙物.而且硬件上也比較的簡(jiǎn)單,直接將輸出接到AD的輸入引腳即可(現(xiàn)在的許多MCU內(nèi)部都自帶ADC,所以根本就不需要外圍電路,直接接上即可).這樣做的不足也有,就是你需要編寫AD檢測(cè)的程序,而且占用CPU時(shí)間. 二.比較器 所謂的比較器,就是電壓比較器,看電路: 看,就是這么個(gè)簡(jiǎn)單的電路,當(dāng)UiU時(shí),Uo一直是低電平;當(dāng)UiU時(shí),Uo就是高電平.因此,我們只要調(diào)節(jié)一下參考電壓,就可以使著輸出符合我們的要求-低于這個(gè)閥值的時(shí)候是高電平,高于這個(gè)閥值的時(shí)候是低電平.這就實(shí)現(xiàn)了模擬量轉(zhuǎn)換為數(shù)字量.看看電路圖: 這個(gè)電路就很簡(jiǎn)單了,可以看出多了下面的那塊電路,是用來調(diào)節(jié)基準(zhǔn)電壓的嘛.也是一個(gè)電阻分壓的原理,這樣你設(shè)置不同的閥值,就可以控制輸出了.比如:我們剛才說的低電壓是2.1V,高電壓是4V,我們要把這個(gè)電平轉(zhuǎn)變成TTL,因此我們可以把基準(zhǔn)電壓設(shè)置成3V,因此經(jīng)過電壓比較器,2.1V就輸出高-5V,4V就輸出低-1V.這不就是TTL嘛. 電路中的比較器可以使用便宜的LM324來搭建.LM324是四運(yùn)放集成塊.PID系統(tǒng)整定工程實(shí)踐 發(fā)表于 2009/6/28 9:01:53 【如果我寫的好,請(qǐng)頂一下】 參加比賽或是做項(xiàng)目也好,PID的應(yīng)用非常的廣,不但可以用在運(yùn)動(dòng)控制的電機(jī)調(diào)速,更可以用在溫度控制、電流控制、電壓控制等等動(dòng)態(tài)變量的控制。 PID其實(shí)沒有多么神秘,還是那句話:被控量比我們的預(yù)期量(輸入量)大,CPU就控制其小點(diǎn);被控量比我們的預(yù)期量小,CPU就控制其大些。在這其中在引入被控量信號(hào)的變化率和誤差累積,就成了真正的PID,可以達(dá)到非常好的控制效果。 直流伺服系統(tǒng)的系統(tǒng)結(jié)構(gòu) 圖1.1 一個(gè)伺服系統(tǒng)結(jié)構(gòu)的例子 由圖1.1可以看出來,一個(gè)基本的伺服系統(tǒng)由控制器、功率放大單元、執(zhí)行機(jī)構(gòu)、反饋傳感器組成??刂破魇前凑找欢ǖ目刂撇呗?,綜合輸入量和反饋量,輸出控制信號(hào)的邏輯裝置,一般情況下使用工業(yè)計(jì)算機(jī)或是微型計(jì)算機(jī)系統(tǒng)(DSP、MCU等)來作為伺服系統(tǒng)的邏輯中樞;功率放大單元是將計(jì)算機(jī)輸出的控制信號(hào),轉(zhuǎn)變成一定的功率信號(hào)來驅(qū)動(dòng)執(zhí)行機(jī)構(gòu);執(zhí)行機(jī)構(gòu)(圖1.1中是電動(dòng)機(jī))是將控制器的控制信號(hào)轉(zhuǎn)變?yōu)橄鄳?yīng)的物理量,可以是電動(dòng)機(jī)(用于運(yùn)動(dòng)控制)、加熱器(用于溫度控制)、功率開關(guān)管(用于電流或電壓控制)等等;反饋傳感器(圖1.1中是位置檢測(cè)傳感器)是將執(zhí)行機(jī)構(gòu)的狀態(tài)轉(zhuǎn)變?yōu)橄鄳?yīng)的電氣信號(hào),并反饋給控制器的裝置,它可以是位置傳感器(位置伺服系統(tǒng))、速度傳感器(速度伺服系統(tǒng))、溫度傳感器(溫度伺服系統(tǒng))、電流傳感器(電流伺服系統(tǒng))、電壓傳感器(電壓伺服系統(tǒng))等等。直流伺服系統(tǒng)的工作原理簡(jiǎn)述 由伺服系統(tǒng)的原理框圖1.1就可以看出,伺服系統(tǒng)通常是一個(gè)閉環(huán)系統(tǒng)。其工作流程可以簡(jiǎn)單的描述為:控制器接收外界的輸入,計(jì)算相應(yīng)的輸出值給功率放大單元,功率放大單元將控制器的信號(hào)放大,驅(qū)動(dòng)執(zhí)行機(jī)構(gòu)動(dòng)作。反饋傳感器采集執(zhí)行機(jī)構(gòu)或被控對(duì)象的狀態(tài),將狀態(tài)信息反饋給控制器,控制器根據(jù)接收到的輸入值和傳感器反饋回來的反饋值,根據(jù)一定得控制策略(本論文中使用的是PID算法),進(jìn)一步調(diào)整輸出,使輸出達(dá)到目標(biāo)值(輸入值)。 其中,控制器-CPU/MCU 功率放大-MOSFET/MCS33886/各種電機(jī)驅(qū)動(dòng)芯片 反饋傳感器-角度傳感器(位置伺服系統(tǒng))/旋轉(zhuǎn)編碼器(速度伺服系統(tǒng))/溫度傳感器(溫度伺服系統(tǒng))/電流傳感器(電流伺服系統(tǒng)) 為了便于討論,我編寫了一個(gè)上位機(jī)軟件,實(shí)時(shí)對(duì)伺服系統(tǒng)的工作狀態(tài)進(jìn)行采集,而且還可以繪制出伺服系統(tǒng)的工作曲線。 第3章 直流伺服系統(tǒng)參數(shù)及其整定3.1 數(shù)字PID的參數(shù)根據(jù)偏差的比例(P)、積分(I)、微分(D)進(jìn)行控制(簡(jiǎn)稱PID控制),是控制系統(tǒng)中應(yīng)用最為廣泛的一種控制規(guī)律。實(shí)際運(yùn)行的經(jīng)驗(yàn)和理論分析都表明,這種控制規(guī)律對(duì)許多工業(yè)過程進(jìn)行控制時(shí),都能得到滿意的效果。不過,用計(jì)算機(jī)實(shí)現(xiàn)PID控制,不是簡(jiǎn)單的將模擬PID控制數(shù)字化,而是進(jìn)一步與計(jì)算機(jī)的邏輯判斷功能結(jié)合,使PID控制更加靈活,更能滿足生產(chǎn)過程提出的要求。 3.1.1 采樣頻率的選擇(1)采樣周期應(yīng)遠(yuǎn)小于過程的擾動(dòng)信號(hào)的周期。根據(jù)香農(nóng)采樣定理:采樣頻率應(yīng)該大于或是等于信號(hào)最高頻率成分的兩倍。這個(gè)定理給出了采樣頻率選擇的最底線。(2)執(zhí)行機(jī)構(gòu)的類型。在執(zhí)行器的響應(yīng)速度比較慢時(shí),過小的采樣周期將失去意義,因此可適當(dāng)選大一點(diǎn)。 在計(jì)算機(jī)運(yùn)算速度允許的條件下,采樣周期短,則控制品質(zhì)好。當(dāng)過程的純滯后時(shí)間較長(zhǎng)時(shí),一般選取采樣周期為純滯后時(shí)間的1/41/8。 (3)給定值的變化頻率。加到被控對(duì)象上的給定值變化頻率越高,采樣頻率也應(yīng)該越高,這樣給定值的改變可以迅速得到反應(yīng)。(4)被控對(duì)象的特性若被控對(duì)象是慢速的熱工業(yè)或是化工對(duì)象時(shí),采樣周期一般取的比較的大;若被控對(duì)象是較快速的系統(tǒng),采樣周期應(yīng)取得比較小。(5)控制算法的類型采用PID控制算法,積分(I)和微分(D)作用都與采樣周期T的選擇有關(guān)系。采樣周期T太小,將使微分作用不明顯。3.1.2 比例-P 一般來說,增加控制系統(tǒng)的比例增益,可以提高系統(tǒng)的響應(yīng)速度,同時(shí)也會(huì)降低穩(wěn)態(tài)誤差。盡管如此,如果比例增益太大,系統(tǒng)超調(diào)就會(huì)增大,如果Kp再進(jìn)一步增加,震蕩就會(huì)加大,系統(tǒng)就會(huì)變得不穩(wěn)定。3.1.3 積分-I 為了消除穩(wěn)態(tài)誤差,在控制器中必須引入“積分項(xiàng)”。積分項(xiàng)對(duì)誤差進(jìn)行累加,隨著時(shí)間的增加,積分項(xiàng)會(huì)逐漸增大。這樣,即便誤差很小,積分項(xiàng)也會(huì)隨著時(shí)間的增加而加大,它推動(dòng)控制器的輸出增大使穩(wěn)態(tài)誤差進(jìn)一步減小,直到等于零。因此,比例+積分(PI)控制器,可以使系統(tǒng)在進(jìn)入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差。但積分過強(qiáng)同樣影響系統(tǒng)的穩(wěn)定性。3.1.4 微分-D 自動(dòng)控制系統(tǒng)在克服誤差的調(diào)節(jié)過程中可能會(huì)出現(xiàn)振蕩甚至失穩(wěn)。其原因是由于存在有較大慣性組件(環(huán)節(jié))或有滯后(delay)組件,具有抑制誤差的作用,其變化總是落后于誤差的變化。解決的辦法是使抑制誤差的作用的變化“超前”,即在誤差接近零時(shí),抑制誤差的作用就應(yīng)該是零。這就是說,在控制器中僅引入“比例”項(xiàng)往往是不夠的,比例項(xiàng)的作用僅是放大誤差的幅值,而目前需要增加的是“微分項(xiàng)”,它能預(yù)測(cè)誤差變化的趨勢(shì),這樣,具有比例+微分的控制器,就能夠提前使抑制誤差的控制作用等于零,甚至為負(fù)值,從而避免了被控量的嚴(yán)重超調(diào)。所以對(duì)有較大慣性或滯后的被控對(duì)象,比例+微分(PD)控制器能改善系統(tǒng)在調(diào)節(jié)過程中的動(dòng)態(tài)特性。但是,如果反饋回來的過程變量代表的噪聲,微分參數(shù)就會(huì)引起系統(tǒng)的不穩(wěn)定。數(shù)字PID的控制算法3.2.1 位置型PID控制算法圖3.1 位置型PID控制流程 在控制系統(tǒng)中,這種控制量確定了執(zhí)行機(jī)構(gòu)的位置,例如在閥門控制中,這種算法的輸出對(duì)應(yīng)了閥門的位置(開度)。所以,將這種算法稱為“位置算法”。3.2.2 增量型PID控制算法圖3.2 增量型PID控制流程圖 如上圖, 當(dāng)執(zhí)行機(jī)構(gòu)需要的不是控制量的絕對(duì)值,而是控制量的增量(例如去驅(qū)動(dòng)步進(jìn)電動(dòng)機(jī))時(shí),需要用PID的“增量算法”。數(shù)字PID控制算法實(shí)現(xiàn)方式比較 在控制系統(tǒng)中,如果執(zhí)行機(jī)構(gòu)采用調(diào)節(jié)閥,則控制量對(duì)應(yīng)閥門的開度,表征了執(zhí)行機(jī)構(gòu)的位置,此時(shí)控制器采用數(shù)字PID位置式控制算法;如果執(zhí)行機(jī)構(gòu)采用步進(jìn)電機(jī),每個(gè)采樣周期,控制器的輸出的控制量是相對(duì)于上次控制的增量,此時(shí)控制器應(yīng)該采用數(shù)字PID增量式控制法。雖然增量式控制法和位置式控制法更有應(yīng)用領(lǐng)域,但是增量式控制法相對(duì)于位置式控制法,具有諸多的優(yōu)勢(shì): (1)增量式控制法不需要做累加,控制量增量的去定僅與近幾次誤差采樣值有關(guān),計(jì)算誤差或計(jì)算精度等問題對(duì)控制量的影響比較的小。相比之下,位置控制法要用過去的誤差的累加值,容易產(chǎn)生較大的累加誤差。 (2)增量式算法得到的是控制量的增量。例如在閥門的控制中,只輸出閥門開度的變化部分,誤動(dòng)作影響小,必要時(shí)通過邏輯判斷限制或禁止本次輸出,不會(huì)嚴(yán)重影響系統(tǒng)的工作。相比之下,位置式控制算法的輸出是控制量的全量輸出,誤動(dòng)作影響比較大。 (3)采用增量算法,容易實(shí)現(xiàn)手動(dòng)到自動(dòng)的無沖擊切換。 數(shù)字PID控制算法流程 下圖給出了數(shù)字PID控制算法的控制流程圖。增量式的控制流程和位置式的控制流程很相似。圖3.3 PID程序流程 數(shù)字PID參數(shù)整定1 工程法整定PID參數(shù)的方法在工程上,PID參數(shù)整定的方法比較的多,分別有:湊試法、擴(kuò)充曲線法、優(yōu)選法、自整定法等等。由于研究采用的標(biāo)定系統(tǒng)采樣頻率有限,不能繪制出非常精確響應(yīng)曲線,所以使用擴(kuò)充曲線法誤差較大。下面的參數(shù)整定使用湊試法。(1)首先整定比例環(huán)節(jié)將比例系數(shù)由小到大的變化,并觀察相應(yīng)的系統(tǒng)響應(yīng),直到得到一個(gè)反應(yīng)速度快、超調(diào)小的響應(yīng)曲線。如果系統(tǒng)靜差已經(jīng)達(dá)到允許的范圍,并且響應(yīng)曲線已經(jīng)令人滿意,那么只是用比例控制器即可。這里確定的是最優(yōu)比例系數(shù)。(2)再加入積分環(huán)節(jié)如果在比例部分不能有效地消除靜差,需要加入積分環(huán)節(jié)。積分系數(shù)P的整定應(yīng)該從大到小。并且應(yīng)該將第一步整定的比例環(huán)節(jié)縮?。梢钥s小為原來的0.8倍)。然后慢慢的減小積分常數(shù),直到系統(tǒng)具有良好的動(dòng)態(tài)性能,并且靜差得以消除。(3)最后加入微分環(huán)節(jié)如果在使用比例積分控制器時(shí),動(dòng)態(tài)特性仍達(dá)不到要求,可以加入微分環(huán)節(jié)。在整定微分環(huán)節(jié)時(shí),微分系數(shù)從小到大變化,在同時(shí)小范圍改變比例、積分系數(shù)的同時(shí),多次試湊,直到達(dá)到理想的控制效果。2 數(shù)字PID參數(shù)整定過程 由于機(jī)器人手臂定位屬于絕對(duì)位置式定位,這里首先討論位置式PID伺服系統(tǒng)的PID參數(shù)整定。(1)采樣周期的選擇 首先,選擇一個(gè)合適的采樣周期。采樣周期應(yīng)該綜合各方面考慮,首先研究的是一個(gè)位置伺服系統(tǒng),要求響應(yīng)快,精度高。因此采樣周期不能太大。同時(shí),電機(jī)帶有減速機(jī)構(gòu),轉(zhuǎn)動(dòng)慣量比較的大,因此采樣周期又不能太小。關(guān)于采樣周期的選擇,雖然有“香農(nóng)定理”這樣的規(guī)律,但是并沒有給出實(shí)質(zhì)的選擇方法,大多是在規(guī)律的指導(dǎo)下探索。這里,本人總結(jié)了一個(gè)根據(jù)工程試驗(yàn)選擇采樣頻率的方法。圖3.4 電機(jī)在額定電壓下轉(zhuǎn)動(dòng),傳感器的輸出電壓曲線 如圖3.4,是電機(jī)在額定電壓下,連續(xù)旋轉(zhuǎn)的位置傳感器輸出電壓曲線??梢愿鶕?jù)這個(gè)圖大體的估算合適的采樣頻率。從這個(gè)圖上的周期可見,電機(jī)(帶減速機(jī)構(gòu))的額定轉(zhuǎn)速為1.20轉(zhuǎn)/秒,即約為430度/秒。假設(shè)我們的伺服系統(tǒng)要求分辨率在0.5度,那么可以計(jì)算出來,伺服系統(tǒng)要轉(zhuǎn)過這0.5度最快需要0.5/430*1000=1.16ms。如果將0.5度看成是系統(tǒng)的一個(gè)“標(biāo)準(zhǔn)單位”,那么1.16ms就是系統(tǒng)控制的“標(biāo)準(zhǔn)時(shí)間”。假設(shè),采樣周期比這個(gè)“標(biāo)準(zhǔn)時(shí)間”還要大,就可能出現(xiàn)伺服系統(tǒng)轉(zhuǎn)過了“目標(biāo)點(diǎn)”,但是系統(tǒng)還沒有檢測(cè)到得現(xiàn)象。當(dāng)然,這個(gè)假設(shè)中沒有考慮系統(tǒng)的靜摩擦、啟動(dòng)慣量等。但無論如何,不排除極限情況下,系統(tǒng)穩(wěn)定性要求系統(tǒng)達(dá)到及時(shí)響應(yīng)。因此,本人認(rèn)為采樣周期在一般情況下不要大于這個(gè)“標(biāo)準(zhǔn)時(shí)間”。接下來再綜合考慮電機(jī)本體的轉(zhuǎn)動(dòng)慣量和靜摩擦的存在,轉(zhuǎn)動(dòng)慣量和靜摩擦越大,采樣周期可以相應(yīng)的越大一些;反饋傳感器的精度越高,采樣周期可以選的越小一些,這樣有利于提高系統(tǒng)的控制精度。綜上所述,采樣周期可以選擇稍小于“標(biāo)準(zhǔn)時(shí)間”,為1ms,即采樣頻率1KHZ。 (2)比例系數(shù)的整定 在選擇了采樣周期的情況下,開始整定比例(P)系數(shù)。比例系數(shù)從小到大變化。P控制源代碼:#define k 1Ek=TargetValue-ADValue; /計(jì)算當(dāng)前偏差。Uk=KP*Ek; /計(jì)算比例部分。Turn(Uk); /輸出。 由以上的數(shù)據(jù)可以看出,增大比例系數(shù)Kp可以加快系統(tǒng)的響應(yīng),在有靜差的時(shí)候有助于減小靜差。但是過大的比例系數(shù)會(huì)使系統(tǒng)有較大的超調(diào),并可能產(chǎn)生振蕩。經(jīng)過多次的試驗(yàn),最終選擇Kp=3。(3)積分項(xiàng)的整定 如上圖所示,在只使用積分(P)控制的時(shí)候,存在一定的靜差,因此很有必要加入積分項(xiàng),來消除這個(gè)靜差。積分項(xiàng)的整定是從大到小整定,但是需要提前注意幾個(gè)問題:1.長(zhǎng)時(shí)間的積分會(huì)造成積分飽和。解決這個(gè)問題的辦法是采用“積分分離”的辦法,在誤差較大的時(shí)候積分項(xiàng)不起作用,當(dāng)誤差范圍在一定范圍內(nèi)以后積分才起作用。本人認(rèn)為應(yīng)該根據(jù)計(jì)算機(jī)的字長(zhǎng)和傳感器精度分析,計(jì)算出不會(huì)造成積分飽和的“積分時(shí)間”,來確定誤差在多大的值時(shí)開始投入積分。2.由于計(jì)算機(jī)精度問題,較小的誤差將被舍掉,而不能輸出。解決這個(gè)問題的方法除了使用更加精確地AD/DA外,還可以采用誤差累計(jì)的方法,當(dāng)誤差累計(jì)到一定程度,進(jìn)行一次積分輸出,而不是將小誤差舍棄掉。為了避免小誤差的浮點(diǎn)累計(jì)運(yùn)算,本人使用了一個(gè)方法:“倍乘法”。即將小數(shù)誤差乘以一定得倍數(shù),比如10倍。這樣,小數(shù)被轉(zhuǎn)換成了整數(shù),積分項(xiàng)的運(yùn)算也轉(zhuǎn)換成了整數(shù)運(yùn)算。最后在輸出之前,將Uk的值再除以10。PI控制源代碼:#define k 1Ek=TargetValue-ADValue; /計(jì)算當(dāng)前偏差。if(abs(Ek)20000?20000:SumErr;Else SumErr=0; /清除積分累加。Uk=KP*Ek+SumErr/KI; /計(jì)算比例+積分。其實(shí)1/KI才是積分常數(shù)。Turn(Uk); /輸出。 如上面的組圖所示,積分作用有助于消除系統(tǒng)誤差,但是過大或過小的積分系數(shù)都將使系統(tǒng)品質(zhì)降低。經(jīng)過反復(fù)試湊,最終選取積分常數(shù)KI=0.003。 (4)微分項(xiàng)的整定 以上的PI控制器,從圖3.9的響應(yīng)曲線上來看,已經(jīng)達(dá)到了令人滿意的效果。系統(tǒng)的靜差已經(jīng)基本消除,系統(tǒng)運(yùn)行已經(jīng)基本滿足要求。但是系統(tǒng)仍然存在不能忽略的超調(diào),有時(shí)候這種超調(diào)會(huì)讓機(jī)器人手臂的定位感覺非常的僵硬,因此需要進(jìn)一步將其去掉。 PID控制源代碼:#define k 1Ek=TargetValue-ADValue; /計(jì)算當(dāng)前偏差。if(abs(Ek)20000?20000:SumErr;Else SumErr=0; /清除積分累加。 Uk=KP*Ek+Ek/KI+KD*(Ek-Ek-1); /計(jì)算比例+積分+微分。Turn(Uk); /輸出。Ek-1=Ek; /更新Ek-1 從圖3.11中的圖像對(duì)比中,可以發(fā)現(xiàn)微分作用避免了被控量的嚴(yán)重超調(diào),合適的微分項(xiàng)使得系統(tǒng)超調(diào)變小,改善了系統(tǒng)在調(diào)節(jié)過程中的動(dòng)態(tài)特性。經(jīng)過多次試湊,確定PID的參數(shù)為KP=3,KI=0.003,KD=40。單片機(jī)基礎(chǔ)教程(AT89C51)-串行通信 發(fā)表于 2008/12/1 21:35:24 今天我們來開始單片機(jī)的通信實(shí)驗(yàn)。我們知道,單片機(jī)的通信接口是RXD(接收端)和TXD(發(fā)送端),要實(shí)現(xiàn)兩個(gè)單片機(jī)的通信,只要將兩個(gè)單片機(jī)的RXD和TXD交叉連接就可以了(一個(gè)單片機(jī)的RXD接另一個(gè)單片機(jī)的TXD,TXD接另一個(gè)單片機(jī)的RXD)。 好了,硬件連接就這么簡(jiǎn)單?,F(xiàn)在我們開始寫程序吧。要完成個(gè)什么任務(wù)呢?就用一個(gè)單片機(jī)做主機(jī)向另一個(gè)單片機(jī)發(fā)信息,用主機(jī)單片機(jī)控制從機(jī)的發(fā)光二極管亮吧。 首先必須規(guī)定一下:當(dāng)主機(jī)的按鍵1按下的時(shí)候,發(fā)送0x41給從機(jī)(剛?cè)?,你愛?guī)定成什么就規(guī)定成什么),而從機(jī)呢,只要收到0x41就讓第一個(gè)發(fā)光二極管亮;當(dāng)主機(jī)的按鍵2按下是,就發(fā)送0x42給從機(jī),從機(jī)只要收到0x42就使第二個(gè)放光二極管亮;以此類推,總共四個(gè)按鍵,控制從機(jī)的四個(gè)二極管。 下面開始編程吧,先寫主機(jī)(發(fā)送方)的程序,當(dāng)然也是從查詢開始:#include #define S1 P24#defin- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 智能 制作 全過程 卡爾
鏈接地址:http://m.italysoccerbets.com/p-6616605.html