资源简介

在PID算法中,我们如果只是使用单个闭环PID控制会出现很多的不足。例如我们在单独使用位置环时,在电机未能达到预设位置时,电机的运行状态是100%PWM满偏运行的,这样在我们实际运用时,如果我们使用的电机功率很高就会造成速度过快的现象。所以在电机的控制过程中,最好是多环控制。 在设计过程中,我是不断地尝试得出的结果。最终得出将位置环和速度环的输出叠加的方法,在位置没有到达预设位置时虽然位置环的输出会是满偏,但满偏会让速度出现偏差,速度环就会输出负值反过来抑制总的输出,这样我们就可以在实现位置环的同时也有了速度环的控制。但注意的是在快达到预设位置时需要将速度环关闭。

资源截图

代码片段和文件信息

#include “pid.h“

PID pid; //存放PID算法所需要的数据
PID1 pid1;
void PID_Init()
{
pid.Sv=03000;     //用户设定值
pid.Pv=00.0;      //检测值
pid.OUT0 =00;      //PID常数
pid.Ek=0.0;       //当前误差值
pid.Ek_1=0.0;     //上一个误差值
pid.Ek_2=0.0;     //上上一个误差值
pid.Kp=36;     //比例常数
pid.Ki=0.25;       //积分常数
pid.Kd=135;       //微分常数
pid.uplimit=6000; //上限值
pid.lowlimit=-6000;//下限值
}
void PID1_Init()
{
pid1.Sv=1400.525;     //用户设定值
pid1.Pv=00.0;      //检测值
pid1.OUT0 =0;      //PID常数
pid1.Ek=0.0;       //当前误差值
pid1.Ek_1=0.0;     //上一个误差值
pid1.Ek_2=0.0;     //上上一个误差值
pid1.Kp=6.5;     //比例常数
pid1.Ki=0.36;       //积分常数
pid1.Kd=0.00005;       //微分常数
pid1.uplimit=6000; //上限值
pid1.lowlimit=-6000;//下限值
pid1.PIDOUT=-6000;
}
float Set_Pwm(float moto1)
{
float OUT;
if(moto1>0) AIN2=0 AIN1=1;
else            AIN2=1 AIN1=0;
OUT=myabs(moto1);
return OUT;
}
//绝对值函数
float myabs(float a)
{     
  int temp;
if(a<0)  temp=-a;  
  else temp=a;
  return temp;
}

int PID1_output ()
{
float PIDOUT;
pid1.Ek=pid1.Sv-pid1.Pv;
PIDOUT=pid1.Kp*(pid1.Ek-pid1.Ek_1)+pid1.Ki*pid1.Ek+pid1.Kd*(pid1.Ek_2*pid1.Ek_1+pid1.Ek_2)+pid1.OUT0;
pid1.Ek_2=pid1.Ek_1;
pid1.Ek_1=pid1.Ek;
pid1.PIDOUT+=PIDOUT;
pid1.PIDOUT=(pid1.PIDOUTpid1.uplimit) ? pid1.uplimit : pid1.PIDOUT;
return pid1.PIDOUT;
}
int PID_output ()
{
float PIDOUT;
pid.Ek=pid.Sv-pid.Pv;
PIDOUT=pid.Kp*pid.Ek+pid.Ki*(pid.Ek+pid.Ek_1+pid.Ek_2)+pid.Kd*(pid.Ek-pid.Ek_1)+pid.OUT0;
pid.Ek_2=pid.Ek_1;
pid.Ek_1=pid.Ek;
pid.PIDOUT=PIDOUT;
pid.PIDOUT=(pid.PIDOUTpid.uplimit) ? pid.uplimit : pid.PIDOUT;
return pid.PIDOUT;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-07-21 15:14  PID\
     文件        1845  2019-07-21 15:14  PID\pid.c
     文件         818  2019-07-21 14:28  PID\pid.h

评论

共有 条评论