数字pid笔记(2)
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)的更多相关文章
- 数字pid笔记(1)
针对stm32中可以如下实现: p->IncrementVal = (p->Kp * (p->err - p->err_next)) + (p->Ki * p->e ...
- 数字PID控制算法
增量式PID控制算法 量式PID控制算法 2009-07-18 10:33 (转载 出处blog.ednchina.com/tengjingshu )blog.ednchina.com/tengjin ...
- 数字图像处理笔记与体会(一)——matlab编程基础
最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了. 复习一下: 1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示 ...
- MATLAB-离散系统的数字PID控制仿真
%PID Controller clear all; close all; ts=0.001; %采样时间=0.001s sys=tf(,]); %建立被控对象传递函数 dsys=c2d(sys,t ...
- QT 数字图像处理 笔记一
1.被有符号整数和无符号整数十足的坑了一上午.我在实现图像旋转的时候先把坐标轴中心平移到图像中心:painter.translate(up_x+temp_w,up_y+temp_h);注意这里面各个数 ...
- PID控制器的数字实现及C语法讲解
PID控制器的数字实现及C语法讲解 概述 为方便学习与交流,根据自己的理解与经验写了这份教程,有错误之处请各位读者予以指出,具体包含以下三部分内容: (1) PID数字化的推导过程(实质:微积分的近 ...
- PID控制器开发笔记之十一:专家PID控制器的实现
前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...
- PID算法控制直流电机笔记
1.将偏差的比例.积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器.简单说就是根据系统的误差,利用比例.积分.微分计算出控制量进行控制. 2.为什么需要P ...
- Android:日常学习笔记(10)———使用LitePal操作数据库
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...
随机推荐
- Is Graph Bipartite?
Given an undirected graph, return true if and only if it is bipartite. Recall that a graph is bipart ...
- [转帖]新手必读,16个概念入门 Kubernetes
新手必读,16个概念入门 Kubernetes https://www.kubernetes.org.cn/5906.html 2019-09-29 22:13 中文社区 分类:Kubernetes教 ...
- [转帖]为微软效力15年的微软前员工解释Windows 10为什么问题这么多
为微软效力15年的微软前员工解释Windows 10为什么问题这么多 https://www.cnbeta.com/articles/tech/892109.htm . 测试团队已经被裁撤 . 自动化 ...
- 《Mysql 事务 - 隔离》
一:事务概念 - ACID(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性) 二:事务产生的问题 - 多个事务同时执行的时候 ...
- 【牛客网】Finding Hotel
[牛客网]Finding Hotel 忘记K远点对的剪枝的我有点自闭 事实上我们只要先建一棵KD树出来,维护一下所在的矩形,和子树里的最小值 每次查询的时候如果最小值比查询的值要大的话就退出 当前的答 ...
- python day1 (afternoon)购物清单
购物清单 #顾客给出余额 #给出商品清单 #顾客挑选商品 #给出购物清单 代码: #!/usr/bin/env python#-*- coding:utf-8 -*- salary = int(inp ...
- Python习题006
作业一:打印10*10 星星 ★☆ 要求一:普通打印★ l = 0 while l <10: h = 0 while h < 9: print("★", end=&q ...
- df执行hang住
一.现象 在linux操作系统中,执行df -h命令,后hang住 二.思路 排查是否存在Nfs问题,无法正常挂载nfs路径导致的问题. 三.解决过程 3.1 cat /etc/rc.local #m ...
- 取代Ajax.BeginForm的ajax使用方法
原文:取代Ajax.BeginForm的ajax使用方法 一.前提概要 Asp.net core中已经取消了Ajax.BeginForm,也不会计划出ajax tag helper,所以得利用插件jq ...
- Spring Boot 使用 @Scheduled 注解创建定时任务
在项目开发中我们经常需要一些定时任务来处理一些特殊的任务,比如定时检查订单的状态.定时同步数据等等. 在 Spring Boot 中使用 @Scheduled 注解创建定时任务非常简单,只需要两步操作 ...