OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2846|回复: 4

我自己写了个PID,希望那个大家帮我看看对不对。

[复制链接]

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-12
在线时间
0 小时
发表于 2015-7-13 20:37:23 | 显示全部楼层 |阅读模式
#include "pid.h"

struct _pid{ 

    float SetSpeed;            //定义设定值 
    float ActualSpeed;         //定义输出实际值 
    float err;                 //定义偏差值 
    float err_last;            //定义上一个偏差值 
    float Kp,Ki,Kd;            //定义比例、积分、微分系数 
    float voltage;             //定义电压值?控制执行器的变量? 
    float integral;            //定义积分值 


}pid;  

 

void PID_init(float Kp,float Ki,float Kd)


    pid.SetSpeed=0.0; 
    pid.ActualSpeed=0.0; 
    pid.err=0.0; 
    pid.err_last=0.0; 
    pid.voltage=0.0; 
    pid.integral=0.0;

    pid.Kp=Kp; 
    pid.Ki=Ki; 
    pid.Kd=Kd; 



 

float PID_realize(float SetSpeed,float ActualSpeed){ 

float index;
float umax=120;               //最大上限
float umin=-10;               //最大下限 
    pid.err=SetSpeed-ActualSpeed; 

  if(ActualSpeed>umax)            // 实际速度大于最大上限制,只累负的差值
    { 
       if(pid.err>200||pid.err<-200)      //积分分离,差值过大的时候,不启用积分;
        { 
            index=0.0; 
        }
else

            index=1.0; 
            if(pid.err<0) 
            { 
              pid.integral+=pid.err; 
            } 
        } 

    }
else if(pid.ActualSpeed<umin)     //实际速度小于最大下限制,只累正的差值

        if(pid.err>200||pid.err<-200)      //积分分离,差值过大的时候,不启用积分;
        { 
            index=0.0; 
        }
else

            index=1.0; 
            if(pid.err>0) 
            { 
            pid.integral+=pid.err; 
            } 
          } 

    }
else

         if(pid.err>200||pid.err<-200)                     //积分分离过程 
        { 
            index=0.0; 
        }
else

            index=1.0; 
            pid.integral+=pid.err; 
          }
    }
 
    pid.voltage=pid.Kp*pid.err+index*pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last); 
    pid.err_last=pid.err; 
    pid.ActualSpeed=pid.voltage*1.0; 
    return pid.ActualSpeed; 

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2013-8-3
在线时间
63 小时
发表于 2015-7-13 21:23:04 | 显示全部楼层
有没有运行看看效果啦,有些东东,看是看不出什么的,只有试了后,看结果如何啦,
我只是一个新手,只少我都是这样做的啦,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-13 22:32:06 | 显示全部楼层
帮顶.....
回复 支持 反对

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2015-6-12
在线时间
0 小时
 楼主| 发表于 2015-7-14 00:58:12 | 显示全部楼层
回复【2楼】笑看风云:
---------------------------------并不会测
回复 支持 反对

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-7-14 07:56:44 | 显示全部楼层
回复【4楼】棒棒糖:
---------------------------------
PID思想很简单,自己思路不错,那程序也好写的
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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