初探PID—速度闭环控制

news2024/11/23 22:43:50

由于在调PID时意外把板子烧了,目前只完成了比例调节的调试,整个程序也不太完善,本文当前仅作记录,后续会完善更改。
——2023.07.26

文章目录

  • 一、什么是PID
  • 二、PID有什么用
  • 三、PID程序实现

一、什么是PID

PID是常用的一种控制算法,其中P(proportional)是比例,I(integral)是积分,D(derivative)是微分。PID算法的原理图如下

PID原理图

  • 比例环节
    比例环节系数Kp用来控制速度快速趋近目标值,Kp越大,趋近速度越快,但是容易产生震荡,就是反复在目标值上下横跳。Kp越小,调节速度越慢。
  • 积分环节
    积分环节使用来消除静态误差的。比如我们设定的目标值为200,只靠比例调节会发现,速度有可能固定在185不动了。这时候就需要积分环节出手。只要我们的实际值与目标值存在偏差,就会不断地对偏差进行积分(累加)。积分系数Ki越大,调节效果越明显。使用积分调节时需要注意,需要设置一个积分限制,防止在一开始就累加偏差。
  • 微分环节
    微分环节是让车速快速稳定下来,实际就是产生一个阻尼效果。

另外,PID分为增量式PID和位置式PID,这里暂不做介绍,后续补充。

二、PID有什么用

知道了什么是PID,那么我们用PID来做什么?在智能车中PID可以用来控制电机转速,实现速度的闭环控制。举一个例子,做过智能车的小伙伴可能遇到过,智能车四个轮子,给相同的占空比,发现智能车无法走直线,这是因为四个轮子转速不相同。如果加上PID,可以根据目标转速给四个车轮不同的占空比来实现四个轮子转速相同。

测量转速需要用到编码器,这里暂不做介绍,后续会详细介绍电机和编码器。

三、PID程序实现

这里简单给出一个PID的实现程序,仅供参考。

u16 Speed_Pid_Ctrl (int targetSpeed,int actualSpeed)
{
	float bias = 0;   // 目标值与实际值的差值
	static float lastBias = 0;   // 上次偏差
	static float lastLastBias = 0;   // 上上次偏差
	static float pwmDuty = 0;   // PWM占空比
	
	// 比例调节系数范围1.6
	float kp = 1.6;   // 比例调节
	float ki = 0;   // 积分调节
	float kd = 0;   // 微分调节
	
	printf ("target = %d actual = %d\r\n",targetSpeed,actualSpeed);
	
	lastLastBias = lastBias;
	lastBias = bias;
	
	bias = (float)targetSpeed - (float)actualSpeed;
	
	pwmDuty += kp * (bias - lastBias) + ki * bias + kd * (bias - 2 * lastBias + lastLastBias);
	
	// 限幅
	if (pwmDuty >= 999)
	{
		pwmDuty = 999;
	}
	
	return (u16)pwmDuty;
}

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

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

相关文章

windows默认编码格式修改

1.命令提示符界面输入 chcp 936 对应 GBK 65001 对应 UTF-8 2.临时更改编码格式 chcp 936(或65001) 3.永久更改编码格式 依次开控制面板->时钟和区域->区域->管理->更改系统区域设置,然后按下图所示,勾选使用UTF-8语言支持。然后重启电脑。此…

上门小程序开发|上门服务小程序|上门家政小程序开发

随着移动互联网的普及和发展,上门服务成为了许多人生活中的一部分。上门小程序是一种基于小程序平台的应用程序,它提供了上门服务的在线平台,为用户提供了便捷的上门服务体验。下面将介绍一些适合开发上门小程序的商家。   家政服务商家&am…

帮助中心内容需要囊括什么?(内含案例分享)

给产品制作一个帮助中心,让用户能够通过访问帮助中心查看产品相关内容,尽快了解产品,熟悉操作。不仅仅局限于售后,在售中售前都能够发挥很大的作用,帮助用户全面了解产品,减少销售的工作量,节约…

数字孪生和 GIS 系统融合将为水利领域带来哪些变化?

随着科技的不断进步,数字孪生和 GIS 系统的融合应用逐渐成为了水利领域的新趋势。数字孪生是指通过数字化技术模拟物理实体和过程,将现实世界与虚拟世界相结合的技术,而 GIS 系统则是地理信息系统,用于收集、存储、管理和分析地理…

Mybatis快速入门,Mybatis的核心配置文件

Mybatis快速入门 一、Mybatis简介1.1Mybatis简化JDBC 二、Mybatis快速入门2.1创建user表,添加数据2.2创建模块,导入坐标2.3编写Mybatis核心配置文件 --> 替换连接信息,解决硬编码问题2.4编写SQL映射文件 --> 统一管理sql语句&#xff0…

7、Java入门教程【面向对象】

面向对象是Java编程的核心概念,如果不能充分了解面向对象的思想,那么会给你在实际的项目开发过程中,带来很多业务设计上的困扰。 一、构造器 我们在设计完一个类,在使用这个类去创建对象实例的时候,有些场景是需要对…

云曦暑期学习第二周——文件上传漏洞

1.文件上传 1.1原理 一些web应用程序中允许上传图片、视频、头像和许多其他类型的文件到服务器中。 文件上传漏洞就是利用服务端代码对文件上传路径变量过滤不严格将可执行的文件上传到一个到服务器中 ,再通过URL去访问以执行恶意代码。 1.2为什么存在文件上传漏…

4-Linux组管理和权限管理

Linux组管理和权限管理 Linux组的基本介绍文件/目录的所有者组的创建文件/目录所在的组其它组改变用户所在的组权限的基本介绍第0-9位说明rwx权限详解rwx 修饰文件时rwx修饰目录时 修改权限第一种方式:、-、 变更权限第二种方式:通过数字变更权限 修改文…

第26天-秒杀服务(秒杀系统设计与实现)

1.秒杀设计 1.1.秒杀业务 秒杀具有瞬间高并发特点,针对这一特点,必须要做限流异步缓存(页面静态化)独立部署。 限流方式: 前端限流,一些高并发的网站直接在前端页面开始限流,例如&#xff1a…

web-文件包含

产生原因: 开发人员都希望代码更加灵活,所以通常会将被包含的文件设置为变量,用来进行动态调用。正是这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。 实际上被包含文件可以是任意格式的&#xff0…

【数据结构】带你轻松拿捏顺序表(内附源码)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,今天正式开始开新坑啦!在接下来的这一个月来我会逐步带大家了解初阶数据结构的知识,如果是你主修的是计算机专业数据结构的重要性不言而喻&…

深度学习论文: Q-YOLO: Efficient Inference for Real-time Object Detection及其PyTorch实现

深度学习论文: Q-YOLO: Efficient Inference for Real-time Object Detection及其PyTorch实现 Q-YOLO: Efficient Inference for Real-time Object Detection PDF: https://arxiv.org/pdf/2307.04816.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代…

LeetCode 918. Maximum Sum Circular Subarray【数组,动态规划】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

215.数组中的第K个最大元素-C++

题目来源:力扣 题目描述: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法…

Java书签 #解锁MyBatis的4种批量插入方式及ID返回姿势

1. 今日书签 项目开发中,我们经常会用到单条插入和批量插入。但是实际情况可能是,项目初期由于种种原因,在业务各处直接使用单条插入SQL进行开发(未开启批处理),在后面的迭代中,系统性能问题渐…

Spring Boot 集成 Redis 三种模式实践汇总

背景 项目的某个模块集成了 SpringBoot Redis 包,客户端使用 Lettuce,Redis 测试环境单机模式。但是现场反馈的 Redis 环境是集群,如果简单的修改 spring.redis 配置为集群的配置信息,程序能否能无缝衔接呢? 本文记录…

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具,本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是:https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一:Android Studio 中设置Git …

智安网络|实现数据安全:探索数据动态脱敏的落地策略

在当今数字化时代,数据安全成为企业和组织管理中的头等大事。然而,数据共享和数据大规模处理的需求也日益增长,这就需要在数据传输和存储过程中采取措施来保护用户的隐私。数据动态脱敏技术应运而生,为解决数据隐私和保护的问题提…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块3

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

Doris(二) -通过外部表同步数据

前言 参考网址 1.官网 2.ODBC External Table Of Doris 3.Apache doris ODBC外表使用方式 第一步 创建 RESOURCE DROP RESOURCE IF EXISTS mysql_test_odbc; CREATE EXTERNAL RESOURCE mysql_test_odbc PROPERTIES ( "type" "odbc_catalog", "…