MATLABs函数构建增量式PI控制器(文末有仿真模型及C代码)

  • Post author:
  • Post category:其他





前言

在数字控制系统中使用PI控制器,需要对模拟PI控制器离散化,得到数字PI控制器。

本文用MATLAB s函数构建了增量式PI控制器,并在Simulink搭建Boost电压单闭环电路,通过与模拟PI控制器对比,验证增量式PI控制器。




一、理论部分

采样频率Tsam相当于DSP的主频。当采样时间Tsam足够小,即采样频率足够高时(后文将验证不同采样频率下,数字pi控制器逼近模拟pi控制器的程度)

在这里插入图片描述



二、编写C程序

这里对用c语言编写增量式PI控制器s-function的关键部分进行介绍。

2.1、定义变量

这里定义了一个名为PI的结构体。

struct P
{
 float kp; 
 float ki;
 float PrU;//pi控制器上一次输出值
 float PrE;//pi控制器上一次误差
 float Tsam;//pi控制器采样时间
 float U;//pi控制器输出值(占空比)
 float E;//pi控制器输入值(误差)
 float IntVar;//中间变量(用于暂时存储输出值)
}PI;

2.2、初始化

mdlInitializeConditions是初始化程序,对PI控制器参数进行初始化赋值。

 static void mdlInitializeConditions(SimStruct *S)
  {
      PI.kp=0.00002;
      PI.ki=3;
      PI.Tsam=6.25e-6;//采样时间
      PI.PrE=0;
      PI.PrU=0;
  }

2.3、关键程序

static void mdlOutputs(SimStruct *S, int_T tid)
{
    const real_T *u = (const real_T*) ssGetInputPortSignal(S,0);
    real_T       *y = ssGetOutputPortSignal(S,0);
    PI.E=u[0];//接收输入数据
    PI.IntVar=PI.PrU+PI.kp*(PI.E-PI.PrE)+PI.ki*PI.Tsam*PI.E;//增量式PI控制器算法
    y[0]=PI.IntVar;//将计算结果传递给输出y[0]
    PI.PrU=PI.IntVar;//将本次输出结果赋值给上一次输出
    PI.PrE=PI.E;//将本次误差赋值给上一次误差
}



三、验证

验证思路:在MATLAB Simulink搭建Boost电路,然后用模拟PI控制器和增量式PI控制器分别对相同的Boost电路进行电压单闭环控制,对比控制器输出占空比波形是否吻合。

3.1、电路模型

在这里插入图片描述

3.2、控制器占空比输出波形

在这里插入图片描述

增量式PI控制器与模拟PI控制器非常逼近。

当采样频率越高,曲线拟合程度越高。本例,将采样频率提高100倍,波形如下

在这里插入图片描述

boost电路输出电压波形

在这里插入图片描述

后续还会更新相关文章,如果这篇文章对你有帮助,点个小小关注~

如需下载仿真模型和C代码,请点击下方链接


Boost电压单闭环仿真模型



MATLAB增量式PI控制器s函数(C代码)

小提示:MATLAB执行C程序需要编译器,若没有,需要在MATLAB安装附加功能那里安装插件(MATLAB Support for MinGW-w64 C/C++ Compiler)。



版权声明:本文为Jaspercai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。