在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

第13章-循跡功能 STM32智能小車循跡教程 PID循跡算法分析

dfhjgfg ? 來源:dfhjgfg ? 作者:dfhjgfg ? 2024-08-21 16:27 ? 次閱讀

功能介紹放開頭, 使用便捷無需愁

這是全網(wǎng)最詳細、性價比最高的STM32實戰(zhàn)項目入門教程,通過合理的硬件設(shè)計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節(jié)代碼手把手教會你如何開發(fā)和調(diào)試。讓你更快掌握嵌入式系統(tǒng)開發(fā)。

**V3.3.0-STM32智能小車 **

**視頻: **[https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click]

V3:HAL庫開發(fā)、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。

講解一下我們小車里面的循跡部分,包括紅外基礎(chǔ)使用,無PID循跡和有PID循跡。

第13章-循跡功能

13.1-非PID循跡功能完成

先紅外對管調(diào)試

我們這里學習一下,如何實現(xiàn)循跡功能

如何才能讓小車沿著黑線運動、要讓小車感知到黑線的位置,使用這種傳感器就可以反饋黑線是否存在
在這里插入圖片描述
根據(jù)傳感器特性,我們檢測紅外對管DO引腳的電壓就可以知道,下面有沒有黑線

DO 高電平->有黑線 小燈滅

DO低電平->沒有黑線 小燈亮

這是好多地方對這個產(chǎn)品的說明

在這里插入圖片描述
然后我們組合上面的紅外對管,安裝到小車上,就可以知道小車是否偏離了黑線,
在這里插入圖片描述
下面我們通過單片機讀取紅外對管DO口的電壓,就知道黑線在小車下面的位置了
STM32初始化

先看原理圖需要初始化那些引腳
在這里插入圖片描述

把****OUT_1-PA5、OUT_2-PA7、OUT_3-PB0、OUT_4-PB1初始化為輸入模式**
**在這里插入圖片描述
重新生成

然后我們在gpio.h 添加讀取GPIO的宏,使得程序更簡潔
在這里插入圖片描述

#define READ_HW_OUT_1   HAL_GPIO_ReadPin(HW_OUT_1_GPIO_Port,HW_OUT_1_Pin) //讀取紅外對管連接的GPIO電平
#define READ_HW_OUT_2   HAL_GPIO_ReadPin(HW_OUT_2_GPIO_Port,HW_OUT_2_Pin)
#define READ_HW_OUT_3   HAL_GPIO_ReadPin(HW_OUT_3_GPIO_Port,HW_OUT_3_Pin)
#define READ_HW_OUT_4   HAL_GPIO_ReadPin(HW_OUT_4_GPIO_Port,HW_OUT_4_Pin)

根據(jù)紅外對管狀態(tài)控制電機速度

注意:整個主函數(shù)不要加入延時,這樣實時性更高,可以根據(jù)紅外對管狀態(tài)做出及時控制
在這里插入圖片描述

if(READ_HW_OUT_1 == 0&&READ_HW_OUT_2 == 0&&READ_HW_OUT_3 == 0&&READ_HW_OUT_4 == 0 )
{
printf("應(yīng)該前進rn");
motorPidSetSpeed(1,1);//前運動
}
if(READ_HW_OUT_1 == 0&&READ_HW_OUT_2 == 1&&READ_HW_OUT_3 == 0&&READ_HW_OUT_4 == 0 )
{
printf("應(yīng)該右轉(zhuǎn)rn");
motorPidSetSpeed(0.5,2);//右邊運動
}
if(READ_HW_OUT_1 == 1&&READ_HW_OUT_2 == 0&&READ_HW_OUT_3 == 0&&READ_HW_OUT_4 == 0 )
{
printf("快速右轉(zhuǎn)rn");
motorPidSetSpeed(0.5,2.5);//快速右轉(zhuǎn)
}
if(READ_HW_OUT_1 == 0&&READ_HW_OUT_2 == 0&&READ_HW_OUT_3 == 1&&READ_HW_OUT_4 == 0 )
{
printf("應(yīng)該左轉(zhuǎn)rn");
motorPidSetSpeed(2,0.5);//左邊運動
}
if(READ_HW_OUT_1 == 0&&READ_HW_OUT_2 == 0&&READ_HW_OUT_3 == 0&&READ_HW_OUT_4 == 1 )
{
printf("快速左轉(zhuǎn)rn");
motorPidSetSpeed(2.5,0.5);//快速左轉(zhuǎn)
}

然后測試

  1. 測試紅外對管靈敏度,放在有黑線的地上或者紙上,然后把小車黑線比如放到最右邊 及第一個紅外對管,觀察紅外對管小燈變化情況和串口輸出情況,如果小燈沒有滅,就調(diào)節(jié)紅外對管靈敏度和室內(nèi)燈光,直到每個紅外對管都可以感應(yīng)到小燈。
  2. 然后在黑線上讓小車循跡
    在這里插入圖片描述

然后循跡功能完成

然后放到地上
在這里插入圖片描述

13.2-加入循跡PID

前面的代碼我們對循跡是判斷的幾個狀態(tài),然后PID控制電機不同速度,但是我們可以使用紅外對管狀態(tài)作為PID控制的輸入然后再控制電機。

PID的輸入是紅外對管狀態(tài),我們設(shè)計 PID輸入是紅外對管的狀態(tài)、然后輸出一個速度值,然后左右電機去加或者減這個值,就可以完成根據(jù)紅外對管輸入對電機的差速控制

主函數(shù)添加的
在這里插入圖片描述

extern tPid pidHW_Tracking;//紅外循跡的PID
uint8_t g_ucaHW_Read[4] = {0};//保存紅外對管電平的數(shù)組
int8_t g_cThisState = 0;//這次狀態(tài)
int8_t g_cLastState = 0; //上次狀態(tài)
float g_fHW_PID_Out;//紅外對管PID計算輸出速度
float g_fHW_PID_Out1;//電機1的最后循跡PID控制速度
float g_fHW_PID_Out2;//電機2的最后循跡PID控制速度

然后實現(xiàn)PID循跡控制、注意為了更加快,要減少沒有必要的程序和優(yōu)化判斷、將沒有必要的輸出都注釋掉
在這里插入圖片描述

g_ucaHW_Read[0] = READ_HW_OUT_1;//讀取紅外對管狀態(tài)、這樣相比于寫在if里面更高效
g_ucaHW_Read[1] = READ_HW_OUT_2;
g_ucaHW_Read[2] = READ_HW_OUT_3;
g_ucaHW_Read[3] = READ_HW_OUT_4;
?
if(g_ucaHW_Read[0] == 0&&g_ucaHW_Read[1] == 0&&g_ucaHW_Read[2] == 0&&g_ucaHW_Read[3] == 0 )
{
//printf("應(yīng)該前進rn");//注釋掉更加高效,減少無必要程序執(zhí)行
g_cThisState = 0;//前進
}
else if(g_ucaHW_Read[0] == 0&&g_ucaHW_Read[1] == 1&&g_ucaHW_Read[2] == 0&&g_ucaHW_Read[3] == 0 )//使用else if更加合理高效
{
//printf("應(yīng)該右轉(zhuǎn)rn");
g_cThisState = -1;//應(yīng)該右轉(zhuǎn)
}
else if(g_ucaHW_Read[0] == 1&&g_ucaHW_Read[1] == 0&&g_ucaHW_Read[2] == 0&&g_ucaHW_Read[3] == 0 )
{
//printf("快速右轉(zhuǎn)rn");
g_cThisState = -2;//快速右轉(zhuǎn)
}
else if(g_ucaHW_Read[0] == 1&&g_ucaHW_Read[1] == 1&&g_ucaHW_Read[2] == 0&&g_ucaHW_Read[3] == 0)
{
//printf("快速右轉(zhuǎn)rn");
g_cThisState = -3;//快速右轉(zhuǎn)
}
else if(g_ucaHW_Read[0] == 0&&g_ucaHW_Read[1] == 0&&g_ucaHW_Read[2] == 1&&g_ucaHW_Read[3] == 0 )
{
//printf("應(yīng)該左轉(zhuǎn)rn");
g_cThisState = 1;//應(yīng)該左轉(zhuǎn)
}
else if(g_ucaHW_Read[0] == 0&&g_ucaHW_Read[1] == 0&&g_ucaHW_Read[2] == 0&&g_ucaHW_Read[3] == 1 )
{
//printf("快速左轉(zhuǎn)rn");
g_cThisState = 2;//快速左轉(zhuǎn)
}
else if(g_ucaHW_Read[0] == 0&&g_ucaHW_Read[1] == 0&&g_ucaHW_Read[2] == 1&&g_ucaHW_Read[3] == 1)
{
//    printf("快速左轉(zhuǎn)rn");
g_cThisState = 3;//快速左轉(zhuǎn)
}
g_fHW_PID_Out = PID_realize(&pidHW_Tracking,g_cThisState);//PID計算輸出目標速度 這個速度,會和基礎(chǔ)速度加減
?
g_fHW_PID_Out1 = 3 + g_fHW_PID_Out;//電機1速度=基礎(chǔ)速度+循跡PID輸出速度
g_fHW_PID_Out2 = 3 - g_fHW_PID_Out;//電機1速度=基礎(chǔ)速度-循跡PID輸出速度
if(g_fHW_PID_Out1 >5) g_fHW_PID_Out1 =5;//進行限幅 限幅速度在0-5之間
if(g_fHW_PID_Out1 < 0) g_fHW_PID_Out1 =0;
if(g_fHW_PID_Out2 >5) g_fHW_PID_Out2 =5;
if(g_fHW_PID_Out2 < 0) g_fHW_PID_Out2 =0;
if(g_cThisState != g_cLastState)//如何這次狀態(tài)不等于上次狀態(tài)、就進行改變目標速度和控制電機、在定時器中依舊定時控制電機
{
motorPidSetSpeed(g_fHW_PID_Out1,g_fHW_PID_Out2);//通過計算的速度控制電機
}

g_cLastState = g_cThisState;//保存上次紅外對管狀態(tài)

在pid.中
在這里插入圖片描述

tPid pidHW_Tracking;//紅外循跡的PID

在這里插入圖片描述

?
pidHW_Tracking.actual_val=0.0;
pidHW_Tracking.target_val=0.00;//紅外循跡PID 的目標值為0
pidHW_Tracking.err=0.0;
pidHW_Tracking.err_last=0.0;
pidHW_Tracking.err_sum=0.0;
pidHW_Tracking.Kp=-1.50;
pidHW_Tracking.Ki=0;
pidHW_Tracking.Kd=0.80;

然后就可以跑一下試試了。

可以改進的地方

  1. 紅外對管影響差速轉(zhuǎn)向,也影響基礎(chǔ)直行的速度 ,會有更好控制效果,所以可以加入每種紅外對管狀態(tài)下對基礎(chǔ)速度的影響。
  2. 紅外對管的數(shù)量越多,效果會越好。

第15章我們會講解手機遙控的功能

審核編輯 黃宇

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

    關(guān)注

    6064

    文章

    44932

    瀏覽量

    647504
  • STM32
    +關(guān)注

    關(guān)注

    2290

    文章

    11018

    瀏覽量

    362667
  • 智能小車
    +關(guān)注

    關(guān)注

    87

    文章

    554

    瀏覽量

    82278
  • 算法分析
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    7682
  • 循跡
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    13164
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    20.3-使用兩個通道進行電磁循跡 智能車競賽 電磁桿原理圖 電磁循跡小車 STM32電磁小車 電磁循跡算法

    20.3-使用兩個通道進行電磁循跡 智能車競賽 電磁桿原理圖 電磁循跡小車 智能車電磁組 STM32
    的頭像 發(fā)表于 08-20 10:56 ?1331次閱讀
    20.3-使用兩個通道進行電磁<b class='flag-5'>循跡</b> <b class='flag-5'>智能</b>車競賽 電磁桿原理圖 電磁<b class='flag-5'>循跡</b><b class='flag-5'>小車</b> <b class='flag-5'>STM32</b>電磁<b class='flag-5'>小車</b> 電磁<b class='flag-5'>循跡</b><b class='flag-5'>算法</b>

    五路循跡小車PID算法探討

    最近研究五路循跡小車,想加上PID算法,是用位置式,還是增量式呢?求大神指導(dǎo)
    發(fā)表于 08-15 15:29

    PID循跡模塊原理

    前言?讓小車進行循跡最重要的是獲取車相對于循跡線的位置,關(guān)于循跡模塊的原理我已經(jīng)在之前的一篇博客上講過,如果大家沒看過的話可以點此鏈接:PID
    發(fā)表于 09-07 06:29

    紅外循跡傳感器PID循跡算法的相關(guān)資料分享

    紅外循跡傳感器PID循跡算法前一段時間參加了一個小車循跡競速的比賽,獲得了一個還行的成績,所以在
    發(fā)表于 01-14 08:03

    基于STC89C52單片機_紅外智能循跡小車

    智能循跡小車 智能循跡小車 智能
    發(fā)表于 11-12 10:23 ?612次下載

    基于51單片機循跡智能小車

    基于51單片機循跡智能小車基于51單片機循跡智能小車基于51單片機
    發(fā)表于 11-13 15:55 ?0次下載

    智能循跡小車程序

    智能循跡小車,基于stm32智能循跡小車HC-SR
    發(fā)表于 12-04 10:30 ?39次下載

    智能循跡小車程序

    智能小車循跡 沒有pwm的調(diào)速機制
    發(fā)表于 12-17 11:38 ?25次下載

    PWM調(diào)速+循跡__智能小車程序

    PWM調(diào)速+循跡__智能小車程序
    發(fā)表于 02-07 17:14 ?136次下載

    基于STM32智能循跡往返小車電路設(shè)計

    基于STM32智能循跡往返小車電路設(shè)計
    發(fā)表于 04-10 09:30 ?64次下載

    智能循跡避障小車設(shè)計與實現(xiàn)

    智能循跡避障小車設(shè)計與實現(xiàn)
    發(fā)表于 06-06 08:48 ?309次下載

    智能循跡避障小車程序

    智能循跡避障小車程序,紅外循跡
    發(fā)表于 12-11 16:37 ?56次下載

    基于stm32單片機的紅外避障及循跡小車

    設(shè)計簡介:本設(shè)計是基于單片機的紅外避障、循跡小車,主要實現(xiàn)以下功能小車可通過手機控制 實現(xiàn)紅外避障與循跡
    發(fā)表于 11-19 09:21 ?265次下載
    基于<b class='flag-5'>stm32</b>單片機的紅外避障及<b class='flag-5'>循跡</b><b class='flag-5'>小車</b>

    紅外循跡傳感器PID循跡算法

    紅外循跡傳感器PID循跡算法前一段時間參加了一個小車循跡競速的比賽,獲得了一個還行的成績,所以在
    發(fā)表于 01-14 11:04 ?36次下載
    紅外<b class='flag-5'>循跡</b>傳感器<b class='flag-5'>PID</b><b class='flag-5'>循跡</b><b class='flag-5'>算法</b>

    19.2-星曈科技 openmv H7 plus openmv視覺循跡功能-完成視覺識別指定區(qū)域 OpenMV視覺模塊循跡 STM32F103C8T6視覺巡線

    19.2-【星曈科技】openmv H7 plus openmv視覺循跡功能-完成視覺識別指定區(qū)域 OpenMV視覺模塊循跡_巡線
    的頭像 發(fā)表于 08-20 11:28 ?960次閱讀
    主站蜘蛛池模板: 天堂网在线最新版www中文网 | 亚洲一区免费在线观看 | 最近高清在线视频观看免费 | 高清性欧美xxx | 色老头在线精品视频在线播放 | 久久久中文 | 久久精品夜色国产 | 国模吧在线视频 | 一级毛片一级毛片一级级毛片 | 国产精品久久久亚洲456 | 欧美性a欧美在线 | 日韩三级毛片 | 成人午夜久久 | 免费在线一区二区三区 | 亚洲色图日韩精品 | 亚1州区2区三区4区产品 | 可以看黄色的网站 | 日日摸夜夜添免费毛片小说 | 你懂得在线网站 | 超级乱淫小黄文小说 | 亚洲夜夜操 | 男子扒开美女尿口做羞羞的事 | 狠狠草视频 | 美女一级毛片毛片在线播放 | 性欧美高清极品xx | 99色亚洲| 视频一区在线观看 | 亚洲欧美日韩另类精品一区二区三区 | 五月婷婷色综合 | 免费在线看黄色 | 欧美极品在线播放 | 男女视频在线观看免费 | 视频午夜 | 亚欧成人中文字幕一区 | 亚洲国产成人精品女人久久久 | 在线a人片免费观看不卡 | 午夜香蕉网 | 国产在线小视频 | 婷婷色人阁| 天天澡天天摸天天添视频 | 国模私拍一区二区 |