当前位置: 首页 > news >正文

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

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.lryc.cn/news/363838.html

相关文章:

  • 操作失败——后端
  • 基于SSM的“学校访客登记系统”的设计与实现(源码+数据库+文档)
  • linux配置IP、子网掩码、网关
  • Java 垃圾回收
  • 多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP
  • 书生·浦语大模型全链路开源体系-笔记作业2
  • 手把手教你发布你的第一个npm插件包
  • Docker-compose 编排lnmp(dockerfile) 完成Wordpress
  • 秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}
  • PPT设置为本框的默认格式以及固定文本框
  • 计算机基础(5)——进制与进制转换
  • 发现情绪背后的真实心理需求,选择适合你的情绪调节方式
  • 代理记账公司的五大问题及其解决方案
  • TH方程学习 (7)
  • 2024最新python入门教程|python安装|pycharm安装
  • docker架构
  • 使用Java进行网络采集:代理IP与参数传递详解
  • 多功能光时域反射仪的工作原理
  • 目标检测数据集 - 海洋垃圾检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 如何进行Java程序的性能优化
  • Echarts柱状图数据太多,自定义长度之后,自适应浏览器缩放
  • 小白级教程—安装Ubuntu 20.04 LTS服务器
  • 9、中华人民共和国个人信息保护法
  • 经典回归模型及Python实现方法
  • Git 保留空文件夹结构
  • 【吊打面试官系列】MySQL 中有哪几种锁?
  • 小巧、免费高级分类整理桌面图标和文件程序
  • Elasticsearch挂掉后,如何快速恢复数据
  • eNSP学习——连接RIP与OSPF网络、默认路由
  • 工具MyBatis Generator(MBG)