此日期之前的累计更新,详见ReadMe

This commit is contained in:
ranchuan
2024-03-07 09:22:49 +08:00
parent 87ad52847e
commit 8ed8cf52ff
10 changed files with 330 additions and 77 deletions

View File

@@ -6,6 +6,7 @@
#include "power.h"
#include "filter.h"
#include "core_delay.h"
#include "debug.h"
volatile uint16_t ad0_adc_sample[AD_SCAN_SAMPLE*AD_SCAN_COUNT];
#define ADC1_SAMPLE_BUF_LEN 200
@@ -447,13 +448,12 @@ uint16_t AD_CurMonitor_(uint32_t ul_times)
/*rc{
使用过滤算法的充能统计
这个函数给出的都是adc原始值
sample_timeout 单位是0.1ms
}*/
uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv)
uint16_t AD_GetChgEnergy_(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv)
{
uint16_t adc_max = 0;
uint16_t adc_temp,adc_shake=0;
@@ -470,9 +470,12 @@ uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max
do{
adc_value=adc_get_value(ADC_CURR_DE);
adc_start(ADC_CURR_DE);
// adc_value = GetADC_Fast(ADC_CURR_DE);
DBG_LOG("adc_value=%d",adc_value);
filter_insert(&f,adc_value);
filter_value=filter_get_head(&f);
if(adc_max<filter_value){
adc_max=filter_value;
}
if(delay_check(tick,1000000)){
// 1s超时未进入充能阶段
goto end;
@@ -486,10 +489,9 @@ uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max
do{
adc_value=adc_get_value(ADC_CURR_DE);
adc_start(ADC_CURR_DE);
// adc_value = GetADC_Fast(ADC_CURR_DE);
filter_insert(&f,adc_value);
filter_value=filter_get_mid(&f);
//filter_value=adc_value;
filter_insert(&sort,filter_value);
adc_temp=filter_get_tail(&sort)-filter_get_head(&sort);
if(adc_max<filter_value){
@@ -523,8 +525,9 @@ uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max
@rtv 时间采集值0.1ms
*/
uint16_t AD_GetChgEnergy_(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv)
uint16_t g_adc_values[1024];
uint16_t g_adc_value_index;
uint16_t AD_GetChgEnergy(uint16_t sample_timeout, uint16_t end_adv,uint16_t* max_cul,uint16_t *shake_adv)
{
uint16_t aus_adc_v[5];
uint16_t aus_adv_shake[20];
@@ -532,30 +535,33 @@ uint16_t AD_GetChgEnergy_(uint16_t sample_timeout, uint16_t end_adv,uint16_t* ma
uint16_t us_count = 0;
uint16_t us_shake_count = 0;
uint16_t us_shake_minadc,us_shake_maxadc;
uint16_t time_cost=0;
uint8_t start_flag = 0,shake_flag = 0;
Get100usCount();
// ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志
// ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换
ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志
ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换
aus_adc_v[4] = 0xFFFF;
*max_cul = 0;
*shake_adv = 0;
LED1_Out = 0;
g_adc_value_index=0;
if(end_adv == 0 || end_adv == 0xFFFF)
{
return 0;
time_cost =0;
goto end;
}
while(GetCountTimerCnt() < sample_timeout)
{
// time_out = 2000;
// while((time_out > 0) && ( ADC_GetFlagStatus(ADC_CURR_DE,ADC_FLAG_EOC) == RESET))
// {
// time_out--;
// }
// aus_adc_v[us_count] = ADC_GetConversionValue(ADC_CURR_DE) & 0x0FFF;
time_out = 2000;
while((time_out > 0) && ( ADC_GetFlagStatus(ADC_CURR_DE,ADC_FLAG_EOC) == RESET))
{
time_out--;
}
aus_adc_v[us_count] = ADC_GetConversionValue(ADC_CURR_DE) & 0x0FFF;
aus_adc_v[us_count] = GetADC_Fast(ADC_CURR_DE);
aus_adv_shake[us_shake_count] = aus_adc_v[us_count];
// ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志
// ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换
ADC_ClearFlag(ADC_CURR_DE,ADC_FLAG_EOC);//清除转换结束标志
ADC_SoftwareStartConvCmd(ADC_CURR_DE, ENABLE); //启动转换
us_count++;
us_shake_count++;
us_count %= 5;
@@ -602,6 +608,9 @@ uint16_t AD_GetChgEnergy_(uint16_t sample_timeout, uint16_t end_adv,uint16_t* ma
if(us_count == 0)
{
Bubble_Sort_u16(aus_adc_v,5);
if(g_adc_value_index<1023){
g_adc_values[g_adc_value_index++]=aus_adc_v[2];
}
if((aus_adc_v[0] > end_adv) && start_flag == 0)
{
start_flag = 1;
@@ -610,26 +619,36 @@ uint16_t AD_GetChgEnergy_(uint16_t sample_timeout, uint16_t end_adv,uint16_t* ma
//连续5个都大于判线值
else if(start_flag >0 )
{
if(*max_cul < aus_adc_v[2])
{
*max_cul = aus_adc_v[2];
}
if(*max_cul < aus_adc_v[2])
{
*max_cul = aus_adc_v[2];
}
if(aus_adc_v[4] < end_adv)
{
LED1_Out = 0;
return Get100usCount();
time_cost =Get100usCount();
goto end;
}
}else if(start_flag == 0)
{
if(GetCountTimerCnt() > 10000)
{
return 0;
time_cost =0;
goto end;
}
}
}
}
return 40000;
time_cost=sample_timeout+1;
end:
// if(time_cost<10){
DBG_LOG("adc_value num=%d",g_adc_value_index);
for(int i=0;i<g_adc_value_index;i++){
DBG_LOG("adc_value=%d",g_adc_values[i]);
// }
}
return time_cost;
}
/*获取桥丝电阻*/