免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

教你10分鐘完成智能小車(chē)的PID調(diào)速

 InfoRich 2022-08-07 發(fā)布于重慶

簡(jiǎn)介

本次采用Simulink工具鏈完成,小車(chē)的所有代碼均基于Simulink Target Support Package完成。

Image

所需要的硬件&軟件

1.普通帶編碼器的直流電機(jī)。
2.Arduino Due控制板及數(shù)據(jù)線(類(lèi)似dSPACE MAB進(jìn)行RCP開(kāi)發(fā),但是性能完全沒(méi)有可比性,開(kāi)個(gè)玩笑)。
3.Matlab&Simulink R2019b (民間通用版本即可)。
4.電腦一臺(tái)。

前期準(zhǔn)備工作

(1)安裝Arduino硬件支持包

這并不是本文的重點(diǎn),網(wǎng)上有許多這方面的教程,包括MATLAB錄制的研討會(huì)均有類(lèi)似的視頻教程。有意的同學(xué)可以自行查閱相關(guān)資料,十分簡(jiǎn)單。如下類(lèi)似教程:

https://blog.csdn.net/u013732401/article/details/70161200

(2)Simulink模型

新建Simulink Model,并且打開(kāi)Library Browser。找到Simulink Supprot Package for Arduino Hardware

Image

按照下圖搭建模型。其中Tachometer模塊在硬件支持包中的Sensor模塊里(2019b有,低版本2018a并沒(méi)有,需要自己通過(guò)編碼器脈沖的上升沿或者下降沿捕獲進(jìn)行)具體通過(guò)高低電平進(jìn)行捕獲的模型在硬件支持包中的DrivePID例程中的Encoder子模塊中有搭建。

Image

可以看到,Tachometer輸出量并不是help中講的RPM,而是脈沖/每分鐘。

Tachometer模塊中設(shè)置的即是編碼器的單個(gè)信號(hào)線連接的PIN口(這里用一根信號(hào)線就無(wú)法測(cè)量方向了,請(qǐng)注意編碼器信號(hào)線是5V電壓,本次使用的單片機(jī)IO最高容忍3.3V,需要初中知識(shí)進(jìn)行分壓電路的搭建,如果使用其他芯片,請(qǐng)查詢(xún)數(shù)據(jù)手冊(cè)該IO口的最高容忍電壓),采樣時(shí)間設(shè)置0.05即可。

由于我智能小車(chē)輪子轉(zhuǎn)一圈采集390個(gè)脈沖,輪子直徑64毫米。所以簡(jiǎn)單計(jì)算即可得到輪速轉(zhuǎn)一圈行駛的距離,單位m/s。

后面經(jīng)過(guò)了一個(gè)一階低通濾波器,這個(gè)在網(wǎng)上可以找到關(guān)于一階低通濾波的公式,然后進(jìn)行搭建,這里就不是贅述了。

接下來(lái)進(jìn)行驅(qū)動(dòng)模塊的搭建,關(guān)于L298N驅(qū)動(dòng)模塊的使用,這里我使用一路電機(jī)進(jìn)行調(diào)試,29和27PIN腳設(shè)置成高電平和低電平,PIN2設(shè)置為ENA。在Arduino 支持包中,PWM模塊輸入值0-255對(duì)應(yīng)0-100%占空比,PWM頻率在Due中驅(qū)動(dòng)模塊固定1KHz。

Image

Step階躍信號(hào)目的在于仿真時(shí)間2s時(shí)進(jìn)行階躍輸入,占空比改變至100,我們需要做的就是進(jìn)行數(shù)據(jù)記錄,記錄本次仿真的時(shí)間,輸入和輸出。

如何記錄呢,那么我們需要在相應(yīng)的信號(hào)線上右鍵選擇Log Selected Signals。我們需要對(duì)Step輸出線,低通濾波后的速度進(jìn)行Datalog。

最后設(shè)置Arduino外部仿真調(diào)試環(huán)境。

Image
Image

在Set COM port端口中可以手動(dòng)輸入您的硬件串口號(hào)如果在上傳程序失敗的時(shí)候。接下來(lái)進(jìn)行在線調(diào)試,類(lèi)似keil軟件中的debug模式。

在2019b以下版本的同學(xué)點(diǎn)擊仿真按鈕旁邊的下拉菜單選擇External模式即可。

我在使用2018a版本無(wú)法進(jìn)行數(shù)據(jù)datalog,可以通過(guò)串口進(jìn)行數(shù)據(jù)傳輸,具體請(qǐng)查閱相關(guān)資料。

Image

點(diǎn)擊按鈕開(kāi)始離線仿真,模型會(huì)編譯成代碼刷寫(xiě)進(jìn)硬件。

前期準(zhǔn)備工作完成,相信無(wú)論用基于模型設(shè)計(jì)的方式還是手動(dòng)寫(xiě)代碼的方式,完成以上工作都不會(huì)難。

接下來(lái)就進(jìn)入本次教程的正題。

正題

數(shù)據(jù)導(dǎo)出到Workspace

如圖所示,點(diǎn)擊Data Inspector

Image
Image

分別將左側(cè)數(shù)據(jù)拖入進(jìn)對(duì)應(yīng)的框圖即可查看數(shù)據(jù)記錄效果,如果您已經(jīng)有小車(chē)并且已經(jīng)進(jìn)行開(kāi)環(huán)PWM測(cè)速,您需要關(guān)注以下的每一步。

只要您有相應(yīng)的PWM和速度值都可以使用以下方法進(jìn)行PID調(diào)速,不僅限于使用Aruduino類(lèi)似的快速原型開(kāi)發(fā)。

如圖所示,右鍵數(shù)據(jù),進(jìn)行導(dǎo)出,導(dǎo)出至Workspace即可。

Image
Image

同樣的方式將兩組數(shù)據(jù)全部導(dǎo)出,分別是PWM和Speed。

返回Matlab主界面,您會(huì)看在工作空間看到如下圖所示。

Image

使用代碼即可將數(shù)據(jù)解析出來(lái),如下圖所示。

Image

再看工作空間內(nèi)容,即可得到我們熟悉的數(shù)據(jù)類(lèi)型。

系統(tǒng)辨識(shí)

我們通過(guò)輸入和輸出基于Matlab的System Identification工具箱即可辨識(shí)出小車(chē)驅(qū)動(dòng)的傳遞函數(shù),從而進(jìn)行PID整定。具體方法如下。

打開(kāi)系統(tǒng)辨識(shí)工具箱。


Image

將時(shí)域數(shù)據(jù)導(dǎo)入。


Image

Image

導(dǎo)入后,點(diǎn)擊導(dǎo)入后的曲線,然后點(diǎn)擊Time Plot即可查看曲線。

Image

然后如圖選擇系統(tǒng)估計(jì)的模式。

Image

您可以根據(jù)您的需要選擇辨識(shí)的傳遞函數(shù)結(jié)構(gòu),這里我選擇二階振蕩模型。

Image

然后點(diǎn)擊Estimate,稍等片刻,可以在工具箱主界面查看我們的辨識(shí)結(jié)果,高亮辨識(shí)后的曲線,點(diǎn)擊Model Output,即可查看辨識(shí)曲線。

我辨識(shí)出來(lái)后的重合度達(dá)到98.2,效果還是可觀的。

Image

這一步的最后,右鍵上面的辨識(shí)曲線,即出現(xiàn)需要的傳遞函數(shù)參數(shù)了。

Image

離線仿真

得到系統(tǒng)的傳遞函數(shù),那當(dāng)然是十分愉悅的事情,在學(xué)習(xí)控制理論的時(shí)候總是先給出系統(tǒng)模型,但是在實(shí)際項(xiàng)目中模型是需要辨識(shí)的,這就是課本和實(shí)際的差距。

我們得到參數(shù)后即可在Simulink環(huán)境進(jìn)行仿真環(huán)境的搭建了,將上圖的參數(shù)輸入至Transfer Fcn模塊中。

在進(jìn)行仿真前,因?yàn)檫M(jìn)行的是連續(xù)系統(tǒng)仿真,所以將仿真時(shí)間改成變步長(zhǎng)??匆幌路抡嫘Ч蛯?shí)際輸出基本一致。

Image

因?yàn)樾枰狿ID控制,那么我們可以添加PID控制器模塊進(jìn)行模型的搭建,搭建完如下圖所示。

簡(jiǎn)單仿真一下,沒(méi)有更改PID模塊的任何參數(shù),所以結(jié)果很差。

Image

這時(shí)我們需要打開(kāi)PID模塊,點(diǎn)擊Tune按鈕,請(qǐng)求Matlab幫助我們進(jìn)行自整定!

隨后自動(dòng)打開(kāi)PID Tune的App。

Image

似乎已經(jīng)幫您完成了整定功能,您只需要調(diào)整Robust to Aggressive橫條去看系統(tǒng)的響應(yīng),選擇您喜歡的位置,然后點(diǎn)擊Updata Block參數(shù)會(huì)更新至您的控制器。

Image
Image

此時(shí)您發(fā)下PID模塊的參數(shù)已經(jīng)被更改了,那么調(diào)整模型,在Step模塊設(shè)置您期望速度,例如我需要小車(chē)行駛速度為1m/s。

點(diǎn)擊仿真看看效果。

Image

控制器離散化

是不是借助Maltab/Simulink環(huán)境很簡(jiǎn)單就完成了PID的整定了,有同學(xué)會(huì)問(wèn),這有啥用,我需要跑進(jìn)板子里啊,別急,我們現(xiàn)在研究的是S域,計(jì)算機(jī)控制器是離散系統(tǒng),我們需要把控制器從S域轉(zhuǎn)換到Z域去。

步驟如下圖所示:

2019b用戶(hù)如下圖找到該App,2019b之前的用戶(hù)在Analysis->Control Design->Model Disretizer找到即可。

Image

您可以選擇0階保持或者1階保持進(jìn)行離散化,采樣時(shí)間我個(gè)人設(shè)置0.05s。

然后點(diǎn)擊s->z按鈕,最后Store Setting。

Image
Image

回到模型,您可以看見(jiàn)算法和模型都從S域變成Z域了。

在Solver中將采樣時(shí)間改成定步長(zhǎng),采樣時(shí)間設(shè)置成0.05,再次進(jìn)行仿真。

很不幸模型輸出已經(jīng)振蕩!這時(shí)您需要重復(fù)上述步驟再次在PID tune中進(jìn)行整定。這里我就不重復(fù)步驟,直接給整定后的仿真效果。

Image

這是最后自整定的PID參數(shù)。

Image

實(shí)車(chē)效果

仿真效果可以接受,這個(gè)時(shí)候我們就完成了PID離散控制器的設(shè)計(jì)了,接下來(lái)就需要刷寫(xiě)到板子里。

重新改變模型如下圖所示。

替換傳遞函數(shù)模型,也可以進(jìn)行對(duì)比。

將實(shí)車(chē)速度替換掉傳遞函數(shù)的反饋值。點(diǎn)擊外部模式仿真,看一下實(shí)車(chē)效果如何。

Image

經(jīng)過(guò)模型自動(dòng)生成代碼刷寫(xiě)到控制器后,實(shí)車(chē)測(cè)試和仿真結(jié)果圖有如下對(duì)比,在超調(diào)量上有些區(qū)別,但是實(shí)際控制器中超調(diào)更小。

最后都趨于平穩(wěn)。藍(lán)色是仿真結(jié)果,紫色是實(shí)際控制器效果。

總結(jié)

仿真可以節(jié)省我們太多時(shí)間,如果您使用STM32,S12K進(jìn)行手工代碼開(kāi)發(fā),可以通過(guò)串口進(jìn)行數(shù)據(jù)采集導(dǎo)入Excel,然后導(dǎo)入到Matlab進(jìn)行模型的系統(tǒng)辨識(shí),將PID控制器生成原子子系統(tǒng),進(jìn)行編寫(xiě)數(shù)據(jù)字典,管理輸入輸出信號(hào)和參數(shù)(非常重要),再使用Embedded Coder生成代碼,在中斷服務(wù)函數(shù)中調(diào)用生成的代碼函數(shù),基于模型設(shè)計(jì)的方法可以加快控制器的開(kāi)發(fā)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多