0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PID控制器概述与制作实例

开源嵌入式 来源:开源嵌入式 作者: 富贵人 2022-07-10 16:55 次阅读

PID概述:

在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的 其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、 积分、微分计算出控制量进行控制的。

(1)比例(P)控制

比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

(2)积分(I)控制

在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到接近于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后几乎无稳态误差。

(3)微分(D)控制

在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用, 其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。

制作实例:

大家一定都见过PID的实际应用

比如四轴飞行器,再比如平衡小车……还有汽车的定速巡航、3D打印机上的温度控制器….再比如动物园里的海狮,将一根杆子直立着顶在头上(OOPS,这个也算..)就是类似于这种:需要将某一个物理量“保持稳定”的场合(比如维持平衡,稳定温度、转速等),PID都会派上大用场。在这篇文章中我制作了一个基本的电机控制器,来探究PID的原理以及如何去使用它。首先我要可以任意控制我的电机旋转角度,在旋转的过程中,电机需要保持稳定并且不会出现震荡。

电机选型

要想完成这个实验,单片机需要精确控制电机,从电机那获得电机的转速以及位置等信息。所以需要使用带有编码器的直流电机,通过编码器,单片机即可获得电机的转速以及位置信息。市面上售卖的编码器电机一般分为霍尔或者光电编码器的,在这里我选择的是一款来自Robot减速比为120的TT编码器电机。

根据官网给出的数据手册,他的编码器一圈可以输出16个脉冲信号,经过减速箱后,输出轴旋转一圈可以输出16*120=1920个脉冲信号。

电机一共有六根线,左边4根为编码器的线,右边两根为电机的线。

电机驱动芯片

电机驱动芯片我选择的是L293D,这是一个双路的H桥有刷电机驱动芯片,使用2个输入引脚以及一个使能脚就可以控制一路电机正反转以及调速。

单片机用的是STM32F103C8T6系列的核心板。对于这款单片机来说,其定时器支持编码器信号输入,所以我只需要把电机的编码器输出引脚连接到定时器的的编码器输入引脚即可,即可实现定时器自动计数。

单片机与电机电路连接好后,下面就开始做软件部分了。

PID控制器

PID控制器的名称其实就解释了它的基本原理,PID分别是三个单词的缩写,P(Proportion)I(Integration)D(Differential),那么解释成中文意思就是比例、积分、微分控制器。如下图所示。

9d5474a8-f44f-11ec-ba43-dac502259ad0.png

其中,最左侧作为PID控制器的输入,最右侧作为PID控制器的输出,通过以上框图不难看出,PID 控制其实就是对偏差的控制过程;如果偏差为 0, 则比例环节不起作用,只有存在偏差时,比例环节才起作用;积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差;而微分信号则反应了偏差信号的变化规律,也可以说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的预知性;我们可以看到在输出端又有一个箭头指向了输入端的累加器,并且其符号是负的,这也就说明了PID控制器是具有负反馈的,同时此时的误差信号就为输入信号减去输出信号。通俗来说,拿我们实验目的来举例子就是当电机旋转角度过多了,PID控制器会控制其转回到原来角度。

所以总的来看,PID控制器的精髓就是三个运算过程。而在这个实验中,我想要控制电机旋转到特定的角度,那么我的输入就为我想要旋转的角度,经过使用PID控制器进行运算之后,他就会输出一个PWM值去控制电机运动,并且在这同时编码器会不断反馈当前位置。经过这样不断的使用PID控制器进行计算,进而我的电机就可以快速稳定的转到我指定角度。

9d67b0e0-f44f-11ec-ba43-dac502259ad0.png

代码的实现

值得注意的是,对于上面PID结构图中提到的三部分运算公式(比例,微分与积分)它都是对于连续信号来进行的操作,对于单片机来说,处理连续信号显然是不可能的。可行的办法就是每隔一定时间运行一次PID算法,所以对于离散的位置PID算法来说,其公式如下

9d8166b6-f44f-11ec-ba43-dac502259ad0.png

对于三个变量来说,它们的计算方法如下

9d90bddc-f44f-11ec-ba43-dac502259ad0.png

那么接下来就是实现整个程序了,由于我使用的单片机小板没有串口通信芯片,不利于后期调试,所以我使用STM32自带的一个USB接口模拟串口通信。接下来新建一个STM32工程,并添加相关的外设初始化代码(电机编码器等)。

9da36bda-f44f-11ec-ba43-dac502259ad0.png

接下来我根据上文提到的PID计算公式,编写了PID运算函数。

9dd25698-f44f-11ec-ba43-dac502259ad0.png

为了定时运行PID算法,我设置了一个5ms的定时器,这样每次到了定时器中断时候,就可以运行PID算法了。从定时器的中断函数中我们可以看到,每次的处理过程就是将当前位置和目标位置送入PID运算器并且得到输出后,送入电机的控制函数中即可。

9de368c0-f44f-11ec-ba43-dac502259ad0.png

而在电机的控制函数Output中,其内容如下

9df844d4-f44f-11ec-ba43-dac502259ad0.png

通过PID控制器输出的值来控制电机的旋转方向,然后对PID输出的值进行限幅,最后赋值给PWM发生器即可。

实验

接下来我们开始实验,首先我们将PID控制器的I和D参数全部调节为0,将Kp设置为一个较小值,接着编译工程并且烧录到STM32中。

9e0bf3f8-f44f-11ec-ba43-dac502259ad0.png

给STM32上电,STM32使用USB模拟串口需要安装一个软件,我会附到文末资料中。打开串口调试助手,输入h加上回车,点击发送,帮助信息会被打印出来。可以看到支持的指令包括读取编码器位置,修改PID参数以及左右旋转等等。

9e1c3ab0-f44f-11ec-ba43-dac502259ad0.png

接着在串口调试助手中发送数据后,观察到电机转动过了九十度,但是电机出现晃动的情况,并且响应速度也较慢接着增大Kp值,直到晃动幅度减小并且电机响应速度逐渐增快,在目标位置附近抖动时,我们开始增大Kd值去抑制在目标位置附近的抖动。当调整到Kp值为500,Kd值为900时,电机晃动情况大幅改善。虽然抖动问题解决了,但是经过多次旋转之后,电机的误差逐渐显现出来,旋转一周后没法回到原点。所以接下来增加Ki值,建议Ki值增加幅度不要过大,一般在零点几的范围。这里我设置Ki值为0.01,以修正每次旋转之后产生的误差。到这里,PID参数调整的基本就差不多了,电机可以很好的执行我的指令。

我发现当我的旋转角度设定到很大的值时候,电机会先以满速转动,然后会逐步减速直到我的设定位置。这就带来一个问题,当电机满速的时候,PWM的占空比为100%,这时候电机等于直接接在电源两端,此时电机的转速我们没法控制,那么如果这时候电源电压不稳,电机转速势必会产生变化,造成转动的不稳定,这当然不是我想看到的。所以这时候就需要引入速度环了。

9e2d3eaa-f44f-11ec-ba43-dac502259ad0.png

由于电机转动起来之后会具有一定的惯性,那么他的速度就不可能产生突变,所以在速度环控制器中,我只采用了PI控制。速度环控制器用于控制电机在转动过程中的速度,那么它将会处于位置环控制器的内部,最终实现的代码如下。

9e3c1b78-f44f-11ec-ba43-dac502259ad0.png

9e510416-f44f-11ec-ba43-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6037

    文章

    44559

    浏览量

    635508
  • 控制器
    +关注

    关注

    112

    文章

    16374

    浏览量

    178156
  • PID
    PID
    +关注

    关注

    35

    文章

    1472

    浏览量

    85538

原文标题:【电机控制】一篇通俗的PID算法详细讲解

文章出处:【微信号:KY_QRS,微信公众号:开源嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是pid控制,什么是pid控制器

    什么是pid控制器 所谓PID控制,就是在一个闭环控制系统中,使被控物理量能够迅速而准确地无限接近于
    发表于 09-10 12:39 1.7w次阅读
    什么是<b class='flag-5'>pid</b><b class='flag-5'>控制</b>,什么是<b class='flag-5'>pid</b><b class='flag-5'>控制器</b>

    pid控制器原理

    pid控制器原理       在工程實際中,應用最為廣泛的調節控制規律為比例積分微分控制
    发表于 09-10 12:44 1.4w次阅读
    <b class='flag-5'>pid</b><b class='flag-5'>控制器</b>原理

    控制温度PID实例

    三菱PLC(可编程逻辑控制器)编程实例项目例程控制温度PID实例
    发表于 05-13 16:13 52次下载

    13个基于PID控制器的设计实例

    PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元比例P(proportion)、积分单元I(integration)和微分单元D
    发表于 11-15 11:36 72次下载

    PID控制器PID算法的研究

    PID 算法 在过程控制中,PID 控制器,一直是应用最为广泛的一种自动控制器PID
    发表于 11-21 17:03 29次下载

    pid控制器的输入输出_PID控制器控制实现

    本文首先介绍的是PID控制器的工作原理,其次介绍的是pid控制器的输入输出,最后介绍了PID控制器
    的头像 发表于 06-01 09:09 2.9w次阅读

    PID控制器控制电压的详细介绍和PID控制器的C程序的概述

    本文档的主要内容介绍的是PID控制器控制电压的详细介绍和PID控制器的C程序的概述
    发表于 06-07 08:00 71次下载
    <b class='flag-5'>PID</b><b class='flag-5'>控制器</b><b class='flag-5'>控制</b>电压的详细介绍和<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>的C程序的<b class='flag-5'>概述</b>

    pid控制器工作原理

    PID控制器广泛应用于工业过程控制。工业自动化领域的大约95%的闭环操作使用PID控制器控制器
    发表于 07-18 15:10 1.1w次阅读
    <b class='flag-5'>pid</b><b class='flag-5'>控制器</b>工作原理

    PID控制的理论和PID控制器设计的及PID控制器参数整定的以及分析

    PID控制作为一种经典的控制方法而广泛应用于工业控制中,是实际工业生产过程正常运行的基本保障。随着计算机技术的飞跃发展和人工智能技术渗透到自动控制
    发表于 12-04 08:00 26次下载
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b>的理论和<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>设计的及<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>参数整定的以及分析

    制作一个带有PID控制器的线跟随机器人

    如果你想要制作一个遵循黑线行动的酷机器人。大概只需要在 2 小时内学习并制作就能够完成带有 PID 控制器的线跟随机器人。
    发表于 08-29 16:22 1049次阅读
    <b class='flag-5'>制作</b>一个带有<b class='flag-5'>PID</b><b class='flag-5'>控制器</b>的线跟随机器人

    PID控制作用是什么

    PID控制作用是什么 PID控制及其控制器或智能PID控制器
    发表于 03-09 14:09 2753次阅读

    PID控制器的含义

    PID控制器的含义 PID 控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。将偏差
    发表于 03-09 14:22 3795次阅读

    PID控制器的类型和选择指南

    PID控制器是一种广泛应用于工业控制系统中的控制器,它根据系统的偏差来计算控制量,以实现对系统的精确控制
    的头像 发表于 11-06 10:37 576次阅读

    什么是PID控制器的原理 PID算法在自动化中的应用

    (Derivative)三个单词的首字母缩写,分别对应控制器的三种基本控制作用。 PID控制器的原理 比例(P)控制 :比例
    的头像 发表于 11-13 14:27 877次阅读

    如何选择合适的PID控制器

    在工业自动化领域,PID控制器因其简单、高效和广泛应用而备受青睐。PID代表比例(Proportional)、积分(Integral)和微分(Derivative)三个控制作用,它们共
    的头像 发表于 11-13 14:34 524次阅读