/** ****************************************************************************** * @file remain_distance.c * @author Damon * @version V1.5 * @date 20190105 * @brief 电池剩余续航里程统计 ****************************************************************************** * @attention *本功能模块输出计算结果为,剩余续航里程RemainDis.remainDistance * ****************************************************************************** */ #ifndef __REMAIN_DISTANCE_H_ #define __REMAIN_DISTANCE_H_ #include "stm32f1xx_hal.h" #include "motor_control.h" //续航计算相关参数 typedef struct { uint8_t start; //开始统计数据并计算 int16_t I_motor; //电机母线电流 uint16_t acc_period; //电量积分周期,单位ms uint32_t Q_add; //若干轮圈数的,电量累计值,单位mA * ms uint16_t wheelLength; //轮胎周长 uint16_t wheel_Count; //轮圈计数 uint16_t Power_per_km; //电机平均功耗,单位mA*h/km uint16_t Power_per_km_average; //电机平均功耗,多次的平均值,单位mA*h/km uint16_t Power_per_km_result; //计算续航的功耗值 uint16_t remainDistance; //剩余续航里程 uint8_t flag_saveInfo; //保存信息标志位 uint8_t flag_helpModeChange; //档位切换标志 TrueOrFalse_Flag_Struct_t IsBMS_ComOK_Flag; //电池通信正常标志 uint32_t BMS_Com_DelayTimeCnt; //电池通信延时计算 }Remain_Dis_t; //电池相关信息 typedef struct { uint32_t Q_discharged; //电池已放电电量 uint32_t Q_remain_record; //电池剩余电量,从电池电压换算 uint32_t Q_remain_real; //电池实时剩余电量 uint32_t Q_remain_real_last; //电池上一次剩余电量 uint8_t SOC; TrueOrFalse_Flag_Struct_t BFlagCalSoc;//计算SOC uint16_t u16CurVoltage; //实时电压,0.01V uint32_t u32TotalBusVoltage; //母线电压累计和,0.01V uint32_t u32GetvalCnt; //统计计数 uint16_t u16BusAverageVol[12]; //母线平均电压数组 }Battery_Info_t; extern Remain_Dis_t RemainDis; extern Battery_Info_t Battery_Info; extern void RD_RemainDis_Init(uint16_t uwWheelLength, TrueOrFalse_Flag_Struct_t BMS_COM_OK, uint16_t BusVoltage, uint8_t DesignVol, uint16_t BMS_RC); extern void RD_CalculateRemainDis(uint32_t WheelTurnCnt, uint16_t RemainCap, uint8_t SOC, uint16_t BusCurrent) ; extern void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t MC_AssistRunMode); extern uint8_t Battery_SocCal(Battery_Info_t* p_Battery_Info, BatterCellInfo_Struct_t* p_CellInfo, uint8_t SOC_Old, uint8_t Vol_Design); #endif