婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av

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

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

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

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

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

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

還可以輸入 200 個字
[ 查看全部 ] 網(wǎng)友評論
最新推薦
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av
<button id="4i884"></button>
  • <abbr id="4i884"><source id="4i884"></source></abbr>
  • <code id="4i884"><tr id="4i884"></tr></code>
  • <rt id="4i884"></rt>
    <li id="4i884"></li>
  • <rt id="4i884"><tr id="4i884"></tr></rt>
  • 亚洲天堂网站在线| 久久久精品在线视频| www.日日操| 污视频网址在线观看| 一级一片免费播放| 精品无码一区二区三区爱欲| 一二三四视频社区在线| 精品视频无码一区二区三区| 男女猛烈激情xx00免费视频| 日韩av在线播放不卡| www.xxx麻豆| 手机免费av片| 男人日女人下面视频| 8x8x成人免费视频| 樱花草www在线| 日韩video| 亚洲天堂网2018| 国内精品国产三级国产aⅴ久| 亚洲免费成人在线视频| 久久久久久久免费视频| 人妻无码一区二区三区四区| 免费在线精品视频| 国产成人永久免费视频| 国产a级一级片| 欧美另类videosbestsex日本| 欧美日韩中文字幕在线播放| 精品国产一区二区三区无码| 国产99久久九九精品无码| 国产在线无码精品| 国产二区视频在线播放| 亚洲天堂av线| 欧美精品色婷婷五月综合| www.色就是色.com| 超碰成人免费在线| 九九热免费在线观看| 久久人人爽人人爽人人av| 国产精品69页| 国产1区2区3区中文字幕| 一区二区xxx| 第四色婷婷基地| 一区二区三区 欧美| 国产乱子伦精品无码专区| 国产aaaaa毛片| 欧美人成在线观看| 欧美激情第一区| 交换做爰国语对白| 激情视频综合网| 亚洲国产成人精品无码区99| 亚洲精品久久久久久宅男| 奇米精品一区二区三区| 欧美性受黑人性爽| 人人妻人人澡人人爽欧美一区| 中文字幕欧美人妻精品一区| 久青草视频在线播放| 免费不卡av网站| 福利视频999| 孩娇小videos精品| 国产精品秘入口18禁麻豆免会员| 青青草综合在线| 中文字幕精品在线播放| 午夜xxxxx| 992tv人人草| 青春草在线视频免费观看| 精品久久久99| 天美一区二区三区| 操人视频免费看| 香蕉精品视频在线| 中文字幕一区二区三区四| 精品综合久久久久| 吴梦梦av在线| a级网站在线观看| 大胆欧美熟妇xx| 国产精品啪啪啪视频| h无码动漫在线观看| 欧美日韩成人免费视频| 美女av免费在线观看| 狠狠操精品视频| 亚洲欧美在线精品| 国产又粗又硬又长| 99er在线视频| 国产第一页视频| 99国产精品久久久久久| 日日夜夜精品视频免费观看 | 在线不卡一区二区三区| 涩多多在线观看| 六月婷婷激情综合| 日日碰狠狠躁久久躁婷婷| 狠狠躁狠狠躁视频专区| 欧美一级黄色录像片| 欧美乱大交xxxxx潮喷l头像| 人妻内射一区二区在线视频| 污污网站免费观看| 欧美黄网在线观看| 九热视频在线观看| 久久久天堂国产精品| 99热成人精品热久久66| 涩涩网站在线看| 91免费视频网站在线观看| 中文字幕第38页| 9久久9毛片又大又硬又粗| 久久久精品高清| 国产中文字幕二区| 成年人网站av| av丝袜天堂网| 黄色一级片黄色| 亚洲欧美手机在线| 日本精品一区在线观看| 国产av第一区| 日本在线观看视频一区| 国产欧美日韩网站| 色一情一乱一乱一区91| 一级黄色特级片| 男人揉女人奶房视频60分 | 国产一二三四五| 九色91popny| 日日橹狠狠爱欧美超碰| 中国老女人av| 欧美大片久久久| 一区二区免费av| 欧洲熟妇精品视频| 成人免费观看cn| 国内精品国产三级国产99| 欧美wwwwwww| 午夜激情av在线| 91n.com在线观看| 999精品视频在线| 五月婷婷激情久久| 超碰影院在线观看| 成人在线免费观看av| 国产精品网站免费| 免费看欧美黑人毛片| 久久久久久人妻一区二区三区| 992tv成人免费观看| 无套内谢丰满少妇中文字幕| 爽爽爽在线观看| 久久精品视频在线观看免费| 国产3p在线播放| 国产福利片一区二区| 麻豆md0077饥渴少妇| 蜜臀在线免费观看| 福利视频一区二区三区四区| 福利视频一区二区三区四区| 成人在线观看你懂的| 男女激情无遮挡| 五月婷婷激情久久| 九九久久久久久| 91免费国产精品| 337p粉嫩大胆噜噜噜鲁| wwww.国产| 亚洲激情免费视频| 黄色一级视频片| 亚洲精品手机在线观看| 91麻豆天美传媒在线| 国产综合中文字幕| 亚洲老女人av| 日本天堂免费a| 欧美日韩在线成人| 成人毛片100部免费看| 99热成人精品热久久66| 午夜福利123| 91国视频在线| 欧美亚洲视频一区| 免费观看国产精品视频| 毛片毛片毛片毛| 日韩精品一区二区三区久久| 天天干天天草天天| 97在线国产视频| 色一情一区二区三区| 女人帮男人橹视频播放| 国产视频1区2区3区| 国产女主播自拍| 国产成年人在线观看| 国产又大又硬又粗| 国产www免费| 永久av免费在线观看| 国产一区视频免费观看| 欧洲精品在线播放| 欧美h视频在线观看| 污版视频在线观看| 国产原创popny丨九色| 国产福利片一区二区| 手机视频在线观看| www.日日操| 无码人妻丰满熟妇区毛片18| 久久久久久久久久伊人| 欧美国产在线一区| 日日干日日操日日射| 已婚少妇美妙人妻系列| 久久久性生活视频| 大陆av在线播放| 女人帮男人橹视频播放| 久久久精品视频国产| 小明看看成人免费视频| 日日噜噜噜噜久久久精品毛片| 男人揉女人奶房视频60分| 成人在线播放网址| 天天夜碰日日摸日日澡性色av| 白白操在线视频| 日韩激情视频一区二区| 日韩精品一区二区免费|