//==============================================================
void	F_Eng1EntertSet(void)
{
  switch(R_Mode)
  {
    case	0:			
      R_Mode=1;
      if(EE_Read(EE_Unit)!=ChangeUnitFlg) 
      { //  切換公英制 需重新清除相關 eeprom
        F_EepromClear_2();
        EE_Write(EE_SaveUserInit,1);
      }
      break;
      //=============	
      case	1:	
        R_Mode=2;		
        F_Write2Byte(EE_WheelSize_L,R_WheelSize);
        break;
        //=============	
        case	2:			
          R_Mode=3;
          if(ChangeUnitFlg)
            EE_Write(EE_SpeedMinMile,R_SpeedMin); 
          else
            EE_Write(EE_SpeedMinKm,R_SpeedMin); 
          break;	
          //=============	
          case	3:			
            R_Mode=4;
            if(ChangeUnitFlg)
              EE_Write(EE_SpeedMaxMile,R_SpeedMax);  
            else
              EE_Write(EE_SpeedMaxKm,R_SpeedMax);
            break;
            //=============	
            case	4:		
              R_Mode=5;
              EE_Write(EE_IncMax,R_IncMax);
              break;
              //=============	
              case	5:		
                R_Mode=0;
                EE_Write(EE_IncZeroAdr,R_IncZeroAdr);
                if(IncUpDownFlg==1) 
                {
                  R_IncMaxAd = R_IncCarryAd;
                }
                else
                {
                  R_IncMinAd = R_IncCarryAd;
                }                
                F_IncFinsh();
                break;
  }
}
예제 #2
0
//========================
void  F_GraphSpeedInc(void)
{
    unsigned	char	SpeedAdrTemp,IncAdrTemp;
    switch(R_PorgMode)
    {
      case	User1Val:
        SpeedAdrTemp=User_1_SpeedAdrVal;
        IncAdrTemp=User_1_IncAdrVal;
        break;
        //============
        case	User2Val:
          SpeedAdrTemp=User_2_SpeedAdrVal;
          IncAdrTemp=User_2_IncAdrVal;	
          break;
          //============
          case	User3Val:
            SpeedAdrTemp=User_3_SpeedAdrVal;
            IncAdrTemp=User_3_IncAdrVal;
            break;
            //============
    }
    EE_Write(SpeedAdrTemp+R_ProgramIndex,R_User_SetSpeed);
    EE_Write(IncAdrTemp+R_ProgramIndex,R_User_SetInc);
    //===========
    R_ProgramIndex++;
    if(R_ProgramIndex>=30)
    {
      R_ProgramIndex=0;
      R_Mode=0;
    }
    else
    {
      R_User_SetSpeed=EE_Read(SpeedAdrTemp+R_ProgramIndex);
      R_User_SetInc=EE_Read(IncAdrTemp+R_ProgramIndex);
      //F_ChangeGraphInc(R_ProgramIndex,R_User_SetInc);
      //F_ChangeGraphSpeed(R_ProgramIndex,R_User_SetSpeed);
    }
}
예제 #3
0
//=====================================
void	F_SpeedAuto(unsigned	char	Speed)
{
  unsigned	char	i;
  R_SpeedBuf=Speed;
  switch(R_SpeedAutoCnt)
  {
    case	0:	//	低速校正
      if((Speed>=R_SpeedMin) &&(Speed<=R_SpeedMin+2))
      {	//	低速校正結束
        R_LowSpeedCntDelay++;
        if(R_LowSpeedCntDelay>2)
        {
          R_LowSpeedCntDelay=0;
          R_PwmLowSpeed=R_SpeedPwmCntSave;
          EE_Write(EE_PwmLowSpeed,R_PwmLowSpeed);
          R_SpeedAutoCnt=1;
        }
      }
      else	if(R_SpeedMin>Speed)
      {
        R_LowSpeedCntDelay=0;					
        MotoUpDownFlg=0;			//	馬達加速 
        R_SpeedPwmCnt=1;
      }
      else
      {
        R_LowSpeedCntDelay=0;		
        MotoUpDownFlg=1;		//	馬達減速
        R_SpeedPwmCnt=1;
      }
      break;
      //============================
      case	1:	//	高速確認 
        if(R_SpeedMax<=Speed)		//校正完成
        {	
          SpeedAutoFlg=0;		//速度校正完成
          R_SpeedPwmCnt=0;
          F_SpeedSwCotrol(0);
        }
        else
        {
          if(R_SpeedMax>Speed)
          {
            MotoUpDownFlg=0;			//	馬達加速
            i=R_SpeedMax-Speed;
          }
          else
          {
            MotoUpDownFlg=1;		//	馬達減速
            i=Speed-R_SpeedMax;
          }
          if(i>99)            // > ±5.0Km
            R_SpeedPwmCnt = 25;
          else if(i>49)     // > ±4.0Km 
            R_SpeedPwmCnt = 20;
          else if(i>39)     // > ±3.0Km
            R_SpeedPwmCnt = 13;
          else if(i>19)     // > ±2.0Km
            R_SpeedPwmCnt = 10;
          else if(i>9)       // > ±1.0Km
            R_SpeedPwmCnt = 8;
          else if(i>2)       // > ±0.5Km
            R_SpeedPwmCnt = 3;
          else if(i>0)       // > ±0.1Km
            R_SpeedPwmCnt = 1;  				// 1 階
        }
        break;
  }
}
예제 #4
0
//==========================================================
//自動校正
//==========================================================
void  F_IncAuto(void)
{
    unsigned  char  i;
    R_IncAutoTime++;
    F_IncAd(R_IncAutoAd);
    //=====================
    if(R_IncAutoTemp1<=253)
        R_IncAutoTemp1=R_IncAutoTemp1+2;
    else
        R_IncAutoTemp1=R_IncAutoTemp1;
    if(R_IncAutoTemp2>=2)
        R_IncAutoTemp2=R_IncAutoTemp2-2;
    else
        R_IncAutoTemp2=R_IncAutoTemp2;
    //=====================
    switch(R_IncAutoCnt)          //  揚升校準處理
    {
    case  0:
        F_IncIoUpControl(1);        //  開啟上升繼電器
        F_IncIoDownControl(0);      //  關閉下降繼電器
        R_IncAutoTime=0;
        R_IncAutoCnt=1;
        break;
    //===================================
    case  1:
        if((R_IncNumAd>=R_IncAutoTemp2)&&(R_IncNumAd<=R_IncAutoTemp1))
        {
            if(R_IncAutoTime>60)      //  穩定超過6秒
            {
                R_IncAutoTime=0;
                F_IncIoUpControl(0);    //  關閉上升繼電器
                R_IncMinAd=R_IncNumAd;
                R_IncAutoCnt=2;
            }
        }
        else
        {
            R_IncAutoAd=R_IncNumAd;
            R_IncAutoTime=0;
        }
        break;
    //===================================
    case  2:
        if(R_IncAutoTime>=30)       //需要等3秒鐘,才能轉成下降模式
        {
            R_IncAutoTime=0;
            F_IncIoDownControl(1);    //開啟下降繼電器
            R_IncAutoCnt=3;
        }
        break;
    //===================================
    case  3:
        if((R_IncNumAd>=R_IncAutoTemp2)&&(R_IncNumAd<=R_IncAutoTemp1))
        {
            if(R_IncAutoTime>60)      //穩定超過6秒
            {
                R_IncAutoTime=0;
                R_IncMaxAd=R_IncNumAd;
                F_RelayMoveStop();
                IncStopFlg=1;           //揚升關閉
                IncAutoFlg=0;
                if(R_IncMaxAd>R_IncMinAd)
                {   //  正向
                    IncUpDownFlg=1;
                    i=R_IncMaxAd-R_IncMinAd;
                }
                else
                {
                    IncUpDownFlg=0;   //  反向
                    i=R_IncMinAd-R_IncMaxAd;
                }
                if(i<80)
                {   //  揚升校正錯誤
                    //R_FaultData=7;
                }
                else
                {   //  揚升校正 OK
                    if(IncUpDownFlg==1)
                    {
                        EE_Write(EE_IncUpDown,1);
                        R_IncMaxAd=R_IncMaxAd-2;
                        R_IncNumAdBuf=R_IncMaxAd;
                        EE_Write(EE_IncMaxAd,R_IncMaxAd);
                        EE_Write(EE_IncMinAd,R_IncMinAd);
                    }
                    else
                    {
                        EE_Write(EE_IncUpDown,0);
                        i=R_IncMaxAd;			//Max 與 Min 對調
                        R_IncMaxAd=R_IncMinAd;
                        R_IncMinAd=i;
                        R_IncMinAd=R_IncMinAd+2;
                        R_IncNumAdBuf=R_IncMinAd;
                        EE_Write(EE_IncMaxAd,R_IncMaxAd);
                        EE_Write(EE_IncMinAd,R_IncMinAd);
                    }
                }
            }
        }
        else
        {
            R_IncAutoAd=R_IncNumAd;
            R_IncAutoTime=0;
        }
        break;
    }
}
/******************************************************************************
** Function name:   store_persistent
**
** Description:     Saves persistent variables to EEPROM
**
** Parameters:      None
** Returned value:    None
**
******************************************************************************/
void store_persistent (void)
{
  EE_Write(AddressBMUWHR, conv_float_uint(bmu_data.watt_hrs));
  EE_Write(AddressBMUWHRI, conv_float_uint(bmu_data.watt_hrs_in));
  EE_Write(AddressBMUWHRO, conv_float_uint(bmu_data.watt_hrs_out));
}