⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsp28_pid.c

📁 利用DSP实现PID控制功能
💻 C
字号:
//2008.2.27
//###########################################################################
//###########################################################################
//###########################################################################

/*
#include "DSP28_PID.h"
#include <stdio.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
//struct _pid warm,*pid;
//float process_point,set_point,dead_band;
//float p_gain,i_gain,d_gain,integral_val,new_integ;
//float integral_val;
/*---------------------------------------------------------------------------
pid_init
  DESCRIPTION This function initializes the pointers in the _pid sturcture to
  the process variable and the setpoint.
---------------------------------------------------------------------------*/
/*void pid_init(struct _pid *warm, float process_point, float set_point)
 {
  struct _pid *pid;
  pid = warm;
  pid->pv = process_point;
  pid->sp = set_point;
 }
/*---------------------------------------------------------------------------
pid_tune
  DESCRIPTION Sets the proportional gain(p_gain),integral gain(i_gain),
  derivitive gain(d_gain),and the dead band(dead_band) of a pid control
  structure _pid.
---------------------------------------------------------------------------*/
/*void pid_tune(struct _pid *pid, float p_gain, float i_gain, float d_gain, 
float dead_band,float integral_val)
 {
  pid->pgain = p_gain;
  pid->igain = i_gain;
  pid->dgain = d_gain;
  pid->deadband = dead_band;
  pid->integral = integral_val;
  pid->last_error = 0;
 }
/*---------------------------------------------------------------------------
pid_setinteg
  DESCRIPTION Set a new value for the integral term of the pid equation.
  This is useful for setting the initial output of the pid controller at 
  start up
---------------------------------------------------------------------------*/
/*void pid_setinteg(struct _pid *pid,float new_integ)
 {
  pid->integral = new_integ;
  pid->last_error = 0;
 }
/*---------------------------------------------------------------------------
pid_bumpless
  DESCRIPTION Bumpless transfer algorithim.When suddenly changing setpoints,or
  when restarting the PID equation after an extended pause,the derivative of 
  the equation can cause a bump in the controller output.This function will 
  help smooth out that bump.The process value in *pv should be the updated 
  just before this function is used. 
---------------------------------------------------------------------------*/
/*void pid_bumpless(struct _pid *pid)
 {
  pid->last_error = (pid->sp)-(pid->pv);
 }
/*---------------------------------------------------------------------------
pid_calc
  DESCRIPTION Performs PID calculations for the _pid structure *a.This function
  uses the positional form of the pid equation,and incorprates an integral 
  windup prevention algorithim.Rectangular integration is used,so this function
  must be repeated on a consistent time basis for accurate control.需要修改
---------------------------------------------------------------------------*/
/*float pid_calc(struct _pid *pid)
{
 float err;
 float pterm,dterm,result,ferror;
 err = (pid->sp)-(pid->pv);
 if(abs(err)>pid->deadband)
 {
  ferror = (float) err;
  pterm = pid->pgain*ferror;
  if(pterm>100||pterm<-100)
   {
    pid->integral = 0.0;
   }
   else
    {
     pid->integral += pid->igain*ferror;
	 if(pid->integral > 100.0)
	  {
	   pid->integral = 100.0;
	  }
	  else if (pid->integral < 0.0) 
	   {
	    pid->integral = 0.0;
	   }
    }
  dterm = ((float)(err-pid->last_error)) * pid->dgain;
  result = pterm + pid->integral + dterm;
 }
  else result = pid->integral;
  pid->last_error=err;
  return (result);
}  
*/
//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -