精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

STM32F103C8T6實現直流電機速度PID控制

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

01 前言

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

02 PID的基本原理

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

PID算法是自動控制原理課程學習的一部分,但在課程中老師講解的是最基本的原理,沒有任何拓展,更別提應用了,首先,先簡單說一下PID控制算法的原理。

圖片

上圖為PID算法的控制框圖,在我們控制電機速度時,期望輸入就是電機的期望速度值,期望輸入與由編碼器測得的實際速度作差,求出的誤差值傳給PID的控制部分,算出需要輸出的控制信號,將該控制信號傳給控制器,也就是輸出給電機驅動板L298N,這樣形成一個循環,就實現了對電機速度的精準控制。

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

圖片

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

圖片

各個項的主要作用及效果如下:

  • P:增加快速性,過大會引起震蕩和超調,P單獨作用會一直有靜態誤差
  • I:減少靜態誤差,過大會引起震蕩
  • D:減小超調,過大會使響應速度變慢

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

03變式PID

PID算法有很多進化版本,分類別的簡單闡述一下

增量式PID

在電機的速度PID控制算法中,因為我們一般使用PI算法就夠了,所以我們可以使用增量式PID算法,這樣可以讓我們的公式和代碼更加簡潔。

圖片

積分限幅

因為積分的效果是累加,隨著時間的推移,積分項的值會升到很高,積分本來的作用是用來減小靜態誤差,但積分項過大會引起過大的震蕩,所以我們可以加一個判斷函數if,當積分項的值達到一定值后,就讓積分項保持這個值,避免引起更大的震蕩。

積分分離

如果剛開始的誤差比較大,那么積分項則會在剛開始就累計到了一個很大的數值,那么當第一次實際輸出達到期望值時,不會立刻停止,而是會產生一個很大的過沖。這時就需要用到積分分離,就是當誤差值過大時,我們就不使用積分項,只讓PD項單獨作用,當誤差值較小后,再加入積分項,以減小靜態誤差。

04 Keil5程序

為了使用方便,我們先定一個PID結構體,結構體儲存左右輪的PID參數、限幅值、誤差等參數。

typedefstruct
{
//相關速度PID參數
floatVelcity_Kp;
floatVelcity_Ki;
floatVelcity_Kd;
floatUr;//限幅值

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

}PID_InitDefStruct;

在程序初始化部分,定義一個初始化函數,對其中的參數進行初始化配置。

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;
}

當編碼器的定時器,每隔10ms反饋一次編碼器測出的實際速度后,調用PID函數,求解輸出給電機驅動板的PWM值,然后通過Set_Pwm函數進行設置,以此控制電機轉速。

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);
}

}

測試給電機輸入理想轉速為1500mm/s,隨便設置了一組PI參數,得到實驗結果如下:

圖片

可以通過上位機看一下波形,可以看到在穩定狀態的靜差是比較小的。

圖片

05 總結

對于PID算法這才是萬里長征的第一步吧,想要調出完美的控制程序,還需要復雜的PID參數整定,這里可以配合上位機進行調試。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 直流電機
    +關注

    關注

    36

    文章

    1708

    瀏覽量

    70086
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5153

    瀏覽量

    213448
  • STM32
    +關注

    關注

    2266

    文章

    10876

    瀏覽量

    354925
  • PID
    PID
    +關注

    關注

    35

    文章

    1471

    瀏覽量

    85306
  • STM32F103C8T6
    +關注

    關注

    107

    文章

    160

    瀏覽量

    83281
收藏 人收藏

    評論

    相關推薦

    基于STM32直流電機PID調速系統設計與實現

    本文主要介紹了一種基于STM32直流電機PID調速系統設計與實現,該調速系統能夠實現電機的啟
    發表于 12-25 15:20 ?5.3w次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>直流電機</b><b class='flag-5'>PID</b>調速系統設計與<b class='flag-5'>實現</b>

    STM32F103C8T6核心板的資料合集免費下載

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

    STM32F103C8T6原理圖

    STM32F103C8T6原理圖免費下載。
    發表于 06-02 10:01 ?177次下載

    基于STM32F103C8T6開發板控制的OLED顯示

    基于STM32F103C8T6開發板控制的OLED顯示
    發表于 06-03 09:24 ?80次下載

    直流電機PID控制

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

    PID控制直流電機速度

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

    PID控制PWM調節直流電機速度

    PID控制PWM調節直流電機速度(安徽理士電源技術有限公司圖片)-PID控制PWM調節
    發表于 09-15 14:02 ?98次下載
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b>PWM調節<b class='flag-5'>直流電機</b><b class='flag-5'>速度</b>

    PID自動調節直流電機速度

    PID自動調節直流電機速度(電源技術的現狀)-PID自動調節直流電機速度。認為規定
    發表于 09-24 12:50 ?51次下載
    <b class='flag-5'>PID</b>自動調節<b class='flag-5'>直流電機</b>的<b class='flag-5'>速度</b>

    STM32F103C8t6程序下載

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

    stm32F103 基于HAL庫的直流電機驅動(一)

    stm32F103 基于HAL庫的直流電機驅動目錄stm32F103 基于HAL庫的直流電機驅動硬件連接Cube配置HAL代碼編寫硬件連接Cube配置HAL代碼編寫
    發表于 01-12 19:48 ?37次下載
    <b class='flag-5'>stm32F103</b> 基于HAL庫的<b class='flag-5'>直流電機</b>驅動(一)

    STM32F103C8T6控制器手冊

    STM32F103C8T6控制器手冊免費下載。
    發表于 05-24 16:05 ?48次下載

    F103直流電機雙軸雙閉環PID控制

    F103 - 直流電機雙軸雙閉環PID控制
    發表于 09-22 15:09 ?3次下載

    STM32F103C8T6實現直流電機速度PID控制

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

    分享STM32F103C8T6原理圖

    STM32F103C8T6最小系統原理圖
    發表于 08-29 15:52 ?101次下載

    基于STM32F103直流電機pid調節閉環控制

    基于STM32F103直流電機pid調節的閉環控制,主要模塊:NOKIA5110顯示屏紅外測速模塊
    發表于 11-27 16:50 ?8次下載