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

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

点击数:7501 次   录入时间:03-04 11:53:39   整理:http://www.55dianzi.com   PIC单片机
        state1=(PORTB&AND);        //霍尔信号采集
        DELAY1(x);
        state2=(PORTB&AND);
    }while(state1-state2);        //当三次采样结果不相同时继续采集状态
    if(state1-oldstate!=0)        //看本次采样结果是否与上次相同,不同
//则执行
     {oldstate=state1;            //将本次状态设置为旧状态
      state1=(oldstate>>5);
      PORTC=new[state1];              //C口输出相应的信号触发两个MOS管
      if(sp1==1){spe=1;sp1=0;}
      else    {                    //如果转速很低,则spe置1
spe=0;sp1=0;
        speedcount<<=1;
        state3=(TMR1H>>2);        //否则,spe=0,计转速
        speed=speedcount+state3;    //speed寄存器为每256 μs加1
      }
      speedcount=0;
     }
}
//-----------------AD采样子程序----------------------
void AD()
{
    char x;
    ADIF=0;                    //清AD中断标志位
    if(ts==1){                //如果为手柄采样,则采样手柄值
     CHS0=1;                    //选择电流采样通道
     count_vol=count_vol+1;    //电池采样计数寄存器
     spepid=1;                //置转速闭环运算标志
     ts=0;tsh=ADRESH;        //存手柄值
     if(count_vol==0) {    //如果电池采样时间到,则选择AN2通道,采集电池电压
        CHS0=0;CHS1=1;volflag=1;x=1;DELAY1(x);ADGO=1;
      }
    }
    else if(volflag==1) {            //电池采样完毕,进行相应的处理
       CHS1=0;CHS0=1;volflag=0;voltage=ADRESH;lowpower=1;
    }
    else    {                        //否则,中断为采样电流中断
      speedcount=speedcount+1;    //speedcount寄存器加1,作为测量转速用
      if(speedcount>0x3d)  sp1=1;    //如果转速低于1 000 000 μs/(512 μs*3eh*3)    
                                  // 则认为为低速状态
      currenth=ADRESH;
      curpid=1;
      count_ts=count_ts-1;
      if(count_ts==0) {            //如果手柄时间到,则转入手柄采样通道
          CHS0=0;count_ts=0x08;ts=1;x=1;DELAY1(x);ADGO=1;
        }
     }
}
//-------------刹车处理子程序------------------
void BREAKON()
{
    char x;
    off=0;                    //off清零,如果是干扰则不复位
    shutdown=0;
    if(RB0==1)    {            //如果刹车信号为真,则停止输出电压
    ADIE=0;                //关AD中断
        INTE=0;                //关刹车中断
        CCPR1L=FULLDUTY;        //输出电压0
        TMR1ON=0;            //关CCP2,不再触发AD
        for(;ADGO==1;)    continue;//如正在采样,则等待采样结束
        ADIF=0;                //ADIF位清零
        CHS0=0;                //选择通道0采样手柄
        CHS1=0;
        x=1;
DELAY1(x);
        do    {
            ADGO=1;
            for(;ADIF==0;)continue;
            ADIF=0;
            CCPR1L=FULLDUTY;
        asm("CLRWDT");
            tsh=(ADRESH>>1);
        }while(tsh>TSON||RB0==1);    //当手柄值大于2.2 V或刹车仍旧继续时,执行以
                                 //上语句
        off=1;                    //置复位标志
  }
}
//---------欠保护子程序-------------------
void POWER()
{
    char x;
    lowpower=0;
    voltage>>=1;                    //电压值换为7位,以利于单字节运算

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


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