温控仪C语言程序,(转载)温控器PID算法的实现(C语言),未实验
硬件原理:加热电阻为400,电源为市电,固态继电器控制通断,并提取市电的过零信号,单片机采用mega48,继电器通断最小时间为10ms,通断PWM的周期为100个过零信号.
本程序采用绝对式PID算法,当温度相差很多时,采用P算法(比例算法),当到达设定温度时,采用PID算法,实际实用稳定性还可以,上下波动在0.5度以内.
#include
#include "PID.h"
//static PID sPID;
//static PID *sptr=&sPID;
TADD Tadd1;
TADD Tadd2;
void IncPIDInit(PID *sptr)
{
sptr->SumError=0;
sptr->LastError=0;
sptr->PrevError=0;
//sptr->Proportion = 900;
//sptr->Integral=20;
//sptr->Derivative = 2;
//sptr->SetPoint = 0;
}
typedef struct
{
int SetPoint; //设定目标值
int32_t SumError; //误差累计
//int Proportion;
//int Integral; //积分常数
//int Derivative; //微分常数
int LastError; //Error[-1]
int PrevError; //Error[-2]
}PID;
#define PID_Proportion 900 //比例常数
#define PID_Integral 20 //积分常数
#define PID_Derivative 2 //微分常数
#define PWM_T 100
#define MAX_T 80 //加热的最大温度
typedef struct
{
PID spid; //PID控制器
unsigned char pwm_H;//输出
unsigned char EnAdd;//加热使能
int real_T; //实际温度值
unsigned char Taddset[3]; //加热的设定温度
unsigned char set_NO; //加热的档数
unsigned char errorflg;
unsigned char addokflg;
}TADD;
void LocPIDCalc(TADD *sptr)
{
int iError,dError;
int32_t result;
iError = (sptr->spid.SetPoint*4) - (sptr->real_T/4);
//sptr->spid.LastError = iError;
if(iError>-2&&iError<4)
{
sptr->addokflg=1;
sptr->spid.SumError +=iError;
dError = iError-sptr->spid.LastError;
sptr->spid.LastError = iError;
result=(PID_Proportion * iError +
PID_Integral * sptr->spid.SumError +
PID_Derivative * dError)/20;
}
else
{
sptr->spid.SumError =0;
sptr->spid.LastError=0;
if(iError>0)
sptr->addokflg=0;
result=(PID_Proportion * iError)/20;
}
if(result>PWM_T)
result=PWM_T;
else if(result<0)
result=0;
if((sptr->real_T>>4)>MAX_T||sptr->errorflg==0)
result=0;
sptr->pwm_H=(unsigned char) result;
//return (unsigned char) result;
}
温控仪C语言程序,(转载)温控器PID算法的实现(C语言),未实验相关推荐
- pid温度控制c语言程序及仿真,pid算法温度控制c语言程序
描述 温度控制PID自整定原理介绍 整定PID(三模式)控制器 整定温度控制器涉及设置比例.积分和微分值,以得到对特定过 程的可能的最佳控制.如果控制器不包含自动整定算法,或者自 动整定算法未提供适合 ...
- 查找算法的实现c语言,查找算法的实现(C语言版)
<查找算法的实现(C语言版)>由会员分享,可在线阅读,更多相关<查找算法的实现(C语言版)(6页珍藏版)>请在人人文库网上搜索. 1.芬梨受交峙东喊济雏狈违晕裂赵檀芬逛温乌摄阿 ...
- DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc
单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...
- c语言程序位置式pid算法,位置式PID算法的C语言代码
描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...
- 坐标反算c语言程序,道路坐标正反算无限个拐点计算器测量程序(新20070825)
<道路坐标正反算无限个拐点计算器测量程序(新20070825)>由会员分享,可在线阅读,更多相关<道路坐标正反算无限个拐点计算器测量程序(新20070825)(10页珍藏版)> ...
- c语言程序竞赛,2015年江西理工大学C语言程序设计竞赛(初级组)
JankTao相亲记 解法:排序 #include #include #include #include #include #include #include #include using names ...
- 插补c语言程序,逐点比较法插补C语言程序
<逐点比较法插补C语言程序>由会员分享,可在线阅读,更多相关<逐点比较法插补C语言程序(6页珍藏版)>请在人人文库网上搜索. 1.该函数在VC+6.0下编译测试通过,可实现直线 ...
- c语言程序和数据是可执行,C语言学习笔记(C编程-Tan Haoqiang)
计算机程序: 计算机可以识别和执行的一组指令. 计算机的每项操作均按照说明进行谭浩强c语言程序设计课件f,计算机的所有操作均由程序控制. 计算机指令: 指导机器工作的指令和命令. The 指令包含一个 ...
- c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析
1. 引言 C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据.C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现.有些程序虽然调试成功 ...
最新文章
- 玩转高性能超猛防火墙nf-HiPAC
- c++ socket 结构体
- Itext实现导出PDF常用方法说明
- SpringMVC的数据响应方式
- Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法
- R开发(part12)--基于RC的面向对象编程
- php发送数据到视图格式_PHP-FPM的相关知识的深度解释
- mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel
- 存储相关知识-DAS/SAN/NAS
- python+selenium自动化driver.switch_to.frame用法
- 让px单位自动转换为rem的方法
- iOS 混合开发 —— 方案分析
- HBase BulkLoad批量写入数据实战
- chapter2 基因组学
- 通用微PE工具箱下载_通用微PE使用教图文程
- ssm和springboot的区别
- 假如我年少有为不自卑
- android 各个版本的发布时间和信息
- 网络蛋白质组学在计算机中应用,蛋白质组学及其相关技术在运动人体科学中的应用...
- 测试4年裸辞失业,面试17k的测试岗被按在地上摩擦,结局让我崩溃大哭...
热门文章
- 【旧文章搬运】PE感染逆向之修复(Serverx.exe专杀工具出炉手记)
- 小码哥-玩转【斗鱼直播APP】系列之获取APP图片资源
- 金蝶K3 WISE 12.1在Windows 2008 R2虚拟机服务器上的配置
- mac 查询端口被哪个进程占用
- 企业微信公众号如何调用视频列表(视频专辑)
- OLSR协议详解(1)
- php bouncy castle,java-错误,包括Bouncycastle提供程序
- 记忆计算机课,记忆人脑就计算机课件.ppt
- 深入理解异步I/O+epoll+协程,附上epoll原理解析以及协程现实与原理剖析视频
- 论文浅尝 - ESWC2020 | YAGO 4: A Reason-able Knowledge Base