今天給大家安利一下了。一般同學(xué)會(huì)去某度上搜,看到各種各樣版本的PID示例,或者去GitHub上白嫖。
其實(shí)一些芯片公司會(huì)提供一些控制領(lǐng)域的解決方案了,這里面就會(huì)包括PID庫(kù)。
比如ST的“ST Motor Control Sdk”,或者TI的C2000系列的control suite。
不過(guò)目前TI官方對(duì)于control suite已經(jīng)不再提供相應(yīng)的更新,可以繼續(xù)下載這個(gè)套件。
目前control suite已經(jīng)更新為C2000WARE-MOTORCONTROL-SDK.
那本文主要介紹TI的control suite,這里面除了PID外有很多控制類算法,并且配置了豐富的文檔。
如何安裝?
進(jìn)入ti的官網(wǎng),輸入control suite進(jìn)行搜索,就可以找到相應(yīng)的安裝包。
這里有離線安裝包,和在線安裝包。直接基于在線安裝包進(jìn)行操作即可。我們先下載安裝包。
下面就是一路瘋狂點(diǎn)擊Next即可;
界面 1
界面 2
界面 3
界面 4
耐心等待
安裝成功
源碼和文檔
進(jìn)入主界面,這里基本的例子都是基于TI的C2000系列的MCU進(jìn)行開(kāi)發(fā)的,具體如下圖所示;
主界面
進(jìn)入主界面之后,我們可以看到左側(cè)這邊包含了軟硬件文檔,項(xiàng)目示例還有相應(yīng)的文檔。
其實(shí)我們要找的是基于C2000系列MCU的數(shù)學(xué)算法庫(kù),可以在下列列表中找到;
當(dāng)然也可以在安裝目錄C: icontrolSUITElibsapp_libsmotor_controlmath_blocksv4.2下面找到相應(yīng)的PID算法;
至于如何使用這幾個(gè)文件,這里也提供了相應(yīng)的文檔,在Docs中找到,
例如pid_grando.h文件,這里介紹了對(duì)應(yīng)的平臺(tái),當(dāng)然是TI系列的MCU,并且依賴于IQMath庫(kù),其實(shí)這里我們做一些簡(jiǎn)單的改動(dòng),就可以移植到自己所需的平臺(tái)上去了,具體源碼如下:
/* =================================================================================
File name: PID_GRANDO.H
===================================================================================*/#ifndef __PID_H__#define __PID_H__typedef struct { _iq Ref; // Input: reference set-point
_iq Fbk; // Input: feedback
_iq Out; // Output: controller output
_iq c1; // Internal: derivative filter coefficient 1
_iq c2; // Internal: derivative filter coefficient 2
} PID_TERMINALS;
// note: c1 & c2 placed here to keep structure size under 8 wordstypedef struct { _iq Kr; // Parameter: reference set-point weighting
_iq Kp; // Parameter: proportional loop gain
_iq Ki; // Parameter: integral gain
_iq Kd; // Parameter: derivative gain
_iq Km; // Parameter: derivative weighting
_iq Umax; // Parameter: upper saturation limit
_iq Umin; // Parameter: lower saturation limit
} PID_PARAMETERS;
typedef struct { _iq up; // Data: proportional term
_iq ui; // Data: integral term
_iq ud; // Data: derivative term
_iq v1; // Data: pre-saturated controller output
_iq i1; // Data: integrator storage: ui(k-1)
_iq d1; // Data: differentiator storage: ud(k-1)
_iq d2; // Data: differentiator storage: d2(k-1)
_iq w1; // Data: saturation record: [u(k-1) - v(k-1)]
} PID_DATA;
typedef struct { PID_TERMINALS term;
PID_PARAMETERS param;
PID_DATA data;
} PID_CONTROLLER;
/*-----------------------------------------------------------------------------
Default initalisation values for the PID objects
-----------------------------------------------------------------------------*/
#define PID_TERM_DEFAULTS {
0,
0,
0,
0,
0
}#define PID_PARAM_DEFAULTS {
_IQ(1.0),
_IQ(1.0),
_IQ(0.0),
_IQ(0.0),
_IQ(1.0),
_IQ(1.0),
_IQ(-1.0)
}#define PID_DATA_DEFAULTS {
_IQ(0.0),
_IQ(0.0),
_IQ(0.0),
_IQ(0.0),
_IQ(0.0),
_IQ(0.0),
_IQ(0.0),
_IQ(1.0)
}/*------------------------------------------------------------------------------
PID Macro Definition
------------------------------------------------------------------------------*/#define PID_MACRO(v)
/* proportional term */
v.data.up = _IQmpy(v.param.Kr, v.term.Ref) - v.term.Fbk;
/* integral term */
v.data.ui = _IQmpy(v.param.Ki, _IQmpy(v.data.w1, (v.term.Ref - v.term.Fbk))) + v.data.i1;
v.data.i1 = v.data.ui;
/* derivative term */
v.data.d2 = _IQmpy(v.param.Kd, _IQmpy(v.term.c1, (_IQmpy(v.term.Ref, v.param.Km) - v.term.Fbk))) - v.data.d2;
v.data.ud = v.data.d2 + v.data.d1;
v.data.d1 = _IQmpy(v.data.ud, v.term.c2);
/* control output */
v.data.v1 = _IQmpy(v.param.Kp, (v.data.up + v.data.ui + v.data.ud));
v.term.Out= _IQsat(v.data.v1, v.param.Umax, v.param.Umin);
v.data.w1 = (v.term.Out == v.data.v1) ? _IQ(1.0) : _IQ(0.0);
#endif // __PID_H__
這里面不僅僅做了積分抗飽和,還有對(duì)微分環(huán)節(jié)的濾波處理,所以應(yīng)用到項(xiàng)目中是沒(méi)有問(wèn)題的。
代碼中需要了解Q格式的相關(guān)的知識(shí),可以參考一下我的這篇文章《一文教你搞懂C語(yǔ)言的Q格式》 ;
另外,這個(gè)路徑下的文檔中,還提供了相應(yīng)的Example,以及PID的信號(hào)流圖,具體如下所示:
所以,整體來(lái)說(shuō),這個(gè)部分的源碼以及資料都非常有參考價(jià)值,由于離線文件太大,后臺(tái)回復(fù)【618】獲取相應(yīng)安裝文件。
原文標(biāo)題:分享一個(gè)直接用于項(xiàng)目開(kāi)發(fā)的PID庫(kù)!很好用!
文章出處:【微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
mcu
+關(guān)注
關(guān)注
147文章
18392瀏覽量
379063 -
PID
+關(guān)注
關(guān)注
37文章
1487瀏覽量
89582 -
源碼
+關(guān)注
關(guān)注
8文章
678瀏覽量
30855
原文標(biāo)題:分享一個(gè)直接用于項(xiàng)目開(kāi)發(fā)的PID庫(kù)!很好用!
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
亞馬遜云科技推出Amazon Quick Suite,引領(lǐng)Agentic AI驅(qū)動(dòng)的工作新范式
AMD Vivado Design Suite 2025.1現(xiàn)已推出
如何使用One Spin檢查AMD Vivado Design Suite Synth的結(jié)果

EZ-USB Suite無(wú)法打開(kāi)怎么解決?
Kepware Siemens Suite

DevEco Studio 工具如何安裝
【紫光同創(chuàng)盤(pán)古100Pro+開(kāi)發(fā)板,MES2L676-100HP教程】盤(pán)古676系列——FPGA 開(kāi)發(fā)工具使用
DLP4710 light control出現(xiàn)communication error的原因?
安裝完Control Program 2.0.0.0,點(diǎn)擊Connect時(shí)候就會(huì)報(bào)錯(cuò),是哪里出了問(wèn)題?
AMD Vivado Design Suite IDE中的設(shè)計(jì)分析簡(jiǎn)介

英飛凌PSOC Control C3正式問(wèn)世
Vivado Design Suite用戶指南: 設(shè)計(jì)分析與收斂技巧

Vivado Design Suite用戶指南:邏輯仿真

評(píng)論