www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

用C51實(shí)現(xiàn)PID算法

作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011-2-18

關(guān)于PID的算法實(shí)現(xiàn),很多書上都講了。
 
但是,最近真正要用PID算法的時(shí)候,發(fā)現(xiàn)書上的代碼在我們51上來(lái)實(shí)現(xiàn)還不是那么容易的事情。簡(jiǎn)單的說(shuō)來(lái),就是不能直接調(diào)用。仔細(xì)分析你可以發(fā)現(xiàn),教材上的、網(wǎng)上現(xiàn)行的PID實(shí)現(xiàn)的C語(yǔ)言代碼幾乎都是用浮點(diǎn)型的數(shù)據(jù)來(lái)做的,可以想象,如果我們的計(jì)算使用浮點(diǎn)數(shù)據(jù),那我們的51單片機(jī)來(lái)運(yùn)行的話會(huì)有多痛苦。
 
所以,本人自己琢磨著弄了一個(gè)整型變量來(lái)實(shí)現(xiàn)了PID算法,由于是用整型數(shù)來(lái)做的,所以也不是很精確,但是對(duì)于很多的使用場(chǎng)合,這個(gè)精度也夠了。關(guān)于系數(shù)和采樣電壓全部是放大10倍處理的。所以精度不是很高,但是也不是那么低,大部分的場(chǎng)合都?jí)蛴昧恕?shí)在覺(jué)得精度不夠,可以再放大10倍或者100倍處理,但是要注意不超出整個(gè)數(shù)據(jù)類型的范圍就可以了。
 
    本人做的是帶死區(qū)控制的PID算法。
 
具體的參考代碼參見下面:
 
typedef struct PIDValue
{
    uint32 Ek_Uint32[3];         //差值保存,給定和反饋的差值
    uint8  EkFlag_Uint8[3];     //符號(hào),1則對(duì)應(yīng)的Ek[i]為負(fù)數(shù),0為對(duì)應(yīng)的Ek[i]為正數(shù)
    uint8   KP_Uint8;
 uint8   KI_Uint8;
 uint8   KD_Uint8;
 uint8   B_Uint8;     //死區(qū)電壓
 
 uint8   KP;      //顯示修改的時(shí)候用
 uint8   KI;      //
 uint8   KD;      //
 uint8   B;       //
 uint16  Uk_Uint16;    //上一時(shí)刻的控制電壓
}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;  //正數(shù)和
 uint32 idata NegSum;   //負(fù)數(shù)和
 Temp[0] = 0;
    Temp[1] = 0;
    Temp[2] = 0;
 PostSum = 0;
 NegSum = 0;
 if( ADPool.Value_Uint16[UINADCH] > ADPool.Value_Uint16[UFADCH] )  //給定大于反饋,則EK為正數(shù)
 {
     Temp[0] = ADPool.Value_Uint16[UINADCH] - ADPool.Value_Uint16[UFADCH];   //計(jì)算Ek[0]
        if( Temp[0] > PID.B_Uint8 )
        {
      //數(shù)值移位
            PID.Ek_Uint32[2] = PID.Ek_Uint32[1];
            PID.Ek_Uint32[1] = PID.Ek_Uint32[0];
            PID.Ek_Uint32[0] = Temp[0];
            //符號(hào)移位
   PID.EkFlag_Uint8[2] = PID.EkFlag_Uint8[1];
   PID.EkFlag_Uint8[1] = PID.EkFlag_Uint8[0];
   PID.EkFlag_Uint8[0] = 0;                       //當(dāng)前EK為正數(shù)
            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];   //計(jì)算Ek[0]
        if( Temp[0] > PID.B_Uint8 )
        {
      //數(shù)值移位
            PID.Ek_Uint32[2] = PID.Ek_Uint32[1];
            PID.Ek_Uint32[1] = PID.Ek_Uint32[0];
            PID.Ek_Uint32[0] = Temp[0];
            //符號(hào)移位
   PID.EkFlag_Uint8[2] = PID.EkFlag_Uint8[1];
   PID.EkFlag_Uint8[1] = PID.EkFlag_Uint8[0];
   PID.EkFlag_Uint8[0] = 1;                       //當(dāng)前EK為負(fù)數(shù)
            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
        }
 }
 
/*以下部分代碼是講所有的正數(shù)項(xiàng)疊加,負(fù)數(shù)項(xiàng)疊加*/
    if(PID.EkFlag_Uint8[0]==0)
    {
        PostSum += Temp[0];   //正數(shù)和
 }
    else
 {
        NegSum += Temp[0];    //負(fù)數(shù)和
 }                         // KP*EK0
    if(PID.EkFlag_Uint8[1]!=0)    
    {
        PostSum += Temp[1];   //正數(shù)和
 }
 else
 {
        NegSum += Temp[1];    //負(fù)數(shù)和
 }                         // - kI * EK1
    if(PID.EkFlag_Uint8[2]==0)
    {
        PostSum += Temp[2];   //正數(shù)和
    }
 else
 {
        NegSum += Temp[2];    //負(fù)數(shù)和
 }                         // KD * EK2
    PostSum += (uint32)PID.Uk_Uint16;        //
    if( PostSum > NegSum )             // 是否控制量為正數(shù)
    {
        Temp[0] = PostSum - NegSum;
        if( Temp[0] < (uint32)ADPool.Value_Uint16[UMAXADCH] )   //小于限幅值則為計(jì)算值輸出
  {
            PID.Uk_Uint16 = (uint16)Temp[0];
  }
  else
  {
            PID.Uk_Uint16 = ADPool.Value_Uint16[UMAXADCH];    //否則為限幅值輸出
     }
    }
    else               //控制量輸出為負(fù)數(shù),則輸出0
    {
        PID.Uk_Uint16 = 0;
    }
}

Tags:c51,pid,算法  
責(zé)任編輯:admin
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢
www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久
国产欧美一区二区精品性色超碰| 亚洲一区二区三区小说| 成人av网站在线观看| 亚洲精品免费在线| 欧美日韩精品一区视频| 麻豆久久久久久| 国产精品天天摸av网| 在线观看免费亚洲| 久久精品噜噜噜成人88aⅴ| 久久精品亚洲麻豆av一区二区| 成人激情av网| 午夜精品一区二区三区三上悠亚 | 欧美专区日韩专区| 免费成人在线网站| 国产精品理论在线观看| 欧美午夜精品一区二区蜜桃| 麻豆精品在线看| 国产精品久久久久久福利一牛影视| 欧美午夜精品理论片a级按摩| 久久精品国产999大香线蕉| 国产精品久久看| 欧美乱妇15p| 国产成人一区在线| 午夜精品视频在线观看| 国产欧美久久久精品影院| 欧美在线短视频| 国产精品一区二区在线播放 | 91精品国产综合久久精品麻豆| 国产精品一区专区| 亚洲一本大道在线| 国产清纯美女被跳蛋高潮一区二区久久w | 在线观看成人免费视频| 国产一区二区三区久久悠悠色av | 国产精品一区免费视频| 亚洲一区二区三区三| 久久久综合激的五月天| 在线观看网站黄不卡| 国产酒店精品激情| 丝袜美腿一区二区三区| 国产精品另类一区| 日韩精品一区二区在线| 91精品办公室少妇高潮对白| 国产精品69久久久久水密桃 | 天堂av在线一区| 国产精品不卡视频| 欧美不卡视频一区| 欧美日韩你懂的| proumb性欧美在线观看| 久久精品噜噜噜成人88aⅴ| 亚洲伊人伊色伊影伊综合网| 欧美国产日韩一二三区| 欧美一区二区三区四区在线观看| 91视视频在线观看入口直接观看www | 色婷婷久久久综合中文字幕| 国产精品综合网| 日产精品久久久久久久性色| 亚洲精品一二三| 亚洲国产精品av| 日韩欧美国产精品一区| 欧美视频精品在线观看| 99视频一区二区三区| 国产精品18久久久久久vr| 日本少妇一区二区| 亚洲一级片在线观看| 中文字幕亚洲电影| 国产亚洲综合av| 精品理论电影在线| 在线成人免费观看| 欧美日韩小视频| 色94色欧美sute亚洲线路二 | av电影天堂一区二区在线| 精品一区二区综合| 美女性感视频久久| 日韩精品色哟哟| 亚洲国产精品久久久久秋霞影院| 中文字幕在线不卡国产视频| 国产女人水真多18毛片18精品视频 | 国产亚洲欧美日韩在线一区| 日韩免费高清av| 欧美一区二区三区免费大片 | 亚洲三级免费观看| 国产精品久久久99| 国产精品激情偷乱一区二区∴| 国产欧美日韩中文久久| 国产亚洲一区二区三区在线观看| 亚洲精品在线免费观看视频| 欧美tk丨vk视频| 欧美成人精品二区三区99精品| 91麻豆精品国产91久久久久| 欧美精品v国产精品v日韩精品 | 在线成人小视频| 51午夜精品国产| 欧美久久久一区| 欧美老肥妇做.爰bbww视频| 欧美人与禽zozo性伦| 7777精品伊人久久久大香线蕉经典版下载 | 久久噜噜亚洲综合| 久久久久久**毛片大全| 国产欧美精品一区二区三区四区| 国产亲近乱来精品视频 | 久久精品国产一区二区三区免费看| 蜜桃av一区二区三区| 麻豆91在线看| 国产在线麻豆精品观看| 黄色精品一二区| 国产麻豆精品久久一二三| 国产一区二区在线视频| 国产成人h网站| 不卡的av在线| 色婷婷国产精品| 欧美色欧美亚洲另类二区| 6080yy午夜一二三区久久| 日韩三级.com| 国产日韩欧美麻豆| 亚洲人成亚洲人成在线观看图片| 一区二区三区四区视频精品免费 | 粉嫩av一区二区三区粉嫩| av中文一区二区三区| 在线看日韩精品电影| 欧美一区三区二区| 26uuu久久综合| 中文字幕亚洲欧美在线不卡| 亚洲一区免费视频| 欧美aaaaaa午夜精品| 国产一区二区福利| 99精品视频在线播放观看| 欧美视频一区二区在线观看| 日韩视频一区二区三区在线播放| 久久久久久亚洲综合| 日韩毛片视频在线看| 亚洲国产精品麻豆| 国内精品视频666| 成人av在线播放网站| 欧美性猛片xxxx免费看久爱| 欧美成人一级视频| 亚洲天堂精品在线观看| 日韩在线卡一卡二| 国产福利一区二区三区在线视频| 91免费视频观看| 91精品国产美女浴室洗澡无遮挡| 久久综合九色欧美综合狠狠 | 亚洲裸体xxx| 琪琪久久久久日韩精品| 成人开心网精品视频| 欧美视频一区在线| 久久久精品影视| 一区二区视频在线| 精品一区二区三区在线播放视频 | 91精品国产麻豆国产自产在线 | 91精品久久久久久蜜臀| 国产日韩欧美一区二区三区乱码 | 国产日本欧洲亚洲| 亚洲成人av一区二区| 国产一区二区免费在线| 欧美在线影院一区二区| 久久久久九九视频| 性欧美大战久久久久久久久| 国产69精品久久久久毛片| 欧美高清一级片在线| 欧美韩国日本不卡| 日本伊人精品一区二区三区观看方式| 国产jizzjizz一区二区| 制服丝袜亚洲播放| 国产精品乱人伦一区二区| 日本在线不卡视频| 91啦中文在线观看| 久久男人中文字幕资源站| 亚洲一区二区视频| 成人妖精视频yjsp地址| 91精品综合久久久久久| 亚洲视频 欧洲视频| 国产乱子伦视频一区二区三区| 欧美日韩亚州综合| 成人欧美一区二区三区在线播放| 美女www一区二区| 欧美性生活影院| 日韩一区日韩二区| 国产精品一区二区无线| 91精品国产乱| 亚洲影院在线观看| 成人激情文学综合网| 精品国产123| 日韩成人av影视| 色婷婷久久综合| 中文在线一区二区| 日本91福利区| 欧美日韩精品欧美日韩精品 | 91在线porny国产在线看| 精品久久久三级丝袜| 亚洲超碰精品一区二区| 色婷婷综合久久久中文一区二区| 中文字幕免费在线观看视频一区| 麻豆精品在线视频| 777午夜精品免费视频| 亚洲综合在线观看视频| 成人国产精品免费| 欧美激情一区在线| 国产精品系列在线观看| 精品盗摄一区二区三区| 久久精品国产在热久久|