当前位置:网站首页>編碼電機PID調試(速度環|比特置環|跟隨)
編碼電機PID調試(速度環|比特置環|跟隨)
2022-04-23 03:06:00 【桃成蹊2.0】
前面的文章中有講過編碼電機串級PID相關的知識,以及一些PID的調試經驗,這裏我最近正好又把電機摸了一遍,同時將波形的工具加入了進去,個人認為這樣的方式能幫助更多的人了解這個過程,同時也能够更好理解PID這個東西。
同時校招面試過程中,一些嵌入式的崗比特裏面做機器人控制相關的,包括就是介紹自己項目的時候一般都會問一些PID的調試過程,PID幾個參數的作用,內環外環的描述等,因此PID還是比較重要的。
如果本文各比特大佬有意見的話歡迎提出!
1、編碼電機認識
編碼電機數據讀取的內容在前面的文章中已經介紹過了,對應的鏈接如下所示,有需要的可以自行了解:
直流編碼電機雙閉環(速度+角度)控制
這裏不在進行贅述,這裏可以進行部分內容的補充,主要是編碼器的數據處理那個部分,這樣做是為了更好的獲取到角度數據,步驟如下:
首先是這裏我們需要開啟對應的中斷,在中斷中進行數據累加,這樣就可以做一些比如角度以及圈數的記錄了
這裏我們還是回顧下編碼器的線束,這裏的線束就是電機轉一圈的脈沖數目,但是我們編碼器是AB相然後還存在可以上下邊沿的捕獲,這樣就可以進行4倍頻的采樣了
最終圈數的設計如下所示,這裏首先就是設計一個正反,正的話就相加,方向就减掉,然後這裏最終的圈數記錄也是一樣的。
這樣就可以直觀的錶現出來圈數的記錄了,源碼如下:
int Angle = 0;//角度
int circr = 0;//圈數
const int Step_Angle = 360/4/30;
void Motor_Get_Angle(TIM_HandleTypeDef *htim)
{
if(htim == &htim2)
{
if((htim->Instance->CR1 & 0x0010)>>4)//方向判斷
// 這裏也可以用htim->Instance->CR1來判斷 0X01是順時針,0X11是逆時針
Angle -= Step_Angle;
else
Angle += Step_Angle;
}
if(Angle == 360)
{
circr++;
Angle = 0;
}
if(Angle == -360)
{
circr--;
Angle = 0;
}
}
2、上比特機波形顯示
1、功能介紹
這裏就是推薦使用VOFA+這個串口助手,帶波形顯示功能,比較强大,關於VOFA+這個的介紹我這裏就不進行說明了,網上資料比較多,基本上百度一搜索就能看到很多相關的資料
這裏要使用他的博信顯示功能的話就是按照我下面的操作了
將波形功能拉出來後為了全屏顯示這裏我們還要做一下填充,如下所示
圖形種類選擇波形圖
一般我們x軸直接設置成時間就可以了
y軸就可以來設置我們的曲線了,這裏注意,必須是有,如果數據還沒發送是看不到的
然後我們在選擇下自動縮放
2、協議說明
先進入我們這個協議與連接:
可以看到協議說明如下所示:
這裏可以看下協議說明,如下所示:
另一種說明
主要就是這裏的調試說明,這裏可以看到第一種直接使用printf就可以了,不過兩種都給了例子,所以我决定就還是用第一種的方法來實現,使用printf加上,就可以實現了。
3、速度環調試驗證
這裏我還是搭建跟之前的那篇文章一樣的PID架構,詳見直流編碼電機雙閉環(速度+角度)控制
關於PID的調試效果,可以見我的這篇文章,該文章使用simulink來模擬PID:Matlab使用simulink設置PID記錄
采用的速度環PID如下所示,可以看到打印的參數為目標值和當前值:
這裏我們來看下純p調節的時候,此時KP=200,已經比較大了,仍然是存在穩態誤差的
之後加上I把誤差消除掉,這裏I只是給了0.1
我們單純的繼續增大KP,就可以看到較明顯的超調量了
這個時候如果一比特的增大i就可以看到系統的穩定性下降
最後可以看下調試效果,如下所示:
4、比特置環調試驗證
這裏比特置環就是對電機的比特置進行控制,這裏直接想到的辦法肯定就是直接使用對PID計算,這樣是完全可以的,就是不太穩定,效果不是很好,抗擾動不是很行,因此就可以選擇串級PID的方式來實現相關的功能,如下我對兩種方案都進行了介紹:
下面是直接使用比特置PID進行計算P[ID的情况
、
下面是使用速度和比特置PID進行計算的情况了
這個過程感覺還是就跟著我上面說的調參方案吧,還是計較方便的,可以很快的調試出來,最終的效果如下所示:
5、實現跟隨效果
跟隨其實就是一個PID和另外一個的聯動,本質情况就是把其中的一個環的PID輸入量由另一個的電機的傳感器采集的數據來代替,但是最終控制量確是另外一個電機。
最終實現的效果如下所示:
版权声明
本文为[桃成蹊2.0]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230306011387.html
边栏推荐
- What kind of experience is it to prepare for a month to participate in ACM?
- 利用正反遍历来解决“字符的最短距离”问题
- Niuke white moon race 5 [problem solving mathematics field]
- MAUI初体验:爽
- Publish to NPM?
- 先中二叉建树
- How to deploy a website with only a server and no domain name?
- 树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
- Reverse a linked list < difficulty coefficient >
- Depth deterministic strategy gradient (ddpg)
猜你喜欢
The most detailed in the whole network, software testing measurement, how to optimize software testing cost and improve efficiency --- hot
How to write the expected salary on your resume to double your salary during the interview?
Summary of software test interview questions
What kind of experience is it to prepare for a month to participate in ACM?
L2-006 树的遍历(中后序确定二叉树&层序遍历)
Laravel8- use JWT
Processes and threads
Source code interpretation of Flink index parameters (read quantity, sent quantity, sent bytes, received bytes, etc.)
ASP.NET 6 中间件系列 - 条件中间件
腾讯视频VIP会员,周卡特价9元!腾讯官方直充,会员立即生效!
随机推荐
.Net Core 限流控制-AspNetCoreRateLimit
tf. keras. layers. Timedistributed function
Wepy learning record
Array and collection types passed by openfeign parameters
PDH optical transceiver 4-way E1 + 4-way 100M Ethernet 4-way 2m optical transceiver FC single fiber 20km rack type
Typescript Learning Guide
C#中切片语法糖的使用
全网讲的最细,软件测试度量,怎样优化软件测试成本提高效率---火爆
AC380V drop 5v12v24v200ma, UHV non isolated chip IC scheme
Plug in for vscode
树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
建立与遍历二叉树
樹莓派開發筆記(十二):入手研華ADVANTECH工控樹莓派UNO-220套件(一):介紹和運行系統
AC & A2C & A3C
Xamarin效果第二十一篇之GIS中可扩展浮动操作按钮
[Euler plan question 13] sum of large numbers
L2-006 樹的遍曆(中後序確定二叉樹&層序遍曆)
ASP.NET 6 中间件系列 - 执行顺序
tf. keras. layers. Embedding function
Judge whether there is a leap year in the given year