当前位置:网站首页>编码电机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
边栏推荐
- 最通俗易懂的依赖注入之服务容器与作用域
- 全网最全,接口自动化测试怎么做的?精通接口自动化测试详解
- Basic SQL (VIII) data update operation practice
- 由于3²+4²=5²,所以称‘3,4,5‘为勾股数,求n(包括n)以内所有勾股数数组。
- Openfeign service call
- tf. keras. layers. Inputlayer function
- PDH optical transceiver 4-way E1 + 4-way 100M Ethernet 4-way 2m optical transceiver FC single fiber 20km rack type
- 使用栈来解决”迷你语法分析器“的问题
- Sonic cloud real machine tutorial
- Xamarin效果第二十一篇之GIS中可扩展浮动操作按钮
猜你喜欢
tf. keras. layers. Embedding function
LNMP MySQL allows remote access
Array and collection types passed by openfeign parameters
It turns out that PID was born in the struggle between Lao wangtou and Lao sky
Distributed system services
TP5 email (2020-05-27)
ASP.NET和ASP.NETCore多环境配置对比
TP5 customization in extend directory succeeded and failed. Return information
FileNotFoundError: [Errno 2] No such file or directory
Er and eer models
随机推荐
MYSQL03_ SQL overview, rules and specifications, basic select statements, display table structure
Guangcheng cloud service can fill in a daily report regularly every day
交换二叉树中每个结点的左和右
AC & A2C & A3C
Service avalanche effect
C#中元组对象Tuple的使用
Summary of interface automation interview questions for software testing
.NET7之MiniAPI(特别篇):.NET7 Preview3
.NET点滴:说说Middleware构造中获取不到Scoped服务的问题
Use of MySQL command line client and common commands
Summary of software test interview questions
Q-Learning & Sarsa
MAUI初体验:爽
先中二叉建树
How to deploy a website with only a server and no domain name?
对.NET未来的一点感悟
C# 读写二进制文件
Source Generator实战
The space between the left and right of the movie ticket seats is empty and cannot be selected
如果通过 C# 实现对象的深复制 ?