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;}//刹车中断来,置刹车标志

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值