编码电机PID调试(速度环|位置环|跟随)

2023-05-16

文章目录

    • 1、编码电机认识
    • 2、上位机波形显示
      • 1、功能介绍
      • 2、协议说明
    • 3、速度环调试验证
    • 4、位置环调试验证
    • 5、实现跟随效果

前面的文章中有讲过编码电机串级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输入量由另一个的电机的传感器采集的数据来代替,但是最终控制量确是另外一个电机。

最终实现的效果如下所示:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编码电机PID调试(速度环|位置环|跟随) 的相关文章

  • 【C语言】深入理解注释

    文章目录 一 预处理阶段对注释的处理二 注释使用时的注意事项1 C风格的注释无法嵌套使用2 基本注释注意事项3 注释导致的二义性 四 关于注释的一个使用建议 一 预处理阶段对注释的处理 我们知道一个源文件要变成可执行程序的话 xff0c 首
  • 【Java】数组

    文章目录 一 为什么要有数组 xff1f 二 什么是数组 xff1f 1 基本语法2 数组的本质 三 数组的使用1 获取长度 访问元素2 遍历数组3 下标越界 空引用4 数组作为函数参数5 数组作为函数返回值 四 数组拷贝1 手动拷贝2 使
  • 欧几里得算法的图形化理解

    欧几里得算法用于求两个数的最大公约数 xff0c 这篇博文力求以可视化的图形帮助读者理解欧几里得算法 首先 xff0c 简单介绍一下欧几里得算法 设a b N xff0c 我们规定gcd a b 代表a与b的最大公约数 欧几里得算法的实质是
  • PX4IO刷写BootLoader、固件 PX4IO固件损坏修复

    前两天玩坏了一个飞控的IO芯片 xff0c 具体表现为上电后红灯一直闪或常亮 xff0c 有以下解决办法 xff1a 文章目录 FMU给IO刷写重新烧写BootLoader FMU给IO刷写 先断电 xff0c 按住安全开关 xff0c 上
  • Maven版本3.6.1环境配置安装

    文章目录 前言一 操作步骤 xff1a 总结 前言 注意 xff1a 在换源时保持联网状态 xff0c 才能成功换成 提示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 操作步骤 xff1a 1 下载maven安装包
  • 蓝桥杯STM32F103RB数码管计时(秒表)

    STM32F103RB数码管定时 xff08 秒表 xff09 硬件单路 96 配置TIM2及其中断代码片如下 示例 96 96 中断执行函数代码片如下 示例 96 96 seg c 数码管 代码片如下 示例 96 完整工程下载 gt gt
  • 第七届蓝桥杯嵌入式(省赛)程序题

    第七届蓝桥杯 xff08 省赛 xff09 解读 43 程序 解读 xff1a 这里自己多读几遍设计任务以及要求再看下面 96 A 先搭总体框架 96 各初始化函数 96 LCD初始化 96 96 按键初始化 96 96 ADC初始化 96
  • STM32普通io口模拟pwm输出的三种方法

    STM32F103RB普通io口模拟pwm输出的第三种方法 xff08 周期占空比可调 xff09 第 xff08 一 xff09 种定时器中断产生pwm 96 第 xff08 一 xff09 种代码片 96 第 xff08 二 xff09
  • STM32 RS232通信实验

    stm32F103 RS232通信实验 什么是RS232 软件设计 完整工程下载 什么是RS232 先来看看UART传输所存在的问题 于是就有了RS232协议 这里注意使用的是负逻辑电平信号 在规定范围内的电平信号代表逻辑1或0 xff0c
  • MDK中变量无法添加到逻辑分析仪中原因

    MDK中变量无法添加到逻辑分析仪中原因 解决方法 去掉static 提示无法将变量添加到逻辑分析仪中 解决方法 去掉static 设置为bit 全速运行
  • 三,FreeRTOS之——动态创建多任务+优先级

    声明 xff1a 本专栏参考韦东山 xff0c 野火 xff0c 正点原子以及其他博主的FreeRTOS教程 xff0c 如若侵权请告知 xff0c 马上删帖致歉 xff0c 个人总结 xff0c 如有不对 xff0c 欢迎指正 动态创建多
  • ESP8266组网+STM32数据传输项目

    ESP8266 43 STM32数据传输项目 实验硬件 xff1a 项目关键词 xff1a 项目描述项目涉及知识 xff1a 1 ESP8266开发2 MQTT协议3 STM32 整体开发流程 xff1a 实验硬件 xff1a ESP826
  • 十一,FreeRTOS之——互斥信号量(优先级反转,优先级继承,递归锁)

    声明 xff1a 本专栏参考韦东山 xff0c 野火 xff0c 正点原子以及其他博主的FreeRTOS教程 xff0c 如若侵权请告知 xff0c 马上删帖致歉 xff0c 个人总结 xff0c 如有不对 xff0c 欢迎指正 互斥量理论
  • (一)裸机开发框架构建之---开发框架思想

    裸机开发框架构建 声明 xff1a 本专栏通过查阅资料以及自己对开发框架的理解所编写 xff0c 如有错误 xff0c 还请指正 为什么要使用框架 xff1f xff1f xff1f 我的框架分层思想体现 声明 xff1a 本专栏通过查阅资
  • PX4添加外置IMU传感器MPU-9250

    使用PX4 v1 13 2代码 xff0c 淘宝购买的MPU 9250传感器 MPU 9250 芯片架构图 实物图 手册 寄存器 https invensense tdk com wp content uploads 2015 02 RM
  • (二)裸机开发框架构建之---点灯大师

    裸机开发框架构建 3 设备管理层抽象出结构体初始化结构体第一种初始化方法 xff08 c89标准 xff09 第二种初始化方法 xff08 C99标准 xff09 2 硬件接口层1 硬件层硬件LED层初始化函数硬件层LED控制函数 4 应用
  • 1.freertos应用系列之cubemx创建freertos

    freertos应用全系列 xff08 写完关联更新 xff09 01 freertos应用系列之cubemx创建freertos 11 freertos应用系列之cubemx创建freertos 02 freertos应用系列之cubem
  • docker中镜像源推荐

    1 xff0c 个人建议使用 网易镜像源 镜像源有以下5种 1 网易 http hub mirror c 163 com 2 Docker中国区官方镜像 https registry docker cn com 3 ustc https d
  • VScode创建C++项目

    VScode创建C 43 43 项目 假设系统已经安装了MinGW64 插件 常用插件 创建Project 配置json文件 需要修改的地方都在下方注释说明 根据MinGW64安装位置进行修改 c cpp properties json s
  • C++的一个问题点,数组作为参数传递到函数之后,不能直接求出长度

    YU 原数组 xff0c 传递参数之后 结果是作为参数传进去之后是作为指针 xff0c 是不能求出长度的 xff0c 所以需要把长度提前求出作为参数传入该函数 反思 xff1a 最近C 43 43 Python xff0c java轮流用

随机推荐

  • 基于from flask import Flask,render_template 上传网页遇到的问题

    我们要上传多个页面形成一个网站 xff0c 首先我们需要在index xff08 一般这个都是首页面 xff09 查看其源码 找到类似 这段代码里面包括了前面的网站 xff0c 所以这时候我们只需要把它变成带使用的状态 xff0c 操作就是
  • 跨交换机的VLAN设置

    实现目标 xff1a 进行多台主机多个vlan接口进行互相通信 需要知识 xff1a 1 不同的vlan接口的是不能进行通信的 2 在要跨越多个交换机进行通信的时候要对进行交互的交换机进行共享vlan端口的设置 3 在设置网络号的时候应该注
  • Wireshark抓取cookie:用户名...,TCP报文等信息实战

    这里我们要先安装Wireshark xff0c 这里要注意的是一些低级版本刚刚下下来的时候是找不到网络接口的 xff0c 所以这时候要更新 xff0c 然后再下应该WinPro xff08 应该是这个 xff09 xff0c 之后就有网络接
  • 计算机网络知识点总结提纲(谢希仁)

    1 IOS OSI对王道书上的缩减总结 清晰pdf xff1a 链接 xff1a https pan baidu com s 1f6DqMsHky4kP8i9WQLvCew pwd 61 the3 提取码 xff1a the3 来自百度网盘
  • C++getline和 cin的探讨

    从结果可以看出 xff0c cin是会把空格部分舍弃的 如果是输入一个 然后空格在输入其他的 xff0c 因为cin默认把空格去调 xff0c 则后面的字符我的理解就是溢出 xff1f 所以报错了 getline功能就比较强大了 xff0c
  • Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

    文章目录 硬件安装Ubuntu Server20 04下载rpiboot工具下载imager刷写系统配置USB配置WIFI 开机安装桌面配置wifi配置串口安装ROS安装mavros安装MAVSDK PythonInternet设置最后 参
  • docker迁移镜像

    docker迁移本地镜像 本文为docker基本镜像操作之一 查看本镜像 docker images 迁移 xff08 拷贝 xff09 本地镜像到其他设备 1 打包 docker save o 路径 目标包名 tar 源镜像名 标签 2
  • C++Linux服务器学习之路——1

    前言 xff1a 为了让所学的计网知识融合于实际 xff0c 让操作系统里的理论去满足工程需求 xff0c 故通过借鉴30dayMakeServer的路线以及进行相应知识点的学习 part1 首先我们要理解socket 为应用层和传输层提供
  • 计网牛客刷图总结

    久不学忘记了 xff0c 1111 1111 61 255 xff0c ip地址是32位二进制组成 xff0c x 26就是说主机号有26位 xff0c 其他都是网络号 所以后面只有2位主机号 xff0c 234 61 11101010 x
  • C++力扣算法刷题算法分析

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Invalid bound statement (not found)问题解决

    在网上基本的解决方案就是查看 namespace有没有对应 xff0c 但是我确定我的路径都是正确的 xff0c 如果发现这类问题可以先尝试确定路径的正确 之后如果还不行 xff0c 我们进行解决 xff1a 首先在target文件中查找是
  • C指针基础普及

    https www programiz com c programming c pointers 先放网站 xff0c 等我有时间再来补我的扩展
  • Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异)

    之前在培训新生的时候 xff0c windows环境下配置opencv环境一直教的都是网上主流的vs studio配置属性表 xff0c 但是这个似乎对新生来说难度略高 虽然个人觉得完全是他们自己的问题 xff0c 加之暑假之后对cmake
  • Spring Aop的使用(含示例)

    介绍 在软件业 xff0c AOP为Aspect Oriented Programming的缩写 xff0c 意为 xff1a 面向切面编程 xff0c 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术 AOP是OOP的延续
  • 超好用的开发工具-VScode插件EIDE

    EIDE介绍 一款适用于8051 STM8 Cortex M RSCv的单片机开发环境 在 vscode上提供8051 xff0c STM8 Cortex M xff0c RISC V 项目的开发编译烧录等功能 使用文档 xff1a 简介
  • 直流编码电机双闭环(速度+角度)控制

    目录 1 PID框图 2 pid控制器的表达式 3 传感器数据获取 4 硬件设计 5 工程配置 6 软件部分程序配置 7 调参过程记录 本文已更新 xff0c 加上曲线调试 xff0c 更好效果 xff0c 更多内容 xff0c 详情 xf
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带
  • 为什么你的软件编译时没问题,运行时却出错?—— Java 中的异常再复盘

    从开发工具谈起 xff1a 这是我平常用的几个编辑器 记得我刚开始学 C 语言 xff0c 学 Java 的时候 xff0c 还是用 Notepad 43 43 这种文本编辑器写代码 xff0c 老师说是为了打基础 xff0c 加深记忆 后
  • 使用stm32解析富斯i6接收机(IBUS)

    文章目录 1 通信协议解析说明2 驱动程序设计3 实测4 使用串口空闲中断 43 DMA接收5 源码 1 通信协议解析说明 常见的官方遥控器大概如下所示 xff1a 常用的搭配接收机 xff1a 这里需要注意的是 xff1a i6是可以刷十
  • 编码电机PID调试(速度环|位置环|跟随)

    文章目录 1 编码电机认识2 上位机波形显示1 功能介绍2 协议说明 3 速度环调试验证4 位置环调试验证5 实现跟随效果 前面的文章中有讲过编码电机串级PID相关的知识 xff0c 以及一些PID的调试经验 xff0c 这里我最近正好又把