薪火培训电控第五讲——PID控制与电机简介

@

一、PID:一种古老的控制方法

基本概念

首先需要简单理解,什么是控制。

所谓控制,不严谨的来说,是使用特定方法,对事物的动态变化起调控作用,以达到我们期望的目标。或者说,达到期望

具象的说,通过控制,使得物体精准移动到某个位置;抽象的说,我们需要控制对象的特定指标准确快速达到某值。

一般来讲,控制需要反馈。接受反馈的控制叫闭环控制,反之叫开环控制。譬如你跑步,两公里限时10分钟,看表来适当调整速度就叫闭环,不看表凭着感觉去跑就叫开环。

在上面,我们提及两个重要的词:期望、反馈。这两个概念非常重要,希望大家可以先在这里简单理解,加深印象,我们后续会反复提及。

其次,引入系统以及两个重要概念:闭环控制系统和开环控制系统

闭环控制系统是控制系统的一种类型。具体内容是指:
把控制系统输出量的一部分或全部,通过一定方法和装置反送回系统的输入端,然后将反馈信息与原输入信息进行比较,再将比较的结果施加于系统进行控制,避免系统偏离预定目标。闭环控制系统利用的是负反馈。
即是由信号正向通路和反馈通路构成闭合回路的自动控制系统,又称反馈控制系统。

闭环和开环控制系统的区别,在于闭环控制系统在给定控制器一定期望时,引入了系统被控对象的反馈量,即在给定控制量时,衡量被控对象此时的状态,从而调整控制的值,更快更好的达到我们的期望。

我们总是希望在对系统进行控制时,达到更好的效果,因此,通过特定算法,利用反馈量合理的调整控制量,成为了系统控制的关键。一个世纪以来,工程师在工程实践当中不断总结,总结出多种自动控制算法。

比例-积分-微分控制,一种诞生于20世纪30年代的算法,如今仍广泛用于各个行业的工程实践当中。

在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活

PID的控制模型与公式如下,其中,控制系统的输入值为反馈值和目标值,输出值为控制量。参数分别为Kp、Ki、Kd


案例展示与公式推导

下面通过一个简单的例子,来简单理解PID公式及各参数的意义。

如上图,我们提出一个问题:让一个机械臂从水平状态(初始位置)旋转,准确达到与水平夹角45度悬停于空中(目标位置)。我们需要给定电机一定电流,使其提供力矩,带动机械臂旋转。如何确定电流在各个时刻的大小?

我们知道,假设我们不对整个系统的控制过程建模(动力学分析与逆动力学解算),整个过程中,驱动机械臂旋转所需要的力矩是未知的(不可直接通过观测得到)。

一个简单的方法,假设没有重力与摩擦力影响,我们在外界对机械臂的角度进行观测,得到当前电机位置(反馈值),假如没到预定位置,我们就给他向目标的位置(期望值)旋转的力矩;到达预定位置到,则停止输出。

引入公式1:

\[Power1 = KP*(45 - \ Angle) \]

Angle为机械臂当前角度,KP是一个参数,可以调节输出力矩的大小,但一旦给定后,在控制过程中不能改变。我们称,(45-Angle)为此时期望值与反馈值的误差。通过此公式算出的Power1为此时计算出需要输出的理论电流。

这个公式实现了一个简单的功能,驱动电机输出一定的力矩,且此力矩与此时机械臂的角度位置的误差比例关系。但是,这会有什么问题呢?

问题一:静态误差

机械臂旋转受到重力矩和摩擦力矩。机械臂假若没有到达指定位置,电机会给正向力矩(电流)。但存在一个情况,在某位置,正向力矩会和重力矩与摩擦力矩之和平衡。机械臂会悬停在此平衡位置,从而无法达到目标位置,无法达到期望。此时,我们称,出现了“静态误差”

我们引入公式2,与原函数线性叠加,解决这个问题:

\[Sum = Sum + (45 - Angle) \]

\[Power2 = Ki*Sum \]

Sum为误差的累计(可以视为积分的一种离散形式),KI是一个参数,可以调节最终输出力矩的大小,通过此公式算出的Power2为此时计算出需要输出的电流。

这个公式实现了这个功能:若机械臂的当前值(反馈值)没有到期望位置,Power2累加(可认为是积分过程)。当反馈值越来越接近期望值时,Power2会减缓增加的速度。最终成为一个恒定力矩。如果超过期望,它会反向增加;超出目标位置一段时间,会变成负值。可以说,此时力矩与误差积分关系。

该公式可以使当前值趋近于期望值,且对偏离期望值的误差非常灵敏,从而帮助解决输出力矩与阻力矩平衡的问题。当然,不能放任Power2无限累加,通常给Power2一个限制。

问题二:超调

我们重新关注公式1:

\[Power1 = KP*(45 - \ Angle) \]

留意到,在动力矩大于阻力矩的时刻,机械臂会一直保持加速状态。换言之,在到达期望位置时,机械臂仍有可能具有较高的速度,在到达目标位置时无法停止,从而超过目标位置。我们称,此时出现超调。这是我们在控制中不希望看到的。

我们清楚这个问题为什么发生:机械臂在到达到期望位置时,仍然具有一定速度。因此,我们引入公式3:

\[Power3 = \ Kd*\lbrack Angle(k) - Angle(k - 1)\rbrack \]

Angle(k)是本次控制中的反馈值,,Angle(k-1)是上次控制的反馈值。两个量相减,趋近于目标位置的速度(可以视为微分的一种离散形式)。Kd是一个参数,可以调节最终输出力矩的大小与正负值。此处,速度是对期望值产生超调的因素,因此Kd理论上为一负值。从而,我们通过公式3抵消速度对控制的影响。即假如有正向的速度,我们将给出反向的力矩,抵消其导致超出期望值的影响。

将公式1、2、3结合,线性叠加,同时将45度以Target变量给出,得公式4:

\[Power = Power1 + Power2 + Power3 \]

\[Power(k) = KP*\lbrack Target - Angle(k)\rbrack + KI*Sum + Kd\lbrack Angle(k) - Angle(k - 1)\rbrack \]

其中:

\[Sum = Sum + \lbrack Target - Angle\left( k \right)\rbrack \]

Angle(k)为当前位置反馈值,Target为期望值。KP、KI、KD是需要手动调节的参数。Power(k)k时刻电机输出的电流,即我们对机械臂给出的力矩。

我们称,Power1的计算环节为比例环节,Power2的计算环节为积分环节,Power3的计算环节为微分环节。

注意到,公式以 对k时刻的函数形式给出,表明Power在整个控制过程中并不是一成不变的,而是在控制过程中,根据各个时刻机械臂所处位置的反馈量而“自动”的调节。而人为调节KP、KI、KD三个参数,我们可以调节比例-积分-微分各个环节所占整个计算过程的权重,从而根据被控制对象的实际情况,调节各个环节对最终控制效果的影响。

当k趋近无穷时,我们认为对系统的控制过程已完成。此时衡量系统控制效果,若系统处于一个稳定状态,即系统的反馈变化较小,我们称系统达到“稳态”;若系统保持在某区间内振荡,我们称系统无法达到稳态。称系统达到稳态的过程为“收敛“。

“如果线性系统在初始条件的作用下,其输出量最终返回它的平衡状态,那么这种系统是稳定的.

如果线性系统的输出量呈现继续不竭的等幅振荡过程,则称其为临界稳定.(临界稳定状态按李雅普洛夫的界说属于稳定的状态,但由于系统参数变动等原因,实际上等幅振荡不能维持,系统总会由于某些因素招致不稳定.因此从工程应用的角度来看,临界稳定属于不稳定系统,或称工程意义上的不稳定.)

如果系统在初始条件作用下,其输出量无限制地偏离其平衡状态,这称系统是不稳定的.”

下面给出MATLAB仿真过程中参数对整体控制效果影响的波形图。其中,蓝色线为期望值,红色线为控制对象的反馈值。

样例1:KD较大KI较小,此时反馈值到达稳定,但是由于KI过小,系统产生稳态误差,稳态值与期望值有差异且无法到达。

样例2:KD较小KI较大,此时系统积分环节影响过大,系统在达到稳态前出现振荡,收敛速度慢。

样例3:KD较大KI较大,收敛速度快,振荡过程少,振荡幅度小,无静态误差。

样例4:比较合适的参数,收敛速度快,振荡小,快速达到稳态。

样例5:动态展示PID各参数整定过程及对系统控制效果的影响。

最后,给出PID公式离散化形式的公式:

拓展与延伸

当然,PID也有其自身的局限性。在实际工程实践过程中,被控对象往往具有非线性、时变不确定,难以建立精确的数学模型,常规的PID控制器不能达到理想的控制效果;常规PID控制器参数,对运行工况的适应能力很差,即控制系统状态假如发生改变,PID控制器控制效果可能变差。

关于PID的进阶阅读资料,以及自动控制原理的相关资料,在b站/百度上都有很多。参考链接:

DR_CAN的个人空间_哔哩哔哩

推荐理由:该UP较为系统的讲述自动控制原理(经典控制/现代控制/非线性控制),同时对机器人控制中常用的卡尔曼滤波也有较为详尽的简介。对希望系统学习理论知识的同学有较大帮助。

经典控制理论重点概念梳理

串讲:控制理论:PID控制(经典控制理论)

这些都是在百度搜索:经典控制理论,排名较前的教程。当然,大部分教程都只能够提供简要的概念认知,系统的学习希望大家还是扎根课内,或者阅读《信号与系统》《自动控制原理》等教材。

如何入门现代控制理论

大家可以通过该文章简要了解现代控制理论。这篇文章详细解答了以下问题:

一、什么是特征值和特征向量

二、什么是特征值和特征函数

三、什么是状态方程

四、如何求解状态方程

五、可控性和可观性

六、如何用状态反馈进行极点配置

七、如何进行跟踪控制

八、全状态观测器

九、缩减状态观测器

其中部分是数学内容,十分重要,希望大家耐心阅读。

二、电机:机器人的动力输出模块

驱动电机

直流有刷电机:机械换向,磁极不动,线圈旋转。内部含有碳刷,起到换向作用。碳刷不断磨损,会造成一定损耗,并且需要定时更换碳刷

直流无刷电机: 电子换向,线圈不动,磁极转动。通常用霍尔元件感应永磁体位置,进而控制电流的方向,达到换向作用。

控制电机

伺服电机:通过控制脉冲时间的长短控制转动角度

步进电机:通过控制脉冲的个数控制转动角度的,一个脉冲对应一个步距角

其他类型电机

力矩电机、直线电机……

直流有刷电机


JGB37-520编码器减速电机 带测速 霍尔编码器 机器人大扭力金属齿-淘宝网(taobao.com)
L298N电机驱动板模块步进电机/智能小车/板载5V输出/yourcee-tmall.com天猫

工程实践中的电机选型,需要关注电机的基本参数(上图)

通常搭配电机驱动达到调速效果(下图):通过控制电机的运转速度和方向,实现对占空比的控制,来达到对电机怠速控制的方式。

减速箱作用:降速同时提高输出扭矩,扭矩输出比例按电机输出乘减速比

编码器作用:一种旋转传感器,将旋转零件的位置和位移转换为一系列数字脉冲信号。脉冲信号由控制系统收集和处理,用作闭环反馈控制。

PWM控制有刷电机代码

void Motor_Calc(){
	PID_SetFdb(&motor_pid,speed_get);
}

void Motor_Init(){
    PID_ParamInit(&motor_param,5,0,0,100,900);
    PID_ClearData(&motor_pid);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
	if(GPIO_Pin==GPIO_PIN_2){      //记录脉冲数
        speed_get++;
    }
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim==&htim3)
	__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,0);
	__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,500);
	Motor_Calc();
	speed_get=0;
	}
}

PID计算函数

void PID_Calc(PID_PIDTypeDef* pid, PID_PIDParamTypeDef* pparam)
 {  
    float dError,Error;       
    Error = pid->ref - pid->fdb;       //计算误差  
    pid->sum = pid->sum + Error;       //累积误差  
    pid->err_last = pid->err;          //更新结构体历史误差    
    pid->err = Error;                  //更新结构体误差   
    dError = pid->err - pid->err_last; //计算微分     
    pid->sum = limit(pid->sum, pparam->sum_max,-pparam->sum_max) //积分限幅  
    pid->output = pparam->kp * Error + pparam->ki * pid->sum + pparam->kd * dError;      //计算输出     
    pid->output = limit(pid->output, pparam->output_max, -pparam->output_max);           //输出限幅
}

直流无刷电机

上图 M3508减速电机

下图 GM6020云台电机

上面两款电机,为RM比赛中常用到的直流无刷电机,他们具有更好的动力输出性能,精准的速度、位置、温度反馈。

他们采用的通信方式、控制方法更加复杂,不在此处介绍。

三、课程总结:道阻且长,与君同行

机器人控制是一个复杂的系统,由多种外设组合起来共同控制。外设使用的通信方式种类各有不同。控制程序会包含任务进程、中断、外设驱动函数、解码函数、以及各传感器的数据融合、控制函数,还需要利用各种控制算法优化控制效果。

推荐一个实践项目(也许需要梯子)

项目地址 :GitHub -RoboMaster/Development-Board-C-Examples

项目文档: 教程文档

一份基于RobomasterC型板的项目开发例程(CubeMX+KeilMDK5)。由北理工2017级毕业生、2021赛季机器人队前队长Satori学长编写。sasasatori个人博客

更加进阶的教学内容,我们会在后续的博客【ROBOMASTER比赛电控技术教程】中更新。

薪火培训的教程的博客到此就告一段落。

后续预计上线教程:

  1. 遥控器数据解码
  2. 麦克纳姆底盘解算与控制
  3. 双轴云台的位置控制

进阶学习的技术准备:C语言基础

  1. 熟练运用指针,结构体
  2. 熟悉多文件的调用
  3. 熟练运用位运算

感谢大家看到这里。假如你已经完成前五讲的学习内容,并按要求完成学习任务,那我们相信,你已经对电控有一定的入门基础了。
在这里,留下北京理工大学机器人队的地址与联系方式。我们每年的秋季、春季会举办两次普通招新,同时长期开放特殊招新通道。期待你的加入!
地址:北京理工大学良乡校区北校区图书馆地下室机器人队实验室(112A室)
微信公众号:北理机器人队

欢迎大家加入北京理工大学机器人队!

posted @ 2021-11-06 13:21  北京理工大学机器人队  阅读(903)  评论(0编辑  收藏  举报