在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

使用HLS構(gòu)建PID算法

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-10-31 08:55 ? 次閱讀

《優(yōu)秀的IC/FPGA開源項目》是新開的系列,旨在介紹單一項目,會比《優(yōu)秀的 Verilog/FPGA開源項目》內(nèi)容介紹更加詳細,包括但不限于綜合、上板測試等。兩者相輔相成,互補互充~

作為一名工程師,在項目實施階段多多少少會遇到需要使用控制理論的應用程序。

一種非常常用的算法是比例積分微分控制器(proportional-integral-derivative control)或 PID 控制器。PID 算法用于控制各種應用中溫度、壓力、電機位置和流量等變量。我經(jīng)常看到的一個地方是高端圖像處理系統(tǒng)(制冷型紅外),為了減少圖像中的噪點。它使用熱電冷卻器或其他冷卻系統(tǒng)來冷卻圖像傳感器。對于高端成像,較低的噪聲可以帶來更好的圖像。

介紹

PID 控制算法實現(xiàn)起來并不難,因為它只需要加法、乘法、除法和減法(dog)。但是,一旦算法實施,確保 PID 回路穩(wěn)定的三個系數(shù)可能需要一點額外的時間來獲取。

PID 主要使用三個術語。

比例(Proportional) -測量期望值和測量值之間的差異。比例值是當前位置的量度。

積分(Integral) -會隨著時間的推移對誤差進行積分。積分項是誤差的歷史累積值。隨著誤差的消除,積分項停止增長。

導數(shù)(Derivative) -計算變化率并預測誤差的未來趨勢。

每個術語還具有相關的增益 KI、KP 或 KD,可以幫助我們調(diào)整 PID 控制器算法的行為。D 項不是必須的,而且簡單的情況下我們基本不使用,使用 PI 控制器也很常見。

PID經(jīng)常使用浮點數(shù)來實現(xiàn)。因此,我們可以使用諸如 VHDL Fixed/Float 之類的庫在 RTL 中實現(xiàn)。或者,我們可以使用HLS來實現(xiàn) PID,因為國內(nèi)應用VHDL較少,所以我們今天的實例是使用HLS構(gòu)建我們的PID算法。使用HLS能夠使用浮點或任意精度的定點數(shù)。HLS還能通過#pragma 快速的為IP添加通用控制接口(AXI)。

在純 FPGA 實現(xiàn)類似系統(tǒng)時候,我們需要添加軟核來控制IP。在較小的 Zynq-7000 SoC FPGA(7007、7010、7020 等)中則可以通過硬核控制IP。或者,如果我們設計中不想使用處理器,那我們可以設計傳統(tǒng)的矢量接口即可。

源碼設計

PID 的實際源代碼非常簡單,如下所示。

#include"pid.h"

staticdata_typeerror_prev=0;
staticdata_typei_prev=0;

data_typePID(data_typeset_point,data_typeKP,data_typeKI,data_typeKD,data_typesample,data_typets,data_typepmax)
{
#pragmaHLSINTERFACEmode=s_axiliteport=return
#pragmaHLSINTERFACEmode=s_axiliteport=sample
#pragmaHLSINTERFACEmode=s_axiliteport=KD
#pragmaHLSINTERFACEmode=s_axiliteport=KI
#pragmaHLSINTERFACEmode=s_axiliteport=KP
#pragmaHLSINTERFACEmode=s_axiliteport=set_point
#pragmaHLSINTERFACEmode=s_axiliteport=ts
#pragmaHLSINTERFACEmode=s_axiliteport=pmax
data_typeerror,i,d,p;
data_typetemp;
data_typeop;

error=set_point-sample;

p=error*KP;
i=i_prev+(error*ts*KI);
d=KD*((error-error_prev)/ts);

op=p+i+d;
error_prev=error;
if(op>pmax){
i_prev=i_prev;
op=pmax;
}else{
i_prev=i;
}
returnop;
}

已將previous error和previous integral聲明為全局靜態(tài)變量,以確保它們在迭代時候其值保持不變。

在算法方面,用戶可以在應用程序運行時動態(tài)加載 KP、KI、KID、Ts 和 Pmax。我們可以輕松地添加積分值或使用附加寄存器重新啟動控制器。這將使 PID 可以用于多個實現(xiàn)。

為了測試和配置 PID,測試文件羅列了一系列溫度值,這些溫度都遠高于預期的目標設定點,并確保達到設定點。此示例中的 PID 設計用于提供功率(以瓦特為單位)維持光學床的溫度。在這種情況下,我們需要加熱而不是降低溫度。

#include"pid.h"
#include
#defineiterations40
intmain(void)
{

data_typeset_point=-80.0;
data_typesample[iterations]={-90.000,-88.988,-87.977,-86.966,-85.955,-84.946,-83.936,-82.928,-81.920,-80.912,-80.283,-79.926,-79.784,-79.774,-79.829,-79.898,-79.955,-79.993,-80.011,-80.017,-80.016,-80.010,-80.005,-80.002,-80.000,-79.999,-79.999,-79.999,-79.999,-80.000,-80.000,-80.000,-80.000,-80.000,-80.000,-80.000,-79.999,-80.000,-80.001,-80.000};

data_typekp=19.6827;//w/k
data_typeki=0.7420;//w/k/s
data_typekd=0.0;
data_typeop;

printf("testingcpp
");

for(inti=0;i

在 Vitis HLS 中針對該 PID 算法進行C 仿真和協(xié)同仿真,結(jié)果完全符合預期。

54b836ce-58b5-11ed-a3b6-dac502259ad0.png

算法按照預期運行,下一步是綜合和導出 IP,最后就是添加到我們的 Vivado 項目中。這次我們使用的是ZYNQ FPGA。

54d86354-58b5-11ed-a3b6-dac502259ad0.png 延遲性能和資源消耗

下面的完整框圖反映了添加到Vivado項目中情況。

54f360f0-58b5-11ed-a3b6-dac502259ad0.png 框圖 552e7f3c-58b5-11ed-a3b6-dac502259ad0.png 總設計資源 5536b4c2-58b5-11ed-a3b6-dac502259ad0.png PID 資源

構(gòu)建完成上面的Vivado項目,接下來就是導出硬件(XSA)到 Vitis 中開發(fā)驅(qū)動。

在 Vitis 中開發(fā)驅(qū)動時候,我重用了 HLS 仿真文件中的幾個元素。

由于我們使用的是 AXI 接口,Vitis HLS 在導出IP時候地為我們提供了一個可以在 Vitis 中用于驅(qū)動 IP 核的驅(qū)動程序。但是,當在 IP 內(nèi)核中使用浮點輸入時,驅(qū)動程序則期望它們?yōu)?U32。如果我們在開發(fā)驅(qū)動時候從浮點數(shù)轉(zhuǎn)換為 U32,我們將失去準確性。因此,解決這個問題的方法是使用指針(pointers)和強制轉(zhuǎn)換。

5557d4a4-58b5-11ed-a3b6-dac502259ad0.png

本質(zhì)上,我們將變量聲明為浮點數(shù),然后在函數(shù)中調(diào)用設置一個指向浮點變量地址的 U32 指針,并使用間接運算符讀取該值。

XPid_Set_set_point(&pid,*((u32*)&set_point));

整個應用程序是

#include
#include"platform.h"
#include"xil_printf.h"
#include"xpid.h"
#defineiterations40

typedeffloatdata_type;
data_typeset_point=-80.0;
data_typesample[iterations]={-90.000,-88.988,-87.977,-86.966,-85.955,-84.946,-83.936,-82.928,-81.920,-80.912,-80.283,-79.926,-79.784,-79.774,-79.829,-79.898,-79.955,-79.993,-80.011,-80.017,-80.016,-80.010,-80.005,-80.002,-80.000,-79.999,-79.999,-79.999,-79.999,-80.000,-80.000,-80.000,-80.000,-80.000,-80.000,-80.000,-79.999,-80.000,-80.001,-80.000};

data_typekp=19.6827;//w/k
data_typeki=0.7420;//w/k/s
data_typekd=0.0;
data_typets=12.5;
data_typepmax=40;
u32op;

XPidpid;

intmain()
{
floatresult;
init_platform();
disable_caches();
print("AdiuvoPIDExample

");
XPid_Initialize(&pid,XPAR_XPID_0_DEVICE_ID);
XPid_Set_set_point(&pid,*((u32*)&set_point));
XPid_Set_KP(&pid,*((u32*)&kp));
XPid_Set_KI(&pid,*((u32*)&ki));
XPid_Set_KD(&pid,*((u32*)&kd));
XPid_Set_ts(&pid,*((u32*)&ts));
XPid_Set_pmax(&pid,*((u32*)&pmax));
u32tst=XPid_Get_set_point(&pid);
for(inti=0;i

運行,得到以下結(jié)果。

557f55f6-58b5-11ed-a3b6-dac502259ad0.png

正如預期的那樣,硬件中的實現(xiàn)與軟件的工作方式相同。

當然,對于不同的應用程序,我們需要重新確定可用于應用程序的 KP、KI 和 KD 變量。

這樣做的真正美妙之處在于,因為它是用 C 實現(xiàn)的,可維護性高,可以快速構(gòu)建一個我們需要的PID算法。

總結(jié)

雖然上面的流程很簡單,但是HLS在調(diào)整資源和速度方面還是需要一些時間,并且浪費的資源還是比純HDL多。

最后在說一下該方式的缺點,PID需要進行浮點運算,而FPGA則不能進行浮點運算,如果想把上面的算法在邏輯中運行,則需要自己進行量化,但是如果像上面例程的方式在內(nèi)核(硬核)中運行算法,則該方式簡單且優(yōu)雅~

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    114

    文章

    17022

    瀏覽量

    183276
  • PID算法
    +關注

    關注

    2

    文章

    172

    瀏覽量

    24834
  • HLS
    HLS
    +關注

    關注

    1

    文章

    131

    瀏覽量

    24706

原文標題:在 FPGA 上快速構(gòu)建 PID 算法

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    總結(jié)STM32控制中常見的PID算法 理解萬能的PID算法

    總結(jié)萬能的PID算法PID的數(shù)學模型 在工業(yè)應用中PID及其衍生算法是應用最廣泛的算法之一,
    發(fā)表于 07-05 17:47 ?7997次閱讀

    PID算法的問題

    (pid.err)>200);index=0;;}else;index=1;;pid.sumerr+=pid這是什么意思呢?特別是abs()pid.err是什么啊在
    發(fā)表于 08-06 10:13

    新手求助,HLS實現(xiàn)opencv算法加速的IP在vivado的使用

    我照著xapp1167文檔,用HLS實現(xiàn)fast_corners的opencv算法,并生成IP。然后想把這個算法塞到第三季的CH05_AXI_DMA_OV5640_HDMI上,這個demo里
    發(fā)表于 01-16 09:22

    PID控制算法的基本思想是什么?PID控制算法是如何形成的?

    常用的控制算法有哪幾種?各自有什么特點?PID控制算法的基本思想是什么?PID控制算法是如何形成的?
    發(fā)表于 06-30 06:04

    PID算法有哪些應用

    說到PID算法,想必大部人并不陌生,PID算法在很多方面都有重要應用,比如電機的速度控制,恒溫槽的溫度控制,四軸飛行器的平衡控制等等,作為閉環(huán)控制系統(tǒng)中的一種重要
    發(fā)表于 07-15 09:44

    PID算法之模糊PID 精選資料推薦

    這方面的需求而設計的。專家算法和模糊算法都歸屬于智能算法的范疇,智能算法最大的優(yōu)點就是在控制模型未知的情況下,可以對模型進行控制。這里需要注意的是,專家
    發(fā)表于 07-19 06:29

    PID控制算法是如何形成的

    常用的控制算法有哪幾種?分別有何特點?PID控制算法的基本思想是什么?PID算法是如何形成的?
    發(fā)表于 12-21 07:05

    PID算法的相關資料推薦

    PID 算法原理在工業(yè)應用中 PID 及其衍生算法是應用最廣泛的算法之一,是當之無愧的萬能算法
    發(fā)表于 02-09 07:56

    什么是PID控制算法呢?PID控制算法有何作用

    什么是PID控制算法呢?PID控制算法有何作用?PID控制算法有哪幾種類型呢?如何對其進行測試?
    發(fā)表于 02-25 07:36

    在FPGA開發(fā)板上快速構(gòu)建一種PID算法

    的實例是使用HLS構(gòu)建我們的PID算法。使用HLS能夠使用浮點或任意精度的定點數(shù)。HLS還能通過
    發(fā)表于 10-31 15:53

    pid算法_什么是pid算法

    PID控制器是一種最優(yōu)控制。本文講述了增量式PID算法原理與數(shù)字PID算法原理與數(shù)字PID
    發(fā)表于 01-01 11:58 ?1.2w次閱讀
    <b class='flag-5'>pid</b><b class='flag-5'>算法</b>_什么是<b class='flag-5'>pid</b><b class='flag-5'>算法</b>

    PID算法溫控C語言

    基于PID算法的溫度控制系統(tǒng),PID算法溫控C語言程序
    發(fā)表于 07-12 16:05 ?51次下載

    PID控制算法控制算法

    PID控制算法控制算法
    發(fā)表于 11-17 11:43 ?12次下載

    數(shù)字PID控制算法教程之如何對標準PID算法進行改進

    本文檔的主要內(nèi)容詳細介紹的是數(shù)字PID控制算法教程之如何對標準PID算法進行改進主要內(nèi)容包括了:對標準PID
    發(fā)表于 12-04 08:00 ?15次下載
    數(shù)字<b class='flag-5'>PID</b>控制<b class='flag-5'>算法</b>教程之如何對標準<b class='flag-5'>PID</b><b class='flag-5'>算法</b>進行改進

    如何在FPGA上快速構(gòu)建PID算法

    一種非常常用的算法是比例積分微分控制器(proportional-integral-derivative control)或 PID 控制器。PID 算法用于控制各種應用中溫度、壓力、
    的頭像 發(fā)表于 05-11 15:36 ?1860次閱讀
    如何在FPGA上快速<b class='flag-5'>構(gòu)建</b><b class='flag-5'>PID</b><b class='flag-5'>算法</b>
    主站蜘蛛池模板: 婷婷丁香花 | 日本黄黄 | 玖玖玖精品视频免费播放 | 精品久久香蕉国产线看观看亚洲 | 日本特级黄录像片 | 久久网综合 | 欧美特黄一免在线观看 | 国产成人精品一区二区仙踪林 | 久久99热久久精品99 | 国产婷婷高清在线观看免费 | 亚洲国产精品第一页 | 国产叼嘿网站免费观看不用充会员 | 免费又黄又爽1000禁片 | 亚洲 欧洲 日产 韩国在线 | 亚洲人的天堂男人爽爽爽 | 免费看男女下面日出水视频 | 美女视频黄a | 久久精品人人爽人人爽 | 国产yin乱大巴视频 国产爱v | 欧美精品xxxⅹ欧美 欧美精品高清在线xxxx | 操片免费 | 女性一级全黄生活片 | 欧美性狂猛xxxxxbbbbb | 国产人成精品香港三级古代 | 国产一区国产二区国产三区 | 黄色永久网站 | 大又大又粗又爽又黄毛片女人 | 伊人伊成久久人综合网777 | 欧美 在线播放 | 婷婷爱五月 | 黄色视屏在线免费播放 | 亚洲色播永久网址大全 | 欧美成人鲁丝片在线观看 | 亚洲国产成人va在线观看 | 午夜黄网站 | 国产美女一级视频 | 天天综合网天天综合色 | 38pao强力打造永久免费高清视频 | 欧美成人在线网站 | 97理论片 | 国产亚洲一区二区在线观看 |