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

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

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

STM32F103C8T6實(shí)現(xiàn)直流電機(jī)速度PID控制

CHANBAEK ? 來(lái)源:月月望歸鳥 ? 作者:K.Fire ? 2023-06-15 16:52 ? 次閱讀

01 前言

前面完成了基于STM32F103C8T6+L298N+MG513P30直流電機(jī)的PWM控制和兩種方法的編碼器實(shí)時(shí)速度反饋,拿到這個(gè)反饋值后我們就可以使用經(jīng)典的PID算法,對(duì)電機(jī)的轉(zhuǎn)速進(jìn)行準(zhǔn)確的控制了,這篇文章主要分享PID基本原理和Keil5的PID編程。

02 PID的基本原理

PID算法是上個(gè)世紀(jì)30年代左右提出的控制算法,大至航空航天、小至家庭溫度調(diào)控都可以使用PID算法,雖然PID算法從提出到現(xiàn)在已經(jīng)歷經(jīng)了快一個(gè)世紀(jì),其后也出現(xiàn)了很多現(xiàn)代的智能算法,比如蒙特卡洛、智能控制等等,但現(xiàn)在PID仍然經(jīng)久不衰,可以說目前80%以上的控制仍然使用PID算法。

PID算法是自動(dòng)控制原理課程學(xué)習(xí)的一部分,但在課程中老師講解的是最基本的原理,沒有任何拓展,更別提應(yīng)用了,首先,先簡(jiǎn)單說一下PID控制算法的原理。

圖片

上圖為PID算法的控制框圖,在我們控制電機(jī)速度時(shí),期望輸入就是電機(jī)的期望速度值,期望輸入與由編碼器測(cè)得的實(shí)際速度作差,求出的誤差值傳給PID的控制部分,算出需要輸出的控制信號(hào),將該控制信號(hào)傳給控制器,也就是輸出給電機(jī)驅(qū)動(dòng)板L298N,這樣形成一個(gè)循環(huán),就實(shí)現(xiàn)了對(duì)電機(jī)速度的精準(zhǔn)控制。

中間PID的控制部分的連續(xù)型公式如下:

圖片

但是在計(jì)算機(jī)中計(jì)算機(jī)很難實(shí)現(xiàn)連續(xù)型變量的積分或者微分操作,因此在計(jì)算機(jī)中,我們使用離散型的積分和微分,就是取時(shí)間間隔T為1,離散型PID公式如下:

圖片

各個(gè)項(xiàng)的主要作用及效果如下:

  • P:增加快速性,過大會(huì)引起震蕩和超調(diào),P單獨(dú)作用會(huì)一直有靜態(tài)誤差
  • I:減少靜態(tài)誤差,過大會(huì)引起震蕩
  • D:減小超調(diào),過大會(huì)使響應(yīng)速度變慢

在實(shí)際的應(yīng)用中,有可能不需要PID同時(shí)使用,比如在速度控制中一般只使用PI控制就夠了

03變式PID

PID算法有很多進(jìn)化版本,分類別的簡(jiǎn)單闡述一下

增量式PID

在電機(jī)的速度PID控制算法中,因?yàn)槲覀円话闶褂肞I算法就夠了,所以我們可以使用增量式PID算法,這樣可以讓我們的公式和代碼更加簡(jiǎn)潔。

圖片

積分限幅

因?yàn)榉e分的效果是累加,隨著時(shí)間的推移,積分項(xiàng)的值會(huì)升到很高,積分本來(lái)的作用是用來(lái)減小靜態(tài)誤差,但積分項(xiàng)過大會(huì)引起過大的震蕩,所以我們可以加一個(gè)判斷函數(shù)if,當(dāng)積分項(xiàng)的值達(dá)到一定值后,就讓積分項(xiàng)保持這個(gè)值,避免引起更大的震蕩。

積分分離

如果剛開始的誤差比較大,那么積分項(xiàng)則會(huì)在剛開始就累計(jì)到了一個(gè)很大的數(shù)值,那么當(dāng)?shù)谝淮螌?shí)際輸出達(dá)到期望值時(shí),不會(huì)立刻停止,而是會(huì)產(chǎn)生一個(gè)很大的過沖。這時(shí)就需要用到積分分離,就是當(dāng)誤差值過大時(shí),我們就不使用積分項(xiàng),只讓PD項(xiàng)單獨(dú)作用,當(dāng)誤差值較小后,再加入積分項(xiàng),以減小靜態(tài)誤差。

04 Keil5程序

為了使用方便,我們先定一個(gè)PID結(jié)構(gòu)體,結(jié)構(gòu)體儲(chǔ)存左右輪的PID參數(shù)、限幅值、誤差等參數(shù)。

typedefstruct
{
//相關(guān)速度PID參數(shù)
floatVelcity_Kp;
floatVelcity_Ki;
floatVelcity_Kd;
floatUr;//限幅值

u8PID_is_Enable;//PID使能
intUn;//期望輸出值
intEn_1;//上一次的誤差值
intEn_2;//上上次的誤差值
intPWM;//輸出PWM值

}PID_InitDefStruct;

在程序初始化部分,定義一個(gè)初始化函數(shù),對(duì)其中的參數(shù)進(jìn)行初始化配置。

voidPID_Init(PID_InitDefStruct*p)
{
p- >Velcity_Kp=5;
p- >Velcity_Ki=0.5;
p- >Velcity_Kd=0;
p- >Ur=7100;
p- >PID_is_Enable=1;
p- >Un=0;
p- >En_1=0;
p- >En_2=0;
p- >PWM=0;
}

當(dāng)編碼器的定時(shí)器,每隔10ms反饋一次編碼器測(cè)出的實(shí)際速度后,調(diào)用PID函數(shù),求解輸出給電機(jī)驅(qū)動(dòng)板的PWM值,然后通過Set_Pwm函數(shù)進(jìn)行設(shè)置,以此控制電機(jī)轉(zhuǎn)速。

voidVelocity_PID(intTargetVelocity,intCurrentVelocity,PID_InitDefStruct*p)
{
if(p- >PID_is_Enable==1)
{
intEn=TargetVelocity-CurrentVelocity;//誤差值

p- >Un+=p- >Velcity_Kp*(En-p- >En_1)+p- >Velcity_Ki*En+p- >Velcity_Kd*(En-2*p- >En_1+p- >En_2);//增量式PID

p- >En_2=p- >En_1;
p- >En_1=En;

p- >PWM=p- >Un;

/*輸出限幅*/
if(p- >PWM >p- >Ur)p- >PWM=p- >Ur;
if(p- >PWM< -p- >Ur)p- >PWM=-p- >Ur;
}
else
{
PID_Init(p);
}

}

測(cè)試給電機(jī)輸入理想轉(zhuǎn)速為1500mm/s,隨便設(shè)置了一組PI參數(shù),得到實(shí)驗(yàn)結(jié)果如下:

圖片

可以通過上位機(jī)看一下波形,可以看到在穩(wěn)定狀態(tài)的靜差是比較小的。

圖片

05 總結(jié)

對(duì)于PID算法這才是萬(wàn)里長(zhǎng)征的第一步吧,想要調(diào)出完美的控制程序,還需要復(fù)雜的PID參數(shù)整定,這里可以配合上位機(jī)進(jìn)行調(diào)試。

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

    關(guān)注

    36

    文章

    1692

    瀏覽量

    69903
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5058

    瀏覽量

    212201
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

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

    關(guān)注

    35

    文章

    1466

    瀏覽量

    84840
  • STM32F103C8T6
    +關(guān)注

    關(guān)注

    106

    文章

    160

    瀏覽量

    82499
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于STM32直流電機(jī)PID調(diào)速系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    本文主要介紹了一種基于STM32直流電機(jī)PID調(diào)速系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),該調(diào)速系統(tǒng)能夠實(shí)現(xiàn)對(duì)電機(jī)的啟
    發(fā)表于 12-25 15:20 ?5.2w次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>直流電機(jī)</b><b class='flag-5'>PID</b>調(diào)速系統(tǒng)設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    STM32F103C8T6核心板的資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F103C8T6核心板的資料合集免費(fèi)下載包括了:STM32F103C8T6核心板測(cè)試程序(PC13閃爍),STM32F103C8T6核心板測(cè)試程序(RTC
    發(fā)表于 06-04 08:00 ?520次下載
    <b class='flag-5'>STM32F103C8T6</b>核心板的資料合集免費(fèi)下載

    STM32F103C8T6原理圖

    STM32F103C8T6原理圖免費(fèi)下載。
    發(fā)表于 06-02 10:01 ?173次下載

    基于STM32F103C8T6開發(fā)板控制的OLED顯示

    基于STM32F103C8T6開發(fā)板控制的OLED顯示
    發(fā)表于 06-03 09:24 ?78次下載

    直流電機(jī)PID控制

    直流電機(jī)PID控制(固緯3030電源)-該文檔為 直流電機(jī)PID控制資料,講解的還不錯(cuò),感興趣的
    發(fā)表于 07-26 11:55 ?49次下載
    <b class='flag-5'>直流電機(jī)</b><b class='flag-5'>PID</b><b class='flag-5'>控制</b>

    PID控制直流電機(jī)速度

    PID控制直流電機(jī)速度(emi開關(guān)電源是什么意思)-該文檔為PID控制
    發(fā)表于 07-26 12:03 ?37次下載
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b><b class='flag-5'>直流電機(jī)</b><b class='flag-5'>速度</b>

    PID控制PWM調(diào)節(jié)直流電機(jī)速度

    PID控制PWM調(diào)節(jié)直流電機(jī)速度(安徽理士電源技術(shù)有限公司圖片)-PID控制PWM調(diào)節(jié)
    發(fā)表于 09-15 14:02 ?97次下載
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b>PWM調(diào)節(jié)<b class='flag-5'>直流電機(jī)</b><b class='flag-5'>速度</b>

    PID自動(dòng)調(diào)節(jié)直流電機(jī)速度

    PID自動(dòng)調(diào)節(jié)直流電機(jī)速度(電源技術(shù)的現(xiàn)狀)-PID自動(dòng)調(diào)節(jié)直流電機(jī)速度。認(rèn)為規(guī)定
    發(fā)表于 09-24 12:50 ?51次下載
    <b class='flag-5'>PID</b>自動(dòng)調(diào)節(jié)<b class='flag-5'>直流電機(jī)</b>的<b class='flag-5'>速度</b>

    STM32F103C8t6程序下載

    STM32F103C8t6程序下載
    發(fā)表于 11-24 18:21 ?230次下載
    <b class='flag-5'>STM32F103C8t6</b>程序下載

    stm32F103 基于HAL庫(kù)的直流電機(jī)驅(qū)動(dòng)(一)

    stm32F103 基于HAL庫(kù)的直流電機(jī)驅(qū)動(dòng)目錄stm32F103 基于HAL庫(kù)的直流電機(jī)驅(qū)動(dòng)硬件連接Cube配置HAL代碼編寫硬件連接Cube配置HAL代碼編寫
    發(fā)表于 01-12 19:48 ?35次下載
    <b class='flag-5'>stm32F103</b> 基于HAL庫(kù)的<b class='flag-5'>直流電機(jī)</b>驅(qū)動(dòng)(一)

    STM32F103C8T6控制器手冊(cè)

    STM32F103C8T6控制器手冊(cè)免費(fèi)下載。
    發(fā)表于 05-24 16:05 ?48次下載

    F103直流電機(jī)雙軸雙閉環(huán)PID控制

    F103 - 直流電機(jī)雙軸雙閉環(huán)PID控制
    發(fā)表于 09-22 15:09 ?3次下載

    STM32F103C8T6實(shí)現(xiàn)直流電機(jī)速度PID控制

    前面完成了基于STM32F103C8T6+L298N+MG513P30直流電機(jī)的PWM控制和兩種方法的編碼器實(shí)時(shí)速度反饋,拿到這個(gè)反饋值后我們就可以使用經(jīng)典的
    發(fā)表于 03-31 11:26 ?2次下載
    <b class='flag-5'>STM32F103C8T6</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>直流電機(jī)</b><b class='flag-5'>速度</b><b class='flag-5'>PID</b><b class='flag-5'>控制</b>

    分享STM32F103C8T6原理圖

    STM32F103C8T6最小系統(tǒng)原理圖
    發(fā)表于 08-29 15:52 ?90次下載

    基于STM32F103直流電機(jī)pid調(diào)節(jié)閉環(huán)控制

    基于STM32F103直流電機(jī)pid調(diào)節(jié)的閉環(huán)控制,主要模塊:NOKIA5110顯示屏紅外測(cè)速模塊
    發(fā)表于 11-27 16:50 ?6次下載