#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define KP 100
#define TI 2
#define TD 1
#define T 1
sbit start=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
float y_cur;
float y_pre;
float e_cur;
float e_pre;
float e_last;
float u_cur;
float u_pre;
float u_aug;
uchar AD;
uint INPUT=3;
uint r;
void pid_init()
{
r=INPUT;
y_cur=0;
y_pre=0;
u_pre=0;
e_pre=0;
e_last=0;
}
float pid_process()
{
float q0, q1, q2;
e_cur=r-y_cur;
q0=(float)( KP*(1+T/TI+TD/T));
q1=-KP-2*KP*TD/T;
q2=KP*TD/T;
u_aug=q0*e_cur+q1*e_pre+q2*e_last;
u_cur=u_aug+u_pre;
u_pre=u_cur;
e_last=e_pre;
e_pre=e_cur;
y_pre=y_cur;
return u_cur;
}
void dac1()
{
uint idata out;
out=(int)(pid_process());
P0=out;
}
void delayms()
{
int i,j;
for(i=0;i<1000;i++)
{
for(j=0;j<10;j++);
{
;
}
}
}
void ad_0808( )
{
start=1;
start=0;
while(EOC==0)
{
OE=1;
}
AD=P2;
OE=0;
}
void adc()
{
ad_0808();
y_cur=AD;
}
void main()
{
pid_init();
while(1)
{
delayms();
dac1();
adc();
}
}
- 1
- 2
- 3
- 4
- 5
前往页