鱼C论坛

 找回密码
 立即注册
查看: 3080|回复: 8

c语言 PID

[复制链接]
发表于 2020-8-28 10:30:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x



  1. #include <Windows.h>
  2. #include<stdio.h>
  3.          
  4.                   typedef struct{

  5.         float kp,ki,kd;

  6.         float ek,ek1,ek2;       //ek1 是 ek 的前一次误差

  7.         float eSUM;
  8.         
  9.                 float out;
  10.     }PID;

  11.          PID pid = {10.0,10.0,0.0,0.0,0.0,0.0,0.0,0,0};

  12. float PID_Loc(float SetValue,    float ActualValue, PID *pid){



  13.            pid->ek  =  SetValue  -  ActualValue;

  14.            pid->eSUM += pid->ek;  


  15.            pid->out  =  (pid->kp * pid->ek)

  16.                          +  (pid->ki * pid->eSUM)

  17.                          +  (pid->kd *( pid->ek1  -  pid->ek));

  18.             pid->ek1 = pid->ek;

  19.             return  pid->out;

  20. }
  21. int main()
  22. {
  23. int i, j;
  24. PID t ;
  25. int T=100;  
  26.        
  27. for(i=0; i<5; i++){
  28.         for(j=4; j>0; j--){
  29.                 printf ("%d\n",i);
  30.                 printf ("%d\n",j);
  31.                
  32.                 PID_Loc(i, j , &t);       
  33.                 printf ("%d\n",t.out);
  34.                 Sleep(T);//延时ms        
  35.         }
  36. }

  37. }
复制代码

如上代码所示 为什么这个pid out的值恒不变,讲道理应该会变得啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-28 11:09:37 | 显示全部楼层
t没有初始化,虽然定义了全局变量pid,但是却没有用上。
PID_Loc函数内使用的是t,kp, ki, kd都是0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 11:15:35 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-8-28 11:24 编辑



  1. #include <Windows.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4.          
  5. typedef struct{

  6.         float kp,ki,kd;

  7.         float ek,ek1,ek2;       //ek1 是 ek 的前一次误差

  8.         float eSUM;

  9.                 float out;
  10.     }PID;
  11. PID pid = {10.0,10.0,0.0,0.0,0.0,0.0,0.0,0};

  12. float PID_Loc(float SetValue,    float ActualValue, PID *pid){



  13.            pid->ek  =  SetValue  -  ActualValue;

  14.            pid->eSUM += pid->ek;  


  15.            pid->out  =  (pid->kp * pid->ek)

  16.                          +  (pid->ki * pid->eSUM)

  17.                          +  (pid->kd *( pid->ek1  -  pid->ek));

  18.             pid->ek1 = pid->ek;

  19.             return  pid->out;

  20. }
  21. int main()
  22. {
  23.         int i, j;
  24.         PID t = pid ; // 这里需要绑定在一起
  25.         int T=100;  
  26.         
  27.         for(i=0; i<5; i++){
  28.                 for(j=4; j>0; j--){
  29.                         printf ("%f\n",i);
  30.                         printf ("%f\n",j);
  31.                         
  32.                         PID_Loc(i, j , &t);        
  33.                         printf ("%f\n",t.out);
  34.                         Sleep(T);//延时ms         
  35.                 }
  36.         }

  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 11:17:49 | 显示全部楼层
Json21 发表于 2020-8-28 11:09
t没有初始化,虽然定义了全局变量pid,但是却没有用上。
PID_Loc函数内使用的是t,kp, ki, kd都是0

前面的变量都是float型,打印的时候又搞个%d,这是闹哪样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-28 14:17:02 | 显示全部楼层
coray 发表于 2020-8-28 11:17
前面的变量都是float型,打印的时候又搞个%d,这是闹哪样

这个影响不大吧 只是类型转化 我打印改成%f 也是不变的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-28 14:44:39 | 显示全部楼层
coray 发表于 2020-8-28 11:17
前面的变量都是float型,打印的时候又搞个%d,这是闹哪样

确实这是个问题 我改了  数字是动了 但是好像还是有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-24 08:55:57 | 显示全部楼层
Json21 发表于 2020-8-28 11:09
t没有初始化,虽然定义了全局变量pid,但是却没有用上。
PID_Loc函数内使用的是t,kp, ki, kd都是0

刚刚才看到 抱歉 我去看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-24 09:08:51 | 显示全部楼层
Json21 发表于 2020-8-28 11:09
t没有初始化,虽然定义了全局变量pid,但是却没有用上。
PID_Loc函数内使用的是t,kp, ki, kd都是0
  1. PID_Loc(5, j , &t);        
  2.                 printf ("%f\n",t.out);
复制代码

这段我用上了t
kp ki kd 在结构体之后我进行了赋值
  1. PID pid = {10.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0};
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-24 14:29:28 | 显示全部楼层
结构体,还没学,加油~努力~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-2 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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