您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机单片机控制的电动自行车驱动系统 正文
单片机控制的电动自行车驱动系统

单片机控制的电动自行车驱动系统

点击数:7501 次   录入时间:03-04 11:53:39   整理:http://www.55dianzi.com   PIC单片机
    if(voltage<VOLOFF) {            //电池电压小于3*k(V)时保护
    ADIE=0;
        INTE=0;
        TMR1ON=0;
        CCPR1L=FULLDUTY;
        for(;ADGO==1;)continue;
        ADIF=0;
        CHS0=0;CHS1=1;
        x=1;
DELAY1(x);
        do{ADGO=1;
             for(;ADIF==0;)continue;
             ADIF=0;
             voltage=(ADRESH>>1);
             CCPR1L=FULLDUTY;
         asm("CLRWDT");
         }while(voltage<VOLON);    //电池电压小于35 V时继续保护
         off=1;                    //置复位标志
    }
}
//------------电流环运算子程序-----------------
void CURPI()
{    static int curep=0x00,curek=0x00,curuk=0x00;
    union data{int pwm;
        char a[2];}b;            //定义电流环运算寄存器
    curpid=0;                    //清电流运算标志
    curep=curek*CURB;            //计算上一次偏差与比例系数的积
    if(currenth<2)currenth=2;        //如果采样电流为零,则认为有一个小电流以利于
//使转速下降
    currenth>>=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;)    {        //复位标志为零,则执行下面程序,否则复位

上一页  [1] [2] [3] [4]  下一页


本文关键字:单片机  电动自行车  PIC单片机单片机-工控设备 - PIC单片机