找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3592|回复: 0
打印 上一主题 下一主题
收起左侧

增量式PID代码C语言实现实现代码

[复制链接]
跳转到指定楼层
楼主
增量式pid语言代码,初学者可以参考下


源程序如下:
  1. #define _PID_C
  2. #include "pid.h"
  3. #include <math.h>

  4. #define MAXOUT 1000                                //输出最大值

  5. void IncPIDInit(void)
  6. {
  7.         sptr                        = &sPID;
  8.         sptr->SetPoint        = 700;                //设定值
  9.         sptr->BitMove        = 0;                //返回结果比例

  10.         sptr->LastError = 0;                //前2次误差值
  11.         sptr->PrevError = 0;                //前1次误差值

  12.         sptr->Proportion = 3;                //比例
  13.         sptr->Integral         = 0;                //积分
  14.         sptr->Derivative = 0;                //微分

  15.         sptr->iError = 0;                        //当前误差
  16.         sptr->iIncpid=0;                        //增量误差

  17.         sptr->Uk = 0;                                //输出返回值
  18. }

  19. int IncPIDCalc(int NextPoint)
  20. {
  21.         //当前误差
  22.         sptr->iError = sptr->SetPoint - NextPoint;
  23.         //增量误差
  24.         sptr->iIncpid= sptr->Proportion * sptr->iError
  25.                                 - sptr->Integral * sptr->LastError
  26.                                 + sptr->Derivative * sptr->PrevError;
  27.         //存储误差,用于下次计算
  28.         sptr->PrevError = sptr->LastError;
  29.         sptr->LastError = sptr->iError;

  30.         sptr->Uk += sptr->iIncpid;

  31.         //输出值限幅
  32.         if ((sptr->Uk>>sptr->BitMove) >= MAXOUT)
  33.         {
  34.                 sptr->Uk = MAXOUT;
  35.         }
  36.         else if((sptr->Uk>>sptr->BitMove) <= 0)
  37.         {
  38.                 sptr->Uk = 0;
  39.         }
  40.         else        sptr->Uk = sptr->Uk>>sptr->BitMove;
  41.        
  42.         return(sptr->Uk);
  43. }
复制代码
  1. #ifndef _PID_H
  2. #ifndef _PID_H

  3. #ifdef _PID_C
  4.     #define PID_EXT
  5. #else
  6.     #define PID_EXT extern
  7. #endif

  8. typedef struct PID
  9. {
  10.         int SetPoint;
  11.        
  12.         unsigned char BitMove;
  13.        
  14.         float Proportion;
  15.         float Integral;
  16.         float Derivative;
  17.        
  18.         int iError;
  19.         int iIncpid;
  20.        
  21.         int LastError;
  22.         int PrevError;
  23.        
  24.         int Uk;
  25. }PID,*pPID;

  26. PID_EXT PID sPID;
  27. PID_EXT pPID sptr;

  28. void IncPIDInit(void);
  29. int IncPIDCalc(int NextPoint);

  30. #endif
复制代码


所有资料51hei提供下载:
增量式PID代码C语言实现实现.rar (1.19 KB, 下载次数: 45)


评分

参与人数 2黑币 +80 收起 理由
仓道与 + 30
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表