U291312403938373635343312345678RESETXTAL1XTAL2PA0/ADC0PA1/ADC1PA2/ADC2PA3/ADC3PA4/ADC4PA5/ADC5PA6/ADC6PA7/ADC7PB0/XCK/T0PB1/T1PB2/INT2/AIN0PB3/OC0/AIN1PB4/SSPB5/MOSIPB6/MISOPB7/SCKATMEGA328L298PC0/SCLPC1/SDAPC2/TCKPC3/TMSPC4/TDOPC5/TDIPC6/TOSC1PC7/TOSC2PD0/RXDPD1/TXDPD2/INT0PD3/INT1PD4/OC1BPD5/OC1APD6/ICPPD7/OC222232425262728291415161718192021D11N414571012611115IN1IN2IN3IN4ENAENBVCC4VSOUT1OUT2OUT3OUT4GNDD21N4148U1231314+88.8AVCCAREF3032D31N4148D41N4148SENSASENSB
PI_PWM部分
#include unsigned char pwm=0; unsigned char a,b; sbit P21=P2^1; sbit P20=P2^0; void sdf() interrupt 3 using 0 //定时255us,0.063s { P1=0x00; if(flag==1) {a--; if(a==0) {flag=0; a=1; } else {P21=0;} } if(flag==0) {b--; if(b==0) {flag=1; b=253; } else {P21=1;} } } main() {TMOD=0x20; TH1=0x06; //对TH0 TL0 赋值 TL1=0x06; P20=1; ET1=1; TF1=0; b=1; a=253; TR1=1; EA=1; while(1); } PID控制程序 #include unsigned int SetPoint; /* 设定目标 Desired Value*/ unsigned int Proportion; /* 比例常数 Proportional Const*/ unsigned int Integral; /* 积分常数 Integral Const*/ unsigned int Derivative; /* 微分常数 Derivative Const*/ unsigned int LastError; /*Error[-1]*/ unsigned int PrevError; /* Error[-2]*/ unsigned int SumError; /*Sums of Errors*/ }; struct PID spid; /*PID Control Structure*/ unsigned int rout; /* PID Response (Output)*/ unsigned int rin; /*PID Feedback (Input)*/ sbit data1=P1^0; sbit clk=P1^1; sbit plus=P2^0; sbit subs=P2^1; sbit stop=P2^2; sbit output=P3^4; sbit DQ=P3^3; unsigned char flag,flag_1=0; unsigned char high_time,low_time,count=0;/*占空比调节参数*/ unsigned char set_temper=35; unsigned char temper; unsigned char i; unsigned char j=0; unsigned int s; /******************************************************************** PID计算部分 ********************************************************************/ unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint ) { unsigned int dError,Error; Error = pp->SetPoint - NextPoint; // 偏差 pp->SumError += Error; // 积分 dError = pp->LastError - pp->PrevError; // 当前微分 pp->PrevError = pp->LastError; pp->LastError = Error; return (pp->Proportion * Error // 比例项 + pp->Integral * pp->SumEror // 积分项 + pp->Derivative * dError); // 微分项 } low_time= (100-high_time); } } else if(set_temper<=temper) { if(temper-set_temper>0) { high_time=0; low_time=100; } else { for(i=0;i<10;i++) { get_temper(); rin = s; // Read Input rout = PIDCalc ( &spid,rin ); // Perform PID Interation } if (high_time<100) high_time=(unsigned char)(rout/10000); else high_time=0; low_time= (100-high_time); } } // else // {} } break; } EA=1; } get_temper(); b=temper; if(flag_2==1) a=b; if((abs(a-b))>5) temper=a; else temper=b; a=temper; flag_2=0; if(++count1>30) { display(); count1=0; } compare_temper(); } TR0=0; z=1; while(1) { EA=0; if(stop==0) { for(a=0;a<5;a++) for(b=0;b<102;b++){} if(stop==0) disp_1(phil); // break; } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务