找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 30254|回復(fù): 12
收起左側(cè)

總算實(shí)現(xiàn)了PID調(diào)速

  [復(fù)制鏈接]
ID:113207 發(fā)表于 2016-4-11 02:42 | 顯示全部樓層 |閱讀模式

[提要] 從我構(gòu)思圓夢(mèng)小車的第一天起,我就把實(shí)現(xiàn)小車速度PID控制作為目標(biāo)之一,前面雖做過(guò)多次嘗試,但均不滿意,故無(wú)意示人,此次總算是基本如愿了,在此與大家分享。


一、背景
   從我構(gòu)思圓夢(mèng)小車的第一天起,我就把實(shí)現(xiàn)小車速度PID控制作為目標(biāo)之一,也許是我出身于自動(dòng)控制專業(yè)的情結(jié)吧。
   在我寫的第一組關(guān)于智能小車的文章中(“尋跡小車 FollowMe”),就期望能實(shí)現(xiàn)小車 PID 調(diào)速,并且參照《電動(dòng)機(jī)的單片機(jī)控制》一書寫了相應(yīng)的測(cè)速和控制程序,但不幸的是,沒(méi)有實(shí)現(xiàn)  ,當(dāng)初以為是測(cè)速的分辨率過(guò)低(只有10個(gè)脈沖/輪子轉(zhuǎn)一圈)。
   后來(lái)將小車升級(jí),用開模具方式大大提高了測(cè)速的精度,推出了圓夢(mèng)小車第一代。測(cè)速精度達(dá)到了每轉(zhuǎn) 50個(gè)脈沖(如果用前后沿檢測(cè),可以達(dá)到100個(gè)脈沖),但略作嘗試后還是沒(méi)有實(shí)現(xiàn),似乎沒(méi)有找到問(wèn)題的根源。
   準(zhǔn)確的說(shuō)應(yīng)該是我沒(méi)有掌握PID控制程序,我雖是學(xué)習(xí)自動(dòng)控制出身,但畢業(yè)后從未實(shí)際應(yīng)用過(guò)PID控制,所有知識(shí)局限于當(dāng)初學(xué)校的實(shí)驗(yàn),這也是我一直想在小車上實(shí)現(xiàn)PID的動(dòng)機(jī)之一:一個(gè)學(xué)自控的居然沒(méi)有在現(xiàn)實(shí)中運(yùn)用PID的能力,汗顏。
   因?yàn)闊o(wú)力而為,所以在“圓夢(mèng)小車StepByStep”系列文章中,就跳過(guò)了這一段內(nèi)容。但心未死,想借助小車客戶中的高手之力完成之,為我打破這個(gè)僵局,可小車倒是送出去幾套,PID調(diào)速還是杳無(wú)音訊,無(wú)語(yǔ)!
   隨著小車進(jìn)化至第三代(輪式驅(qū)動(dòng)單元)、第四代(FIRA小車),將PID調(diào)速的夢(mèng)想實(shí)現(xiàn)的愿望越加強(qiáng)烈!為此,還找了朋友介紹個(gè)熟人幫忙,本來(lái)信心滿滿,因?yàn)榕笥颜f(shuō)這個(gè)人參加了 Freescale 智能車大賽,其中就用到了PID調(diào)速。為此我又送出了一套第四代圓夢(mèng)小車,更令我失望,連回音都沒(méi)有,郁悶!
   這一切迫使我自己去嘗試!看來(lái)這種沒(méi)有多少經(jīng)濟(jì)利益的事少有人問(wèn)津,但愿是這個(gè)原因,而不是由于無(wú)能。
   轉(zhuǎn)機(jī)緣于一個(gè)買了“輪式驅(qū)動(dòng)單元”的客戶(現(xiàn)在是朋友了),他告訴我,參考 Arduino 所提供的 PID 庫(kù)函數(shù)實(shí)現(xiàn)了“輪式驅(qū)動(dòng)單元”的調(diào)速,而且效果不錯(cuò)。(Arduino 是一個(gè)基于AVR單片機(jī)的開源平臺(tái),經(jīng)過(guò)幾年發(fā)展,目前資源十分豐富)
   我急切的下載了 Arduino 的PID 庫(kù)函數(shù) ,發(fā)現(xiàn)很有價(jià)值,就著手嘗試了,以下便是實(shí)施的過(guò)程。

二、PID庫(kù)函數(shù)的消化和移植

(由于排版麻煩,略,有興趣可下載 PDF 文檔)

三、嵌入程序前的準(zhǔn)備

……

   因?yàn)镻ID控制的基礎(chǔ)是以周期T測(cè)量,計(jì)算出偏差后修正輸出。而測(cè)量周期不能太長(zhǎng),那樣響應(yīng)將滯后;但過(guò)短也沒(méi)有意義,因?yàn)閷?duì)象的慣性特征,導(dǎo)致極小的時(shí)間間隔中不會(huì)有變化。
   根據(jù)小車電機(jī)的驅(qū)動(dòng)特性,100ms左右的周期比較合適。
   但小車的測(cè)速碼盤是直接設(shè)計(jì)在輪轂上的,雖說(shuō)每轉(zhuǎn)有100個(gè)脈沖(輪式驅(qū)動(dòng)單元),但相對(duì)于那些設(shè)計(jì)在電機(jī)輸出軸上的高級(jí)編碼器而言,分辨率遠(yuǎn)遠(yuǎn)不夠。按 目前小車的減速箱設(shè)計(jì),對(duì)于1:48減速箱,最快時(shí)100ms 約34個(gè)脈沖,而1:120減速箱才不到14個(gè)脈沖,如果調(diào)速范圍設(shè)置為50% 到 100% ,則脈沖數(shù)更少,分辨率無(wú)法滿足控制的要求,如果再降低周期,則更無(wú)法得到可靠的控制反饋了。
   為此,首先得解決測(cè)速的分辨率問(wèn)題,因?yàn)榭刂扑俣葘儆谶\(yùn)轉(zhuǎn)穩(wěn)態(tài)時(shí)的任務(wù),在起、停過(guò)程通常不需要。而正常運(yùn)轉(zhuǎn)時(shí),相鄰2個(gè)脈沖的周期不會(huì)變化很大,故可以 據(jù)此利用前一周期的數(shù)值作為倍頻的依據(jù),詳細(xì)算法此處不再贅述,有興趣者可以到我在GoogleCode上設(shè)立的開源項(xiàng)目:
http://code.google.com/p/fira-mirosot-robot/ 中下載:
http://code.google.com/p/fira-mirosot-robot/downloads/detail?name=Introduction%20B%20-%20Hardware%20of%20the%20Smart%20Car.pdf&can=2&q=
   其原理示意如下圖:

ndxs-PID-1.jpg

四、將PID計(jì)算嵌入程序

……

五、PID參數(shù)整定前的準(zhǔn)備

   從搜集的PID參數(shù)整定方法的資料看,多數(shù)需要能記錄速度變化的趨勢(shì),也就是所謂的“對(duì)象動(dòng)態(tài)特性”測(cè)量,或者說(shuō)是“沖擊響應(yīng)”測(cè)量。
   既然小車內(nèi)部已經(jīng)實(shí)現(xiàn)了數(shù)字化的速度檢測(cè),且有通訊接口,為何不將速度送到PC機(jī)上,利用PC機(jī)顯示速度變化曲線,從而得到整定參數(shù)的依據(jù)。
   可我PC機(jī)上的圖形編程能力太菜,虧得有個(gè)好友幫忙,為我寫了一個(gè)圖形顯示程序,使速度顯示成為現(xiàn)實(shí)。(由衷表示感謝!)
   為了配合這個(gè)功能,在小車控制程序中增加了速度輸出,每次測(cè)量(20ms)都將速度結(jié)果送出,PC機(jī)根據(jù)這些速度數(shù)據(jù)繪出速度隨時(shí)間的變化曲線:

ndxs-PID-2.jpg


六、參數(shù)整定過(guò)程

   輪式驅(qū)動(dòng)單元第二版驅(qū)動(dòng)很方便,用串口可以容易的控制,為了簡(jiǎn)化操作,是空載方式測(cè)試的,我用無(wú)線方式試驗(yàn)過(guò),有載(裝在小車上)效果更好。下圖為空載調(diào)試方式:

ndxs-PID-3.jpg

   從各類參數(shù)整定方式中,我感覺(jué)那個(gè)“齊格勒—尼克爾斯經(jīng)驗(yàn)法”比較容易實(shí)施,就按那個(gè)進(jìn)行了參數(shù)調(diào)整,先關(guān)閉積分和微分作用,只保留P,在電機(jī)可以工作的 下限速度進(jìn)行整定(因?yàn)槲以囘^(guò),如果在偏高的速度整定,則在低速工作時(shí)會(huì)振蕩,還無(wú)能力解釋),逐漸加大P使速度發(fā)生振蕩,如下圖:

ndxs-PID-4.jpg

此時(shí)得到臨界比例系數(shù)Pd,從圖上得到振蕩周期T ,根據(jù)“齊格勒—尼克爾斯經(jīng)驗(yàn)法”:
              Kp            Ki           Kd
  P 控制:    0.5Pd         
  PI控制:    0.45Pd        0.83T
  PID控制:   0.6Pd         0.5T         0.125T

  計(jì)算出PID系數(shù),Pd  = 22 ,T = 300ms ,按PID控制計(jì)算,得到:
    Kp  =  1.3, Ki  = 0.15秒  Kd = 0.03秒

  設(shè)置到程序中后,基本可以了,只是微分系數(shù)需要略作調(diào)整(降低到0.02秒,否則有些振蕩),設(shè)置后的速度曲線為:

ndxs-PID-5.jpg

ndxs-PID-6.jpg

七、結(jié)語(yǔ)
   當(dāng)時(shí)得到這個(gè)結(jié)果時(shí),我倍感很神奇!
   因?yàn)樵缙诘囊患伦屛覍?duì)PID系數(shù)的配比感到神秘莫測(cè):曾經(jīng)按照老外的示例做了個(gè)LEGO的兩輪平衡車,他也是用的PID控制,區(qū)區(qū)幾行程序,小車就站起來(lái)了?墒俏覍⑺娜齻(gè)系數(shù)隨便一改,哪怕是略作調(diào)整,小車就趴下了,很是靈驗(yàn)。
   那時(shí)我就對(duì)PID系數(shù)的整定心存敬畏,同時(shí)也一直想嘗試?yán)贸绦蚴蛊渥兊貌荒敲瓷衩亍?br />    這次嘗試總算了結(jié)了我的心愿,爽!
   借助這個(gè)工具,應(yīng)該可以解決許多需要PID控制的問(wèn)題,如兩輪平衡、差分驅(qū)動(dòng)小車走直線等,只要程序中能測(cè)出偏差;而這是必須的,否則PID控制也無(wú)從談起。
   但愿此嘗試能起到拋磚引玉作用,使我們的愛(ài)好者們、多數(shù)大學(xué)生們所做的小車也能像那個(gè)外國(guó)人做的繞著茶杯轉(zhuǎn)的小車那樣流暢:
ndxs-PID-7.jpg

   而不是只有參加FreeScale智能車大賽的同學(xué)才能做到。
                      ————————————————
南京嵌入之夢(mèng)工作室
2011年4月23日星期六

用 CamStudio 錄制的 PID 調(diào)速動(dòng)態(tài)過(guò)程:

使用 1:120 減速箱:




評(píng)分

參與人數(shù) 1黑幣 +8 收起 理由
偶游QHD + 8 很給力!好想學(xué)。

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:135550 發(fā)表于 2016-8-9 15:31 | 顯示全部樓層
很給力,太贊了樓主
回復(fù)

使用道具 舉報(bào)

ID:116662 發(fā)表于 2016-8-24 20:12 | 顯示全部樓層
經(jīng)典學(xué)習(xí)貼,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:79544 發(fā)表于 2016-8-25 12:20 | 顯示全部樓層
樓主弄個(gè)視頻教程就好了直觀明白。
回復(fù)

使用道具 舉報(bào)

ID:74784 發(fā)表于 2016-8-26 19:15 | 顯示全部樓層
請(qǐng)教樓主:
有一種泥頭小車是4個(gè)輪子的
前邊2只負(fù)責(zé)轉(zhuǎn)向
后面2只輪子由一個(gè)電機(jī)帶動(dòng)做驅(qū)動(dòng)(帶差速器)

我的問(wèn)題是:
如果不用差速器
后面2個(gè)輪子各自又一個(gè)電機(jī)帶動(dòng)做驅(qū)動(dòng)
那么當(dāng)前進(jìn)中小車轉(zhuǎn)向時(shí)
有啥辦法改變后2個(gè)驅(qū)動(dòng)電機(jī)的速度?
以便小車在轉(zhuǎn)向時(shí)不會(huì)翻車?
謝謝!
回復(fù)

使用道具 舉報(bào)

ID:110225 發(fā)表于 2016-9-7 16:27 | 顯示全部樓層
樓主,第四步怎么嵌入?不會(huì)寫啊
回復(fù)

使用道具 舉報(bào)

ID:146651 發(fā)表于 2016-11-7 17:25 | 顯示全部樓層
很多商業(yè)機(jī)器人產(chǎn)品都能實(shí)現(xiàn)pid調(diào)速,不過(guò)那是有現(xiàn)成的程序?qū)崿F(xiàn)的,樓主的經(jīng)驗(yàn)很值得我學(xué)習(xí),收藏起來(lái)慢慢消化了。
回復(fù)

使用道具 舉報(bào)

ID:140296 發(fā)表于 2017-3-10 15:54 | 顯示全部樓層
在那,沒(méi)看到程序
回復(fù)

使用道具 舉報(bào)

ID:218187 發(fā)表于 2017-7-11 14:13 | 顯示全部樓層
請(qǐng)問(wèn)這是什么仿真軟件
回復(fù)

使用道具 舉報(bào)

ID:218187 發(fā)表于 2017-7-11 14:14 | 顯示全部樓層
請(qǐng)問(wèn)這是什么仿真軟件
回復(fù)

使用道具 舉報(bào)

ID:110278 發(fā)表于 2017-7-23 16:03 | 顯示全部樓層
感謝分享。。。。。
回復(fù)

使用道具 舉報(bào)

ID:221806 發(fā)表于 2017-7-23 17:18 | 顯示全部樓層
PID 信息
回復(fù)

使用道具 舉報(bào)

ID:198293 發(fā)表于 2017-7-25 23:18 來(lái)自手機(jī) | 顯示全部樓層
我用pd可以比較穩(wěn)定的控制一個(gè)輪子,但是兩個(gè)輪子就不行了,我用的是同一個(gè)pid算法,請(qǐng)問(wèn)這可能是什么原因,會(huì)不會(huì)是需要用兩個(gè)不同的pid算法
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表