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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

增量式PID算法在c代碼部分的實(shí)現(xiàn)過(guò)程

嵌入式應(yīng)用開(kāi)發(fā) ? 來(lái)源:嵌入式應(yīng)用開(kāi)發(fā) ? 作者:嵌入式應(yīng)用開(kāi)發(fā) ? 2022-06-16 11:27 ? 次閱讀

stm32控制器下經(jīng)常會(huì)用到對(duì)溫度控制,適度控制,轉(zhuǎn)速控制等需要自動(dòng)控制相關(guān)的操作,因此在使用中需要不斷提高對(duì)自動(dòng)控制 原理部分的學(xué)習(xí),一個(gè)好的自動(dòng)控制系統(tǒng)包含三個(gè) 主要因素:穩(wěn),快,準(zhǔn)。穩(wěn)即系統(tǒng)的穩(wěn)定性,快即系統(tǒng)的快速性,準(zhǔn)即控制的準(zhǔn)確性。

在自動(dòng)控制中比例增益,積分時(shí)間,微分時(shí)間三個(gè)主要變量。下面就這三個(gè)變量進(jìn)行動(dòng)態(tài)展示。

動(dòng)圖

如上圖所示,假設(shè)在單位階躍響應(yīng)下,比例控制幅值,kp越大值越高相關(guān)的,積分時(shí)間控制精確度,數(shù)值越大波形超調(diào)量越大,微分時(shí)間控制波形的平緩程度。

下面貼出增量式PID算法在c代碼部分的實(shí)現(xiàn)過(guò)程。

//實(shí)現(xiàn)增量式PID算法 

#include "stdio.h" 
void pid_init();//PID參數(shù)初始化 
float pid_realise(float speed);//實(shí)現(xiàn)PID算法   

struct {
    float set_speed;//設(shè)定速度 
    float actual_speed;//實(shí)際速度
    float error;//偏差  
    float error_next;//上一個(gè)偏差  
    float error_last;//上上一個(gè)偏差 
    float kp,ki,kd;//定義比例,積分,微分參數(shù)  
     
}pid;


int main()
{
    pid_init();
    int count = 0;
    while(count<400)//進(jìn)行400次 PID 運(yùn)算,使初始值從0開(kāi)始接近200.0   
    {
        float speed = pid_realise(200.0);//設(shè)定值設(shè)定為200.0  
        printf("%f\n",speed);//輸出每一次PID 運(yùn)算后的結(jié)果  
        count++;
    }
}


void pid_init()
{
    pid.set_speed = 0.0;
    pid.actual_speed = 0.0;
    pid.error = 0.0;
    pid.error_next = 0.0;
    pid.error_last = 0.0;
    //可調(diào)節(jié)PID 參數(shù)。使跟蹤曲線慢慢接近階躍函數(shù)200.0 // 
    pid.kp = 0.2;
    pid.ki = 0.01;
    pid.kd = 0.2;
}


float pid_realise(float speed)//實(shí)現(xiàn)pid  
{
    pid.set_speed = speed;//設(shè)置目標(biāo)速度  
    pid.error = pid.set_speed - pid.actual_speed;
    float increment_speed;//增量
     
    increment_speed = pid.kp*(pid.error-pid.error_next)+pid.ki*pid.error+\
    pid.kd*(pid.error-2*pid.error_next+pid.error_last);//增量計(jì)算公式  
    
    pid.actual_speed+= increment_speed;
    pid.error_last = pid.error_next;//下一次迭代  
    pid.error_next = pid.error;
    return pid.actual_speed; 
    
}

運(yùn)行數(shù)據(jù)得到圖標(biāo)如下 :

poYBAGKqov2ALrgkAABTRApyEyM634.png

審核編輯:湯梓紅

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

    關(guān)注

    112

    文章

    15884

    瀏覽量

    175356
  • STM32
    +關(guān)注

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352468
  • PID
    PID
    +關(guān)注

    關(guān)注

    35

    文章

    1466

    瀏覽量

    84835
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺析位置PID增量PID算法

    位置PID增量PID算法通常依據(jù)控制器輸出與執(zhí)行機(jī)構(gòu)的對(duì)應(yīng)關(guān)系,將基本數(shù)字
    發(fā)表于 01-15 18:35

    教你用C語(yǔ)言實(shí)現(xiàn)位置PID增量PID

    控制器”,拿控制電機(jī)來(lái)說(shuō),參考下面模型:下面引用一段網(wǎng)上經(jīng)典的話:工業(yè)應(yīng)用中PID及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無(wú)愧的萬(wàn)能算法
    發(fā)表于 05-30 08:00

    收藏干貨 PID算法實(shí)現(xiàn)

    ,是當(dāng)之無(wú)愧的萬(wàn)能算法,如果能夠熟練掌握PID算法的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,對(duì)于一般的研發(fā)人員來(lái)講,應(yīng)該是足夠應(yīng)對(duì)一般研發(fā)問(wèn)題了,而難能可貴的是,
    發(fā)表于 06-22 11:37

    STM32如何去實(shí)現(xiàn)增量PID算法

    盡快進(jìn)入狀態(tài)。特地分享一些自己如何實(shí)現(xiàn)過(guò)程。首先說(shuō)說(shuō)增量PID的公式,這個(gè)關(guān)系到MCU算法
    發(fā)表于 09-13 06:54

    PID算法增量算法

    這里的PID是指控制類的比例-積分-微分算法,而不是進(jìn)程ID號(hào)。PID算法,不管是原理上,還是代碼上都比較簡(jiǎn)單。主要運(yùn)用在電機(jī)控制、開(kāi)關(guān)電源
    發(fā)表于 09-13 06:06

    如何實(shí)現(xiàn)增量PID

    雖然PID不是什么牛逼的東西,但是真心希望以后剛剛接觸這塊的人能盡快進(jìn)入狀態(tài)。特地分享一些自己如何實(shí)現(xiàn)過(guò)程。首先說(shuō)說(shuō)增量
    發(fā)表于 09-13 08:19

    增量PID的stm32實(shí)現(xiàn)及其整定過(guò)程 

    源:增量PID的stm32實(shí)現(xiàn),整定過(guò)程  首先說(shuō)說(shuō)增量
    發(fā)表于 09-13 07:35

    使用C語(yǔ)言進(jìn)行PID算法實(shí)現(xiàn)

    前文對(duì)PID算法離散化和增量PID算法原理進(jìn)行來(lái)探索,之后又使用Matlab進(jìn)行了仿真實(shí)驗(yàn),對(duì)
    發(fā)表于 09-15 09:20

    如何去實(shí)現(xiàn)基于stm32的PID算法增量程序呢

    PID算法可分為哪幾類?PID算法的參數(shù)有哪些呢?如何去實(shí)現(xiàn)基于stm32的PID
    發(fā)表于 12-02 07:48

    增量PID控制算法

    增量PID控制算法-2011,有需要的下來(lái)看看。
    發(fā)表于 04-01 14:54 ?29次下載

    位置型PIDC語(yǔ)言代碼實(shí)現(xiàn)過(guò)程詳細(xì)資料概述

    上一節(jié)中已經(jīng)抽象出了位置性 PID增量PID 的數(shù)學(xué)表達(dá)式,這一節(jié),重 點(diǎn)講解 C 語(yǔ)言代碼實(shí)
    發(fā)表于 07-16 08:00 ?8次下載

    在三菱FX2NPLC上實(shí)現(xiàn)增量PID算法的控制

    實(shí)際系統(tǒng)中,PLC控制模擬量可采用PLC自帶的PID過(guò)程控制模塊,但對(duì)要求比較高的場(chǎng)合采用改進(jìn)的PID控制算法,就必須由用戶自己編制
    的頭像 發(fā)表于 12-31 08:11 ?1.2w次閱讀
    在三菱FX2NPLC上<b class='flag-5'>實(shí)現(xiàn)</b>了<b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>PID</b><b class='flag-5'>算法</b>的控制

    如何使用免疫粒子群優(yōu)化算法實(shí)現(xiàn)增量PID控制

    基于粒子群優(yōu)化算法的收斂速度快簡(jiǎn)單易實(shí)現(xiàn)的特點(diǎn)和免疫算法的免疫記憶、免疫自我調(diào)節(jié)和多峰值收斂的特點(diǎn),本文設(shè)計(jì)出免疫粒子群算法,并將其應(yīng)用于PID
    發(fā)表于 11-01 15:41 ?7次下載
    如何使用免疫粒子群優(yōu)化<b class='flag-5'>算法</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>增量</b><b class='flag-5'>式</b>的<b class='flag-5'>PID</b>控制

    使用單片機(jī)和Arduino實(shí)現(xiàn)增量PID位置PID算法PID庫(kù)免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)和Arduino實(shí)現(xiàn)增量PID位置PID
    發(fā)表于 05-28 16:30 ?68次下載
    使用單片機(jī)和Arduino<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>增量</b><b class='flag-5'>式</b><b class='flag-5'>PID</b>位置<b class='flag-5'>式</b><b class='flag-5'>PID</b><b class='flag-5'>算法</b>和<b class='flag-5'>PID</b>庫(kù)免費(fèi)下載

    PID控制算法C語(yǔ)言實(shí)現(xiàn)

    PID算法C實(shí)現(xiàn)1、PID算法簡(jiǎn)介1.1、各個(gè)環(huán)節(jié)的作用2、位置型
    發(fā)表于 01-13 13:39 ?45次下載
    <b class='flag-5'>PID</b>控制<b class='flag-5'>算法</b>的<b class='flag-5'>C</b>語(yǔ)言<b class='flag-5'>實(shí)現(xiàn)</b>