M28/APP/user/MotorCtrl.c
2024-07-21 09:56:43 +08:00

227 lines
5.2 KiB
C

#include "MotorCtrl.h"
#include "hwCtrl.h"
#include "PINdef.h"
#include "appTask.h"
static uint8_t amCtrl_state = 0,am_state_machine = 0;
static uint16_t am_state_machine_counter = 0;
static void amCtrl_Act1(void);
static void amCtrl_Act2(void);
static void amCtrl_Act3(void);
static uint16_t amCtrl_counter;
void amCtrl_Init(void)
{
amCtrl_state = 0;
am_state_machine_counter = 0;
}
void amCtrl_SetState(uint8_t state)
{
amCtrl_state = state;
am_state_machine = 0;
am_state_machine_counter = 0;
}
void amCtrl_Task(void)//50ms
{
static uint8_t PumpDutyCounter;
if (amCtrl_state == 0)
{
setPumpState(PUMP_OFF);
setValveState(VALVE3,VALVE_OFF);
setValveState(VALVE2,VALVE_OFF);
setValveState(VALVE1,VALVE_OFF);
am_state_machine = 0;
am_state_machine_counter = 0;
amCtrl_counter = 0;
}
else
{
switch (amCtrl_state)
{
case 1:
PumpDutyCounter++;
if (PumpDutyCounter >= 10)
{
PumpDutyCounter = 0;
setPumpState(PUMP_ON);
amCtrl_Act1();
}
break;
case 2:
PumpDutyCounter++;
if (PumpDutyCounter >= 10)
{
PumpDutyCounter = 0;
setPumpState(PUMP_ON);
amCtrl_Act2();
}
break;
case 3:
PumpDutyCounter++;
if (PumpDutyCounter == 9)
{
setPumpState(PUMP_OFF);
}
else
{
setPumpState(PUMP_ON);
}
if (PumpDutyCounter >= 10)
{
PumpDutyCounter = 0;
amCtrl_Act3();
}
break;
default:
break;
}
/*
//20240622取消定时15分钟
amCtrl_counter++;
if (amCtrl_counter > 18000)
{
amCtrl_state = 0;
}
*/
}
}
#if CONFIG == HIGH_CONFIG
//tbd
#else
#define CHONGQI_TIME_6S 120
#define CHONGQI_TIME_6S5 130
#define CHONGQI_TIME_7S 140
static void amCtrl_Act1(void)//50ms
{
switch (am_state_machine)
{
case 0:
setValveState(VALVE1,VALVE_ON);
setValveState(VALVE2,VALVE_OFF);
setValveState(VALVE3,VALVE_OFF);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_6S)
{
am_state_machine_counter = 0;
am_state_machine = 1;
}
break;
case 1:
setValveState(VALVE1,VALVE_OFF);
setValveState(VALVE2,VALVE_ON);
setValveState(VALVE3,VALVE_OFF);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_6S)
{
am_state_machine_counter = 0;
am_state_machine = 2;
}
break;
case 2:
setValveState(VALVE1,VALVE_OFF);
setValveState(VALVE2,VALVE_OFF);
setValveState(VALVE3,VALVE_ON);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_6S)
{
am_state_machine_counter = 0;
am_state_machine = 0;
}
break;
default:
am_state_machine = 0;
break;
}
}
static void amCtrl_Act2(void)
{
switch (am_state_machine)
{
case 0:
setValveState(VALVE3,VALVE_ON);
setValveState(VALVE2,VALVE_OFF);
setValveState(VALVE1,VALVE_ON);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_7S)
{
am_state_machine_counter = 0;
am_state_machine = 1;
}
break;
case 1:
setValveState(VALVE3,VALVE_OFF);
setValveState(VALVE2,VALVE_ON);
setValveState(VALVE1,VALVE_OFF);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_7S)
{
am_state_machine_counter = 0;
am_state_machine = 0;
}
break;
default:
am_state_machine = 0;
break;
}
}
static void amCtrl_Act3(void)
{
switch (am_state_machine)
{
case 0:
setValveState(VALVE3,VALVE_ON);
setValveState(VALVE2,VALVE_OFF);
setValveState(VALVE1,VALVE_OFF);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_6S5)
{
am_state_machine_counter = 0;
am_state_machine = 1;
}
break;
case 1:
setValveState(VALVE3,VALVE_OFF);
setValveState(VALVE2,VALVE_ON);
setValveState(VALVE1,VALVE_OFF);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_6S5)
{
am_state_machine_counter = 0;
am_state_machine = 2;
}
break;
case 2:
setValveState(VALVE3,VALVE_OFF);
setValveState(VALVE2,VALVE_OFF);
setValveState(VALVE1,VALVE_ON);
am_state_machine_counter++;
if (am_state_machine_counter >= CHONGQI_TIME_6S5)
{
am_state_machine_counter = 0;
am_state_machine = 0;
}
break;
default:
break;
}
}
#endif