對于編寫PID過程中的問題

????????當stm32RCT6使用位置環pid控制麥輪轉動一定路程時,在這個時間段內想讓一邊輪胎速度加大應該怎么做?

????????比如我pid的目標脈沖值為9000,在運行到3000的時候車偏左了,那我應該怎樣讓他回正,我想到的辦法是增加其最大的脈沖值,但在到達目標脈沖值前較多的時間內其速度是pwm波的最大值,所以難以增大速度。還有辦法是在pid函數中將其最大pwm輸出的值限制為9000(滿pwm為10000),當出現左偏的時候,給左輪的pid算完的pwm進行加1000,但實際效果難以看出,現在應該用什么方法。

????????換種思路,用pid速度環控速,陀螺儀偏離后更改速度大小來矯正,在使用pid時會記錄脈沖數,再使用位置環中的脈沖值相加來看圈數或目標位置,到了直接pwm給0讓其停。

????????在使用pwm讓車停止時,pid計算的定時器中pwm會重新賦值,就會造成車在一瞬間停止,過一會又會自動啟動,所以使用pwm讓其停止不可取。

????????則可以直接設置目標速度為零讓其停止:在PID控制系統中,目標速度是關鍵的輸入信號。如果希望車輛停止,最直接的方法就是將目標速度設置為0。

????????現在直接使用設置目標速度為0會停止,但使用判斷目標值是否到達后讓其速度為0,不能停止。

????????在對于目標值的判斷開始放在主函數的while中,無法實現可能因為在執行別的代碼

????????然后一位在定時器中斷中的if判斷可以不斷地進行判斷,并且有優先級,但在定時器中的if好像不能成功判斷

????????

最開始時是將其封裝在一個函數中
void PanDuan(int b)
{if(Position_L==b || Position_R==b || Position_HL==b || Position_HR==b){Stop();}
}
void Stop(void)
{MuBiao(0,0,0,0);//給目標值為0,速度將會清0,但會有個過程		
}
然后將其放在while中
if(Position_L== Get_MuB() || Position_R== Get_MuB() || Position_HL== Get_MuB() || Position_HR== Get_MuB() ){Stop();}
并且將目標值封裝在一個函數中,保證數值的準確
int Get_MuB(void)
{return MuB;}
然后放在定時器中斷中,但要明白定時器是一段時間進一次,則不一定進的那一次恰好相等,所以寫為
if(Position_L>= Get_MuB() || Position_R>=Get_MuB() || Position_HL>=Get_MuB() || Position_HR>=Get_MuB()){Stop();}
當然在while中或一開始封裝的函數中可以加else來判斷是否成功進入if,但定時器中不行,會一直中斷發數據,會使程序卡死。
else
{Serial_SendByte(1);}	

?結語

還在學習中,如有錯誤還請大佬們指出,有問題可相互交流

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914570.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914570.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914570.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode|Day13|88. 合并兩個有序數組|Python刷題筆記

LeetCode|Day13|88. 合并兩個有序數組|Python刷題筆記 🗓? 本文屬于【LeetCode 簡單題百日計劃】系列 👉 點擊查看系列總目錄 >> 📌 題目簡介 題號:88. 合并兩個有序數組 難度&#xf…

【C++】初識C++(1)

個人主頁:我要成為c嘎嘎大王 希望這篇小小文章可以讓你有所收獲! 目錄 前言 一、C的第一個程序 二、命名空間 2.1 namespace 的價值 2.2 namespace 的定義 2.2.1 正常的命名空間定義 2.2.2 命名空間可以嵌套 2.2.3 匿名命名空間 2.2.4 同名的name…

在新聞資訊 APP 中添加不同新聞分類頁面,通過 ViewPager2 實現滑動切換

在新聞資訊 APP 中添加不同新聞分類頁面,通過 ViewPager2 實現滑動切換 核心組件的作用 ViewPager2:是 ViewPager 的升級版,基于RecyclerView實現,支持水平 / 垂直滑動、RTL(從右到左)布局,且修…

vuex操作state為什么要使用mutations作為規范而不是直接修改state

1. 狀態變更的可追蹤性 (Trackable Changes)Devtools 集成:Vue Devtools 可以捕獲每次 mutation 的執行記錄,記錄變更前后的 state 快照、參數和調用棧。直接修改 state:Devtools 無法檢測到變更來源,導致調試困難(如無…

Spring AI 系列之九 - RAG-入門

之前做個幾個大模型的應用,都是使用Python語言,后來有一個項目使用了Java,并使用了Spring AI框架。隨著Spring AI不斷地完善,最近它發布了1.0正式版,意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

【數據結構】基于順序表的通訊錄實現

目錄 1 順序表的概念及結構 1.1 線性表 1.2 順序表分類 1.2.1 靜態順序表 1.2.2 動態順序表 2 順序表的實現 2.1 順序表的初始化 2.2 順序表中數據的增加和修改 2.2.1 順序表的頭插 2.2.2 順序表的尾插 2.2.3 順序表的頭刪 2.2.4 順序表的尾刪 2.2.5 順序表指定位置…

C語言與匯編混合編程

一、GCC 擴展語法與MSVC約束 (一)GCC(GNU Compiler Collection)內聯匯編語法 asm("匯編指令");#或者 __asm__("匯編指令");#使用更復雜的語法來指定輸入、輸出操作數和修改的寄存器: asm volatile…

WPF中的ListBox詳解

文章目錄簡介ListBoxItem選中項目動態列表簡介 【ListBox】是列表控件,其內部可包含多個【ListBoxItem】,用戶可以從列表中選擇一個或多個項,若Item個數超過指定高度,則右側會自動出現滾動條,非常便捷。盡管邏輯上來說…

【歷史人物】【李白】生平事跡

目錄 一、李白個人簡歷 二、個人主要經歷 三、個人成就及影響 1、詩 2、詞 3、書法 4、劍術 5、理想 四、歷史評價 五、趣事 1、李白擱筆 2、贈汪倫 一、李白個人簡歷 基本信息? 姓名:李白,字太白,號青蓮居士 性別&#xff1…

HALCON+PCL混合編程

HALCON與PCL的混合編程基礎 HALCON和PCL(Point Cloud Library)都是處理3D數據的強大工具,但它們有著不同的設計目標和數據結構。HALCON專注于機器視覺應用,提供了豐富的圖像處理和分析功能;而PCL則是專門為點云處理設計的開源庫。 要實現兩者…

JavaScript書寫基礎和基本數據類型

JavaScript書寫基礎和基本數據類型 jarringslee js書寫基礎和規范 js是一種在客戶端(瀏覽器)運行的編程語言,可實現人機交互的效果。js組成: js由兩部分組成: ECMAScript:js的語言基礎,js遵循其…

CSS個人筆記分享【僅供學習交流】

1、調整透明度 .text{ background-color: rgba(0, 0, 0, 0.08); }解釋&#xff1a;rgba&#xff08;rgb三元素&#xff0c;透明度取值從0~1&#xff09; 2、文字和圖片對齊方式 長用于頭像旁邊的昵稱居中顯示<img src"img/hua" alt"">華仔</img&g…

24.找到列表中最大或最小值的索引

找到列表中最大或最小值的索引 在 Python 中,如果你想找出某個列表中最小或最大值的位置(索引),你可以通過兩步快速實現: 使用 min() 或 max() 獲取目標值使用 .index() 獲取目標值在列表中的索引位置? 基礎實現 def min_element_index(arr):return arr.index(min(arr)

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘pandas’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘pandas’問題 摘要 在使用 PyCharm 的 Python 控制臺或終端執行 pip install pandas 后&#xff0c;仍然出現 ModuleNotFoundError: No module named ‘pandas…

【env環境】rtthread5.1.0使用fal組件

配置 board/Kconfigconfig BSP_USING_ON_CHIP_FLASHbool "Enable On Chip Flash"default ncp rt-thread/components/fal/samples/porting/fal_cfg.h board/fal_cfg.h /** Copyright (c) 2006-2018, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.…

C++20 協程參考手冊詳解 - 源自 cppreference.com

C20 協程參考手冊詳解 - 源自 cppreference.com 人話版 先說“人說”&#xff0c;簡化版本&#xff0c;更易理解。 宏觀概念&#xff1a;協程是一個可以暫定和恢復執行的函數。&#xff08;普通函數是線程相關的&#xff0c;函數的調用依賴于線程棧&#xff0c;而協程的運行…

AI大模型訓練的云原生實踐:如何用Kubernetes指揮千卡集群?

當你的團隊還在手動拼裝顯卡集群時&#xff0c;聰明人早已教會Kubernetes自動調度千卡。就像交響樂團需要指揮家&#xff0c;萬級GPU需要云原生調度藝術。深夜的機房&#xff0c;硬件工程師老張盯著監控屏上跳動的紅色警報——手工組裝的千卡集群再次因單點故障崩潰。而隔壁團隊…

java 在k8s中的部署流程

1.寫Docker文件FROM ubuntu:22.04ENV LANGC.UTF-8 LC_ALLC.UTF-8RUN apt-get update \&& DEBIAN_FRONTENDnoninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales binutils \&& echo "C.UTF-8 UTF-8…

靜電式 vs UV 光解:哪種油煙凈化技術更適合你的餐廳?

在餐飲行業&#xff0c;油煙凈化是維持廚房環境、保障周邊空氣質量的關鍵環節。靜電式與 UV 光解作為兩種主流凈化技術&#xff0c;各有其適用范圍與局限性。選擇時需結合餐廳的烹飪類型、油煙特點及環保要求&#xff0c;而非盲目追求技術先進或價格高低。一、技術原理&#xf…

Java全棧工程師面試實錄:從電商系統到AIGC的層層遞進

場景&#xff1a;互聯網大廠Java面試官 vs 搞笑程序員小曾 第一輪提問 面試官&#xff1a;小曾&#xff0c;我們公司正在重構一個高并發的電商系統&#xff0c;需要使用Spring Cloud Alibaba進行服務拆分。你能描述一下如何用Nacos進行服務注冊與發現&#xff0c;并解決服務雪崩…