#include "Data_EngineSpeed.h" #include "CAN_Communication_Matrix.h" #include "GaugesInterface.h" #include "RTE_PWM_OUT.h" //------------------------------------------- //转速数据处理 wangboyu //------------------------------------------- //断码显示 //------------------------------------------- //342 - 3.2. 行驶记录仪 //------------------------------------------- static struct { uint16_t Value ; uint16_t Valid ; uint8_t CurSeg ; }TachoVariable ; static uint8_t CalTacho_CurSeg(uint8_t Valid,uint16_t Value); /*------------------------------------------------------------------------- * Function Name : Tacho_KL30_Init * Description : 转速KL30初始化 * Input : None * Output : None * Return : None * onther : None --------------------------------------------------------------------------*/ void Tacho_KL30_Init(void) { TachoVariable.Value = 0 ; TachoVariable.Valid = 0 ; TachoVariable.CurSeg = 0 ; } void Tacho_KL15_ON_Init(void) { TachoVariable.Value = 0 ; TachoVariable.Valid = 0 ; TachoVariable.CurSeg = 0 ; } void Tacho_KL15_OFF_Init(void) { TachoVariable.Value = 0 ; TachoVariable.Valid = 0 ; TachoVariable.CurSeg = 0 ; } void Tacho_Wakeup_Init(void) { TachoVariable.Value = 0 ; TachoVariable.Valid = 0 ; TachoVariable.CurSeg = 0 ; } void Tacho_Sleep_Init(void) { TachoVariable.Value = 0 ; TachoVariable.Valid = 0 ; TachoVariable.CurSeg = 0 ; } /*------------------------------------------------------------------------- * Function Name : Tacho_Processing_Service * Description : 转速 * Input : None * Output : None * Return : None * onther : None --------------------------------------------------------------------------*/ void Tacho_Processing_Service(void) { uint16_t Msg_Epm_nEng = 0 ; uint32_t u32Result = 0 ; uint16_t Fre = 0 ; Msg_Epm_nEng = Get_ID_CF00400_Sig_Engine_speed(); TachoVariable.Valid = 0 ; if(Msg_Epm_nEng > 0xFAFF) {//abnormal u32Result = 0 ; } else if(Msg_Epm_nEng > 0x5DC0) { u32Result = 3000u ; } else { TachoVariable.Valid = 1 ; u32Result = Msg_Epm_nEng ; u32Result *= 125u ; u32Result += 500u ; u32Result /= 1000u ; } if(u32Result > 3000u) { u32Result = 3000u ; } TachoVariable.Value = RevSpeedManage((uint16_t)u32Result); TachoVariable.CurSeg = CalTacho_CurSeg(TachoVariable.Valid,TachoVariable.Value); //转*每转脉冲数/60=频率 u32Result *= 4 ; u32Result /= 60 ; Fre = (uint16_t)u32Result ; RTE_PWM_Set_Tacho_Out(Fre,500) ; } /*------------------------------------------------------------------------- * Function Name : Tacho_Display * Description : 计算转速当前格 * Input : None * Output : None * Return : None * onther : None --------------------------------------------------------------------------*/ static uint8_t CalTacho_CurSeg(uint8_t Valid,uint16_t Value) { uint8_t u8Result = 0u; if(Valid) { } else { //范围外/CAN中断 } SetGaugesPara(RevGauges,Value); u8Result = GetGaugesCurrentPos(RevGauges) ; return u8Result ; } /*------------------------------------------------------------------------- * Function Name : Tacho_Get_ActualValue * Description : 1倍转速 * Input : None * Output : None * Return : None * onther : None --------------------------------------------------------------------------*/ uint16_t Tacho_Get_ActualValue(void) { uint16_t u16Result = 0u; u16Result = TachoVariable.Value ; return u16Result; } /*------------------------------------------------------------------------- * Function Name : Tacho_Get_Valid * Description : * Input : None * Output : None * Return : None * onther : None --------------------------------------------------------------------------*/ uint8_t Tacho_Get_Valid(void) { uint8_t u8Result = 0u; u8Result = TachoVariable.Valid ; return u8Result; } /*------------------------------------------------------------------------- * Function Name : Tacho_Get_CurSeg * Description : 转速当前格 * Input : None * Output : None * Return : None * onther : 应用于断码 --------------------------------------------------------------------------*/ uint8_t Tacho_Get_CurSeg(void) { return TachoVariable.CurSeg ; }