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. 学习笔记:oracle之win10安装卸载oracle 11gR2步骤及常见问题解决

    1.win10下安装oracle11g 1.1 工具原料 oracle11g安装包(64位) 1.2 步骤方法 1.在Oracle官网下载安装包,下载后,得到的文件如图所示: 2.将两个文件进行解压缩 ...

  2. redis事务、并发及应用场景

    目录 事务概念 事务命令 乐观锁 悲观锁 并发控制及过期时间 队列 队列防丢失 阻塞队列 时间区间控制 持久化 RDB AOF 命令追加 文件写入.同步 RDB.AOF优缺点 RDB优缺 AOF优缺 ...

  3. navicat-use

    https://blog.csdn.net/weixin_44496987/article/details/87186071

  4. web 系统发展历程

    文章目录 web系统的发展历程 ------- **单机`mysql`的美好年代** ------ **Memcached(缓存)+Mysql+垂直拆分** ------ **mysql 主从读写分离 ...

  5. C语言细节

    一些常见细节 int *p[]和 int (*p)[] 的区别 int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了. int (*p)[4 ...

  6. RecursiveSequence(HDU-5950)【矩阵快速幂】

    题目链接: 题意:Si=S(i-1)+2*S(i-2)+i^4,求Sn. 思路:想到了矩阵快速幂,实在没想出来怎么构造矩阵.... 首先构造一个向量vec={a,b,16,8,4,2,1}. 在构造求 ...

  7. asp.net MVC 异步分页 PagedList

    最近做一个项目要有的异步分页,先记录下来! 引用: PagedList.css MvcPager.js <link href="~/css/sweetalert2.min.css&qu ...

  8. 如何将Linux的工程原封不动地移植到Windows上面

    习惯在Linux下进行开发.但是由于工作需要,不得不与其他使用Windows的项目组同事对接,同事要求我给出可用的程序,而我只有基于makefile的传统工程. 改动到VS工程上发现一部分头文件在Wi ...

  9. [Office 365] Office 365与Visio 2013/2016兼容性测试

                  Visio Professional 2013 (x64) - (Chinese-Simplified) 详细信息 文件名 cn_visio_professional_20 ...

  10. Redis 简单使用 and 连接池(python)

    Redis 简介 NoSQL(not only sql):非关系型数据库 支持 key-value,  list,  set,  zset,  hash 等数据结构的存储:支持主从数据备份,集群:支持 ...