日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PID算法-温度控制

發(fā)布時(shí)間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PID算法-温度控制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下代碼基于STM32


PID溫度算法_PWM控制

?/**
? ******************************************************************************


? ******************************************************************************
? */?


#include "bsp_lm35d.h"




extern __IO uint16_t ADC_ConvertedValue;
PID_Float mPIDstruct;


/*
?* 函數(shù)名: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);
//設(shè)置初始狀態(tài)拉高
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);
}






/********************************************************************?
函 數(shù) 名:void Init_PID_uint(PID_uint *p)
功 ? ?能:初始化PID參數(shù)
說 ? ?明:調(diào)用本函數(shù)之前,應(yīng)該先對Kp,Ti,Td做設(shè)置 ? ? ? ?,簡化了公式 ?
入口參數(shù):PID單元的參數(shù)結(jié)構(gòu)體 地址
返 回 值:無
***********************************************************************/
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;
}


/********************************************************************?
函 數(shù) 名:void reset_Uk(PID_Uint *p)
功 ? ?能:初始化U_kk,ekk,ekkk
說 ? ?明:在初始化時(shí)調(diào)用,改變PID參數(shù)時(shí)有可能需要調(diào)用 ? ? ?
入口參數(shù):PID單元的參數(shù)結(jié)構(gòu)體 地址
返 回 值:無
***********************************************************************/
void reset_Uk(PID_Float *p)
{
? ? ? ? p->U_kk=0;
? ? ? ? p->ekk=0;
? ? ? ? p->ekkk=0;
}
/********************************************************************?
函 數(shù) 名:void SetPIDProperty(float ur,float kp,float ti,float td,float un,PID_Float *p)
功 ? ?能:初始化U_kk,ekk,ekkk
說 ? ?明:在初始化時(shí)調(diào)用,改變PID參數(shù)時(shí)有可能需要調(diào)用
入口參數(shù):PID單元的參數(shù)結(jié)構(gòu)體 地址
返 回 值:無
***********************************************************************/
void SetPIDProperty(float ur,float kp,float ti,float td,float un)
{
mPIDstruct.Ur = ur;//限幅輸出值
mPIDstruct.Kp = kp;//比例,從小往大調(diào)
mPIDstruct.Ti = ti;//積分,從大往小調(diào)
mPIDstruct.Td = td;//微分
mPIDstruct.Un = un;//不靈敏區(qū)?
reset_Uk(&mPIDstruct);
Init_PID_uint(&mPIDstruct);
}


/********************************************************************?
函 數(shù) 名:int PID_commen(int set,int jiance,PID_Uint *p)
功 ? ?能:通用PID函數(shù)
說 ? ?明:求任意單個(gè)PID的控制量
入口參數(shù):期望值,實(shí)測值,PID單元結(jié)構(gòu)體
返 回 值:PID控制量
***********************************************************************/
float PID_common(float set,float jiance)
{
float ek,U_k=0;
ek = set - jiance;


if((ek>(mPIDstruct.Un))||(ek<-(mPIDstruct.Un))) ? ? ? ? ? ? ? ?//積分不靈敏區(qū)
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算法參數(shù)
}




/********************************************************************?
函 數(shù) 名:float TempFilter(float prev,float current)
功 ? ?能:簡單的濾波
說 ? ?明:
入口參數(shù):prev 上一次的濾波結(jié)果 current 當(dāng)前檢測值
返 回 值:通過濾波后的值
***********************************************************************/
float TempFilter(float prev,float current)
{
return (current - 0.2*(current - prev));
}






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



總結(jié)

以上是生活随笔為你收集整理的PID算法-温度控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区三区福利 | 久久精品午夜 | av丝袜天堂| 精品成人免费视频 | 潘金莲裸体一级淫片视频 | 亚洲蜜臀av乱码久久精品蜜桃 | 久久国产精品精品国产色婷婷 | 国产精品第72页 | 欧美日韩免费看 | 日韩黄色一级片 | 日本大胆人体视频 | 成人观看 | 国产不卡在线播放 | 天天色天天爱 | 91超碰在线播放 | 欧美日韩激情视频 | 黄页网站在线看 | 性猛交ⅹxxx富婆video | 亚洲国产综合在线 | 久久精品视频中文字幕 | 成人性做爰aaa片免费 | 人妻饥渴偷公乱中文字幕 | 99热精品在线播放 | 国产二区电影 | 亚洲中文字幕无码不卡电影 | 中国av在线播放 | 欧美激情三区 | 91在线精品一区二区 | 欧美十大老熟艳星 | 久久大奶 | 成人午夜av | 巨大黑人极品videos精品 | 亚洲黄在线 | 国产热热| 久久久久久久久久成人 | 中文字幕在线观看的网站 | 精品国产一区二区在线观看 | 爆操巨乳美女 | av激情在线 | 国产黄色视 | 欧美成人xxxx | 不卡av免费在线观看 | 偷偷操不一样的久久 | 精品香蕉一区二区三区 | 伊人天天干 | 干日本少妇| 国产精品久久久久久亚洲色 | freesexvideos第一次| 精品国偷自产一区二区三区 | 成人网站免费观看入口 | 91九色国产在线 | 亚洲天堂2021av | 草久影院| wwwav网站| 色播导航 | 91久久精品国产91性色tv | 佐佐木明希av在线 | av在线播放中文字幕 | 日本一区二区三区视频在线 | 97se亚洲国产综合在线 | 欧美成人国产 | 欧美日韩在线免费看 | 国产小视频在线看 | www.成人.com| 欧美日韩在线第一页 | xx在线视频 | 免费观看av的网站 | 天天操天天操天天操天天 | 波兰性xxxxx极品hd | 一级黄色短片 | 欧美精品久久久久久久久 | 91在线观 | 日本吃奶摸下激烈网站动漫 | 中文字幕在线观看一区二区三区 | 被灌满精子的波多野结衣 | 永久免费看片 | 黄色网址你懂的 | 国产日韩在线观看一区 | 极品人妻一区二区三区 | 女性女同性aⅴ免费观女性恋 | 永久免费视频网站 | 欧美日韩中文字幕一区 | 中文字幕三级电影 | 91中文字幕在线播放 | 麻豆av导航| 中文字幕一区二区三区乱码 | 国产1区2区在线观看 | 亚洲午夜18毛片在线看 | 亚洲天堂资源 | 黄色录像a级片 | 欧美成人另类 | 国产91丝袜在线播放 | 四虎国产成人永久精品免费 | 日韩午夜剧场 | 秘密爱大尺度做爰呻吟 | 日韩中文久久 | a在线看 | 天天操天天拍 | 男人喷出精子视频 |