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

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

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

基于STM32的平衡小車設(shè)計(jì)過程分享(3)

一口氣吃不成胖子 ? 來源:一口氣吃不成胖子 ? 作者:一口氣吃不成胖子 ? 2023-04-27 14:40 ? 次閱讀

一、簡介

續(xù)上文,電機(jī)驅(qū)動(dòng)、MPU6050驅(qū)動(dòng)均已完成,接下來我們給他加上PID讓它站起來

二、PID控制

我們將小車PID控制函數(shù)放到MPU6050中斷函數(shù)中,每當(dāng)MPU6050有數(shù)據(jù)輸出時(shí),引腳INT有相應(yīng)的電平輸出。依次來觸發(fā)外部中斷作為控制周期。保持MPU6050數(shù)據(jù)的實(shí)時(shí)性。

2.1直立環(huán)控制

通過傳入的KP、KD參數(shù),讓平衡車的pitch軸保持在水平位置。

直立環(huán)是用于控制機(jī)械系統(tǒng)中垂直方向運(yùn)動(dòng)的一種控制器。在這些應(yīng)用中,垂直方向的運(yùn)動(dòng)通常是非常穩(wěn)定的,因此I控制器的積分作用并不是必需的。而PD控制器可以提供足夠的控制性能,同時(shí)避免了可能出現(xiàn)的積分飽和問題,因此在直立環(huán)中通常只使用PD控制器,而不使用I控制器。

/**************************************************************************

函數(shù)功能:直立PD控制

入口參數(shù):角度、機(jī)械平衡角度(機(jī)械中值)、角速度

返回 值:直立控制PWM

**************************************************************************/

int balance_UP(float Angle,float Mechanical_balance,float Gyro)

{ 

  float Bias;

  int balance;

  Bias=Angle-Mechanical_balance;   //求出平衡的角度中值和機(jī)械相關(guān)

  balance=balance_UP_KP*Bias+balance_UP_KD*Gyro; //計(jì)算平衡控制的電機(jī)PWM PD控制  kp是P系數(shù) kd是D系數(shù)

  return balance;

}

2.2速度環(huán)控制

這里我們只用到了PI的控制參數(shù),如果有微分環(huán)(D)在里面的,系統(tǒng)會(huì)響應(yīng)波動(dòng)太快,微分對極小的速度波動(dòng)都會(huì)有反應(yīng),而速度的微微波動(dòng)又太多了,什么電機(jī)微抖,轉(zhuǎn)速檢測裝置的不穩(wěn)定??偨Y(jié),微分太靈敏了,所以我們只用到了PI作為調(diào)節(jié)參數(shù)

/**************************************************************************

函數(shù)功能:速度PI控制

入口參數(shù):電機(jī)編碼器的值

返回 值:速度控制PWM

**************************************************************************/

int velocity(int encoder_left,int encoder_right,int Target_Speed)

{ 

   static float Velocity,Encoder_Least,Encoder;

  static float Encoder_Integral;

  //=============速度PI控制器=======================// 

  Encoder_Least=(Encoder_Left+Encoder_Right); //獲取最新速度偏差==測量速度(左右編碼器之和)-目標(biāo)速度

  Encoder *= 0.8; //===一階低通濾波器      

  Encoder += Encoder_Least*0.2; //===一階低通濾波器  

  Encoder_Integral +=Encoder; //===積分出位移 積分時(shí)間:10ms

  Encoder_Integral=Encoder_Integral-Target_Speed;  //接收遙控器數(shù)據(jù),控制前進(jìn)后退

  if(Encoder_Integral>10000)   Encoder_Integral=10000; //===積分限幅

  if(Encoder_Integral<-10000)?????? Encoder_Integral=-10000; //===積分限幅?????? 

 ????? Velocity=Encoder*velocity_KP+Encoder_Integral*velocity_KI; //===速度控制???? 

   ?if(pitch<-40||pitch>40)   Encoder_Integral=0;   //===電機(jī)關(guān)閉后清除積分

  return Velocity;

}

2.3轉(zhuǎn)向環(huán)控制

在轉(zhuǎn)向控制中,PD控制器代表的是比例-微分控制器,它根據(jù)當(dāng)前的偏差和偏差的變化率來調(diào)整控制參數(shù),以實(shí)現(xiàn)快速響應(yīng)和穩(wěn)定性。

相比之下,積分控制器(I控制器)會(huì)根據(jù)偏差的積分來調(diào)整控制參數(shù),以減小系統(tǒng)的穩(wěn)態(tài)誤差。然而,在轉(zhuǎn)向控制中,由于小車的動(dòng)態(tài)響應(yīng)和環(huán)境的不確定性,I控制器容易出現(xiàn)積分飽和的問題,從而導(dǎo)致系統(tǒng)不穩(wěn)定和震蕩。

因此,為了保證轉(zhuǎn)向控制的穩(wěn)定性和可靠性,通常只使用PD控制器,而不使用I控制器。同時(shí),還可以通過其他控制策略,如模糊控制、自適應(yīng)控制等來進(jìn)一步提高控制性能。

/**************************************************************************

函數(shù)功能:轉(zhuǎn)向PD控制

入口參數(shù):電機(jī)編碼器的值、Z軸角速度

返回 值:轉(zhuǎn)向控制PWM

**************************************************************************/



int Turn_UP(int gyro_Z, int RC)

{

  int PWM_out;

  /*轉(zhuǎn)向約束*/

  if(RC==0)Turn_Kd=TURN_KD;//若無左右轉(zhuǎn)向指令,則開啟轉(zhuǎn)向約束

  else Turn_Kd=0;//若左右轉(zhuǎn)向指令接收到,則去掉轉(zhuǎn)向約束

  PWM_out=Turn_Kd*gyro_Z + Turn_KP*RC;

  return PWM_out;

}

2.4 PID參數(shù)的調(diào)節(jié)

通過調(diào)節(jié)PID的參數(shù),使小車達(dá)到穩(wěn)定狀態(tài),該數(shù)據(jù)僅供參考,具體調(diào)節(jié)還得從實(shí)際中得來

//直立環(huán)

#define BLC_KP 300

#define BLC_KD 0.6

//速度環(huán)

#define SPD_KP -80

#define SPD_KI -0.40

//轉(zhuǎn)向環(huán)

#define TURN_KP -30

#define TURN_KD -0.3
poYBAGRKGLmAFwt4AAXLcy9ShtE852.png

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

    關(guān)注

    112

    文章

    16411

    瀏覽量

    178701
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10914

    瀏覽量

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

    關(guān)注

    35

    文章

    1473

    瀏覽量

    85644
  • 平衡小車
    +關(guān)注

    關(guān)注

    1

    文章

    39

    瀏覽量

    12516
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于STM32平衡小車設(shè)計(jì)過程分享(1)

    基于STM32平衡車開發(fā)
    的頭像 發(fā)表于 04-27 14:30 ?8322次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>平衡</b><b class='flag-5'>小車</b>設(shè)計(jì)<b class='flag-5'>過程</b>分享(1)

    如何去制作一種基于stm32的兩輪平衡小車?求過程

    如何去制作一種基于stm32的兩輪平衡小車?基于stm32的兩輪平衡小車電路設(shè)計(jì)的基本
    發(fā)表于 07-09 07:47

    基于STM32F103C8T6制作平衡小車過程

    基于STM32F103C8T6制作平衡小車過程中的問題文章目錄基于STM32F103C8T6制作平衡
    發(fā)表于 08-24 08:07

    平衡小車移植過程中趟過的坑

    最近在研究平衡小車,在TB上買了一個(gè)小車套件,源代碼是用的stm32的3.5庫,自己打算移植到hal庫上面去,順便深入了解一下平衡
    發(fā)表于 09-17 06:40

    基于STM32的雙輪平衡小車設(shè)計(jì)

    預(yù)告:代碼及文檔下載方案分析1、基于STM32F103C8T6 單片機(jī)的雙輪自平衡小車系統(tǒng);2、以 MPU6050 三軸陀螺儀加速計(jì)為傳感器的姿態(tài)感知系統(tǒng);3、通過卡爾曼濾波對傳感器的
    發(fā)表于 11-30 08:03

    兩輪自平衡小車的設(shè)計(jì)與實(shí)現(xiàn)

    兩輪自平衡小車的設(shè)計(jì)與實(shí)現(xiàn),基于STM32控制的自平衡雙輪小車,其中機(jī)械部分包括車體、車輪、步進(jìn)電機(jī)、鋰電池等部件設(shè)計(jì)加工。
    發(fā)表于 05-19 15:16 ?20次下載

    基于stm32程序的DIY二輪平衡小車

    在校期間制作的stm32平衡小車,效果還可以
    發(fā)表于 05-20 10:05 ?74次下載

    基于STM32設(shè)計(jì)的智能平衡小車源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于STM32設(shè)計(jì)的智能平衡小車源代碼 支持手機(jī)及電腦上位機(jī)控制的平衡小車
    發(fā)表于 07-16 08:00 ?123次下載

    STM32的兩輪平衡小車源代碼

    基于STM32的兩輪平衡小車源代碼說明。
    發(fā)表于 03-17 14:21 ?64次下載

    STM32智能平衡小車詳細(xì)電路原理圖

    STM32智能平衡小車詳細(xì)電路原理圖免費(fèi)下載。
    發(fā)表于 06-18 10:55 ?196次下載

    stm32藍(lán)牙平衡小車制作項(xiàng)目心得(一)

    自從肝了這么多stm32的視頻,一直沒有做項(xiàng)目來實(shí)踐。這次的平衡小車項(xiàng)目
    發(fā)表于 01-14 12:06 ?12次下載
    <b class='flag-5'>stm32</b>藍(lán)牙<b class='flag-5'>平衡</b><b class='flag-5'>小車</b>制作項(xiàng)目心得(一)

    平衡小車調(diào)試總結(jié)

    前言本文將總結(jié)平衡小車的調(diào)試經(jīng)驗(yàn),經(jīng)過幾晚的努力平衡小車已經(jīng)可以比較穩(wěn)定的平衡了。本文平衡
    發(fā)表于 01-14 12:29 ?14次下載
    <b class='flag-5'>平衡</b><b class='flag-5'>小車</b>調(diào)試總結(jié)

    stm32平衡小車

    stm32f103c8t6的平衡小車的代碼
    發(fā)表于 06-15 14:51 ?51次下載

    基于STM32的兩輪平衡小車設(shè)計(jì)

    學(xué)習(xí)一種單片機(jī)最快的方式莫過于用它實(shí)際制作一個(gè)作品了,前些天看到有人在玩平衡小車,感覺非常有趣,于是就決定自己動(dòng)手制作一個(gè)基于stm32的兩輪平衡
    的頭像 發(fā)表于 07-25 15:48 ?3248次閱讀
    基于<b class='flag-5'>STM32</b>的兩輪<b class='flag-5'>平衡</b><b class='flag-5'>小車</b>設(shè)計(jì)

    STM32平衡小車原理圖

    STM32f103c8t6平衡小車原理圖
    發(fā)表于 07-05 10:54 ?1次下載