亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機PID抗飽和積分程序+Proteus仿真
[打印本頁]
作者:
nhwdb
時間:
2019-9-25 15:51
標題:
51單片機PID抗飽和積分程序+Proteus仿真
這是一個C51的PID調節的源程序。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(11.32 KB, 下載次數: 68)
下載附件
2019-9-25 16:01 上傳
單片機源程序如下:
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include <math.h>
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
#ifndef ulong
#define ulong unsigned long
#endif
/*
struct _pid{
float SetSpeed; //定義設定值
float ActualSpeed; //定義實際值
float err; //定義偏差值
float err_last; //定義上一個偏差值
float Kp,Ki,Kd; //定義比例、積分、微分系數
float voltage; //定義電壓值(控制執行器的變量)
float integral; //定義積分值
float umax;
float umin;
}pid;
void PID_init(){
printf("PID_init begin \n");
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=0.4;
pid.Ki=0.2; //注意,和上幾次相比,這里加大了積分環節的值
pid.Kd=0.2;
pid.umax=400;
pid.umin=-200;
printf("PID_init end \n");
}
float PID_realize(float speed){
int index;
pid.SetSpeed=speed;
pid.err=pid.SetSpeed-pid.ActualSpeed;
if(pid.ActualSpeed>pid.umax) //灰色底色表示抗積分飽和的實現
{
if(abs(pid.err)>200) //藍色標注為積分分離過程
{ index=0; }
else{
if(abs(pid.err)>180) {index=(200-abs(err))/20;}
else{index=1;}
if(pid.err<0)
{
pid.integral+=pid.err;
}
}
}
else
if(pid.ActualSpeed<pid.umin)
{
if(abs(pid.err)>200) //積分分離過程
{ index=0; }
else{
if(abs(pid.err)>180) {index=(200-abs(err))/20;}
else{index=1;}
if(pid.err>0)
{
pid.integral+=pid.err;
}
}
}
else
{
if(abs(pid.err)>200) //積分分離過程
{ index=0; }
else{
if(abs(pid.err)>180) {index=(200-abs(err))/20;}
else{index=1;}
pid.integral+=pid.err;
}
}
//pid.voltage=pid.Kp*pid.err+index*pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);
//pid.voltage=pid.Kp*pid.err+index*pid.Ki*pid.integral/2+pid.Kd*(pid.err-pid.err_last); //梯形積分
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;
}
*/
void main()
{
uint idata count=0;
int idata speed1,speed3=0;
// uchar speed2;
SCON=0x50;
TMOD=0x20;
TCON=0x40;
TH1=0xe8;
TL1=0xe8;
TI=1;
TR1=1;
printf("System begin \n");
PID_init();
while(1)
{
if(count<100)
{
speed1 = PID_contral(250, speed3 );
// printf("%f\n",speed);
printf("%d\n",speed1);
printf("%5d\n",speed3);
// if(speed3<151){speed3 +=20;}
// if((speed3>150)&&(speed3<181)){speed3 += 10;}
// if((speed3>180)&&(speed3<191)){speed3 += 2;}
if(speed3<250){speed3 += 10;}
}
if((count>99)&&(count<150))
{
speed1=PID_contral(200,speed3);
printf("%d\n",speed1);
printf("%5d\n",speed3);
if(count<110) {speed3 -= 2;}
if((count>119)&&(count<130)) {speed3 -= 1;}
// else speed3 =202;
}
count++;
if(count>150){break;}
}
}
復制代碼
0.png
(9.17 KB, 下載次數: 73)
下載附件
2019-9-25 16:02 上傳
所有資料51hei提供下載:
pid抗飽和變積分.rar
(103.99 KB, 下載次數: 37)
2019-9-25 15:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
高德辛
時間:
2019-9-27 16:02
keil編譯不通過,提供的仿真一直發送“覽”,你告訴我你干啥呢?
作者:
jnshuhe
時間:
2019-9-28 07:38
這里高手真多,學習了,謝謝樓主!
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1