关于PID的输入输出是什么--供自己复习使用

这篇具有很好参考价值的文章主要介绍了关于PID的输入输出是什么--供自己复习使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本人也是个新手,最近对平衡车感兴趣,所以恶补了一些关于pid的知识,下面是关于pid的文章,后续在平衡车上有进展也会出一些关于平衡车的文章。第一次写文章,有许多的不足之处,希望给位网友给予指正。

在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。(该段摘自百度)

上面便是pid最简要的描述,而关于pid的细讲P,I,D这三部分是干什么的,想要学习从最基础的公式变形到代码这一层,这些在网上有大量的资料,这里就不在赘述,下面来讲讲我对pid的一些特别的理解。


首先,先看公式

△u(k)=Kp * e(k)+Ki / T * ∫ e(k) dt+Kd*d e(k);

这个公式我们不用特别的去理解,按照上面的公式,可离散化之后用代码表示

float PID(float actual_val)
{
		/*计算目标值与实际值的误差*/
    err = target_val - actual_val;
  
    integral += err;    // 误差累积

		/*PID算法实现*/
    actual_val = Kp * err + 
                 Ki * integral + 
                 Kd * (err - err_last);
		/*误差传递*/
    err_last = err;
    
		/*返回当前实际值*/
    return actual_val;
}

便得到位置式pid,一般在运用到位置式pid的时候,直接复制这段公式就可以直接用了。

从位置式pid做差求增量,便可得到增量式pid

△u(k)=Kp * e(k-1)+Ki *e(k) +Kd *(e(k)-2e(k-1)+e(k-2));

同样,这个公式不用太在意,看不懂没太大关系,主要是要有对增量式pid的大概印象就行,重要的是代码部分:

float PID(float actual_val)
{
	/*计算目标值与实际值的误差*/
  err=target_val-actual_val;
	/*PID算法实现*/
	actual_val += Kp*(err - err_next) 
                 + Ki*err 
                 + Kd*(err - 2 * err_next + err_last);
	/*传递误差*/
	err_last = err_next;
	err_next = err;
	/*返回当前实际值*/
	return actual_val;
}

由公式可看到增量式pid与最近三次的error有关。增量式与位置式的代码部分大部分相同,但它们的实际运用大不相同.它们具体区别可参考文章位置式PID与增量式PID区别浅析


说完基本的,再来说说本章重点,这是困惑我,也可能是困惑大部分新手许久的一个问题,pid算法的输入与输出是什么呢?为什么在用pid控制电机转速的时候输入一个编码器的测量值就可以自动输出一个数,这个数可以直接用于pwm占空比的设置,从而直接控制电机呢?看完接下来的文章,希望可以帮助你解决这个问题。


假设我们设置一个定时器,来定时读取编码器的值,相邻两次读取的值做差得到值a,只要a一直保持不变,是不是电机的速度也就一直不变呢。有了这个最简单的控制电机转速的概念,就可以引用pid算法了。我们假设目标值target_val=200,一开始电机不转,读取做差测得的值便是0,这时就会产生error,有了error,pid就可以运算,假设pid运算出来的值b=1,用这个值去设置pwm占空比,显然太小,电机甚至不转动,然而电机不转动,继续产生error,产生的过程与之前说的同理,但是由于积分i的作用这次pid运算出来的值b更大了,假如b=2吧,用b去设置pwm的占空比,还是太小,电机还是不动,那就接着pid运算,如此反复,最终b=50,这个值刚好是电机转动了起来,但是速度太低,相邻两次读取编码器的值做差之后还是小于200,还是有error,继续pid运算,b一直增大,最终b达到某个值,使得电机的转速满足相邻两次读取编码器的值做差等于200这一条件,这时error为0,pid运算出来的值还是最终的那个b,最后稳定达到我们设置的预期值。总的来说,pid运算出的结果就是一个控制信号,其余的什么也不是,而输入的可以是任何东西。

理解上面的内容后,是不是就可以理解网上一些用电流,电压之类的与速度毫不相干的值来控制电机速度了呢?希望这篇文章对有这些疑惑的小伙伴有一定的帮助,这是我第一次写文章,为了巩固自己所学,同时也便利一下他人。文章来源地址https://www.toymoban.com/news/detail-484163.html

到了这里,关于关于PID的输入输出是什么--供自己复习使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DC电源模块关于宽电压输入和输出的范围

    BOSHIDA DC电源模块关于宽电压输入和输出的范围 DC电源模块是一种电子设备,能够将输入的直流电源转换成所需的输出电源,用于供电各种电子设备。其中,关于宽电压输入和输出的范围,是DC电源模块常见的设计要求之一。本文将详细介绍DC电源模块的宽电压输入和输出的范

    2024年02月07日
    浏览(47)
  • STM32——关于GPIO口的输出方式和输入方式

    在STM32中,我们会要使用程序来对I/O口进行控制,当我们使用I/O口时,我们就需要知道在程序中我们需要这个I/O口来实现什么功能,是输入还是输出。   1、使用输出模式 I/O口常用的输出方式有推挽输出和开漏输出。 (1)推挽输出(GPIO_Mode_Out_PP):可以输出高、低电平,连接数

    2024年02月09日
    浏览(50)
  • 什么是输入阻抗 / 输出阻抗?

    输入阻抗: 是指一个电路输入端的等效阻抗。                   在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。可以理解                    成一个电阻的两端,这个电阻的阻值,就是输入阻抗,其反映了对电流阻碍能力的大             

    2024年04月17日
    浏览(41)
  • 海康工业相机SDK基于C#关于IO输入输出的控制

    海康工业相机功能模块sdk提供了很多相机的接口,本文主要介绍下相机的io相关的控制。例如在通过io输入触发相机拍照。通过io输出传递拍照成功,或者存图成功的信号等。 IO输入的主要作用就是,相机通过IO管脚,收到1个IO信号,来触发相机拍照; 触发模式:TriggerMode设置

    2024年02月03日
    浏览(251)
  • 头歌:Java高级特性 - IO流 (答案+详细注释)第1关:什么是IO流+第2关:字节流-输入输出+第3关:字符流 - 输入输出+第4关:复制文件

    目录 第1关:什么是IO流 第2关:字节流-输入输出 第3关:字符流 - 输入输出 第4关:复制文件

    2024年02月10日
    浏览(78)
  • 使用Harmony OS控制外设——输入输出

    本节课程主要介绍如何在HiSpark WiFi IoT套件上使用Hamony OS进行编程,以及如何使用GPIO输入输出功能。 Hi3861开发板第一个示例程序演示 熟悉使用DevEco Device Tool插件进行程序烧录 熟悉串口调试工具sscom的使用 官方文档中控制核心板上LED的 led_example.c 讲解及演示 源码路径: appli

    2023年04月20日
    浏览(78)
  • 使用重定向输入和输出创建子进程

    本主题中的示例演示了如何使用 CreateProcess 函数从控制台进程创建子进程。 它还演示了一种使用匿名管道重定向子进程的标准输入和输出句柄的技术。 请注意,命名管道还可用于重定向进程 I/O。 CreatePipe 函数使用 SECURITY_ATTRIBUTES 结构创建两个管道的读取和写入端的可继承句

    2024年02月07日
    浏览(36)
  • 【人工智能与深度学习】当输入层维度为1024,输出层维度为100时,为什么全连接层参数量为1024*100+100

    在神经网络中,全连接层(也称为稠密层或线性层)的参数量计算通常包括权重(weights)和偏置(biases)。对于一个全连接层,如果输入层维度(即输入特征的数量)为1024,输出层维度(即输出特征的数量)为100,那么参数的计算方式如下: 权重 :每个输入特征都与每个输

    2024年01月17日
    浏览(84)
  • 【C++图形化界面】使用HiEasyX优化黑框输入输出交互界面

    实现一份不错的课程设计,往往需要利于进行实现良好交互的图形化界面。 在这学期的课程设计中,我发现了一套可以通用的图形化界面,适合需要界面,但不需要多高级的界面的,并且像我一样图形化知识基础为0的C/C++小白。 现记录如下: ①在编辑框内可以输入内容(能

    2024年02月11日
    浏览(37)
  • 关于npm和yarn的使用(自己的问题记录)

    目录 一  npm 和 yarn 的区别 二  npm 和 yarn 常用命令对比 1. 初始化项目 2. 安装所有依赖包 3. 安装某个依赖包 4.安装某个版本的依赖包 5. 更新依赖包 5. 移除依赖包 三  package.json中 devDependencies 和 dependencies 的区别。 四   npm安装包时,加 --save和不加的区别 1.  来源        

    2024年04月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包