基于STM32的位置速度环PID控制伺服电机转动位置及程序说明

news2024/10/6 6:54:42

PID控制原理

PID控制原理是一种广泛应用于工业自动化和其他领域的控制算法。PID控制器的名字来源于其三个主要组成部分:比例(Proportional)、积分(Integral)和微分(Derivative)。PID控制器实现的是输入信号和期望信号的零误差。比例控制就是对误差成比例放大,让输出信号按照线性规律接近期望值,比例控制的目的就是让输出值无限接近期望值;积分控制就是对误差随着时间的积分值按一定比例输出,让输出信号能够到达期望值,积分控制的目的就是让输出值在期望值附近振荡;微分控制就是对误差的变化按一定比例输出,微分控制的目的就是为了消除振荡,让输出信号保持稳定。完整的PID控制就是将比例控制的输出值、积分控制的输出值和微分控制的输出值加起来。让输出的信号等于期望信号,并保持稳定。

位置速度环PID原理

位置速度环控制如上图所示,输入信号是期望的目标位置,输出是电机的驱动信号,控制电机的旋转启停、旋转速度。通过旋转编码器作为传感器获取电机的转动情况,并经过一定的计算过程得到实际转轴的位置以及实际转轴的速度。

内环是速度环,内环的输入是速度误差,就是期望速度减去实际转轴速度,速度误差输入到速度PID控制器中经过计算得到输出值,该输出值就是对电机驱动信号的控制,电机的控制一般以PWM信号来控制,于是输出值就是PWM信号的占空比。

外环是位置环,上述内环中的期望速度其实就是外环的输出,是通过外环计算出来的而不是固定的,外环的输入是位置误差,就是期望位置减去实际转轴位置。外环的输入就是电机最终期望达到的位置。

内环和外环的关系有两点需要注意:第一点是内环的期望值,也就是输入,是外环PID计算后得到的输出;第二点是外环控制对象是内环控制对象的积分,这里外环的控制对象是实际转轴的位置,内环的控制对象是实际转轴的速度,它俩存在一个积分的关系。

代码解析

实践是检验真理的唯一标准。下面用实际使用过的代码来解释一下位置速度环PID的实现过程。

硬件方面,主控选择的是STM32单片机,电机驱动模块选择TB6612模块还有电机及编码器。软件方面,选择利用CubMX生成HAL库的工程,具体生成过程大同小异。

首先第一步是获取电机编码器的脉冲数,这里通过STM32内部的计数器实现。在总的定时器回调函数中,htim7是20ms的定时器,如下图所示,每20ms进入中断函数一次。

首先获取电机每20ms内电机编码器输出脉冲数。hitm3和htim8都设置为encoder mode,即定时器编码器模式,获取两个电机编码器的脉冲值。获取到的脉冲值用于计算实际转轴的位置和速度。

后再看总的位置速度环PID控制函数Location_Speed_control()。总的PID控制函数的关键部分包括位置环PID控制函数location_pid_control()和速度环PID控制函数speed_pid_control()。

有了实际速度之后,再通过速度环PID运算函数speed_pid_realize得到PID输出控制值。该函数通过一个结构体传递目标值、误差、上一个偏差值、PID系数以及积分值等参数,这些参数中,目标值是通过位置环PID运算函数计算得到的,PID系数是要提前设置好的。

速度环PID运算函数speed_pid_realize得到PID输出控制值其实就是PWM输出。如下图所示,speed_Outval和speed2outval就是速度环PID运算函数的计算结果,它们的值传入MotorOutput电机输出函数中。

在MotorOutput电机输出函数中,主要是判断方向以及限制PWM输出上限值。

最后我们再介绍一下位置环PID控制函数location_pid_control()。该函数也需要通过编码器脉冲数先获取电机转轴实际位置。

有了实际位置后,通过location_pid_realize函数调用位置PID结构体和实际位置计算得到目标速度,目标速度输出给速度环的输入,这样就完成闭环了。

其他说明

上述介绍的代码在电子设计竞赛中实际应用过,可以稳定运行,需要相关文件用于借鉴学习可以私聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1788955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++数组实现推箱子游戏

前言 我是三天打鱼两天晒网的闲人,今天跟着课程视频学习c的数组的运用. 准备好游戏用到的图片资源 代码逻辑实现 #include<iostream> #include<graphics.h> #include<string> #include<conio.h>using namespace std;//设置画布大小 #define SCREEN…

【人工智能】第六部分:ChatGPT的进一步发展和研究方向

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

C++ | Leetcode C++题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution { public:int minimumTotal(vector<vector<int>>& triangle) {int n triangle.size();vector<int> f(n);f[0] triangle[0][0];for (int i 1; i < n; i) {f[i] f[i - 1] triangle[i][i];for (…

Jmeter的几种参数化方式

1.为什么要做参数化&#xff1f; 在用jmeter脚本进行压测的时候&#xff0c;为了更真实的模拟起到更好的效果&#xff0c;我们需要让参数动态变化起来&#xff0c;也就是参数化。通过参数化我们也可以更好、更灵活的维护我们的测试脚本。 2.参数化的方式 能够实现参数化的方式有…

6月4(信息差)

&#x1f30d;AI预测极端天气提速5000倍&#xff01;微软发布Aurora&#xff0c;借AI之眼预测全球风暴 &#x1f384;理解老司机&#xff0c;超越老司机&#xff01;LeapAD&#xff1a;具身智能加持下的双过程自驾系统&#xff08;上海AI Lab等&#xff09; 论文题目&#xf…

对boot项目拆分成cloud项目的笔记

引言&#xff1a;这里我用的是新版本的技术栈 spring-boot-starter-parent >3.2.5 mybatis-spring-boot-starter >3.0.3 mybatis-plus-boot-starter >3.5.5 spring-cloud-dependencies …

JMeter Plugins Manager---插件安装

参考文章&#xff1a;https://blog.51cto.com/u_14126/6291032 需求&#xff1a; 安装【jpgc - Standard Set】插件 常用插件&#xff1a; 点击下载–报错如下&#xff1a; Failed to apply changes:Cannotapplychanges:Haveno write accessforJMeterdirectories,notpossib…

iTerm2 携手 OpenAI,带来命令行的自然语言革新

在技术不断进步的今天&#xff0c;命令行工具的智能化已成为提升效率的关键。iTerm2&#xff0c;macOS 系统上广受欢迎的开源终端工具&#xff0c;通过最新版本 v3.5 的发布&#xff0c;实现了与 OpenAI 的集成&#xff0c;引领了这一变革。 iTerm2 简介 iTerm2 是一款功能强…

宝塔部署vue+springboot过程(图文)

宝塔是傻瓜式操作部署&#xff0c;xshell是用linux命令部署 &#xffe5;过程&#xffe5; 整个流程具体服务器开端口在阿里云服务器打开3306端口&#xff08;有用到的端口都要打开&#xff09;宝塔&#xff1a;添加数据库获取数据库名、用户名、密码&#xff1b;点击“工具”…

容器化部署Pig微服务快速开发框架

系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台&#xff0c; 同时支持微服务架构和单体架构 提供对 Spring Authorization Server 生产级实践&#xff0c;支持多种安全授权模式 提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、E…

iotdb时序库在火电设备锅炉场景下的实践【原创文字,IoTDB社区可进行使用与传播】

一.概述 1.1 说明 本文章主要介绍iotdb数据库在电站锅炉工业场景下&#xff0c;对辅助智能分析与预警的使用介绍。 【原创文字&#xff0c;IoTDB社区可进行使用与传播】 1.2 项目背景 随着人工智能算法在电力领域的发展&#xff0c;以及燃煤锅炉设备精细化调整需求的增加&…

君方船舶智能设计平台技术架构

1.整体架构 2.基础能力 2.1 测试工具 2.1.1 测试框架 2.1.2 调试工具 2.2 UI交互 2.2.1 通用属性面板 2.2.2 对象通用拷贝框架 2.2.3 命令交互操作框架 2.2.4 夹点编辑框架 2.2.5 对象捕捉 2.3 模型管理 2.3.1 对象数据管理 2.3.2 对象空间关系管理 2.3.3 对象依赖关系管理…

发现情绪背后的真实心理需求,选择适合你的情绪调节方式

一、教程描述 心态对人的生活质量以及身体健康等多方面&#xff0c;都会产生非常重要的影响&#xff0c;受到不良情绪的影响&#xff0c;人的心态也会发生一定的变化。对于处于不良情绪状态的人来讲&#xff0c;应该重视学会调整自己的情绪。在心理学上&#xff0c;人的每种情…

AR和AP重分类(Regroup)[FAGLF101/OBBU/OBBV]

一、为什么AR和AP科目需要重分类 1.1 执行操作的前提(重要) 存在AR的当月总余额在贷方&#xff08;客户贷项凭证、预收账款等&#xff09;或AP的当月总余额在借方&#xff08;供应商贷项凭证、预收账款等&#xff09;&#xff0c;这种情况下无法真实的反映出资产和负债情况&…

Window10磁盘的分盘和合并

注意&#xff1a; 当我们c盘不够大需要扩大磁盘空间时&#xff0c;当c盘后面没有未划分的磁盘时候&#xff0c;我们是无法进行扩充c盘的&#xff0c;此时&#xff0c;我们可以先删除后面一个磁盘&#xff0c;再进行扩大。 如下&#xff1a;c盘后没有未分配的空间&#xff0c;…

MySQL—多表查询—多表关系介绍

一、引言 提到查询&#xff0c;我们想到之前学习的单表查询&#xff08;DQL语句&#xff09;。而这一章节部分的博客我们将要去学习和了解多表查询。 对于多表查询&#xff0c;主要从以下7个方面进行学习。 &#xff08;1&#xff09;第一部分&#xff1a;介绍 1、多表关系 2、…

SpringBoot之静态资源

默认静态资源路径 classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/ 静态资源路径下的文件&#xff0c;可以通过根目录访问 resources 文件夹的文件如下图所示&#xff1a; 启动项目&#xff0c;分别访问以下路径&#xff1a; ht…

关于URL获取的参数,无法执行二选一查询

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

0X JavaSE-- 集合框架【Collection(List、Set、Queue)、Map】

每一个集合类底层采用的数据结构不同&#xff0c;例如ArrayList集合底层采用了数组&#xff0c;LinkedList集合底层采用了双向链表&#xff0c;HashMap集合底层采用了哈希表&#xff0c;TreeMap集合底层采用了红黑树。**集合中存储的是引用。**即。集合中存放的是对象的地址&am…

【学习】DCMM认证提升企业竞争优势的表现

DCMM认证是企业提升数据管理能力的重要途径。它不仅可以帮助企业评估自身的数据管理水平&#xff0c;还可以为企业提供改进的方向和目标。在数字化时代&#xff0c;拥有强大的数据管理能力是企业成功的关键。因此&#xff0c;通过DCMM认证&#xff0c;企业可以更好地适应数字化…