找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4434|回复: 1
收起左侧

增量式PID算法C++源码

[复制链接]
ID:334037 发表于 2018-5-20 10:00 | 显示全部楼层 |阅读模式
C++源程序如下:
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <Windows.h>

  5. //定义PID变量的结构体
  6. struct _pid
  7. {
  8.         float SetSpeed;
  9.         float ActualSpeed;
  10.         float err;
  11.         float err_last;        //定义上上个偏差
  12.         float err_next;       //定义上一个偏差值
  13.         float Kp,Ki,Kd;
  14.        
  15. }pid;

  16. //初始化变量
  17. void PID_init(void)
  18. {
  19.         printf ("pid_value_init_begin\n");

  20.         pid.ActualSpeed = 0.0;
  21.         pid.SetSpeed = 0.0;

  22.         pid.err = 0.0;
  23.         pid.err_last = 0.0;
  24.         pid. err_next = 0.0;
  25.        
  26.        
  27.         pid.Kp = 0.2;
  28.         pid.Ki = 0.015;
  29.         pid.Kd = 0.2;

  30.         printf("pid_init end \n");
  31. }

  32. //增量式算法
  33. float PID_calculate(float speed)
  34. {

  35.         pid.SetSpeed = speed;
  36.         pid.err = pid.SetSpeed - pid.ActualSpeed;
  37.        
  38.         float incrementSpeed = pid.Kp * (pid.err - pid.err_next) + pid.Ki * pid.err + pid.Kd * (pid.err - 2 * pid.err_next + pid.err_last);

  39.         pid.ActualSpeed += incrementSpeed;

  40.         pid.err_last = pid.err_next;     //定义上一个偏差值
  41.         pid.err_next = pid.err;

  42.         return pid.ActualSpeed;

  43. }




  44. int main(void)
  45. {
  46.         int setcount = 0;
  47.         printf ("Please begin \n");
  48.         PID_init();

  49.         while (setcount < 100)
  50.         {
  51.                 float speed = PID_calculate(250.0);
  52.                 printf ("value is %f\n",speed);
  53.                 setcount++;
  54.                 Sleep(300);
  55.         }
  56.         system("pause");
  57.         return 0;
  58. }
复制代码

所有资料51hei提供下载:
增量式PID.rar (13.49 MB, 下载次数: 43)
回复

使用道具 举报

ID:515423 发表于 2019-5-30 14:11 | 显示全部楼层
运行不了啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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