2024-05-19 17:07:18 +08:00
|
|
|
#include "appTask.h"
|
|
|
|
#include "iodefine.h"
|
|
|
|
#include "r_cg_adc.h"
|
|
|
|
#include "PINdef.h"
|
|
|
|
#include "hwCtrl.h"
|
|
|
|
#include "MotorCtrl.h"
|
2024-05-19 19:59:12 +08:00
|
|
|
#include "r_cg_serial.h"
|
|
|
|
#include "r_cg_timer.h"
|
2024-05-19 17:07:18 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned char Timer_1ms_flag;
|
|
|
|
unsigned char Timer_5ms_flag;
|
|
|
|
unsigned char Timer_10ms_flag;
|
|
|
|
unsigned char Timer_20ms_flag;
|
|
|
|
unsigned char Timer_50ms_flag;
|
|
|
|
unsigned char Timer_1000ms_flag;
|
|
|
|
|
|
|
|
uint32_t gIGNVoltage,gBattVoltage;
|
|
|
|
|
|
|
|
uint8_t g_rx_buf[3];
|
|
|
|
uint8_t g_tx_buf[8];
|
|
|
|
|
|
|
|
uint8_t datacount=0;
|
|
|
|
uint8_t RxTimeoutCount=0;
|
|
|
|
static uint8_t Rxdata[10];
|
|
|
|
uint8_t RxFlag=0;
|
|
|
|
|
2024-05-19 19:59:12 +08:00
|
|
|
const uint8_t fan_duty_arr[4] = {0,100,50,25};
|
2024-05-19 17:07:18 +08:00
|
|
|
const uint8_t heat_duty_arr[4] = {0,80,65,50};
|
2024-05-19 21:15:43 +08:00
|
|
|
static uint8_t heat_state=0,fan_state=0,am_state=0;
|
2024-05-19 17:07:18 +08:00
|
|
|
|
|
|
|
void Batt_State_Ctrl(void);
|
|
|
|
void PowerDetect(void);
|
|
|
|
void IGN_State_Ctrl(void);
|
|
|
|
void MsgPro(uint8_t len);
|
|
|
|
|
|
|
|
|
|
|
|
void Apply_task(void)
|
|
|
|
{
|
2024-05-19 19:59:12 +08:00
|
|
|
static uint8_t temp;
|
2024-05-19 17:07:18 +08:00
|
|
|
if (Timer_1ms_flag == 1)
|
|
|
|
{
|
|
|
|
Timer_1ms_flag = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
if (Timer_5ms_flag == 1)
|
|
|
|
{
|
|
|
|
Timer_5ms_flag = 0;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Timer_10ms_flag == 1)
|
|
|
|
{
|
|
|
|
Timer_10ms_flag = 0;
|
|
|
|
//MotorCtrl();
|
|
|
|
|
|
|
|
}
|
|
|
|
if (Timer_20ms_flag == 1)
|
|
|
|
{
|
|
|
|
Timer_20ms_flag = 0;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
if (Timer_50ms_flag == 1)
|
|
|
|
{
|
|
|
|
Timer_50ms_flag = 0;
|
|
|
|
PowerDetect();
|
2024-05-19 20:26:03 +08:00
|
|
|
amCtrl_Task();
|
2024-05-19 17:07:18 +08:00
|
|
|
}
|
|
|
|
if (Timer_1000ms_flag == 1)
|
|
|
|
{
|
|
|
|
Timer_1000ms_flag = 0;
|
2024-05-19 19:59:12 +08:00
|
|
|
//R_UART0_Send(g_tx_buf,1);
|
2024-05-19 17:07:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PowerDetect(void)//50ms
|
|
|
|
{
|
|
|
|
uint16_t adval;
|
|
|
|
adval = getAdval(AD_ST1_IGN);
|
|
|
|
gIGNVoltage = adval;
|
|
|
|
gIGNVoltage = gIGNVoltage*5*61*1000/(1024*11) + 700;
|
|
|
|
|
|
|
|
adval = getAdval(AD_ST2_BAT);
|
|
|
|
gBattVoltage = adval;
|
|
|
|
gBattVoltage = gBattVoltage*5*61*1000/(1024*11) + 700;
|
|
|
|
|
|
|
|
Batt_State_Ctrl();
|
|
|
|
IGN_State_Ctrl();
|
|
|
|
}
|
|
|
|
BATT_STATUS_Type battState = BattStatus_Init;
|
|
|
|
uint16_t battCtrlCounter[3] = {0,0,0};
|
|
|
|
void Batt_State_Ctrl(void)//50ms
|
|
|
|
{
|
|
|
|
switch (battState)
|
|
|
|
{
|
|
|
|
case BattStatus_Init:
|
|
|
|
if (gBattVoltage >= 8500 && gBattVoltage <= 16500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[0]++;
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
if (battCtrlCounter[0] > 3)
|
|
|
|
{
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battState = BattStatus_Normal;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gBattVoltage > 16500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
if (battCtrlCounter[1] > 3)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battState = BattStatus_OV;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gBattVoltage < 8500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[2]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
if (battCtrlCounter[2] > 3)
|
|
|
|
{
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
battState = BattStatus_UV;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case BattStatus_Normal:
|
|
|
|
if (gBattVoltage < 8500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[2]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
if (battCtrlCounter[2] > 30)
|
|
|
|
{
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
battState = BattStatus_UV;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gBattVoltage > 16500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
if (battCtrlCounter[1] > 30)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battState = BattStatus_OV;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case BattStatus_OV:
|
|
|
|
if (gBattVoltage <= 16500 && gBattVoltage >= 8500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
if (battCtrlCounter[1] > 30)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battState = BattStatus_Normal;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gBattVoltage < 8500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[2]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
if (battCtrlCounter[2] > 30)
|
|
|
|
{
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
battState = BattStatus_UV;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case BattStatus_UV:
|
|
|
|
if (gBattVoltage >= 8500 && gBattVoltage <= 16500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1]++;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
if (battCtrlCounter[1] > 30)
|
|
|
|
{
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battState = BattStatus_Normal;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gBattVoltage > 16500)
|
|
|
|
{
|
|
|
|
battCtrlCounter[0]++;
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
if (battCtrlCounter[0] > 30)
|
|
|
|
{
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battState = BattStatus_OV;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
default:
|
|
|
|
battState = BattStatus_Init;
|
|
|
|
battCtrlCounter[0] = 0;
|
|
|
|
battCtrlCounter[1] = 0;
|
|
|
|
battCtrlCounter[2] = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uint16_t ignCtrlCounter;
|
|
|
|
uint8_t gIGN_State=0;
|
|
|
|
void IGN_State_Ctrl(void)//50ms
|
|
|
|
{
|
|
|
|
if (gIGN_State == 0)
|
|
|
|
{
|
|
|
|
if (gIGNVoltage > 8500)
|
|
|
|
{
|
|
|
|
ignCtrlCounter++;
|
|
|
|
if (ignCtrlCounter > 10)
|
|
|
|
{
|
|
|
|
gIGN_State = 1;
|
|
|
|
ignCtrlCounter = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ignCtrlCounter = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gIGN_State == 1)
|
|
|
|
{
|
|
|
|
if (gIGNVoltage < 8000)
|
|
|
|
{
|
|
|
|
ignCtrlCounter++;
|
|
|
|
if (ignCtrlCounter > 10)
|
|
|
|
{
|
|
|
|
gIGN_State = 0;
|
|
|
|
ignCtrlCounter = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ignCtrlCounter = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void HardWare_Init(void)
|
|
|
|
{
|
|
|
|
//时基初始化
|
|
|
|
R_TAU0_Channel0_Start();
|
|
|
|
|
|
|
|
//AD 初始化
|
|
|
|
R_ADC_Start();
|
|
|
|
R_ADC_Set_OperationOn();
|
|
|
|
R_TAU0_Channel1_Start();
|
|
|
|
|
|
|
|
//UART初始化
|
|
|
|
R_UART0_Start();
|
|
|
|
R_UART0_Receive(g_rx_buf,1);
|
|
|
|
|
2024-05-21 18:52:04 +08:00
|
|
|
setFanDuty(0);
|
|
|
|
setHeatDuty(0);
|
|
|
|
|
2024-05-19 17:07:18 +08:00
|
|
|
//通风加热
|
|
|
|
R_TAU0_Channel4_Start();
|
|
|
|
R_TAU0_Channel6_Start();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void value_init(void)
|
|
|
|
{
|
|
|
|
|
2024-05-19 20:26:03 +08:00
|
|
|
amCtrl_Init();
|
2024-05-19 17:07:18 +08:00
|
|
|
//MotorValueInit();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KeyPro(void)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Timer_Pro(void)
|
|
|
|
{
|
|
|
|
static unsigned int Timer_1ms_tick_count;
|
|
|
|
Timer_1ms_tick_count++;
|
|
|
|
Timer_1ms_flag=1;
|
|
|
|
if(Timer_1ms_tick_count%5==0)
|
|
|
|
{
|
|
|
|
Timer_5ms_flag=1;
|
|
|
|
}
|
|
|
|
if(Timer_1ms_tick_count%10==0)
|
|
|
|
{
|
|
|
|
Timer_10ms_flag=1;
|
|
|
|
}
|
|
|
|
if(Timer_1ms_tick_count%20==0)
|
|
|
|
{
|
|
|
|
Timer_20ms_flag=1;
|
|
|
|
}
|
|
|
|
if(Timer_1ms_tick_count%50==0)
|
|
|
|
{
|
|
|
|
Timer_50ms_flag=1;
|
|
|
|
}
|
|
|
|
if(Timer_1ms_tick_count%1000==0)
|
|
|
|
{
|
|
|
|
Timer_1000ms_flag = 1;
|
|
|
|
}
|
|
|
|
if(Timer_1ms_tick_count>=5000)
|
|
|
|
{
|
|
|
|
Timer_1ms_tick_count=0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void UART_Rx_Pro(uint8_t data)
|
|
|
|
{
|
|
|
|
static uint8_t last_data=0,datalen=0;
|
|
|
|
if (last_data == 0x5A && data == 0xA5)
|
|
|
|
{
|
|
|
|
RxFlag = 1;
|
|
|
|
datacount = 0;
|
|
|
|
datalen=0;
|
2024-05-19 19:59:12 +08:00
|
|
|
//g_tx_buf[0] = 1;
|
2024-05-19 17:07:18 +08:00
|
|
|
//R_UART0_Send(g_tx_buf,1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (RxFlag == 1)
|
|
|
|
{
|
|
|
|
datalen = data;
|
|
|
|
RxFlag = 2;
|
|
|
|
g_tx_buf[0] = 2;
|
|
|
|
//R_UART0_Send(g_tx_buf,1);
|
|
|
|
}
|
|
|
|
else if (RxFlag == 2)
|
|
|
|
{
|
|
|
|
Rxdata[datacount++] = data;
|
|
|
|
if (datacount >= datalen)
|
|
|
|
{
|
|
|
|
MsgPro(datalen);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
last_data = data;
|
|
|
|
RxTimeoutCount = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SendTFJRmsg(uint8_t tf,uint8_t jr)
|
|
|
|
{
|
|
|
|
uint8_t i,txbuf[7] = {0x5a,0xa5,0x04,0x01,0x00,0x00,0x01};
|
|
|
|
if (tf != 0)
|
|
|
|
{
|
|
|
|
switch (tf)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
txbuf[3] = txbuf[6] = 0x08;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
txbuf[3] = txbuf[6] = 0x07;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
txbuf[3] = txbuf[6] = 0x02;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (jr != 0)
|
|
|
|
{
|
|
|
|
switch (jr)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
txbuf[3] = txbuf[6] = 0x80;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
txbuf[3] = txbuf[6] = 0x70;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
txbuf[3] = txbuf[6] = 0x20;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
txbuf[3] = txbuf[6] = 0x11;
|
|
|
|
}
|
|
|
|
for (i = 0; i < 7; i++)
|
|
|
|
{
|
|
|
|
g_tx_buf[i] = txbuf[i];
|
|
|
|
}
|
|
|
|
R_UART0_Send(g_tx_buf,7);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MsgPro(uint8_t len)
|
|
|
|
{
|
|
|
|
uint8_t i;
|
|
|
|
//不用大屏协议
|
|
|
|
uint8_t crc,crcRx;
|
|
|
|
if (len <= 3)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2024-05-19 19:59:12 +08:00
|
|
|
//R_UART0_Send(Rxdata,4);
|
2024-05-19 17:07:18 +08:00
|
|
|
//ClearSleepCounter();
|
|
|
|
crc = 0;
|
|
|
|
for(i=0;i<3;i++)
|
|
|
|
{
|
|
|
|
crc += Rxdata[i];
|
|
|
|
}
|
|
|
|
crcRx = Rxdata[3];
|
|
|
|
|
|
|
|
if (crc == crcRx)
|
|
|
|
{
|
|
|
|
|
|
|
|
if (Rxdata[0] != 0)
|
|
|
|
{
|
|
|
|
|
|
|
|
switch (Rxdata[0])
|
|
|
|
{
|
|
|
|
case 0x03:
|
|
|
|
fan_state = 0;
|
|
|
|
heat_state = 0;
|
|
|
|
break;
|
|
|
|
case 0x06:
|
|
|
|
fan_state = 3;
|
|
|
|
heat_state = 0;
|
|
|
|
break;
|
|
|
|
case 0x05:
|
|
|
|
fan_state = 2;
|
|
|
|
heat_state = 0;
|
|
|
|
break;
|
|
|
|
case 0x04:
|
|
|
|
fan_state = 1;
|
|
|
|
heat_state = 0;
|
|
|
|
break;
|
|
|
|
case 0x30:
|
|
|
|
fan_state = 0;
|
|
|
|
heat_state = 0;
|
|
|
|
break;
|
|
|
|
case 0x60:
|
|
|
|
fan_state = 0;
|
|
|
|
heat_state = 3;
|
|
|
|
break;
|
|
|
|
case 0x50:
|
|
|
|
fan_state = 0;
|
|
|
|
heat_state = 2;
|
|
|
|
break;
|
|
|
|
case 0x40:
|
|
|
|
fan_state = 0;
|
|
|
|
heat_state = 1;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-05-19 20:26:03 +08:00
|
|
|
switch (Rxdata[1])
|
|
|
|
{
|
|
|
|
case 0x0A:
|
2024-05-19 21:15:43 +08:00
|
|
|
am_state = 1;
|
2024-05-19 20:26:03 +08:00
|
|
|
break;
|
|
|
|
case 0x0B:
|
2024-05-19 21:15:43 +08:00
|
|
|
am_state = 2;
|
2024-05-19 20:26:03 +08:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 0x0C:
|
2024-05-19 21:15:43 +08:00
|
|
|
am_state = 3;
|
2024-05-19 20:26:03 +08:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 0x0D:
|
2024-05-19 21:15:43 +08:00
|
|
|
am_state = 0;
|
2024-05-19 20:26:03 +08:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2024-05-19 21:15:43 +08:00
|
|
|
|
|
|
|
if (gIGN_State == 1 && battState == BattStatus_Normal)
|
|
|
|
{
|
|
|
|
SendTFJRmsg(fan_state,heat_state);
|
|
|
|
setFanDuty(fan_duty_arr[fan_state]);
|
|
|
|
setHeatDuty(heat_duty_arr[heat_state]);
|
|
|
|
amCtrl_SetState(am_state);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-05-19 17:07:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
RxFlag = 0;
|
|
|
|
RxTimeoutCount = 0;
|
|
|
|
datacount = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|