void pid_Cal(void)
{
//float index = 0; IncPid * p = NULL;
p = &g_PID_Inc; p->SetVal = sys_para.given_temp; p->ActualVal = g_pt100.f_real_value;
p->err = p->SetVal - p->ActualVal; if(work_temp_phase == work_phase_43C_level)
{
if(FAN_Speed_Status == FAN_Speed_LOW)
{
if(fabs(p->err) >= 6.0f)
{
p->Kp = 0; //0.45 p->Ki = 0.4; //0.05 p->Kd = 0;
}
else
{
p->Kp = 1.8; //0.4 0.475 p->Ki = 0.4; //0.05 0.07 p->Kd = 0; //0.2
}
}
else if(FAN_Speed_Status == FAN_Speed_HIGH)
{
if(fabs(p->err) >= 6.0f)
{
p->Kp = 0; //0.45 p->Ki = 0.4; //0.05 p->Kd = 0;
}
else
{
p->Kp = 1.75; //0.4 0.475 p->Ki = 0.38; //0.05 0.07 p->Kd = 0; //0.2
}
}
}
else if(work_temp_phase == work_phase_38C_level)
{
if(FAN_Speed_Status == FAN_Speed_LOW)
{
if(fabs(p->err) >= 6.0f)
{
p->Kp = 0; //0.45 p->Ki = 0.4; //0.05 p->Kd = 0;
}
else
{
p->Kp = 1.8; //0.4 0.475 p->Ki = 0.4; //0.05 0.07 p->Kd = 0; //0.2
}
}
else if(FAN_Speed_Status == FAN_Speed_HIGH)
{
if(fabs(p->err) >= 6.0f)
{
p->Kp = 0; //0.45 p->Ki = 0.4; //0.05 p->Kd = 0;
}
else
{
p->Kp = 1.75; //0.4 0.475 p->Ki = 0.38; //0.05 0.07 p->Kd = 0; //0.2
}
}
}
else if(work_temp_phase == work_phase_32C_level)
{
if(FAN_Speed_Status == FAN_Speed_LOW)
{
if(fabs(p->err) >= 6.0f)
{
p->Kp = 0; //0.45 p->Ki = 0.4; //0.05 p->Kd = 0;
}
else
{
p->Kp = 1.8; //0.4 0.475 p->Ki = 0.4; //0.05 0.07 p->Kd = 0; //0.2
}
}
else if(FAN_Speed_Status == FAN_Speed_HIGH)
{
if(fabs(p->err) >= 6.0f)
{
p->Kp = 0; //0.45 p->Ki = 0.4; //0.05 p->Kd = 0;
}
else
{
p->Kp = 1.75; //0.4 0.475 p->Ki = 0.38; //0.05 0.07 p->Kd = 0; //0.2
}
} } p->IncrementVal = (p->Kp * (p->err - p->err_next))
+ (p->Ki * p->err)
+ (p->Kd * (p->err - 2 * p->err_next + p->err_last)); p->err_last = p->err_next;
p->err_next = p->err;
}

 可以看出,首先调整的是P控制,代码中为Ki,因为增量式pid的ki参数相当于位置式的p比例控制,所以首先调整ki,是的温度出现震荡,然后添加kp(位置式的d微分控制),这样就可以使系统稳定。

同时,也是用了微分分离的思想,就是温差比较大的时候,不要微控制,即kp=0;(kp=kd,即取消微分)到了一定稳定范围了,才使用pd控制。

总结:温度控制当中,其实有增量式和位置式两种方式来整定的,各有好处。

增量式基本上就是pd控制,另外一个参数基本上用不到,无积分分量

位置式pid就是真正的pid了。

数字pid笔记(2)的更多相关文章

  1. 数字pid笔记(1)

    针对stm32中可以如下实现: p->IncrementVal = (p->Kp * (p->err - p->err_next)) + (p->Ki * p->e ...

  2. 数字PID控制算法

    增量式PID控制算法 量式PID控制算法 2009-07-18 10:33 (转载 出处blog.ednchina.com/tengjingshu )blog.ednchina.com/tengjin ...

  3. 数字图像处理笔记与体会(一)——matlab编程基础

    最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了. 复习一下: 1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示 ...

  4. MATLAB-离散系统的数字PID控制仿真

    %PID Controller clear all; close all; ts=0.001; %采样时间=0.001s  sys=tf(,]); %建立被控对象传递函数 dsys=c2d(sys,t ...

  5. QT 数字图像处理 笔记一

    1.被有符号整数和无符号整数十足的坑了一上午.我在实现图像旋转的时候先把坐标轴中心平移到图像中心:painter.translate(up_x+temp_w,up_y+temp_h);注意这里面各个数 ...

  6. PID控制器的数字实现及C语法讲解

    PID控制器的数字实现及C语法讲解 概述 为方便学习与交流,根据自己的理解与经验写了这份教程,有错误之处请各位读者予以指出,具体包含以下三部分内容: (1)  PID数字化的推导过程(实质:微积分的近 ...

  7. PID控制器开发笔记之十一:专家PID控制器的实现

    前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...

  8. PID算法控制直流电机笔记

    1.将偏差的比例.积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器.简单说就是根据系统的误差,利用比例.积分.微分计算出控制量进行控制. 2.为什么需要P ...

  9. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

随机推荐

  1. SQLSever--基础学习--创建登录用户&创建数据库用户&分配权限

    如题,本文简记一下SQL Sever里面登录用户(login)的创建,数据库用户(DBUser)的创建,以及给数据库用户分配权限(Grant). 数据库有三层保护机制: 第一层:登录用户以及登录密码的 ...

  2. yii2中 选择布局的方式,可以设置不使用布局

    ###yii2中 选择布局的方式,可以设置不使用布局 控制器内成员变量 public $layout = false; //不使用布局 public $layout = "main" ...

  3. jenkins sonarqube 代码检测部署

    install pgsql and sonarqube docker run --name postgresqldb -e POSTGRES_USER=sonar -e POSTGRES_PASSWO ...

  4. 强类型c语言 类型

    C 语言是一门强类型的语言,类型决定语言的特性,允许在相同类型进行运算. *强类型语言的特点:      1      先声明,后使用. 2      类型不可变. * 基本数据类型 * 数据类型的范 ...

  5. Swarm系列7--存储介绍

    存储介绍 1. 存储使用 与docker一样,在使用swarm服务级别的时候可以定义服务的存储需求, docker存储介绍参考: Docker之应用数据管理(volume/bind mount/tmp ...

  6. js对象 c#对象转换

    前台页面 js 创建对象 let t = {}; 数组对象 let c = []; c.push({}) ;// 添加对象 以string格式 传递 JSON JSON.stringify(c); c ...

  7. shell脚本使用记录

    一些比较功能需求比较简单的可以考虑使用shell脚本来写,这样可以方便快捷稳定 1. 读取文件值,根据文件值1 或 0 来开启和关闭某些程序 a.  while : do done 是无限循环. b. ...

  8. 编译openwrt backfire过程中出现的问题

    参考的步骤如链接: http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=124604 在make menuconfig的时候出 ...

  9. Eureka服务注册于发现之Client搭建

    Eureka在Server端的搭建已经有很多介绍的文章,同时也是学习Eureka的第一步. 搭建好注册中心后怎么进行服务注册和服务调用,是我们要讲的主要内容. 开发环境:IDEA2018.3+Spri ...

  10. MUI顶部导航布局

    一.头部 核心css mui-bar mui-bar-nav <header class="mui-bar mui-bar-nav"> <a class=&quo ...