|
@ -2,6 +2,7 @@ |
|
|
#include "../msp/msp_adc.h" |
|
|
#include "../msp/msp_adc.h" |
|
|
#include "../app/app_config.h" |
|
|
#include "../app/app_config.h" |
|
|
#include "../msp/uart0.h" |
|
|
#include "../msp/uart0.h" |
|
|
|
|
|
#include "../bsp/bsp_WT2605B.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -13,50 +14,81 @@ void L3_task_Adc_init(void) |
|
|
L1_task_init(&_s_task_adc.task); |
|
|
L1_task_init(&_s_task_adc.task); |
|
|
_s_task_adc.index = 0; |
|
|
_s_task_adc.index = 0; |
|
|
_s_task_adc.SUM = 0; |
|
|
_s_task_adc.SUM = 0; |
|
|
|
|
|
_s_task_adc.LowPower_Flag = 0; |
|
|
|
|
|
_s_task_adc.LowPower_Count = 0; |
|
|
L3_task_s_go(_s_task_adc,D_task_init); |
|
|
L3_task_s_go(_s_task_adc,D_task_init); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#define D_task_ADC_READ 0x50 |
|
|
#define D_task_ADC_READ 0x50 |
|
|
#define D_task_ADC_COUNT 0x51 |
|
|
#define D_task_ADC_COUNT 0x51 |
|
|
|
|
|
#define D_task_LOWPOWER_DETECT 0x52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void L3_task_Adc_handler(S_TASK_ADC *s) |
|
|
void L3_task_Adc_handler(S_TASK_ADC *s) |
|
|
{ |
|
|
{ |
|
|
TTSS_Task_init() |
|
|
TTSS_Task_init() |
|
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); |
|
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); |
|
|
|
|
|
|
|
|
TTSS_Task_step(D_task_ADC_READ) |
|
|
TTSS_Task_step(D_task_ADC_READ) |
|
|
s->adc_val[_s_task_adc.index] = L1_ADC_Read(12); |
|
|
s->adc_val[_s_task_adc.index] = L1_ADC_Read(12); |
|
|
s->SUM += s->adc_val[_s_task_adc.index++]; |
|
|
s->SUM += s->adc_val[_s_task_adc.index++]; |
|
|
|
|
|
|
|
|
if (_s_task_adc.index >= 10) |
|
|
if (_s_task_adc.index >= 10) |
|
|
{ |
|
|
{ |
|
|
_s_task_adc.index = 0; |
|
|
_s_task_adc.index = 0; |
|
|
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_300ms); |
|
|
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_100ms); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); |
|
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); |
|
|
} |
|
|
} |
|
|
TTSS_Task_step(D_task_ADC_COUNT) |
|
|
TTSS_Task_step(D_task_ADC_COUNT) |
|
|
|
|
|
// U8 i;
|
|
|
// 计算平均值
|
|
|
// 计算平均值
|
|
|
U16 Aver = s->SUM / ADC_NUM; |
|
|
s->Aver = s->SUM / ADC_NUM; |
|
|
|
|
|
// L0_uart0_sendstr("s->SUM = ");
|
|
|
|
|
|
// L0_uart0_ulhex(s->SUM);
|
|
|
|
|
|
// L0_uart0_0d0a();
|
|
|
|
|
|
// L0_uart0_sendstr("s->Aver = ");
|
|
|
|
|
|
// L0_uart0_ushex(s->Aver);
|
|
|
|
|
|
s->SUM = 0; |
|
|
|
|
|
// s->Variance = 0;
|
|
|
// 计算方差
|
|
|
// 计算方差
|
|
|
U8 i; |
|
|
// for(i = 0; i < ADC_NUM; i++)
|
|
|
FP32 Variance = 0; |
|
|
// {
|
|
|
for(i = 0; i < ADC_NUM; i++) |
|
|
// S16 diff = s->adc_val[i] - s->Aver;
|
|
|
{ |
|
|
// s->Variance += diff >= 0 ? diff : -diff;
|
|
|
Variance += (s->adc_val[i] - Aver) * (s->adc_val[i] - Aver); |
|
|
// }
|
|
|
} |
|
|
// s->Variance /= ADC_NUM;
|
|
|
Variance /= ADC_NUM; |
|
|
// if (s->Variance <= 200)
|
|
|
|
|
|
|
|
|
// // 方差合格,计算电量,放到G,不合格丢弃
|
|
|
|
|
|
// if ((U16)(Variance*10) < 2)
|
|
|
|
|
|
// {
|
|
|
// {
|
|
|
// Vin = (Aver / 0x1000) * 3.3;
|
|
|
// s->Vin = (s->Aver / 0x1000) * 33;
|
|
|
// Percent = Vin / 4.2
|
|
|
|
|
|
// }
|
|
|
// }
|
|
|
Aver = 0; |
|
|
// 分压 0.5
|
|
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms); |
|
|
s->Vin = (s->Aver * 33 * 2) / 0x1000; |
|
|
|
|
|
G.Vin = s->Vin; |
|
|
|
|
|
|
|
|
|
|
|
L2_task_go_Tdelay(D_task_LOWPOWER_DETECT,D_Tdelay_100ms); |
|
|
|
|
|
|
|
|
|
|
|
TTSS_Task_step(D_task_LOWPOWER_DETECT) |
|
|
|
|
|
if (s->LowPower_Flag == 0) |
|
|
|
|
|
{ |
|
|
|
|
|
if (s->Vin < Alarm_Vol) |
|
|
|
|
|
{ |
|
|
|
|
|
s->LowPower_Count ++; |
|
|
|
|
|
if (s->LowPower_Count > Count_Max) |
|
|
|
|
|
{ |
|
|
|
|
|
L0_uart0_sendstr("s->Aver = "); |
|
|
|
|
|
s->LowPower_Flag = 1; |
|
|
|
|
|
// 语音提醒
|
|
|
|
|
|
L2_WT2605B_Broadcast(&audio_low_power); |
|
|
|
|
|
s->LowPower_Count = 0; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
s->LowPower_Count = 0; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_100ms); |
|
|
TTSS_Task_end(); |
|
|
TTSS_Task_end(); |
|
|
} |
|
|
} |