多环串级PID

文章目录

  • 为什么要多环
  • 程序
    • 主函数
    • 内环
    • 外环
  • 双环PID调参
    • 内环
    • Kp调法
      • Ki调法
    • 外环
      • Kp
  • 以一定速度到达指定位置
  • 封装

为什么要多环

单环只能单一控制速度或者位置,如果想要同时控制多个量如速度,位置,角度,就需要多个PID在这里插入图片描述

  • 速度环一般PI控制,位置环一般PD

程序

主函数

/*定义内环变量*/
float InnerTarget, InnerActual, InnerOut;
float InnerKp =, InnerKi =, InnerKd =;
float InnerError0, InnerError1, InnerErrorInt;/*定义外环变量*/
float OuterTarget, OuterActual, OuterOut;
float OuterKp =, OuterKi =, OuterKd =;
float OuterError0, OuterError1, OuterErrorInt;int main(void)
{Timer_Init();while (1){/*用户在此处根据需求写入外环PID控制器的目标值*/OuterTarget = 用户指定的一个值;}
}

内环

void TIM2_IRQHandler(void)
{static uint64_t Count1, Count2;if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){Count1 ++;if (Count1 >= 内环调控时间){Count1 = 0;/*内环每隔时间T1,程序执行到这里一次*//*执行内环PID控制*/InnerActual = 读取内环实际值();InnerError1 = InnerError0;InnerError0 = InnerTarget - InnerActual;InnerErrorInt += InnerError0;InnerOut = InnerKp * InnerError0+ InnerKi * InnerErrorInt+ InnerKd * (InnerError0 - InnerError1);if (InnerOut > 上限) {InnerOut = 上限;}if (InnerOut < 下限) {InnerOut = 下限;}/*内环PID的输出值作用于执行器*/输出至被控对象(InnerOut);}}
}

外环

外环调控周期要大于等于内环,具体周期给多少,要不断尝试

Count2 ++;
if (Count2 >= 外环调控时间)
{Count2 = 0;/*外环每隔时间T2,程序执行到这里一次*//*执行外环PID控制*/OuterActual = 读取外环实际值();OuterError1 = OuterError0;OuterError0 = OuterTarget - OuterActual;OuterErrorInt += OuterError0;OuterOut = OuterKp * OuterError0+ OuterKi * OuterErrorInt+ OuterKd * (OuterError0 - OuterError1);if (OuterOut > 上限) {OuterOut = 上限;}if (OuterOut < 下限) {OuterOut = 下限;}/*外环PID的输出值作用于内环PID的目标值*/InnerTarget = OuterOut;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

双环PID调参

  • 参数越大,响应越快,但会出现抖动;参数越小,响应越慢,但更加平滑,需要自己取舍
  • 同时调节内环和外环是不可行的
  • 因为内环可以独立工作,我们要先调内环(要把外环给注释调),内环调好了,在内环的基础上调节外环

内环

Kp调法

  • 先让出现抖动,再减小使抖动消失

Ki调法

  • 与Kp类似
  • 先让出现抖动,再减小使抖动消失

外环

Kp

外环Kp不用怕超调,直接调到抖动再减小,用Kd减少超调

以一定速度到达指定位置

不能使innertarget=目标速度
正确做法是更改限幅,速度要小限幅就小

封装

typedef struct {float Target;float Actual;float Out;float Kp;float Ki;float Kd;float Error0;float Error1;float ErrorInt;float OutMax;float OutMin;
} PID_t;

初始化赋值方法

   PID_t Inner = {.Kp = 0.3,.Ki = 0.3,.Kd = 0,.OutMax = 100,.OutMin = -100};
```c
void PID_Update(PID_t *p)
{p->Error1 = p->Error0;p->Error0 = p->Target - p->Actual;if (p->Ki != 0){p->ErrorInt += p->Error0;}else{p->ErrorInt = 0;}p->Out = p->Kp * p->Error0+ p->Ki * p->ErrorInt+ p->Kd * (p->Error0 - p->Error1);if (p->Out > p->OutMax) {p->Out = p->OutMax;}if (p->Out < p->OutMin) {p->Out = p->OutMin;}
}

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

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

相关文章

基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(上)

#作者&#xff1a;闫乾苓 文章目录 概念和架构概述主要特点消息传递核心概念Pulsar 的消息模型Pulsar 的消息存储与分发Pulsar 的高级特性架构BrokerBookKeeperZooKeeper 概念和架构 概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由雅虎开…

电子电气架构 --- 如何有助于提安全性并减少事故

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

rest_framework学习之认证 权限

权限 DRF提供如下几种常见权限&#xff1a; IsAuthenticated, 认证通过 IsAdminUser, 管理员权限 IsAuthenticatedOrReadOnly, 登录用户增删改 非登录用户只能查询 AllowAny&#xff0c;无需认证&#xff08;默认&#xff09; 在rest_framework的APIView基础类中&#xf…

【使用switch结构输出季节】2021-11-23

缘由用switch语句设计程序一年有12个月-编程语言-CSDN问答 void 使用switch结构输出季节(int y) {//缘由https://ask.csdn.net/questions/7577096?spm1005.2025.3001.5141std::cout << y << "\t";switch (y){case 3: case 4: case 5:std::cout <<…

主备Smart Link + Monitor Link组网技术详细配置

1.实验拓扑 2.使用设备 eNSP模拟建议下行设备三台使用S3700模拟&#xff08;全部使用S5700可能会出现流量丢失等异常问题。&#xff09; 3.实验配置 [SW1]dis cu # sysname SW1 # vlan batch 100 110 # interface Ethernet0/0/1port link-type accessport default vlan 100 …

【hadoop】案例:Sqoop迁移仓库数据

1 数据导出&#xff1a;Hive导入MySQL [hadoophadoop1 sqoop]$ bin/sqoop export \ > --connect jdbc:mysql://localhost/weather \ > --username root \ > --password 123456 \ > --table mean_temperature \ > --export-dir /user/hive/warehouse/mydb/mean…

Mysql-OCP PPT课程讲解并翻译

#跳过介绍&#xff0c;直接从干货开始记录 第一章 安装mysql

springboot+vue实现在线网盘(云盘)系统

今天教大家如何设计一个网盘&#xff08;云盘&#xff09;系统系统 , 基于目前主流的技术&#xff1a;前端vue&#xff0c;后端springboot。 同时还带来的项目的部署教程。 视频演示 springbootvue实现在线网盘&#xff08;云盘&#xff09;系统 图片演示 一. 系统概述 用过百…

JAVA:Spring Boot 集成 Lua 的技术博客

1、简述 在现代开发中,Lua 以其轻量级、高性能以及易嵌入的特点广泛用于脚本扩展、游戏开发以及配置处理场景。将 Lua 与 Spring Boot 集成,可以在 Java 项目中实现动态脚本功能,增强项目的灵活性和动态配置能力。 样例代码: https://gitee.com/lhdxhl/springboot-example…

uniapp-商城-43-shop 后台管理 页面

后台管理较为简单&#xff0c;主要用于后台数据的管理&#xff0c;包含商品类别和商品信息&#xff0c;其实还可以扩展到管理用户等等 1、后台首页 包含 分类管理 商品管理 关于商家等几个栏目 主要代码&#xff1a; <template><view class"manage">…

食物数据分析系统vue+flask

食物数据分析系统 项目概述 食物数据分析系统是一个集食物营养成分查询、对比分析和数据可视化于一体的Web应用。系统采用前后端分离架构&#xff0c;为用户提供食物营养信息检索、食物对比和营养分析等功能&#xff0c;帮助用户了解食物的营养成分&#xff0c;做出更健康的饮…

学习基本乐理知识

本文主要内容 如何练习吉他 乐理知识补充 ps&#xff1a;本文知识均来自up主 ‘吉他大学霸’ 感谢开源 -^- 练习吉他步骤 打怪升级 右手--> 左手--> 音阶--> 拓展 第一阶段&#xff1a; 追求手脚配合不出错、手姿势不出错、手不会按错弹错。连续不错的遍数达标就可以进…

吊球技术(劈吊、滑板等)

羽毛球吊球技术&#xff08;劈吊、滑板等&#xff09;是单打和双打中重要的得分手段&#xff0c;需要通过系统性练习掌握。以下是分步骤的详细训练方法&#xff1a; 一、核心技术原理对比 技术类型击球点拍面控制发力特点适用场景正手劈吊高点偏前斜切&#xff08;拍面45&…

Java实现桶排序算法

1. 桶排序原理图解 桶排序是一种基于分桶思想的非比较排序算法&#xff0c;适用于数据分布较为均匀的场景。其核心思想是将数据分散到有限数量的“桶”中&#xff0c;每个桶再分别进行排序&#xff08;通常使用插入排序或其他简单的排序算法&#xff09;。以下是桶排序的步骤&a…

OpenCv实战笔记(3)基于opencv实现调用摄像头并实时显示画面

一、实现效果 二、实现原理 使用 OpenCV 打开摄像头&#xff0c;持续捕获视频帧&#xff0c;并在一个窗口中实时显示这些帧&#xff0c;直到用户按下 ESC 键退出。整体流程&#xff1a;打开摄像头&#xff08;cv::VideoCapture&#xff09;>创建图像显示窗口&#xff08;cv…

编译原理头歌实验:词法分析程序设计与实现(C语言版)

编译原理头歌实验&#xff1a;词法分析程序设计与实现&#xff08;C语言版&#xff09; 1.实验描述 任务描述 本关任务&#xff1a;加深对词法分析器的工作过程的理解&#xff1b;加强对词法分析方法的掌握&#xff1b;能够采用一种编程语言实现简单的词法分析程序&#xff…

SQL常用操作大全:复制表、跨库查询、删除重复数据

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; SQL常用操作精华总结 表结构与数据操作 复制表结构&#xff1a; SELECT * INTO b FROM a WHERE 1<>1 (SQL Server专用) SELECT TOP 0 * INTO b FROM a (更通用) 拷贝表数据&#…

课外活动:简单了解原生测试框架Unittest前置后置的逻辑

简单了解原生测试框架Unittest前置后置的逻辑 一、测试框架执行顺序解析 1.1 基础执行流程 import unittestclass A(unittest.TestCase):classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{se…

学习设计模式《八》——原型模式

一、基础概念 原型模式的本质是【克隆生成对象】&#xff1b; 原型模式的定义&#xff1a;用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象 。 原型模式的功能&#xff1a; 1、通过克隆来创建新的对象实例&#xff1b; 2、为克隆出来的新对象实例复制…

olmOCR - PDF文档处理工具包

文章目录 一、关于 olmOCR相关资源包含内容团队 二、安装三、本地使用示例查看结果多节点/集群使用管道完整文档 一、关于 olmOCR olmOCR 是用于训练语言模型处理PDF文档的工具包&#xff0c;支持大规模PDF文本解析和转换。 相关资源 源码&#xff1a;https://github.com/all…