但是,最近真正要用PID算法的時候,發現書上的代碼在我們51上來實現還不是那么容易的事情。簡單的說來,就是不能直接調用。仔細分析你可以發現,教材上的、網上現行的PID實現的C語言代碼幾乎都是用浮點型的數據來做的,可以想象,如果我們的計算使用浮點數據,那我們的51單片機來運行的話會有多痛苦。
所以,本人自己琢磨著弄了一個整型變量來實現了PID算法,">

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

技術頻道

C51實現PID算法

關于PID的算法實現,很多書上都講了。
但是,最近真正要用PID算法的時候,發現書上的代碼在我們51上來實現還不是那么容易的事情。簡單的說來,就是不能直接調用。仔細分析你可以發現,教材上的、網上現行的PID實現的C語言代碼幾乎都是用浮點型的數據來做的,可以想象,如果我們的計算使用浮點數據,那我們的51單片機來運行的話會有多痛苦。
所以,本人自己琢磨著弄了一個整型變量來實現了PID算法,由于是用整型數來做的,所以也不是很精確,但是對于很多的使用場合,這個精度也夠了。關于系數和采樣電壓全部是放大10倍處理的。所以精度不是很高,但是也不是那么低,大部分的場合都夠用了。實在覺得精度不夠,可以再放大10倍或者100倍處理,但是要注意不超出整個數據類型的范圍就可以了。
本人做的是帶死區控制的PID算法。
具體的參考代碼參見下面:
typedef struct PIDValue
{
uint32 Ek_Uint32[3]; //差值保存,給定和反饋的差值
uint8 EkFlag_Uint8[3]; //符號,1則對應的Ek[i]為負數,0為對應的Ek[i]為正數
uint8 KP_Uint8;
uint8 KI_Uint8;
uint8 KD_Uint8;
uint8 B_Uint8; //死區電壓

uint8 KP; //顯示修改的時候用
uint8 KI; //
uint8 KD; //
uint8 B; //
uint16 Uk_Uint16; //上一時刻的控制電壓
}PIDValueStr;

PIDValueStr xdata PID;
/*******************************
**PID = Uk + (KP*E(k) - KI*E(k-1) + KD*E(k-2));
********************************/
void PIDProcess(void)
{
uint32 idata Temp[3]; //
uint32 idata PostSum; //正數和
uint32 idata NegSum; //負數和
Temp[0] = 0;
Temp[1] = 0;
Temp[2] = 0;
PostSum = 0;
NegSum = 0;
if( ADPool.Value_Uint16[UINADCH] > ADPool.Value_Uint16[UFADCH] ) //給定大于反饋,則EK為正數
{
Temp[0] = ADPool.Value_Uint16[UINADCH] - ADPool.Value_Uint16[UFADCH]; //計算Ek[0]
if( Temp[0] > PID.B_Uint8 )
{
//數值移位
PID.Ek_Uint32[2] = PID.Ek_Uint32[1];
PID.Ek_Uint32[1] = PID.Ek_Uint32[0];
PID.Ek_Uint32[0] = Temp[0];
//符號移位
PID.EkFlag_Uint8[2] = PID.EkFlag_Uint8[1];
PID.EkFlag_Uint8[1] = PID.EkFlag_Uint8[0];
PID.EkFlag_Uint8[0] = 0; //當前EK為正數
Temp[0] = (uint32)PID.KP_Uint8 * PID.Ek_Uint32[0]; // KP*EK0
Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[1]; // KI*EK1
Temp[2] = (uint32)PID.KD_Uint8 * PID.Ek_Uint32[2]; // KD*EK2
}
}
else //反饋大于給定
{
Temp[0] = ADPool.Value_Uint16[UFADCH] - ADPool.Value_Uint16[UINADCH]; //計算Ek[0]
if( Temp[0] > PID.B_Uint8 )
{
//數值移位
PID.Ek_Uint32[2] = PID.Ek_Uint32[1];
PID.Ek_Uint32[1] = PID.Ek_Uint32[0];
PID.Ek_Uint32[0] = Temp[0];
//符號移位
PID.EkFlag_Uint8[2] = PID.EkFlag_Uint8[1];
PID.EkFlag_Uint8[1] = PID.EkFlag_Uint8[0];
PID.EkFlag_Uint8[0] = 1; //當前EK為負數
Temp[0] = (uint32)PID.KP_Uint8 * PID.Ek_Uint32[0]; // KP*EK0
Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[1]; // KI*EK1
Temp[2] = (uint32)PID.KD_Uint8 * PID.Ek_Uint32[2]; // KD*EK2
}
}

/*以下部分代碼是講所有的正數項疊加,負數項疊加*/
if(PID.EkFlag_Uint8[0]==0)
{
PostSum += Temp[0]; //正數和
}
else
{
NegSum += Temp[0]; //負數和
} // KP*EK0
if(PID.EkFlag_Uint8[1]!=0)
{
PostSum += Temp[1]; //正數和
}
else
{
NegSum += Temp[1]; //負數和
} // - kI * EK1
if(PID.EkFlag_Uint8[2]==0)
{
PostSum += Temp[2]; //正數和
}
else
{
NegSum += Temp[2]; //負數和
} // KD * EK2
PostSum += (uint32)PID.Uk_Uint16; //
if( PostSum > NegSum ) // 是否控制量為正數
{
Temp[0] = PostSum - NegSum;
if( Temp[0] < (uint32)ADPool.Value_Uint16[UMAXADCH] ) //小于限幅值則為計算值輸出
{
PID.Uk_Uint16 = (uint16)Temp[0];
}
else
{
PID.Uk_Uint16 = ADPool.Value_Uint16[UMAXADCH]; //否則為限幅值輸出
}
}
else //控制量輸出為負數,則輸出0
{
PID.Uk_Uint16 = 0;
}
}

文章版權歸西部工控xbgk所有,未經許可不得轉載。

欧美成人aaaaa免费视频_亚洲欧美激情小说另类_欧美激情一区二区三区视频_一级在线|欧洲

      国内精品视频久久| 欧美一区二区三区免费大片| 国产视频一区欧美| 欧美精品黄色| 久久婷婷国产麻豆91天堂| 中日韩午夜理伦电影免费| 在线观看一区欧美| 国产视频在线观看一区| 欧美日韩在线观看一区二区| 欧美一区二区三区在线观看| 夜久久久久久| 亚洲精品中文字幕在线| 精品成人国产在线观看男人呻吟| 国产精品区一区| 欧美日韩国产成人| 欧美精品97| 欧美~级网站不卡| 欧美1区2区视频| 久久久亚洲人| 久久视频一区二区| 老牛影视一区二区三区| 久久久www| 久久精品视频在线播放| 午夜亚洲精品| 久久黄金**| 欧美在线资源| 亚洲欧美视频一区| 亚洲欧美国产制服动漫| 在线中文字幕一区| 中国女人久久久| 亚洲私人影吧| 午夜在线精品偷拍| 欧美在线日韩| 麻豆精品视频在线观看视频| 美女久久一区| 欧美日韩四区| 国产精品一页| 国产综合色在线| 怡红院精品视频在线观看极品| 韩国视频理论视频久久| 亚洲第一精品影视| 99re6这里只有精品视频在线观看| 亚洲精品少妇30p| 亚洲男人的天堂在线| 欧美亚洲一区二区在线| 久久影院亚洲| 欧美日韩一区二区在线播放| 国产精品乱码| 原创国产精品91| 亚洲精品自在久久| 亚洲欧美亚洲| 久久综合国产精品台湾中文娱乐网| 麻豆成人小视频| 欧美日韩中文字幕在线视频| 国产日韩精品在线观看| 亚洲国产精品免费| 亚洲淫性视频| 久久综合久久综合久久| 国产精品久久二区| 亚洲国产精品一区二区三区| 亚洲午夜激情免费视频| 久久夜色精品国产亚洲aⅴ| 欧美日韩一区二区免费视频| 国产婷婷色一区二区三区| 亚洲国产经典视频| 香蕉久久夜色精品国产| 欧美经典一区二区| 国产欧美一区二区精品婷婷 | 亚洲精品乱码久久久久| 亚洲欧美另类综合偷拍| 欧美日本国产在线| 国内精品嫩模av私拍在线观看| 99v久久综合狠狠综合久久| 久久国产精品色婷婷| 欧美午夜精品久久久久久孕妇| 在线电影国产精品| 欧美一区二区三区日韩视频| 欧美特黄a级高清免费大片a级| 在线看国产一区| 欧美一级免费视频| 国产精品老女人精品视频| 亚洲精品你懂的| 久久综合网hezyo| 国产亚洲欧洲| 欧美一区二区三区日韩| 国产精品狼人久久影院观看方式| 日韩亚洲欧美一区二区三区| 免费视频久久| 在线视频观看日韩| 裸体丰满少妇做受久久99精品| 国产欧美一区二区三区在线看蜜臀| 中文高清一区| 国产精品国产精品| 亚洲欧美美女| 国产在线高清精品| 久久gogo国模啪啪人体图| 国产日韩欧美中文| 久久久久国产成人精品亚洲午夜| 国产网站欧美日韩免费精品在线观看| 亚洲自拍偷拍视频| 国产精品综合av一区二区国产馆| 亚洲永久免费视频| 国产欧美日韩综合精品二区| 欧美伊久线香蕉线新在线| 国产精品婷婷| 欧美在线免费播放| 在线精品一区二区| 欧美成人蜜桃| 亚洲色无码播放| 国产精品日韩电影| 久久激情视频久久| 曰韩精品一区二区| 欧美日韩mp4| 亚洲欧美中文日韩在线| 狠狠噜噜久久| 欧美大秀在线观看| 亚洲欧美国产视频| 在线精品国产欧美| 欧美日韩另类视频| 久久爱另类一区二区小说| 91久久黄色| 国产精品一区二区三区四区| 久久综合色88| 这里只有精品电影| 激情久久久久久久| 欧美日韩视频第一区| 性色av一区二区三区在线观看| 在线日韩欧美视频| 国产精品乱码人人做人人爱| 久久久精品日韩| 99re8这里有精品热视频免费| 国产亚洲欧美日韩日本| 欧美高清视频免费观看| 欧美亚洲免费电影| 99国产精品久久久久久久| 国产日韩亚洲欧美精品| 欧美日韩国产精品一区二区亚洲 | 国产精品免费电影| 久久综合久久综合这里只有精品| 一区二区三区免费网站| 1024欧美极品| 国产伦精品一区二区三区免费| 另类亚洲自拍| 欧美亚洲一区二区三区| 一区二区三区产品免费精品久久75 | 亚洲免费一级电影| 亚洲精品韩国| 在线观看日韩专区| 国产日产精品一区二区三区四区的观看方式 | 欧美成人午夜剧场免费观看| 久久不射中文字幕| 亚洲欧美成人在线| 亚洲性夜色噜噜噜7777| 亚洲日本成人在线观看| 在线观看视频一区二区欧美日韩| 国产女主播在线一区二区| 欧美色一级片| 欧美国产一区二区在线观看| 免费精品视频| 美女久久一区| 麻豆精品传媒视频| 久久久久久成人| 久久gogo国模裸体人体| 欧美伊人久久| 久久精品一区二区三区不卡| 午夜日本精品| 久久激情中文| 欧美亚洲一区在线| 欧美影片第一页| 欧美一区二区三区视频| 欧美一区二粉嫩精品国产一线天| 亚洲小少妇裸体bbw| 夜夜精品视频| 亚洲欧美日韩天堂一区二区| 在线视频欧美一区| 性欧美长视频| 久久久久久久久一区二区| 久久久精品2019中文字幕神马| 欧美中文字幕在线观看| 久久久久久国产精品mv| 噜噜噜91成人网| 欧美v国产在线一区二区三区| 欧美成人免费全部观看天天性色| 欧美黄在线观看| 欧美日韩在线播| 国产亚洲激情在线| 尤妮丝一区二区裸体视频| 亚洲国产一区二区在线| 一二三区精品福利视频| 午夜精品国产更新| 久久av最新网址| 欧美激情第3页| 国产精品老牛| 在线观看日韩国产| 夜夜精品视频一区二区| 香蕉久久夜色精品| 欧美激情一区二区三区| 国产精品有限公司| 在线观看日韩| 亚洲欧美在线免费|