当前位置:网站首页>编码电机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://blog.csdn.net/m0_51220742/article/details/124337228
边栏推荐
- Sonic cloud real machine tutorial
- 对.NET未来的一点感悟
- Openfeign timeout setting
- Some problems encountered in setting Django pure interface, channel and MySQL on the pagoda panel
- TP5 email (2020-05-27)
- C# 读写二进制文件
- Close the computer port
- Summary of interface automation interview questions for software testing
- The difference between encodeuri and encodeuricomponent
- Laravel's own paging query
猜你喜欢
![Niuke white moon race 6 [solution]](/img/c5/6c59378c3bb12efa60ab3a8cd2c943.png)
Niuke white moon race 6 [solution]

Blazor University (12)组件 — 组件生命周期

Xamarin效果第二十一篇之GIS中可扩展浮动操作按钮

Guangcheng cloud service can fill in a daily report regularly every day
![How to use C language to realize [guessing numbers game]](/img/8c/052dcb0ce64ee1713bebb1340248e6.png)
How to use C language to realize [guessing numbers game]
![Niuke white moon race 5 [problem solving mathematics field]](/img/be/ca059bd1c84eaaaefa3266f9119a6b.png)
Niuke white moon race 5 [problem solving mathematics field]

Laravel8- use JWT

HLS / chisel practice CORDIC high performance computing complex square root
![FileNotFoundError: [Errno 2] No such file or directory](/img/ea/0c3f2768d14c1f4bb42bd1309ab996.png)
FileNotFoundError: [Errno 2] No such file or directory

Vs code setting line feed
随机推荐
Onenet connection process
tf. keras. layers. Conv? D function
Using stack to solve the problem of "mini parser"
【鉴权/授权】自定义一个身份认证Handler
基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目
由于3²+4²=5²,所以称‘3,4,5‘为勾股数,求n(包括n)以内所有勾股数数组。
tf. keras. layers. Density function
BLDC double closed loop (speed PI + current PI) Simulink simulation model
Plug in for vscode
Response processing of openfeign
Ningde's position in the times is not guaranteed?
eventBus
Thoughts on the 2022 national network security competition of the national secondary vocational group (only one idea for myself) - network security competition questions (8)
TP5 customization in extend directory succeeded and failed. Return information
Creating wechat voucher process with PHP
Openfeign timeout setting
[learn junit5 from official documents] [II] [writingtests] [learning notes]
【新版发布】ComponentOne 新增 .NET 6 和 Blazor 平台控件支持
It turns out that PID was born in the struggle between Lao wangtou and Lao sky
Due to 3 ²+ four ²= five ², Therefore, we call '3,4,5' as the number of Pythagorean shares, and find the array of all Pythagorean shares within n (including n).