Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
HaoJin232
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
时昊
HaoJin232
Commits
b768d65a
Commit
b768d65a
authored
Feb 21, 2024
by
高士达
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🎉
init:整理燃油相关,初步测试无问题
parent
d880c932
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
318 additions
and
218 deletions
+318
-218
CAN_User.c
HJ232_Source/source/Application/APPCan/CAN_User.c
+4
-4
Fuel.c
HJ232_Source/source/Application/Fuel/Fuel.c
+249
-209
Fuel.h
HJ232_Source/source/Application/Fuel/Fuel.h
+55
-4
tasks.c
HJ232_Source/source/System/tasks.c
+10
-1
No files found.
HJ232_Source/source/Application/APPCan/CAN_User.c
View file @
b768d65a
...
...
@@ -139,10 +139,10 @@ void Can_Set_Buff_510(uint8_t CopyData[])
temp16
=
FuelR
/
10
;
if
(
FuelR
>
3100
){
temp16
=
320
;
}
//
temp16 = FuelR/10;
//
if(FuelR>3100){
//
temp16 = 320;
//
}
CopyData
[
2
]
=
(
temp16
>>
8
)
&
0xff
;
CopyData
[
3
]
=
temp16
&
0xff
;
...
...
HJ232_Source/source/Application/Fuel/Fuel.c
View file @
b768d65a
#include "common.h"
#include "Fuel.h"
#include "gpio.h"
#include "Analog_Signals.h"
#include "Common_Interface.h"
#include "Flash_synchronizer.h"
#define FUEL_DATA_TIME 25u
/*这里填写多长时间采集一个数据,单位ms*/
#define FUEL_DATA_NUM 20u
/*燃油电阻采集数据总数 最大255*/
#define FUEL_CAL_START 5u
/*数据排序后取中间部分计算平均:起始*/
#define FUEL_CAL_END 15u
/*数据排序后取中间部分计算平均:结束*/
#define RETURN_DIFFERENCE 25u
/*判断上升或下降的回差,精度0.1*/
#define FUEL_SEG_UP 0u
#define FUEL_SEG_DOWN 1u
uint16_t
FuelData
[
FUEL_DATA_NUM
];
uint8_t
FuelDataCount
=
0u
;
uint16_t
FuelR
=
0u
;
/*滤波后的燃油电阻,精度0.1*/
static
uint16_t
FuelRBak
=
0
;
uint8_t
DesFuelSetp
=
0u
;
uint8_t
CurFuelSetp
=
0u
;
uint8_t
FuelInitFlag
=
0u
;
uint8_t
FuelStateInitFlag
=
0u
;
uint8_t
FuelDir
=
FUEL_SEG_UP
;
FuelSensorSts_t
FuelSensorState
=
FuelSensorNormal
;
uint16_t
FuelSensorNormalTime
=
0u
;
uint16_t
FuelSensorShortTime
=
0u
;
uint16_t
FuelSensorOpenTime
=
0u
;
uint8_t
FuelADCompleteFlg
=
0u
;
_Fuel_Dis
FuelDis
;
_FuelData
Fuel_Data
;
void
Fuel_KL30_Init
(
void
)
{
PORT_ClrBit
(
Fuel_Vcc_en
);
PORT_ClrBit
(
Fuel_Vcc_en
);
Fuel_Data
.
u8FuelInitFlag
=
0u
;
Fuel_Data
.
FuelDir
=
Up_Dir
;
Fuel_Data
.
FuelSensorState
=
FuelSensorNormal
;
Fuel_Data
.
u8FuelDataCount
=
0u
;
for
(
uint8_t
i
=
0
;
i
<
FUEL_DATA_NUM
;
i
++
)
{
Fuel_Data
.
FuelDataBuffer
[
i
]
=
0
;
}
Fuel_Data
.
FuelDataArray
[
0
]
=
0u
;
/* Short */
Fuel_Data
.
FuelDataArray
[
1
]
=
970u
;
/* Seg1 */
Fuel_Data
.
FuelDataArray
[
2
]
=
790u
;
/* Seg2 */
Fuel_Data
.
FuelDataArray
[
3
]
=
610u
;
/* Sge3 */
Fuel_Data
.
FuelDataArray
[
4
]
=
430u
;
/* Seg4 */
Fuel_Data
.
FuelDataArray
[
5
]
=
250u
;
/* Seg5 */
Fuel_Data
.
FuelDataArray
[
6
]
=
1100u
;
/* Open */
Fuel_Data
.
u8FuelInitFlag
=
1
;
Fuel_Data
.
u8FuelInitState
=
1
;
Fuel_Data
.
u8FuelADCompleteFlg
=
0
;
Fuel_Data
.
u16SensorNormalTimer
=
0
;
Fuel_Data
.
u16SensorOpenTimer
=
0
;
Fuel_Data
.
u16SensorShortTimer
=
0
;
FuelDis
.
u8Curseg
=
0
;
FuelDis
.
u8DestSeg
=
0
;
FuelDis
.
u16Down_Timer
=
Creep_Down_Up_Timer
;
}
void
Fuel_KL15_Init
(
void
)
{
PORT_SetBit
(
Fuel_Vcc_en
);
DesFuelSetp
=
0u
;
CurFuelSetp
=
0u
;
FuelInitFlag
=
1u
;
FuelStateInitFlag
=
1u
;
FuelDir
=
FUEL_SEG_UP
;
FuelSensorState
=
FuelSensorNormal
;
FuelSensorNormalTime
=
0u
;
FuelSensorShortTime
=
0u
;
FuelSensorOpenTime
=
0u
;
FuelADCompleteFlg
=
0u
;
}
Fuel_Data
.
FuelDir
=
Up_Dir
;
Fuel_Data
.
FuelSensorState
=
FuelSensorNormal
;
Fuel_Data
.
u8FuelDataCount
=
0u
;
for
(
uint8_t
i
=
0
;
i
<
FUEL_DATA_NUM
;
i
++
)
{
Fuel_Data
.
FuelDataBuffer
[
i
]
=
0
;
}
uint16_t
TestFuelR
=
320u
;
Fuel_Data
.
FuelDataArray
[
0
]
=
0u
;
/* Short */
Fuel_Data
.
FuelDataArray
[
1
]
=
970u
;
/* Seg1 */
Fuel_Data
.
FuelDataArray
[
2
]
=
790u
;
/* Seg2 */
Fuel_Data
.
FuelDataArray
[
3
]
=
610u
;
/* Sge3 */
Fuel_Data
.
FuelDataArray
[
4
]
=
430u
;
/* Seg4 */
Fuel_Data
.
FuelDataArray
[
5
]
=
250u
;
/* Seg5 */
Fuel_Data
.
FuelDataArray
[
6
]
=
1100u
;
/* Open */
Fuel_Data
.
u8FuelInitFlag
=
1
;
Fuel_Data
.
u8FuelInitState
=
1
;
Fuel_Data
.
u8FuelADCompleteFlg
=
0
;
Fuel_Data
.
u16SensorNormalTimer
=
0
;
Fuel_Data
.
u16SensorOpenTimer
=
0
;
Fuel_Data
.
u16SensorShortTimer
=
0
;
FuelDis
.
u8Curseg
=
0
;
FuelDis
.
u8DestSeg
=
0
;
FuelDis
.
u16Down_Timer
=
Creep_Down_Up_Timer
;
}
/**
* @brief 燃油采集计算服务
*
*/
void
Fuel_R_Cal
(
uint8_t
deltaTime
)
{
uint16_t
FuelRes
=
0
;
uint8_t
i
,
j
;
uint8_t
i
,
j
;
uint32_t
temp32
;
static
uint16_t
timeCount
=
0
;
if
(
timeCount
>=
FUEL_DATA_TIME
){
timeCount
=
0
;
if
(
FuelDataCount
<
FUEL_DATA_NUM
)
if
(
Fuel_Data
.
u8FuelCollectCount
>=
FUEL_DATA_TIME
)
/* 多久采集一次燃油数据 */
{
Fuel_Data
.
u8FuelCollectCount
=
0
;
if
(
Fuel_Data
.
u8FuelDataCount
<
FUEL_DATA_NUM
)
{
/*获取燃油电阻*/
FuelRes
=
ADC_Read_Signal
(
ADC_CH_FUEL1
)
;
FuelRes
=
0
;
/*四舍五入*/
if
(
FuelRes
<
32000
){
if
(
FuelRes
%
10
>=
5
){
if
(
FuelRes
<
Fuel_Data
.
FuelDataArray
[
6
])
/* 小于开路阻值 */
{
if
(
FuelRes
%
10
>=
5
)
{
FuelRes
+=
5
;
}
}
else
{
FuelRes
=
32000
;
else
{
FuelRes
=
Fuel_Data
.
FuelDataArray
[
6
];
}
/*由小到大插入数据*/
for
(
i
=
0
;
i
<
FuelDataCount
;
i
++
)
{
if
(
FuelRes
<
FuelData
[
i
])
{
for
(
i
=
0
;
i
<
Fuel_Data
.
u8
FuelDataCount
;
i
++
)
{
if
(
FuelRes
<
Fuel_Data
.
FuelDataBuffer
[
i
])
{
break
;
}
}
for
(
j
=
FuelDataCount
;
j
>
i
;
j
--
)
{
Fuel
Data
[
j
]
=
FuelData
[
j
-
1
];
for
(
j
=
Fuel_Data
.
u8FuelDataCount
;
j
>
i
;
j
--
)
{
Fuel
_Data
.
FuelDataBuffer
[
j
]
=
Fuel_Data
.
FuelDataBuffer
[
j
-
1
];
}
Fuel
Data
[
i
]
=
FuelRes
;
FuelDataCount
++
;
Fuel
_Data
.
FuelDataBuffer
[
i
]
=
FuelRes
;
Fuel
_Data
.
u8Fuel
DataCount
++
;
}
else
{
{
/*一组数据采集完毕,取中间部分计算平均值*/
temp32
=
0
;
for
(
i
=
FUEL_CAL_START
;
i
<
FUEL_CAL_END
;
i
++
)
for
(
i
=
FUEL_CAL_START
;
i
<
FUEL_CAL_END
;
i
++
)
{
temp32
+=
Fuel
Data
[
i
];
temp32
+=
Fuel
_Data
.
FuelDataBuffer
[
i
];
}
Fuel
R
=
temp32
/
(
FUEL_CAL_END
-
FUEL_CAL_START
);
FuelDataCount
=
0
;
FuelADCompleteFlg
=
1
;
Fuel
_Data
.
Fuel_Res
=
temp32
/
(
FUEL_CAL_END
-
FUEL_CAL_START
);
Fuel
_Data
.
u8Fuel
DataCount
=
0
;
Fuel
_Data
.
u8Fuel
ADCompleteFlg
=
1
;
}
}
time
Count
+=
deltaTime
;
Fuel_Data
.
u8FuelCollect
Count
+=
deltaTime
;
}
/**
* @brief 检查燃油传感器状态
*
*/
void
Fuel_State_Check
(
uint8_t
deltaTime
)
{
if
(
FuelR
<
20
)
{
/*短路 1*/
FuelSensorOpenTime
=
0
;
FuelSensorNormalTime
=
0
;
if
((
FuelSensorShortTime
>
3000
)
||
((
FuelStateInitFlag
)
&&
(
FuelSensorShortTime
>
3000
)))
{
FuelSensorState
=
FuelSensorShortCircuit
;
DesFuelSetp
=
0
;
CurFuelSetp
=
0
;
FuelStateInitFlag
=
0
;
FuelInitFlag
=
1
;
FuelDir
=
FUEL_SEG_UP
;
}
else
{
FuelSensorShortTime
+=
deltaTime
;
}
}
else
if
(
FuelR
>=
3200
)
{
/*断路 320*/
FuelSensorShortTime
=
0
;
FuelSensorNormalTime
=
0
;
if
((
FuelSensorOpenTime
>
3000
)
||
((
FuelStateInitFlag
)
&&
(
FuelSensorOpenTime
>
3000
)))
// if (Fuel_Data.Fuel_Res < Fuel_Data.FuelDataArray[0])
//{ /*短路 1*/
// Fuel_Data.u16SensorOpenTimer = 0;
// Fuel_Data.u16SensorNormalTimer = 0;
// if ((Fuel_Data.u16SensorShortTimer > Fuet_Short_Dealy_Timer) || ((Fuel_Data.u8FuelInitState) && (Fuel_Data.u16SensorShortTimer > Fuet_Short_Dealy_Timer)))
// {
// Fuel_Data.FuelSensorState = FuelSensorShortCircuit;
// FuelDis.u8DestSeg = 0;
// FuelDis.u8Curseg = 0;
// Fuel_Data.u8FuelInitState = 0;
// Fuel_Data.u8FuelInitFlag = 1;
// Fuel_Data.FuelDir = FUEL_SEG_UP;
// }
// else
// {
// Fuel_Data.u16SensorShortTimer += deltaTime;
// }
// }
// else
if
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
6
])
/* 开路 */
{
Fuel_Data
.
u16SensorShortTimer
=
0
;
Fuel_Data
.
u16SensorNormalTimer
=
0
;
if
((
Fuel_Data
.
u16SensorOpenTimer
>
Fuel_Open_Dealy_Timer
)
||
((
Fuel_Data
.
u8FuelInitState
)
&&
(
Fuel_Data
.
u16SensorOpenTimer
>
Fuel_Open_Dealy_Timer
)))
{
FuelSensorState
=
FuelSensorOpenCircuit
;
DesFuelSetp
=
0
;
CurFuelSetp
=
0
;
Fuel
StateInitFlag
=
0
;
FuelInitFlag
=
1
;
Fuel
Dir
=
FUEL_SEG_UP
;
Fuel
_Data
.
Fuel
SensorState
=
FuelSensorOpenCircuit
;
FuelDis
.
u8DestSeg
=
0
;
FuelDis
.
u8Curseg
=
0
;
Fuel
_Data
.
u8FuelInitState
=
0
;
Fuel
_Data
.
u8Fuel
InitFlag
=
1
;
Fuel
_Data
.
FuelDir
=
Up_Dir
;
}
else
{
Fuel
SensorOpenTime
+=
deltaTime
;
Fuel
_Data
.
u16SensorOpenTimer
+=
deltaTime
;
}
}
else
{
Fuel
SensorShortTime
=
0
;
Fuel
SensorOpenTime
=
0
;
if
(
Fuel
SensorNormalTime
>
3000
)
Fuel
_Data
.
u16SensorShortTimer
=
0
;
Fuel
_Data
.
u16SensorOpenTimer
=
0
;
if
(
Fuel
_Data
.
u16SensorNormalTimer
>
Fuel_Normal_Dealy_Timer
)
{
FuelSensorState
=
FuelSensorNormal
;
Fuel
StateInitFlag
=
0
;
Fuel
_Data
.
Fuel
SensorState
=
FuelSensorNormal
;
Fuel
_Data
.
u8FuelInitState
=
0
;
}
else
{
Fuel
SensorNormalTime
+=
deltaTime
;
Fuel
_Data
.
u16SensorNormalTimer
+=
deltaTime
;
}
}
}
/**
* @brief 燃油显示服务
*
*/
void
Fuel_Gauges_Cal
(
uint8_t
deltaTime
)
{
static
uint16_t
time
=
0
;
if
((
FuelSensorState
==
FuelSensorNormal
)
&&
(
FuelR
>=
20
)
&&
(
FuelR
<
3200
)){
//32000 //FuelR >10 change FuelR >20
if
((
Fuel_Data
.
FuelSensorState
==
FuelSensorNormal
)
&&
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
0
])
&&
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
FuelDataArray
[
6
]))
{
/*采集完第一组数据后,开始计算燃油格数*/
if
(
FuelADCompleteFlg
){
if
(
FuelInitFlag
){
FuelRBak
=
FuelR
;
if
(
Fuel_Data
.
u8FuelADCompleteFlg
)
{
if
(
Fuel_Data
.
u8FuelInitFlag
)
{
Fuel_Data
.
Fuel_Res_Back
=
Fuel_Data
.
Fuel_Res
;
}
/*根据回差计算走动方向*/
if
(
FuelDir
==
FUEL_SEG_UP
){
if
(
Fuel_Data
.
FuelDir
==
Up_Dir
)
{
if
(
FuelR
>=
FuelRBak
+
RETURN_DIFFERENCE
){
FuelDir
=
FUEL_SEG_DOWN
;
FuelRBak
=
FuelR
;
if
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
Fuel_Res_Back
+
RETURN_DIFFERENCE
)
{
Fuel_Data
.
FuelDir
=
Down_Dir
;
Fuel_Data
.
Fuel_Res_Back
=
Fuel_Data
.
Fuel_Res
;
}
if
(
FuelR
<
FuelRBak
){
FuelRBak
=
FuelR
;
if
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
Fuel_Res_Back
)
{
Fuel_Data
.
Fuel_Res_Back
=
Fuel_Data
.
Fuel_Res
;
}
}
else
{
if
(
FuelRBak
>=
FuelR
+
RETURN_DIFFERENCE
){
FuelDir
=
FUEL_SEG_UP
;
FuelRBak
=
FuelR
;
else
{
if
(
Fuel_Data
.
Fuel_Res_Back
>=
Fuel_Data
.
Fuel_Res
+
RETURN_DIFFERENCE
)
{
Fuel_Data
.
FuelDir
=
Up_Dir
;
Fuel_Data
.
Fuel_Res_Back
=
Fuel_Data
.
Fuel_Res
;
}
if
(
Fuel_Data
.
Fuel_Res
>
Fuel_Data
.
Fuel_Res_Back
)
{
Fuel_Data
.
Fuel_Res_Back
=
Fuel_Data
.
Fuel_Res
;
}
if
(
FuelR
>
FuelRBak
){
FuelRBak
=
FuelR
;
}
}
/*计算目标格数*/
if
(
FuelDir
==
FUEL_SEG_UP
){
if
(((
DesFuelSetp
==
4
)
||
FuelInitFlag
)
&&
(
FuelR
<
150
)){
DesFuelSetp
=
5
;
/*计算目标格数*/
if
(
Fuel_Data
.
FuelDir
==
Up_Dir
)
{
if
(((
FuelDis
.
u8DestSeg
==
4
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
FuelDataArray
[
5
]))
{
FuelDis
.
u8DestSeg
=
5
;
}
else
if
(((
FuelDis
.
u8DestSeg
==
3
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
FuelDataArray
[
4
]))
{
FuelDis
.
u8DestSeg
=
4
;
}
else
if
(((
DesFuelSetp
==
3
)
||
FuelInitFlag
)
&&
(
FuelR
<
490
)){
DesFuelSetp
=
4
;
else
if
(((
FuelDis
.
u8DestSeg
==
2
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
FuelDataArray
[
3
]))
{
FuelDis
.
u8DestSeg
=
3
;
}
else
if
(((
DesFuelSetp
==
2
)
||
FuelInitFlag
)
&&
(
FuelR
<
820
)){
DesFuelSetp
=
3
;
}
else
if
(((
DesFuelSetp
==
1
)
||
FuelInitFlag
)
&&
(
FuelR
<
1280
)){
DesFuelSetp
=
2
;
else
if
(((
FuelDis
.
u8DestSeg
==
1
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
FuelDataArray
[
2
]))
{
FuelDis
.
u8DestSeg
=
2
;
}
else
if
(((
DesFuelSetp
==
0
)
||
FuelInitFlag
)
&&
(
FuelR
<
1870
)){
DesFuelSetp
=
1
;
else
if
(((
FuelDis
.
u8DestSeg
==
0
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
<
Fuel_Data
.
FuelDataArray
[
1
]))
{
FuelDis
.
u8DestSeg
=
1
;
}
}
else
if
(
FuelDir
==
FUEL_SEG_DOWN
){
if
(((
DesFuelSetp
==
1
)
||
FuelInitFlag
)
&&
(
FuelR
>=
1870
)){
DesFuelSetp
=
0
;
else
if
(
Fuel_Data
.
FuelDir
==
Down_Dir
)
{
if
(((
FuelDis
.
u8DestSeg
==
1
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
1
]))
{
FuelDis
.
u8DestSeg
=
0
;
}
else
if
(((
DesFuelSetp
==
2
)
||
FuelInitFlag
)
&&
(
FuelR
>=
1280
)){
DesFuelSetp
=
1
;
else
if
(((
FuelDis
.
u8DestSeg
==
2
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
2
]))
{
FuelDis
.
u8DestSeg
=
1
;
}
else
if
(((
DesFuelSetp
==
3
)
||
FuelInitFlag
)
&&
(
FuelR
>=
820
)){
DesFuelSetp
=
2
;
else
if
(((
FuelDis
.
u8DestSeg
==
3
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
3
]))
{
FuelDis
.
u8DestSeg
=
2
;
}
else
if
(((
DesFuelSetp
==
4
)
||
FuelInitFlag
)
&&
(
FuelR
>=
490
)){
DesFuelSetp
=
3
;
else
if
(((
FuelDis
.
u8DestSeg
==
4
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
4
]))
{
FuelDis
.
u8DestSeg
=
3
;
}
else
if
(((
DesFuelSetp
==
5
)
||
FuelInitFlag
)
&&
(
FuelR
>=
150
)){
DesFuelSetp
=
4
;
else
if
(((
FuelDis
.
u8DestSeg
==
5
)
||
(
Fuel_Data
.
u8FuelInitFlag
))
&&
(
Fuel_Data
.
Fuel_Res
>=
Fuel_Data
.
FuelDataArray
[
5
]))
{
FuelDis
.
u8DestSeg
=
4
;
}
}
if
(
Fuel_Data
.
u8FuelInitFlag
==
1
)
/* 首次上电 当前格等于目标格 */
{
FuelDis
.
u8Curseg
=
FuelDis
.
u8DestSeg
;
Fuel_Data
.
u8FuelInitFlag
=
0
;
}
}
/*IGN ON 1秒/故障恢复后,开始走格 立即指向当前格 20220704*/
if
(
Common_GetIgnOnTime
()
>=
3000ul
){
time
+=
deltaTime
;
if
(
FuelInitFlag
){
FuelInitFlag
=
0
;
time
=
0
;
CurFuelSetp
=
DesFuelSetp
;
/* 阻尼处理 上升下降每10S一格 */
if
(
FuelDis
.
u8Curseg
>
FuelDis
.
u8DestSeg
)
/* 下降方向 */
{
FuelDis
.
u16Up_Timer
=
0
;
FuelDis
.
u16Down_Timer
+=
deltaTime
;
if
(
FuelDis
.
u16Down_Timer
>=
Creep_Down_Up_Timer
)
{
FuelDis
.
u8Curseg
--
;
FuelDis
.
u16Down_Timer
=
0
;
}
if
(
time
>=
15000
){
time
=
0
;
if
(
CurFuelSetp
<
DesFuelSetp
){
CurFuelSetp
++
;
}
else
if
(
CurFuelSetp
>
DesFuelSetp
){
CurFuelSetp
--
;
}
}
else
if
(
FuelDis
.
u8Curseg
<
FuelDis
.
u8DestSeg
)
/* 上升方向 */
{
FuelDis
.
u16Down_Timer
=
0
;
FuelDis
.
u16Up_Timer
+=
deltaTime
;
if
(
FuelDis
.
u16Up_Timer
>=
Creep_Down_Up_Timer
)
{
FuelDis
.
u8Curseg
++
;
FuelDis
.
u16Up_Timer
=
0
;
}
if
(
CurFuelSetp
==
DesFuelSetp
){
time
=
0
;
}
}
else
{
FuelDis
.
u16Down_Timer
=
0
;
FuelDis
.
u16Up_Timer
=
0
;
FuelDis
.
u8Curseg
=
FuelDis
.
u8DestSeg
;
}
}
}
uint8_t
Get_Fuel_Disp_Byte
(
void
)
/**
* @brief 用于计算燃油电阻值
* 10ms 调用
*/
void
Fuel_Res_Call
(
uint8_t
deltaTime
)
{
uint8_t
FuelDispByte
=
0u
;
FuelDispByte
=
CurFuelSetp
;
if
(
FuelSensorState
==
FuelSensorShortCircuit
)
{
//Short
FuelDispByte
=
FLASH_SYNC_1Hz
?
7
:
0
;
}
else
if
(
FuelSensorState
==
FuelSensorOpenCircuit
)
{
//Open
FuelDispByte
=
FLASH_SYNC_1Hz
?
6
:
0
;
}
else
if
(
CurFuelSetp
==
1
)
{
FuelDispByte
=
FLASH_SYNC_1Hz
?
1
:
0
;
}
else
if
(
CurFuelSetp
==
0
)
{
FuelDispByte
=
0
;
}
return
FuelDispByte
;
Fuel_R_Cal
(
deltaTime
);
}
/**
* @brief 燃油服务函数
* 100ms
*/
void
Fuel_Cal_Sevice
(
uint8_t
deltaTime
)
{
/*计算燃油电阻值*/
Fuel_R_Cal
(
deltaTime
);
/*检测燃油电阻状态*/
Fuel_State_Check
(
deltaTime
);
/*显示燃油格*/
Fuel_Gauges_Cal
(
deltaTime
);
}
/**
* @brief 获取燃油当前格数
* @return 格数 Seg0~Sge5
*/
uint8_t
Get_CurFuelSetp
(
void
)
{
return
CurFuelSetp
;
return
FuelDis
.
u8Curseg
;
}
/**
* @brief 获取燃油传感器状态
* @return 0 FuelSensorNormal
* 1 FuelSensorShortCircuit
* 2 FuelSensorOpenCircuit
*/
FuelSensorSts_t
Get_Fuel_Sensor_State
(
void
)
{
return
FuelSensorState
;
return
Fuel
_Data
.
Fuel
SensorState
;
}
HJ232_Source/source/Application/Fuel/Fuel.h
View file @
b768d65a
#ifndef FUEL_H
#define FUEL_H
typedef
enum
{
#include "common.h"
#define Fuel_Short_Value 0
/* 燃油短路值 精度0.1ohm */
#define Fuel_Open_Value 1100
/* 燃油开路值 精度0.1ohm */
#define Fuet_Short_Dealy_Timer 3000
/* 燃油从正常进入短路的延迟时间 单位ms*/
#define Fuel_Open_Dealy_Timer 3000
/* 燃油从正常进入开路的延迟时间 单位ms*/
#define Fuel_Normal_Dealy_Timer 3000
/* 燃油从异常状态进入正常的延迟时间 单位ms*/
#define FUEL_DATA_TIME 25u
/*这里填写多长时间采集一个数据,单位ms*/
#define FUEL_DATA_NUM 20u
/*燃油电阻采集数据总数 最大255*/
#define FUEL_CAL_START 5u
/*数据排序后取中间部分计算平均:起始*/
#define FUEL_CAL_END 15u
/*数据排序后取中间部分计算平均:结束*/
#define RETURN_DIFFERENCE 25u
/*判断上升或下降的回差,精度0.1*/
#define Creep_Down_Up_Timer 10000
/* 一个格的时间 单位ms */
typedef
enum
{
Up_Dir
=
0
,
Down_Dir
=
1
,
Unvalid
=
0XFF
,
}
_FuelDir
;
typedef
enum
{
FuelSensorNormal
=
0
,
FuelSensorShortCircuit
,
FuelSensorOpenCircuit
,
}
FuelSensorSts_t
;
}
FuelSensorSts_t
;
typedef
struct
{
uint8_t
u8FuelDataCount
;
/* 燃油采集计数 */
uint8_t
u8FuelCollectCount
;
/* 多久采集一次燃油数据 */
uint16_t
FuelDataBuffer
[
FUEL_DATA_NUM
];
/* 存储燃油数据buffer */
uint8_t
u8FuelInitState
;
/* 燃油传感器初始化状态 */
uint8_t
u8FuelInitFlag
;
/* 燃油初始化标志 */
uint16_t
FuelDataArray
[
7
];
/* 数组下标0用于存储短路值,1~5用于存储当前对应格数阻值,6用于存储开路阻值 */
uint16_t
Fuel_Res
;
/* 进行滤波处理后的燃油阻值 */
uint16_t
Fuel_Res_Back
;
/* 历史燃油阻值 */
uint16_t
u16SensorShortTimer
;
/* 传感器进入短路时间 */
uint16_t
u16SensorOpenTimer
;
/* 传感器进入开路时间 */
uint16_t
u16SensorNormalTimer
;
/* 传感器进入正常时间 */
uint8_t
u8FuelADCompleteFlg
;
/* 一组数据采集完成标志 */
_FuelDir
FuelDir
;
/* 燃油方向 */
FuelSensorSts_t
FuelSensorState
;
/* 燃油传感器状态 */
}
_FuelData
;
typedef
struct
{
uint8_t
u8Curseg
;
/* 当前格 */
uint8_t
u8DestSeg
;
/* 目标格 */
uint16_t
u16Down_Timer
;
/* 上升延迟时间 */
uint16_t
u16Up_Timer
;
/* 下降延迟时间 */
}
_Fuel_Dis
;
extern
_Fuel_Dis
FuelDis
;
extern
_FuelData
Fuel_Data
;
extern
void
Fuel_KL15_Init
(
void
);
extern
void
Fuel_KL30_Init
(
void
);
extern
void
Fuel_Cal_Sevice
(
uint8_t
deltaTime
);
extern
uint8_t
Get_Fuel_Disp_Byte
(
void
);
extern
uint8_t
Get_CurFuelSetp
(
void
);
extern
FuelSensorSts_t
Get_Fuel_Sensor_State
(
void
);
void
Fuel_Res_Call
(
uint8_t
deltaTime
);
#endif
HJ232_Source/source/System/tasks.c
View file @
b768d65a
...
...
@@ -91,6 +91,7 @@ void Sys_Run_Mode_10ms_Tasks(void)
Data_Mileage_Write_EEPROM
();
Fuel_Res_Call
(
10u
);
}
/*============================================================================*/
...
...
@@ -147,7 +148,9 @@ void Sys_Run_Mode_100ms_Tasks_Group2(void)
void
Sys_Run_Mode_100ms_Tasks_Group3
(
void
)
{
Services_Mileage_Callback
();
Data_Trip_Processing
();
Data_ODO_Processing
();
}
void
Sys_Run_Mode_100ms_Tasks_Group4
(
void
)
...
...
@@ -156,8 +159,14 @@ void Sys_Run_Mode_100ms_Tasks_Group4(void)
RTC_Service
();
}
uint32_t
TRIPATEST
=
0
;
uint32_t
ODOTEST
=
0
;
uint32_t
MileageTest
=
0
;
void
Sys_Run_Mode_100ms_Tasks_Group5
(
void
)
{
TRIPATEST
=
Data_Read_Trip
(
EM_TRIP_A
);
ODOTEST
=
Data_ODO_Read
();
MileageTest
=
Data_Mileage_Read
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment