You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.3 KiB
62 lines
1.3 KiB
4 months ago
|
#include "../app/task_adc.h"
|
||
|
#include "../msp/msp_adc.h"
|
||
|
#include "../app/app_config.h"
|
||
|
#include "../msp/uart0.h"
|
||
|
|
||
|
|
||
|
|
||
|
S_TASK_ADC _s_task_adc;
|
||
|
|
||
|
|
||
|
void L3_task_Adc_init(void)
|
||
|
{
|
||
|
L1_task_init(&_s_task_adc.task);
|
||
|
_s_task_adc.index = 0;
|
||
|
_s_task_adc.SUM = 0;
|
||
|
L3_task_s_go(_s_task_adc,D_task_init);
|
||
|
}
|
||
|
|
||
|
#define D_task_ADC_READ 0x50
|
||
|
#define D_task_ADC_COUNT 0x51
|
||
|
|
||
|
|
||
|
void L3_task_Adc_handler(S_TASK_ADC *s)
|
||
|
{
|
||
|
TTSS_Task_init()
|
||
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
|
||
|
|
||
|
TTSS_Task_step(D_task_ADC_READ)
|
||
|
s->adc_val[_s_task_adc.index] = L1_ADC_Read(12);
|
||
|
s->SUM += s->adc_val[_s_task_adc.index++];
|
||
|
|
||
|
if (_s_task_adc.index >= 10)
|
||
|
{
|
||
|
_s_task_adc.index = 0;
|
||
|
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_300ms);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
|
||
|
}
|
||
|
TTSS_Task_step(D_task_ADC_COUNT)
|
||
|
// 计算平均值
|
||
|
U16 Aver = s->SUM / ADC_NUM;
|
||
|
// 计算方差
|
||
|
U8 i;
|
||
|
FP32 Variance = 0;
|
||
|
for(i = 0; i < ADC_NUM; i++)
|
||
|
{
|
||
|
Variance += (s->adc_val[i] - Aver) * (s->adc_val[i] - Aver);
|
||
|
}
|
||
|
Variance /= ADC_NUM;
|
||
|
|
||
|
// // 方差合格,计算电量,放到G,不合格丢弃
|
||
|
// if ((U16)(Variance*10) < 2)
|
||
|
// {
|
||
|
// Vin = (Aver / 0x1000) * 3.3;
|
||
|
// Percent = Vin / 4.2
|
||
|
// }
|
||
|
Aver = 0;
|
||
|
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
|
||
|
TTSS_Task_end();
|
||
|
}
|