diff --git a/APP/businessLogic/Inc/bl_chargControl.h b/APP/businessLogic/Inc/bl_chargControl.h index 92a6e05..2e83230 100644 --- a/APP/businessLogic/Inc/bl_chargControl.h +++ b/APP/businessLogic/Inc/bl_chargControl.h @@ -5,11 +5,12 @@ #include "FM_TIM.h" #include "comm_types.h" - +BOOL getChargControlFlag(void); void setChargControlFlag(BOOL state); void bl_chargControl(void); void endChargWork(void); void stopChargWork(void); +void beginChargWork(void); void startChargWork(void); extern void chargControl(void); diff --git a/APP/businessLogic/Src/bl_chargControl.c b/APP/businessLogic/Src/bl_chargControl.c index 2eb54cd..141d7b2 100644 --- a/APP/businessLogic/Src/bl_chargControl.c +++ b/APP/businessLogic/Src/bl_chargControl.c @@ -23,7 +23,7 @@ static void BatteryChargControl(void); static void noBatteryChargControl(void); static BOOL chargControlFlag = FALSE; -static BOOL getChargControlFlag(void); +// static BOOL getChargControlFlag(void); void setChargControlFlag(BOOL state); /** @@ -400,8 +400,8 @@ void mppt_readJust(void) */ void endChargWork(void) { - EN_PWMOUT_Diseable(); - pwm_Stop(); + setChargControlFlag(FALSE); + setDutyRatioToZero(); setMPPT_Mode(noWork); beginStartControlTask(); } @@ -414,11 +414,22 @@ void endChargWork(void) */ void stopChargWork(void) { - EN_PWMOUT_Diseable(); - pwm_Stop(); + setChargControlFlag(FALSE); + setDutyRatioToZero(); setMPPT_Mode(noWork); } +/** + * @brief 启动充电,开启启动任务 + * @param + * @retval + * + */ +void beginChargWork(void) +{ + beginStartControlTask(); +} + /** * @brief 启动充电,直接软启动 * @param @@ -432,8 +443,6 @@ void startChargWork(void) - - /** * @brief 判断达到停止充电的条件 * @param @@ -534,14 +543,14 @@ void chargControlMode(void) */ void judgeYNBattery(void) { - // if (getBatteryVoltage() > 16 || getBatteryVoltage() < 10) { - // setBatteryState(FALSE); - // return; - // } - if (getOutputVoltage() > 16 || getOutputVoltage() < 10) { + if (getBatteryVoltage() > 16 || getBatteryVoltage() < 10) { setBatteryState(FALSE); return; } + // if (getOutputVoltage() > 16 || getOutputVoltage() < 10) { + // setBatteryState(FALSE); + // return; + // } } /** @@ -623,7 +632,13 @@ BOOL getChargControlFlag(void) return chargControlFlag; } - +/** + * @brief 设置充电控制的标志位 + * @param TRUE 启动充电控制 + * FALSE 关闭充电控制 + * @retval + * + */ void setChargControlFlag(BOOL state) { if (state == TRUE || state == FALSE) { @@ -644,6 +659,7 @@ void bl_chargControl(void) } // getCVData(); + setBatteryVoltage(); judgeYNBattery(); chargControlMode(); diff --git a/APP/businessLogic/Src/task.c b/APP/businessLogic/Src/task.c index 9e46a8f..90414f6 100644 --- a/APP/businessLogic/Src/task.c +++ b/APP/businessLogic/Src/task.c @@ -43,8 +43,11 @@ static void Task_softStart(void); static STR_TimeSliceOffset m_impedanceCalculation; static void Task_impedanceCalculation(void); - - +/* 开路电压采集 */ +#define collectOpenCircuitVoltage_reloadVal 1000 /* 任务执行间隔 */ +#define collectOpenCircuitVoltage_offset 0 /* 任务执行偏移量 */ +STR_TimeSliceOffset g_collectOpenCircuitVoltage; +void Task_collectOpenCircuitVoltage(void); /** * @brief 启动时初始化各任务 @@ -56,7 +59,7 @@ void task_Init(void) { TimeSliceOffset_Register(&m_runled, Task_Runled, runled_reloadVal, runled_offset); TimeSliceOffset_Register(&m_wdi, Task_wdi, wdi_reloadVal, wdi_offset); - beginStartControlTask(); + TimeSliceOffset_Register(&m_startControl, Task_startControl, startControl_reloadVal, startControl_offset); TimeSliceOffset_Register(&m_refreshJudgeData, Task_refreshJudgeData, refreshJudgeData_reloadVal, refreshJudgeData_offset); } @@ -135,7 +138,7 @@ void Task_refreshJudgeData(void) && (getHighSideMosTemperature() < g_cfgParameter.HighSideMosTemperature_start)) { /* 状态处于停止运行则打开充电开关 */ if (getMosTemperState() == mosTemperStop) { - + beginChargWork(); } setMosTemperState(mosTemperStart); } @@ -147,13 +150,8 @@ void Task_refreshJudgeData(void) && getHighSideMosTemperature() > g_cfgParameter.HighSideMosTemperature_stop) { setMosTemperState(mosTemperStop); /* 停止充电 */ - EN_PWMOUT_Diseable(); - pwm_Stop(); - setMPPT_Mode(noWork); - } - - - + stopChargWork(); + } } /** @@ -191,7 +189,8 @@ void Task_startControl(void) */ void beginStartControlTask(void) { - TimeSliceOffset_Register(&m_startControl, Task_startControl, startControl_reloadVal, startControl_offset); + TimeSliceOffset_Register(&m_startControl, Task_startControl, startControl_reloadVal, startControl_offset); + m_startControl.runFlag = 1; } /** @@ -218,7 +217,6 @@ void Task_softStart(void) dutyRatio = 0; num = 0; setDutyRatio(0.75f); - set_pwmDutyRatio(getDutyRatio()); if (getBatteryState() == TRUE) { setMPPT_Mode(MPPT); @@ -230,7 +228,6 @@ void Task_softStart(void) else { setDutyRatio(getDutyRatio() + 0.01f); - set_pwmDutyRatio(getDutyRatio()); } } /** @@ -296,7 +293,44 @@ void Task_impedanceCalculation(void) } } - +/** + * @brief 开路电压采集 + * @retval + */ +void Task_collectOpenCircuitVoltage(void) +{ + /* 用于无充电控制时获取开路电压 */ + static uint32_t collectOpenCircuitVoltageNoNUM = 0; + /* 用于有充电控制时获取开路电压 */ + static uint8_t collectOpenCircuitVoltageYesNUM = 0; + + if (FALSE == getChargControlFlag()) { + if (1 <= collectOpenCircuitVoltageNoNUM++) { + setSolarOpenCircuitVoltage(); + collectOpenCircuitVoltageNoNUM = 0; + } + collectOpenCircuitVoltageYesNUM = 0; + } + + collectOpenCircuitVoltageYesNUM++; + + /* 到达开路电压检测时间 */ + if (collectOpenCircuitVoltageYesNUM == g_cfgParameter.collectOpenCircuitVoltageTime) { + /* 有电池才进行开路电压检测 */ + if (getBatteryState()) { + stopChargWork(); + /* 设置延时为1000-500ms */ + g_collectOpenCircuitVoltage.count = 500; + } + collectOpenCircuitVoltageYesNUM = 0; + } + + /* 检测开路电压 */ + if (collectOpenCircuitVoltageYesNUM == g_cfgParameter.collectOpenCircuitVoltageTime + 1) { + setSolarOpenCircuitVoltage(); + beginChargWork(); + } +}