5.9.9 串级PID控制器


详细资料见Q群:531905626

对该项目感兴趣的同志,想要一起深入开发拓展可以联系本人邮箱:2560198277@qq.com。限于本人精力,在PCB设计、3D建模、嵌入式开发方面都有较大的需求。

书籍总目录:http://t.csdnimg.cn/YDe8m


5.9.9 串级PID控制器

(1)串级PID控制器原理

   我们已知单一的角速度PID控制系统,其原理如图5.9.8所示。其可以简化为图5.9.19:
在这里插入图片描述

图5.9.19

   其中飞行硬件系统FLY(s)相当于电机功率转化模块 F m F_m Fm、电机系统M(s)、四旋转子系统G(s)的组合。而PID(s)为PID控制器,其输入是一个误差e,输出是控制量u。

   离散化的PID控制器我们已经在前面求解得到,即式(5.9.21),于是这里可以简记PID控制器PID(s)为:

u [ k + 1 ] = P I D ( e [ k + 1 ] ) , k = 0 , 1 , . . . . . . ( 5.9.37 ) u_{[k+1]} = \mathrm{PID}(e_{[k+1]}),k = 0,1,...... \qquad (5.9.37) u[k+1]=PID(e[k+1]),k=0,1,......(5.9.37)

   左侧为输出,右侧为输入。
   而串级PID的原理如图5.9.20所示:

在这里插入图片描述

图5.9.20

   如图5.9.20的串级PID控制系统可以同时控制四旋转子的角度与角速度,是一个多输入单输出系统。输入角度期望 A x d A_{xd} Axd、角速度期望 W x d W_{xd} Wxd,输出是对x轴力矩的控制量 U W U_W UW

   串级PID相当于两个普通PID控制器进行串联,如图5.9.20,如果去掉虚线框住的部分,则其与图5.9.19等同。则称虚线框住部分的PID为角度环PID,称未框起来的PID为角速度环PID。通常又称靠近总输出端的PID为内环PID,此处即角速度不环PID;求远离总输出端的PID为外环PID,即此处的角度环PID。

   明确了基本概念,再来看图5.9.20,其具体控制流程分为如下几个部分:

   1)角度环
   输入的期望角度 A x d A_{xd} Axd与测量角度 A x A_x Ax作差,得到误差 e A e_A eA e A e_A eA输入到PID控制器PID(s),PID控制器输出控制量 u A u_A uA

   2)角速度环
   该部分的第一步也是求期望与测量的误差,只是此处的期望包含两部分。其一是外部给定的角速度期望 W x d W_{xd} Wxd;其二则是角度不正常的输出 u A u_A uA,则求得误差 e W = ( W x d + u A ) − W x e_W = (W_{xd}+u_A)-W_x eW=(Wxd+uA)Wx,此处是是串级PID的核心。其后与角度环类似,将 e W e_W eW输入PID控制器,得到输出 u W u_W uW

   3)飞行硬件系统
   最终,控制量输入飞行硬件系统FLY(s),其输出为四旋转子的角度 A x A_x Ax、角速度 W x W_x Wx,两个输出又用于下一次的串级PID控制。

   上述串级PID可写成离散化的数学模型,即:
e A [ 0 ] = u A [ 0 ] = e W [ 0 ] = u W [ 0 ] = 0 ( 5.9.38. a ) e A [ k + 1 ] = A x d − A x [ k + 1 ] ( 5.9.38. b ) u A [ k + 1 ] = P I D ( e A [ k + 1 ] ) ( 5.9.38. c ) e W [ k + 1 ] = ( W x d + u A [ k + 1 ] ) − W x [ k + 1 ] ( 5.9.38. d ) u W [ k + 1 ] = P I D ( e W [ k + 1 ] ) ( 5.9.38. e ) \begin{aligned} &e_{A[0]} = u_{A[0]} = e_{W[0]} = u_{W[0]} = 0 &(5.9.38.a) \\ &e_{A[k+1]} = A_{xd} - A_{x[k+1]} & (5.9.38.b) \\ &u_{A[k+1]} = \mathrm{PID}(e_{A[k+1]}) & (5.9.38.c) \\ &e_{W[k+1]} = (W_{xd}+u_{A[k+1]}) - W_{x[k+1]} &(5.9.38.d) \\ &u_{W[k+1]} = \mathrm{PID}(e_{W[k+1]}) &(5.9.38.e) \end{aligned} eA[0]=uA[0]=eW[0]=uW[0]=0eA[k+1]=AxdAx[k+1]uA[k+1]=PID(eA[k+1])eW[k+1]=(Wxd+uA[k+1])Wx[k+1]uW[k+1]=PID(eW[k+1])(5.9.38.a)(5.9.38.b)(5.9.38.c)(5.9.38.d)(5.9.38.e)

(2)内环与外环

   图5.9.20中,为什么角速度环作为内环呢?换一下位置可以吗?
   答案是可以,不过控制器的性能可能会极大的下降。一般来说,串级PID内外环的设置关系或都说多个PID串联时其前后的位置关系,遵循以下原则:

   1)运行频率越高的PID控制器,越靠近总输出端。
   2)期望值微分阶次越高的PID越靠近总输出端。例程此处,角度是角度的零阶微分,而角速度是角度的一阶微分,所以设置角速度环为内环。
   3)期望优先级越大的、期望变化越频繁的PID,越远离输出端。如四旋转子系统,我们更想要控制的是系统的角度,而在控制过程中角速度的变化并不特别关心,一般会将角速度的期望固定设置为零。故设置角度环PID为外环。之后可能会依次扩展控制器系统的维度,对不超过期望的优先级将设置为:
   位置 > 位速 > 角度 > 角速

(3)Matlab读写Excel文件数据

   为了便于设置与保存系统参数,这里引入Matlab读写Excel数据的功能,该功能主要由xlsread、xlswrite两个函数来实现,程序中这两个函数只能读写数值,操作不了文本。

  • xlsread 函数

    • 功能:读取电子表格文件
    • 语法:num = xlsread(filename)
         其中“filename”为当前目录下Excel文件的文件名,应使用单引号’'框起来,该函数会读取“filename”文件中数据并以矩阵形式保存在“num”变量中。不过实测只能读取数值数据。
         此外,默认情况下该函数是只读取Excel文件中的Sheet1。
  • xlswrite 函数

    • 功能:写入电子表格文件
    • 语法:xlswrite(filename,A,xlRange)
         将矩阵“A”中的数据写入到Excel文件filename的xlRange区域,例如要写入到文件的C2到E7这个方形区域,则设置xlRange为’C2:E7’,注意加上单引号。

   之后的例程会使用xlsread 函数来读取系统参数、期望数据,而xlswrite函数主要会用于PID参数优化例程,将优化的PID参数保存在Excel文件中。

(4)软件设计

   本小节例程位于“2、飞控例程\Matlab\(2)飞行控制——四旋转子\A4_串级PID控制”中。
   例程功能为:读取Excel文件中的参数到程序,使用串级PID同时对四旋转子系统的角度、角速度进行控制。
   例程中的文件如图5.9.21所示,主要修改了“A2_init.m”、“C_Cascade_PID.m”等文件。
在这里插入图片描述

图5.9.21

1)A2_init.m 文件

%% 初始化各参数
       
data_i = xlsread('输入_系统参数.xlsx');   %只读取数值数据

Ts   = data_i(2, 4);            %采样时间
t    = data_i(3, 4);
t    = 0:Ts:t;       
Num  = length(t);     %离散数

M_Motor;               %初始化 电机系统 动态模型 
M_Four_turn_rotor;     %初始化 四旋转子 转速系统 动态模型
C_Cascade_PID;         %初始化 串级PID控制器 
  • 行3
    与之前不同的是此处添加了读取Excel文件的代码,通过“xlsread”函数,读取’输入_系统参数.xlsx’文件中的数据到变量“data_i”。'输入_系统参数.xlsx’文件位于例程文件夹下,主要保存有要用到的各类参数,如图5.9.22所示:

在这里插入图片描述

图5.9.22

  • 行5~6
    将第2行第4列的数据赋值给“Ts变量”,将第3行第4列的数据赋值给“t”变量。两个数据在Excel中的位置如图5.9.22所示。其它文件中对参数的初始化与之类似。

2)C_Cascade_PID.m 文件

%% 四旋翼 串级PID 控制器
% 输入:
%   s_A.y   角度系统的输出
%
% 输出
%   s_mot.u_all   四个电机的功率

%% 

if init == 0    %未初始化
    % 以下各变量是行数为 2 的矩阵,分别与y轴角度(Ay)、角速度(Wy)相关
    s_pid.d = data_i(26:27, 4);       %串级PID期望,y轴角度、角速度,单位:deg、deg/s
    s_pid.d = s_pid.d *pi/180;        %转化单位为弧度
    s_pid.K_pid = data_i(14:15, 4:6);    %PID参数 
 
    s_pid.e_last = zeros(2, 1);
    s_pid.Ei = zeros(2, 1);
    s_pid.y = zeros(2, 1);
    
    % PID输出转电机功率 矩阵
    s_pid.Out_M = [ -1  -1  1  1;
                    -1   1 -1  1;
                     1  -1 -1  1;
                     1   1  1  1;];      % PID输出转电机功率 矩阵     
       
else            %进行控制    
    % 角度环
    s_pid.e(1) = s_pid.d(1) - s_A.y(1, 1);     %角度 期望与测量误差  
    [s_pid.y(1), s_pid.Ei(1)] = C_PID(Ts, s_pid.K_pid(1, :), s_pid.e(1), s_pid.e_last(1), s_pid.Ei(1));
    s_pid.e_last(1) = s_pid.e(1);     %保存本次误差
    
    % 角速度环
    s_pid.e(2) = ( s_pid.d(2) + s_pid.y(1) ) - s_A.y(2, 1);     %角速度 期望与测量误差  
%     s_pid.e(2) = ( s_pid.d(2) ) - s_A.y(2, 1);
    [s_pid.y(2), s_pid.Ei(2)] = C_PID(Ts, s_pid.K_pid(2, :), s_pid.e(2), s_pid.e_last(2), s_pid.Ei(2));
    s_pid.e_last(2) = s_pid.e(2);     %保存本次误差
    
    
    % PID输出转化为各电机功率
    s_pid.PID_out = [s_pid.y(2) 0 0 500]';        %x、y、z三轴角速度环输出、z轴速度环输出
    s_mot.u_all = s_pid.Out_M*s_pid.PID_out;      %PID输出 转 电机控制功率
    
    % 电机功率限幅
    s_mot.u_all = min(s_mot.u_all, s_mot.u_max);
    s_mot.u_all = max(s_mot.u_all, 0);
end

  • 行11~18
    将读取到的Excel数据,赋值给s_pid变量下对应的子元素变量。
  • 行28~36
    为串级PID实际运行的部分。其中行2829与式(5.9.28.b)、(5.9.28.c)对应;行3335与式(5.9.38.d)~(5.9.38.e)对应。
  • 行40
    将角速度环PID的输出作为串级PID的总输出控制量。

   例程其它部分基本与之前例程相同。

(5)运行与调试

   本小节例程可以通过“输入_系统参数.xlsx”文件,直接修改系统的参数。除硬件参数外有这样几个比较重要的仿真参数:

  • 1)串级PID参数,位于行14~15,其中行14为角度环PID,行15为角速度环PID,如图5.9.23:
    在这里插入图片描述

    图 5.9.23

  • 2)串级PID期望,位于行26~27,分别为角度、角速度期望,如图5.9.24:
    在这里插入图片描述

    图 5.9.24

   双击进入“A1_main.mlx”文件,点击上方“实时编辑器”中的“运行”按钮即可运行例程。运行结果如图5.9.23所示,可以发现经过串级PID控制,在1.5秒后四旋转子的角度与角速度都已经接近期望。

在这里插入图片描述

(a)
在这里插入图片描述

(b)

图 5.9.23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值