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

📄 main.c

📁 基于MC9S12DG128的PID控制
💻 C
字号:
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#include<stdio.h>
#include<string.h>
int S_DATA[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int F_DATA[20]={20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int i=0;
int Rout=0;
int Rin=0;
struct PID
	{
  int Setpoint;
  int Proportion;
  int Integral;
  int Derivative;
  int Pre2err;
  int Preerr;
	}Spid;
int PIDCale(struct PID *p,int Feedback)
	{
  register unsigned int Err=0,Perr=0,Derr=0;
  int Du=0;
  Err=p->Setpoint-Feedback;
  Perr=Err-p->Preerr;
  Derr=Err-2*(p->Preerr)+p->Pre2err;
  Du=p->Proportion*Perr+p->Derivative*Derr+p->Integral*Err;
  p->Pre2err=p->Preerr;
  p->Preerr=Err;
  return Du;
  }
void PIDinit(void) 
{
  Spid.Setpoint=0;
  Spid.Proportion=0;
  Spid.Integral=0;
  Spid.Preerr=0;
}


void main(void) 
{
  PIDinit();
  Spid.Proportion=5;
  Spid.Integral=5;
  Spid.Derivative=10;
  DDRA=0xff;
  EnableInterrupts;

for(;;) 
{
  Rin=F_DATA[i];
	Spid.Setpoint=S_DATA[i];
	Rout=PIDCale(&Spid,Rin);
  PORTA=Rout;
  i++;
  if(i==20)
     i=0;

} 
 
}

⌨️ 快捷键说明

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