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

文章目录

  • 前言
  • 一、理论部分
  • 二、编写C程序
  • 三、验证


前言

在数字控制系统中使用PI控制器,需要对模拟PI控制器离散化,得到数字PI控制器。
本文用MATLAB s函数构建了增量式PI控制器,并在Simulink搭建Boost电压单闭环电路,通过与模拟PI控制器对比,验证增量式PI控制器。


一、理论部分

采样频率Tsam相当于DSP的主频。当采样时间Tsam足够小,即采样频率足够高时(后文将验证不同采样频率下,数字pi控制器逼近模拟pi控制器的程度)
MATLABs函数构建增量式PI控制器(文末有仿真模型及C代码)_第1张图片

二、编写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、电路模型
MATLABs函数构建增量式PI控制器(文末有仿真模型及C代码)_第2张图片
3.2、控制器占空比输出波形
MATLABs函数构建增量式PI控制器(文末有仿真模型及C代码)_第3张图片
增量式PI控制器与模拟PI控制器非常逼近。
当采样频率越高,曲线拟合程度越高。本例,将采样频率提高100倍,波形如下
MATLABs函数构建增量式PI控制器(文末有仿真模型及C代码)_第4张图片
boost电路输出电压波形
MATLABs函数构建增量式PI控制器(文末有仿真模型及C代码)_第5张图片

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

如需下载仿真模型和C代码,请点击下方链接
Boost电压单闭环仿真模型
MATLAB增量式PI控制器s函数(C代码)

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

你可能感兴趣的:(matlab)