欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人

電子開發(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算法

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

關(guān)于PID的算法實(shí)現(xiàn),很多書上都講了。
 
但是,最近真正要用PID算法的時(shí)候,發(fā)現(xiàn)書上的代碼在我們51上來實(shí)現(xiàn)還不是那么容易的事情。簡單的說來,就是不能直接調(diào)用。仔細(xì)分析你可以發(fā)現(xiàn),教材上的、網(wǎng)上現(xiàn)行的PID實(shí)現(xiàn)的C語言代碼幾乎都是用浮點(diǎn)型的數(shù)據(jù)來做的,可以想象,如果我們的計(jì)算使用浮點(diǎn)數(shù)據(jù),那我們的51單片機(jī)來運(yùn)行的話會(huì)有多痛苦。
 
所以,本人自己琢磨著弄了一個(gè)整型變量來實(shí)現(xiàn)了PID算法,由于是用整型數(shù)來做的,所以也不是很精確,但是對(duì)于很多的使用場合,這個(gè)精度也夠了。關(guān)于系數(shù)和采樣電壓全部是放大10倍處理的。所以精度不是很高,但是也不是那么低,大部分的場合都?jí)蛴昧恕?shí)在覺得精度不夠,可以再放大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)論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人
26uuu亚洲综合色欧美| 日韩免费性生活视频播放| 久久91精品久久久久久秒播 | 免费在线观看精品| 亚洲国产毛片aaaaa无费看| 亚洲综合色视频| 亚洲成av人片在线观看无码| 天堂va蜜桃一区二区三区漫画版| 亚洲成av人片在线| 美女一区二区久久| 国产福利视频一区二区三区| 99久久久国产精品免费蜜臀| 色婷婷狠狠综合| 欧美一区二区日韩一区二区| 精品人在线二区三区| 久久久久久亚洲综合| 国产精品成人网| 亚洲18女电影在线观看| 日本aⅴ精品一区二区三区| 韩国毛片一区二区三区| 成人一级视频在线观看| 欧美视频在线播放| 欧美mv日韩mv| 中文字幕日韩精品一区| 日韩不卡一区二区三区| 国产精品69毛片高清亚洲| 91亚洲午夜精品久久久久久| 在线播放日韩导航| 欧美国产成人精品| 视频在线观看一区| thepron国产精品| 日韩免费视频一区二区| |精品福利一区二区三区| 免费高清在线一区| 91在线视频播放地址| 日韩欧美国产不卡| 一区二区三区中文字幕在线观看| 免费美女久久99| 色综合久久中文字幕综合网| 精品国产凹凸成av人导航| 亚洲欧美精品午睡沙发| 国产一区二区福利| 欧美女孩性生活视频| 日本一区二区免费在线观看视频 | 日韩国产欧美在线播放| 99视频一区二区| www久久久久| 日韩二区三区四区| 色哟哟日韩精品| 国产精品欧美久久久久一区二区| 麻豆精品在线观看| 欧美日韩国产一级片| 亚洲欧美另类在线| 成人午夜免费av| 国产亚洲婷婷免费| 精品一区二区三区香蕉蜜桃| 宅男在线国产精品| 石原莉奈在线亚洲二区| 欧美性生活久久| 一区二区三区久久久| 成人精品视频一区二区三区尤物| 久久综合狠狠综合久久激情| 美美哒免费高清在线观看视频一区二区 | 久久精品一区二区三区四区| 秋霞影院一区二区| 日韩一区二区三区在线观看| 日本一道高清亚洲日美韩| 欧美日韩国产在线观看| 亚洲 欧美综合在线网络| 欧美日韩一级大片网址| 午夜精品视频在线观看| 欧美日韩不卡一区| 日本美女视频一区二区| 欧美不卡一区二区三区| 国产在线视视频有精品| 久久久久久久久久久黄色| 国产最新精品免费| 国产欧美视频一区二区| 成人的网站免费观看| 亚洲少妇最新在线视频| 欧美性受极品xxxx喷水| 日韩精品成人一区二区在线| 日韩一区二区在线播放| 国产福利一区二区三区在线视频| 欧美国产一区二区在线观看 | 日韩精品在线看片z| 久久精品72免费观看| 国产女主播一区| 色婷婷av一区二区三区软件| 午夜免费久久看| 精品国产一区二区精华| 成人污污视频在线观看| 亚洲在线观看免费视频| 日韩三级av在线播放| 国产suv精品一区二区883| 亚洲人成网站色在线观看| 欧美放荡的少妇| 国产综合色精品一区二区三区| 国产精品久久久久婷婷二区次| 在线视频你懂得一区二区三区| 日韩不卡免费视频| 中文字幕免费不卡| 69久久99精品久久久久婷婷| 国产成人av在线影院| 亚洲国产另类精品专区| 国产欧美日韩中文久久| 欧美日韩国产电影| 国产成人在线影院| 丝袜美腿亚洲综合| 国产精品国产自产拍高清av| 欧美日韩亚洲国产综合| 粉嫩欧美一区二区三区高清影视| 亚洲一二三区视频在线观看| 久久日韩精品一区二区五区| 欧美日韩极品在线观看一区| 成人黄色一级视频| 久久99精品一区二区三区三区| 亚洲美女免费视频| 久久精品欧美一区二区三区不卡| 欧美日韩亚洲不卡| 色综合色综合色综合色综合色综合 | 国产一区视频网站| 日韩成人一区二区三区在线观看| 国产精品久久久久aaaa| 精品成人一区二区三区四区| 欧美日韩免费在线视频| 成人av网站大全| 国产精品系列在线观看| 久久精品久久久精品美女| 一个色妞综合视频在线观看| 国产精品高清亚洲| 国产女同性恋一区二区| 久久综合久久鬼色中文字| 91精品免费在线| 4hu四虎永久在线影院成人| 欧美在线三级电影| 色婷婷国产精品久久包臀| 99r国产精品| 91免费精品国自产拍在线不卡| 国产成人久久精品77777最新版本| 美国十次了思思久久精品导航| 日韩高清一区二区| 奇米在线7777在线精品| 青草av.久久免费一区| 蜜桃视频在线一区| 蜜桃av噜噜一区| 久久99精品久久久久久| 九一九一国产精品| 国产在线乱码一区二区三区| 九九九久久久精品| 高清不卡在线观看| 99久久精品免费看| 99精品视频在线播放观看| 91麻豆蜜桃一区二区三区| 91福利在线播放| 宅男在线国产精品| 精品国产电影一区二区| 国产精品日韩成人| 亚洲女女做受ⅹxx高潮| 亚洲123区在线观看| 人禽交欧美网站| 春色校园综合激情亚洲| 91丝袜美腿高跟国产极品老师| 欧美日韩另类国产亚洲欧美一级| 91精品国产综合久久久蜜臀图片 | 99久久综合精品| 欧美三级在线看| 精品欧美一区二区在线观看| 久久婷婷国产综合精品青草| 1000精品久久久久久久久| 午夜精品一区二区三区免费视频| 精品一区二区三区香蕉蜜桃| 国产+成+人+亚洲欧洲自线| 在线视频一区二区免费| 精品国产亚洲在线| 专区另类欧美日韩| 日本麻豆一区二区三区视频| 成人午夜免费视频| 欧美高清hd18日本| 日本一区二区三区久久久久久久久不 | 一区二区三区精品久久久| 久久精品国产亚洲一区二区三区| 国产乱子轮精品视频| 91电影在线观看| 久久婷婷成人综合色| 亚洲国产va精品久久久不卡综合| 国产在线精品免费| 色8久久精品久久久久久蜜| 精品国产乱码久久久久久老虎| 亚洲精品老司机| 粉嫩嫩av羞羞动漫久久久| 欧美日韩精品一区二区天天拍小说 | 日本午夜一本久久久综合| 国产91在线看| 日韩欧美一区二区不卡| 亚洲图片自拍偷拍| 色婷婷激情综合| 国产精品久久久久久久久免费桃花 | 不卡一二三区首页| ww亚洲ww在线观看国产|