加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 初始設(shè)定與啟動
    • 尋跡過程
    • 控制策略概述
    • 調(diào)試過程中的挑戰(zhàn)
    • 例程開源鏈接
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

24電賽H題完賽資料開源,思想開源-(3)控制思想講解

08/12 16:33
741
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

文章底部 可獲?。豪涕_源鏈接

初始設(shè)定與啟動

首先,我們啟動小車并觀察其運(yùn)行情況。小車通過測量左右輪的路程差來進(jìn)行方向調(diào)節(jié)。一旦找到尋跡的黑色線,即開始尋跡操作。我們使用了5個尋跡感應(yīng)管來實(shí)現(xiàn)精確的尋跡功能。

尋跡過程

在第一圈中,我們可以看到小車迅速定位并開始尋跡。每一圈結(jié)束后,小車進(jìn)行角度調(diào)整,通過調(diào)整左右輪的路程差來實(shí)現(xiàn)方向調(diào)節(jié)。尋跡過程中,小車沿著預(yù)設(shè)的角度前行,一旦再次檢測到黑色線,即刻重新開始尋跡操作。

控制策略概述

總體而言,我們的控制策略相對簡單明了:在空白區(qū)域通過左右輪的路程差進(jìn)行實(shí)時方向調(diào)節(jié),并在尋跡模塊檢測到線時立即切換到尋跡模式。在達(dá)到ABCD點(diǎn)后,我們先進(jìn)行方向調(diào)整,將車輛轉(zhuǎn)向設(shè)定方向,然后執(zhí)行路程差控制。

其中路程差進(jìn)行方向調(diào)節(jié)實(shí)現(xiàn)代碼如下:

void task0(void){                                        IR_Check();                                        if(FLAG_ONir==1&&timecount>=300)   //有傳感器了,聲光提示,停下                                  {                                                        StartFlag=0;                                                        setspeedr=0;setspeedl=0; // 停車                                                        R_Pid_Ctrl(0,SPEED_RIGHT);                                                        L_Pid_Ctrl(0,SPEED_LEFT);                                                  beeponflag=1;                                        }                                        else                                        {                                                  setrightroad=5000;                                                        setleftroad=5000;                                                  if(Flag_PID>=1)                                                        {                                                                if(rightroad>leftroad+10)                                                                {Flag_PID=0;        Car_turnright(80,40);}                                                                else if(leftroad>rightroad+10)                                                                {Flag_PID=0;        Car_turnright(40,80);}                                                                else                                                                {Flag_PID=0;        Car_turnright(80,80);}
                                                                R_Pid_Ctrl(setspeedr,SPEED_RIGHT);                                                                L_Pid_Ctrl(setspeedl,SPEED_LEFT);                                                        }                                        }                                }

車輛轉(zhuǎn)角實(shí)現(xiàn)代碼如下:(以下代碼為左輪速不動,右輪轉(zhuǎn)動調(diào)角度)

void ToangleR(unsigned int targetangl, unsigned int picha){        do        {                         if(Flag_PID>=1)                                        {                                                                Flag_PID=0;                                                                R_Pid_Ctrl(15,SPEED_RIGHT);                                        }                                if(Flag_Encode == 1)            //標(biāo)志位檢測執(zhí)行 10ms 實(shí)時速度顯示                          {                                        Encode_Speed();Flag_Encode=0;                                }         }while(targetangl+picha<RealAngl||RealAngl+picha<targetangl)        ;        }

此外,左右輪速度的控制也至關(guān)重要。我們采用閉環(huán)電機(jī)速度控制,確保在尋跡過程中左右輪速度能夠精確控制,以提高運(yùn)動穩(wěn)定性和直線行駛效果。

PID速度閉環(huán)實(shí)現(xiàn)代碼如下:(以下代碼為左輪速度閉環(huán)控制代碼。)

void L_Pid_Ctrl(unsigned int Target,unsigned int Real)      //PID速度控制函數(shù){        int Error=0; //本次差值,上次差值  float j=0.0,i;              if(Target==0)         {                        LastError=0;                        dError=0;                        SumError=0;                  outpwml=0;                  ATIM_SetCompare2B(outpwml);                  return;         }   Error =(Target-Real);   //本次偏差         if(SumError*L_Ki>1600)   //計算積分項(xiàng)                                        {                                                        SumError=1600;                                                        SumError=SumError/L_Ki;                       } // 輸出到最大值后,不再累計偏差,抗積分飽各         else SumError +=Error;            dError=Error-LastError; //微分項(xiàng),偏差的變化    LastError=Error; //記錄本次偏差,用于下次計算                i=L_Kp;                j=Errori;                i=L_Ki;*                j=j+SumError*i;                i=L_Kd;                j=j+dError*i;                if(j>1600)outpwml=1600+1;                else if(j<1)outpwml=1;                else outpwml=j;                   ATIM_SetCompare2B(outpwml);          }

調(diào)試過程中的挑戰(zhàn)

在實(shí)際調(diào)試過程中,我們遇到了幾個挑戰(zhàn)。首先是PID參數(shù)調(diào)節(jié),這直接影響到小車的穩(wěn)定性和精確性。其次是尋跡過程中的速度調(diào)整和轉(zhuǎn)向角度的精確控制,這些都需要仔細(xì)調(diào)整以保證最佳性能。

綜上所述,項(xiàng)目中涉及到多個參數(shù),它們的合理調(diào)整直接影響小車的最終運(yùn)行效果。我設(shè)定的是跑6圈,但實(shí)際上小車可以持續(xù)運(yùn)行更多圈數(shù),每一輪的積累反而會減小誤差,從而提高穩(wěn)定性和準(zhǔn)確性。

例程開源鏈接

鏈接:https://pan.baidu.com/s/1PpacwWdcqvmT4xJEspaojw?pwd=6edb
提取碼:6edb


掃碼加入QQ群,3群| 610403240

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
XRCGB25M000F3A00R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal, 25MHz Nom, ROHS AND REACH COMPLIANT, SMALL, SMD, 3 PIN

ECAD模型

下載ECAD模型
$0.34 查看
M25P05-AVMN6P 1 Rochester Electronics LLC 64KX8 FLASH 2.7V PROM, PDSO8, 0.150 INCH, ROHS COMPLIANT, PLASTIC, SOP-8
$0.79 查看
S29GL256P10FFI020 1 AMD Flash, 16MX16, 100ns, PBGA64,
$9.29 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

以開放、共享、互助為理念,致力于構(gòu)建武漢芯源半導(dǎo)體CW32系列MCU生態(tài)社區(qū)。無論是嵌入式MCU小自還是想要攻破技術(shù)難題的工程師,亦或是需求解決方案的產(chǎn)品經(jīng)理都可在CW32生態(tài)社區(qū)汲取營養(yǎng)、共同成長。

B站