Data_EngineSpeed.c 4.69 KB
Newer Older
hu's avatar
hu committed
1 2 3 4 5
#include "Data_EngineSpeed.h"
#include "CAN_Communication_Matrix.h"
#include "GaugesInterface.h"
#include "RTE_PWM_OUT.h"
//-------------------------------------------
hu's avatar
hu committed
6
//转速数据处理
hu's avatar
hu committed
7 8 9
//-------------------------------------------
//断码显示
//-------------------------------------------
hu's avatar
hu committed
10
// 342 - 3.2.   行驶记录仪
hu's avatar
hu committed
11 12 13 14
//-------------------------------------------

static struct
{
hu's avatar
hu committed
15 16 17 18
    uint16_t Value;
    uint16_t Valid;
    uint8_t CurSeg;
} TachoVariable;
hu's avatar
hu committed
19

hu's avatar
hu committed
20
static uint8_t CalTacho_CurSeg(uint8_t Valid, uint16_t Value);
hu's avatar
hu committed
21 22 23 24 25 26 27 28 29 30
/*-------------------------------------------------------------------------
 * Function Name  : Tacho_KL30_Init
 * Description    : 转速KL30初始化
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
void Tacho_KL30_Init(void)
{
hu's avatar
hu committed
31 32 33
    TachoVariable.Value = 0u;
    TachoVariable.Valid = 0u;
    TachoVariable.CurSeg = 0u;
hu's avatar
hu committed
34 35 36
}
void Tacho_KL15_ON_Init(void)
{
hu's avatar
hu committed
37 38 39
    TachoVariable.Value = 0u;
    TachoVariable.Valid = 0u;
    TachoVariable.CurSeg = 0u;
hu's avatar
hu committed
40 41 42
}
void Tacho_KL15_OFF_Init(void)
{
hu's avatar
hu committed
43 44 45
    TachoVariable.Value = 0u;
    TachoVariable.Valid = 0u;
    TachoVariable.CurSeg = 0u;
hu's avatar
hu committed
46 47 48
}
void Tacho_Wakeup_Init(void)
{
hu's avatar
hu committed
49 50 51
    TachoVariable.Value = 0u;
    TachoVariable.Valid = 0u;
    TachoVariable.CurSeg = 0u;
hu's avatar
hu committed
52 53 54
}
void Tacho_Sleep_Init(void)
{
hu's avatar
hu committed
55 56 57
    TachoVariable.Value = 0u;
    TachoVariable.Valid = 0u;
    TachoVariable.CurSeg = 0u;
hu's avatar
hu committed
58 59 60 61 62 63 64 65 66 67 68
}
/*-------------------------------------------------------------------------
 * Function Name  : Tacho_Processing_Service
 * Description    : 转速
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
void Tacho_Processing_Service(void)
{
hu's avatar
hu committed
69 70 71
    uint16_t Msg_Epm_nEng = 0u;
    uint32_t u32Result = 0u;
    uint16_t Fre = 0u;
hu's avatar
hu committed
72

hu's avatar
hu committed
73
    Msg_Epm_nEng = Get_ID_CF00400_Sig_Engine_speed();
hu's avatar
hu committed
74

hu's avatar
hu committed
75 76 77 78 79 80 81 82
    if (Msg_Epm_nEng > 0xFAFFu)
    {
        TachoVariable.Valid = 0u;
        u32Result = 0u;
    }
    else
    {
        TachoVariable.Valid = 1u;
hu's avatar
hu committed
83

hu's avatar
hu committed
84 85 86 87
        u32Result = Msg_Epm_nEng;
        u32Result *= 125u;
        u32Result += 500u;
        u32Result /= 1000u;
hu's avatar
hu committed
88

hu's avatar
hu committed
89 90 91 92 93
        if (u32Result < 330u)
        {
            u32Result  = 0u;
        }
        else if (u32Result > 3000u)
hu's avatar
hu committed
94 95 96 97
        {
            u32Result = 3000u;
        }
    }
hu's avatar
hu committed
98

hu's avatar
hu committed
99
    TachoVariable.Value = RevSpeedManage((uint16_t)u32Result);
hu's avatar
hu committed
100

hu's avatar
hu committed
101
    TachoVariable.CurSeg = CalTacho_CurSeg(TachoVariable.Valid, TachoVariable.Value);
hu's avatar
hu committed
102

hu's avatar
hu committed
103
    //转*每转脉冲数/60=频率
hu's avatar
hu committed
104

hu's avatar
hu committed
105 106
    u32Result *= 4u;
    u32Result /= 60u;
hu's avatar
hu committed
107 108 109

    Fre = (uint16_t)u32Result;

hu's avatar
hu committed
110
    RTE_PWM_Set_Tacho_Out(Fre, 500u);
hu's avatar
hu committed
111 112 113 114 115 116 117 118 119
}
/*-------------------------------------------------------------------------
 * Function Name  : Tacho_Display
 * Description    : 计算转速当前格
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
hu's avatar
hu committed
120
static uint8_t CalTacho_CurSeg(uint8_t Valid, uint16_t Value)
hu's avatar
hu committed
121
{
hu's avatar
hu committed
122
    uint8_t u8Result = 0u;
hu's avatar
hu committed
123

hu's avatar
hu committed
124 125 126 127 128 129 130 131 132
    if (Valid)
    {
    }
    else
    {
        //范围外/CAN中断
    }
    SetGaugesPara(RevGauges, Value);
    u8Result = GetGaugesCurrentPos(RevGauges);
hu's avatar
hu committed
133

hu's avatar
hu committed
134
    return u8Result;
hu's avatar
hu committed
135 136 137 138 139 140 141 142 143 144 145 146
}
/*-------------------------------------------------------------------------
 * 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;
hu's avatar
hu committed
147
    u16Result = TachoVariable.Value;
hu's avatar
hu committed
148 149 150 151
    return u16Result;
}
/*-------------------------------------------------------------------------
 * Function Name  : Tacho_Get_Valid
hu's avatar
hu committed
152
 * Description    :
hu's avatar
hu committed
153 154 155 156 157 158 159 160
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : None
 --------------------------------------------------------------------------*/
uint8_t Tacho_Get_Valid(void)
{
    uint8_t u8Result = 0u;
hu's avatar
hu committed
161
    u8Result = TachoVariable.Valid;
hu's avatar
hu committed
162 163 164 165 166 167 168 169 170 171 172 173
    return u8Result;
}
/*-------------------------------------------------------------------------
 * Function Name  : Tacho_Get_CurSeg
 * Description    : 转速当前格
 * Input          : None
 * Output         : None
 * Return         : None
 * onther         : 应用于断码
 --------------------------------------------------------------------------*/
uint8_t Tacho_Get_CurSeg(void)
{
hu's avatar
hu committed
174
    return TachoVariable.CurSeg;
hu's avatar
hu committed
175
}