您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页PWM程序

PWM程序

来源:爱够旅游网
直流电机PI控制-PWM部分

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 #include #include bit flag=1;

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 #include #include #include struct PID {

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务