1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言自行车存放管理系统 C语言程序编写单片机控制的电动自行车驱动系统程序...

c语言自行车存放管理系统 C语言程序编写单片机控制的电动自行车驱动系统程序...

时间:2020-07-26 10:16:28

相关推荐

c语言自行车存放管理系统 C语言程序编写单片机控制的电动自行车驱动系统程序...

>1);

CCPR1L=FULLDUTY;

asm("CLRWDT");

}while(voltage>=1;

curek=gcur-currenth;//计算本次偏差

curuk=curuk+curek*CURA-curep;//按闭环PI运算方式得到本次输出结果,下

//面对结果进行处理

if(curuk<0x00) {//如果输出小于零,则认为输出为零

curuk=0;CCPR1L=FULLDUTY;CCP1X=0;CCP1Y=0;

}

else if(curuk-THL>=0){//如果输出大于限幅值,则输出最大电压

curuk=THL;CCPR1L=0;CCP1X=0;CCP1Y=0;

}

else{//否则,按比例输出相应的高电平时间到CCPR1寄存器

b.pwm=THL-curuk;

b.pwm<<=1;

CCPR1L=b.a[1]; //CCPR1L=(b.pwm>>8)&0x0ff;将PWM寄存器的高半字节

if(b.pwm&0x80!=0) CCP1X=1;

else CCP1X=0;

if(b.pwm&0x40!=0) CCP1Y=1;

else CCP1Y=0;

}

}

//---------------转速环运算子程序-----------------------

void SPEPI()

{static int speep=0x00,speek=0x00,speuk=0x00;

int tsh1,speed1;//转速寄存器定义

spepid=0;//清转速运算标志

if(spe==1)speed1=0x00;//若转速太低,则认为转速为零

else speed1=0x7f-speed;//否则计算实际转速

if(speed1<0) speed1=0;

speep=speek*SPEB;

tsh1=tsh-0x38;//得到计算用的手柄值

speek=tsh1-speed1;

if(tsh1<0) {speuk=0;gcur=0;}//当手柄值低于1.1 V时,则认为手柄给定为零

else {//否则,计算相应的转速环输出

if(tsh1>=GSPEH)//限制最大转速

tsh1=GSPEH;

speuk=speuk+speek*SPEA-speep;//计算得转速环输出

if(speuk<=0X00) {speuk=0x00;gcur=0x00;}//转速环输出处理

else if(speuk>GCURHILO){//转速环输出限制,即限制最大电流约12 A

speuk=GCURHILO;gcur=GCURH;}

else{//调速状态时的输出

gcur=(speuk>>4)&0x0ff;

}

}

}

//-----------主程序-------------------------

main()

{

for(;;){

INIT877();//单片机复位后,先对其进行初始化

off=0;//清复位标志

for(;off==0;){//复位标志为零,则执行下面程序,否则复位

if(curpid==1) CURPI();//电流PI运算

else if(spepid==1)SPEPI();//转速PI运算

else if(lowpower==1)POWER();

else if(shutdown==1)BREAKON();

asm("CLRWDT");

}

}

}

//---------中断服务子程序---------------------

#pragma interrupt_level 1

void interrupt INTS(void)

{

if(RBIF==1){RBIF=0;sample();}

else if(ADIF==1)AD();

else if(INTF==1){shutdown=1;INTF=0;}//刹车中断来,置刹车标志

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。