以下代码基于STM32

PID温度算法_PWM控制

/**
  ******************************************************************************

******************************************************************************
  */

#include "bsp_lm35d.h"

extern __IO uint16_t ADC_ConvertedValue;
PID_Float mPIDstruct;

/*
 * 函数名:TempratureCtrl_GPIO_Config
 * 描述  :配置温度控制用到的I/O口
 * 输入  :无
 * 输出  :无
 */
void TempratureCtrl_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(TEMPCTRL_CLK,ENABLE);
/* DS18B20 GPIO config */
/* Configure DS18B20 Dout (PA.0) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = TEMPCTRL_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(TEMPCTRL_PORT, &GPIO_InitStructure);
//设置初始状态拉高
GPIO_SetBits(TEMPCTRL_PORT, TEMPCTRL_PIN);
}

/*
 * 温度范围0-100℃,电压每提高10mV温度升高1摄氏度
 * 
 * 温度 = ADC_ConvertedValue/4096*3.3v/(10/1000)v*1 = ADC_ConvertedValue * 0.08056640625
 */
float LM35D_Get_Temp(void)
{
return (ADC_ConvertedValue * 0.08056640625);
}

/******************************************************************** 
函 数 名:void Init_PID_uint(PID_uint *p)
功    能:初始化PID参数
说    明:调用本函数之前,应该先对Kp,Ti,Td做设置        ,简化了公式  
入口参数:PID单元的参数结构体 地址
返 回 值:无
***********************************************************************/
void Init_PID_uint(PID_Float *p)
{
        p->k1=(p->Kp)+(p->Kp)*1024.0/(p->Ti)+(p->Kp)*(p->Td)/1024.0;
        p->k2=(p->Kp)+2*(p->Kp)*(p->Td)/1024.0;
        p->k3=(p->Kp)*(p->Td)/1024.0;
}

/******************************************************************** 
函 数 名:void reset_Uk(PID_Uint *p)
功    能:初始化U_kk,ekk,ekkk
说    明:在初始化时调用,改变PID参数时有可能需要调用      
入口参数:PID单元的参数结构体 地址
返 回 值:无
***********************************************************************/
void reset_Uk(PID_Float *p)
{
        p->U_kk=0;
        p->ekk=0;
        p->ekkk=0;
}
/******************************************************************** 
函 数 名:void SetPIDProperty(float ur,float kp,float ti,float td,float un,PID_Float *p)
功    能:初始化U_kk,ekk,ekkk
说    明:在初始化时调用,改变PID参数时有可能需要调用
入口参数:PID单元的参数结构体 地址
返 回 值:无
***********************************************************************/
void SetPIDProperty(float ur,float kp,float ti,float td,float un)
{
mPIDstruct.Ur = ur;//限幅输出值
mPIDstruct.Kp = kp;//比例,从小往大调
mPIDstruct.Ti = ti;//积分,从大往小调
mPIDstruct.Td = td;//微分
mPIDstruct.Un = un;//不灵敏区 
reset_Uk(&mPIDstruct);
Init_PID_uint(&mPIDstruct);
}

/******************************************************************** 
函 数 名:int PID_commen(int set,int jiance,PID_Uint *p)
功    能:通用PID函数
说    明:求任意单个PID的控制量
入口参数:期望值,实测值,PID单元结构体
返 回 值:PID控制量
***********************************************************************/
float PID_common(float set,float jiance)
{
float ek,U_k=0;
ek = set - jiance;

if((ek>(mPIDstruct.Un))||(ek<-(mPIDstruct.Un)))                //积分不灵敏区
U_k=(mPIDstruct.U_kk)+(mPIDstruct.k1)*ek-(mPIDstruct.k2)*(mPIDstruct.ekk)+(mPIDstruct.k3)*(mPIDstruct.ekkk);
if(U_k>(mPIDstruct.Ur))                                        //限制最大输出量,
U_k=mPIDstruct.Ur;
if(U_k<-(mPIDstruct.Ur))
U_k=-(mPIDstruct.Ur);   
mPIDstruct.U_kk=U_k;
#ifdef __DEBUG_XB__
printf("mPIDstruct.U_kk = %f\r\n",mPIDstruct.U_kk);
#endif
mPIDstruct.ekkk=mPIDstruct.ekk;
mPIDstruct.ekk=ek;
     
return U_k/1024.0; 
}

void TempratureCtrl_Init(void)
{
if(savedata.TempraSet < 20.0 || savedata.TempraSet > 50.0) savedata.TempraSet = 37.5;
SetPIDProperty(10000.0,0.5,0.15,5.15,0.2); //配置温度控制PID算法参数
}

/******************************************************************** 
函 数 名:float TempFilter(float prev,float current)
功    能:简单的滤波
说    明:
入口参数:prev 上一次的滤波结果 current 当前检测值
返 回 值:通过滤波后的值
***********************************************************************/
float TempFilter(float prev,float current)
{
return (current - 0.2*(current - prev));
}

/*************************************END OF FILE******************************/

PID算法-温度控制相关推荐

  1. 小型温控系统c语言程序,pid算法温度控制c语言程序 - 全文

    温度控制PID自整定原理介绍 整定PID(三模式)控制器 整定温度控制器涉及设置比例.积分和微分值,以得到对特定过 程的可能的最佳控制.如果控制器不包含自动整定算法,或者自 动整定算法未提供适合特定应 ...

  2. pid温度控制c语言程序及仿真,pid算法温度控制c语言程序

    描述 温度控制PID自整定原理介绍 整定PID(三模式)控制器 整定温度控制器涉及设置比例.积分和微分值,以得到对特定过 程的可能的最佳控制.如果控制器不包含自动整定算法,或者自 动整定算法未提供适合 ...

  3. pid matlab 温度控制,温控PID算法的具体实现(一)

    经过本人发表的上一篇文章<几种温度算法的比较与总结>可知,分段式PID算法既可以提高温控系统的响应速度,又可以提高温控系统的控温精度,现将以增量式PID算法为例总结一下其具体的实现步骤或过 ...

  4. pid温度控制c语言程序及仿真,温度控制PID算法的C语言程序实例代码

    //PID算法温控C语言 #include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired ...

  5. c语言程序位置式pid算法,位置式PID算法的C语言代码

    描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...

  6. 基于bp神经网络的pid算法,神经网络pid控制器设计

    基于BP神经网络的PID控制器设计 参考一下刘金琨的<先进PID控制>这本书. 例子:被控对象yout(k)=a(k)yout(k-1)/(1+yout(k-1)^2)+u(k_1)其中a ...

  7. stm32直流电机控制—PID算法篇

    stm32直流电机控制-PID算法篇 一.常用的控制算法 1.控制系统的基本结构: 2.常用控制算法:位式控制 ①二位式控制算法 ②.具有回差的二位式控制算法 ③三位式控制算法 ④小结 二.PID控制 ...

  8. 干货 | PID算法在广告成本控制领域的应用

    作者简介 Jason Pei,携程高级算法工程师,对计算广告.推荐系统.NLP等领域有浓厚兴趣. 一.背景介绍 在商品服务高度发达,信息爆炸的市场经济体制下,企业之间的竞争日益激烈,广告作为一种重要的 ...

  9. 控制算法-PID算法总结-从公式原理到参数整定解析(附C源码)

    目录 一.控制系统 1.1控制系统的分类 1.2 性能指标 二.PID算法的起源及特点 三.PID应用 四.PID公式原理 五.PID源码 六.PID整定方法 6.1 经验法 6.2 衰减曲线法 6. ...

最新文章

  1. 微信 php 接口 函数,PHP的json_encode函数应用到微信接口有关问题(include \uxxxx will create fail)...
  2. Spark编程指南笔记
  3. 051_原码反码补码概念
  4. 自训练 + 预训练 = 更好的自然语言理解模型
  5. 用姓名字段统计人数_2019年度全国各地姓名报告分析汇总(全国、深圳、佛山、杭州)...
  6. ARouter源码探究
  7. mysql有没有num_mysql_num_rows()函数
  8. 微软商业智能BI知识整合篇-五大工具产品系列文章
  9. 2015 UESTC Winter Training #6【Regionals 2010 North America - Rocky Mountain】
  10. 语音识别软件哪个好?好用的语音识别软件盘点
  11. 关于西门子STEP7 在Windows10安装的一些心得
  12. PHP多功能自动发卡平台源码+带WAP端/多套模板
  13. 立创EDA学习笔记(2)——创建元件符号
  14. latex奇偶页使用不同的页眉
  15. Latex常见数学符号写法
  16. Redis中使用Lua脚本(续)- Linux下Lua-cjson开源库的安装和使用
  17. 网络安全用什么编程语言_网络安全的5种最佳编程语言
  18. Kotlin学习笔记(八)by的作用,属性委托和类的委托,和Lazy的关系
  19. JAVA学习之路:不走弯路,就是捷径(一)
  20. 高频小信号谐振放大器【Multisim】【高频电子线路】

热门文章

  1. Codeforces Round #144 (Div. 2) B. Non-square Equation 数学解一元二次方程+分析
  2. Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室
  3. mx:button加skin光晕点击时,大小不一样
  4. MTK+Android编译
  5. WINCE设备开机灰屏问题(很怪异)
  6. python爬虫可以爬哪些山_从python爬虫,到更爱这个世界
  7. 教你打造千万用户的海量视频网站、保卫云端安全!
  8. cocos中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)
  9. Lucene 学习笔记(一)
  10. python 批量下载文件