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. zabbix 部署包安装

      关于zabbix的安装方式,官网提供了几种方法,分别是:部署包安装.源码安装.容器安装.容器安装我之前已经写过一篇,而现在这一篇是关于部署包安装的.   按照官网的说法,我们需要如下几个步骤:   ...

  2. 乐字节Java构造器(构造方法|构造函数)、方法与内存分析

    一. 构造器(构造方法|构造函数) 在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的.这个方法称为“构造器” 使用 new + 构造方法创建一个新的对象. 构造 ...

  3. 如何使用U盘给电脑安装CentOS系统

    准备工具:1.8G左右U盘;2.最新版UltraISO;3.CentOS ISO镜像; 上面的步骤做好之后就是将镜像刻录到U盘中,这里跟Windows系统刻录U盘的步骤是一样的,就不再多赘述了. 假如 ...

  4. JS 通过注册表调用启动本地软件

    (关键点:所有软件安装的注册表路径是不会变化的,这个注册表路径需沟通软件商家获取或者通过自己安装在注册表中查找得到) // 调用 注册表编辑类 方法 function run_jxpgj(){//进项 ...

  5. 多文件上传,添加重复文件时无法触发onchange事件。

    <input type="file" id="upload" @change="getFile($event)" multiple=& ...

  6. Win10 自定义鼠标右键菜单

    1. 点击文件鼠标右键显示软件 1.1 步骤 win+R输入regedit进入注册表 定位到HKEY_CLASSES_ROOT\*\shell下 在shell创建一个你想要的右键文件 例如:Kinok ...

  7. Python--时间模块time模块

    原地址:https://finthon.com/python-time/ Python时间模块——time模块 简介 在数据处理当中,经常会碰到处理时间的问题.比如:在序列预测的过程中,需要通过学习一 ...

  8. golang字符串常用的系统函数

    1.统计字符串的长度,按字节len(str) str := "hello北京" fmt.Println("str len=", len(str)) 2.字符串遍 ...

  9. SpringBoot exception异常处理机制源码解析

    一.Spring Boot默认的异常处理机制 1:浏览器默认返回效果 2:原理解析 为了便于源码跟踪解析,在·Controller中手动设置异常. @RequestMapping(value=&quo ...

  10. redis哈希表数据类型键的设置

    命令名称:hset 语法:hset key field value 功能: 1)将哈希表key中的域field的值设为value. 2)如果key不存在,一个新的哈希表被创建并进行hset操作. 3) ...