薪火培训电控第五讲——PID控制与电机简介
@
一、PID:一种古老的控制方法
基本概念
首先需要简单理解,什么是控制。
所谓控制,不严谨的来说,是使用特定方法,对事物的动态变化起调控作用,以达到我们期望的目标。或者说,达到期望。
具象的说,通过控制,使得物体精准移动到某个位置;抽象的说,我们需要控制对象的特定指标准确快速达到某值。
一般来讲,控制需要反馈。接受反馈的控制叫闭环控制,反之叫开环控制。譬如你跑步,两公里限时10分钟,看表来适当调整速度就叫闭环,不看表凭着感觉去跑就叫开环。
在上面,我们提及两个重要的词:期望、反馈。这两个概念非常重要,希望大家可以先在这里简单理解,加深印象,我们后续会反复提及。
其次,引入系统以及两个重要概念:闭环控制系统和开环控制系统。
闭环控制系统是控制系统的一种类型。具体内容是指:
把控制系统输出量的一部分或全部,通过一定方法和装置反送回系统的输入端,然后将反馈信息与原输入信息进行比较,再将比较的结果施加于系统进行控制,避免系统偏离预定目标。闭环控制系统利用的是负反馈。
即是由信号正向通路和反馈通路构成闭合回路的自动控制系统,又称反馈控制系统。
闭环和开环控制系统的区别,在于闭环控制系统在给定控制器一定期望时,引入了系统被控对象的反馈量,即在给定控制量时,衡量被控对象此时的状态,从而调整控制的值,更快更好的达到我们的期望。
我们总是希望在对系统进行控制时,达到更好的效果,因此,通过特定算法,利用反馈量合理的调整控制量,成为了系统控制的关键。一个世纪以来,工程师在工程实践当中不断总结,总结出多种自动控制算法。
比例-积分-微分控制,一种诞生于20世纪30年代的算法,如今仍广泛用于各个行业的工程实践当中。
在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活
PID的控制模型与公式如下,其中,控制系统的输入值为反馈值和目标值,输出值为控制量。参数分别为Kp、Ki、Kd。
案例展示与公式推导
下面通过一个简单的例子,来简单理解PID公式及各参数的意义。
如上图,我们提出一个问题:让一个机械臂从水平状态(初始位置)旋转,准确达到与水平夹角45度悬停于空中(目标位置)。我们需要给定电机一定电流,使其提供力矩,带动机械臂旋转。如何确定电流在各个时刻的大小?
我们知道,假设我们不对整个系统的控制过程建模(动力学分析与逆动力学解算),整个过程中,驱动机械臂旋转所需要的力矩是未知的(不可直接通过观测得到)。
一个简单的方法,假设没有重力与摩擦力影响,我们在外界对机械臂的角度进行观测,得到当前电机位置(反馈值),假如没到预定位置,我们就给他向目标的位置(期望值)旋转的力矩;到达预定位置到,则停止输出。
引入公式1:
Angle为机械臂当前角度,KP是一个参数,可以调节输出力矩的大小,但一旦给定后,在控制过程中不能改变。我们称,(45-Angle)为此时期望值与反馈值的误差。通过此公式算出的Power1为此时计算出需要输出的理论电流。
这个公式实现了一个简单的功能,驱动电机输出一定的力矩,且此力矩与此时机械臂的角度位置的误差成比例关系。但是,这会有什么问题呢?
问题一:静态误差
机械臂旋转受到重力矩和摩擦力矩。机械臂假若没有到达指定位置,电机会给正向力矩(电流)。但存在一个情况,在某位置,正向力矩会和重力矩与摩擦力矩之和平衡。机械臂会悬停在此平衡位置,从而无法达到目标位置,无法达到期望。此时,我们称,出现了“静态误差”。
我们引入公式2,与原函数线性叠加,解决这个问题:
Sum为误差的累计(可以视为积分的一种离散形式),KI是一个参数,可以调节最终输出力矩的大小,通过此公式算出的Power2为此时计算出需要输出的电流。
这个公式实现了这个功能:若机械臂的当前值(反馈值)没有到期望位置,Power2累加(可认为是积分过程)。当反馈值越来越接近期望值时,Power2会减缓增加的速度。最终成为一个恒定力矩。如果超过期望,它会反向增加;超出目标位置一段时间,会变成负值。可以说,此时力矩与误差成积分关系。
该公式可以使当前值趋近于期望值,且对偏离期望值的误差非常灵敏,从而帮助解决输出力矩与阻力矩平衡的问题。当然,不能放任Power2无限累加,通常给Power2一个限制。
问题二:超调
我们重新关注公式1:
留意到,在动力矩大于阻力矩的时刻,机械臂会一直保持加速状态。换言之,在到达期望位置时,机械臂仍有可能具有较高的速度,在到达目标位置时无法停止,从而超过目标位置。我们称,此时出现超调。这是我们在控制中不希望看到的。
我们清楚这个问题为什么发生:机械臂在到达到期望位置时,仍然具有一定速度。因此,我们引入公式3:
Angle(k)是本次控制中的反馈值,,Angle(k-1)是上次控制的反馈值。两个量相减,趋近于目标位置的速度(可以视为微分的一种离散形式)。Kd是一个参数,可以调节最终输出力矩的大小与正负值。此处,速度是对期望值产生超调的因素,因此Kd理论上为一负值。从而,我们通过公式3抵消速度对控制的影响。即假如有正向的速度,我们将给出反向的力矩,抵消其导致超出期望值的影响。
将公式1、2、3结合,线性叠加,同时将45度以Target变量给出,得公式4:
其中:
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较为系统的讲述自动控制原理(经典控制/现代控制/非线性控制),同时对机器人控制中常用的卡尔曼滤波也有较为详尽的简介。对希望系统学习理论知识的同学有较大帮助。
这些都是在百度搜索:经典控制理论,排名较前的教程。当然,大部分教程都只能够提供简要的概念认知,系统的学习希望大家还是扎根课内,或者阅读《信号与系统》《自动控制原理》等教材。
大家可以通过该文章简要了解现代控制理论。这篇文章详细解答了以下问题:
一、什么是特征值和特征向量
二、什么是特征值和特征函数
三、什么是状态方程
四、如何求解状态方程
五、可控性和可观性
六、如何用状态反馈进行极点配置
七、如何进行跟踪控制
八、全状态观测器
九、缩减状态观测器
其中部分是数学内容,十分重要,希望大家耐心阅读。
二、电机:机器人的动力输出模块
驱动电机
直流有刷电机:机械换向,磁极不动,线圈旋转。内部含有碳刷,起到换向作用。碳刷不断磨损,会造成一定损耗,并且需要定时更换碳刷
直流无刷电机: 电子换向,线圈不动,磁极转动。通常用霍尔元件感应永磁体位置,进而控制电流的方向,达到换向作用。
控制电机
伺服电机:通过控制脉冲时间的长短控制转动角度
步进电机:通过控制脉冲的个数控制转动角度的,一个脉冲对应一个步距角
其他类型电机
力矩电机、直线电机……
直流有刷电机
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比赛电控技术教程】中更新。
薪火培训的教程的博客到此就告一段落。
后续预计上线教程:
- 遥控器数据解码
- 麦克纳姆底盘解算与控制
- 双轴云台的位置控制
进阶学习的技术准备:C语言基础
- 熟练运用指针,结构体
- 熟悉多文件的调用
- 熟练运用位运算
感谢大家看到这里。假如你已经完成前五讲的学习内容,并按要求完成学习任务,那我们相信,你已经对电控有一定的入门基础了。
在这里,留下北京理工大学机器人队的地址与联系方式。我们每年的秋季、春季会举办两次普通招新,同时长期开放特殊招新通道。期待你的加入!
地址:北京理工大学良乡校区北校区图书馆地下室机器人队实验室(112A室)
微信公众号:北理机器人队