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. 什么是HybridDB for MySQL (原PetaData)

    云数据库HybridDB for MySQL (原名PetaData)是同时支持海量数据在线事务(OLTP)和在线分析(OLAP)的HTAP(Hybrid Transaction/Analytical ...

  2. 程序计数器(关于java虚拟机内存的那些事)

    <深入理解java虚拟机> 读书感悟 作者:淮左白衣 --------------写于2018年4月9日17:44:48 关于java虚拟机内存的那些事之程序计数器 关于java虚拟机内存 ...

  3. Word F1~F12 功能快捷键用法大全

    F1:帮助 在Word中使用F1功能键,可以获取帮助. F2:移动文字或图形 F2按键可以移动文字和图形.选中文本,按下F2,然后将光标定位到你想移动到的地方,按下回车,即可移动. F3 :自动图文集 ...

  4. 题解 CF437C

    基本思路---贪心 既然要求最小代价,当用一定顺序删除时代价一定最小,不难发现,每次都删去x,y中最小的,最后的总代价业一定最小! 因此就可以写出下面的简单的代码 代码 #include<ios ...

  5. Vue中常用知识点demo

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  6. python学习-16 列表list

    list 1.由[ ]括住,中括号内各元素由逗号隔开,各元素可以是数字,字符串,列表,布尔值等等. 例如: li = [521,"love",["john",& ...

  7. python_openCV例程遇到error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale的简单解决方法

    需要把haar分类器训练的结果xml数据放在名为haarcascades的文件夹下进行调用. 将: face_cascade = cv2.CascadeClassifier('haarcascade_ ...

  8. phc-winner-argon2、argon2-cffi安装使用方法

    Argon2 is a password-hashing function created by by Alex Biryukov, Daniel Dinu, and Dmitry Khovratov ...

  9. Qt中的常用容器类(解释比较全面,有插图)

    在Qt库中为我们提供了一系列的基于模板的容器类.这些类可以被用来存储特定类型的项.例如,如果你需要一个大小可以变得QString数组,那么可以使用QVector<QString>. 这些容 ...

  10. Windows下Notepad++连接VMWare中的linux,然后无法安装NppFTP

    一.关于Notepad++版本 我的版本是最新版本:Notepad++ v7.7 32bit 版本最好选择32bit的,看别处的说法是官网上有这样的说明: Note that the most of ...