此日期之前的累计更新,详见ReadMe
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/*获取桥丝电阻*/
|
||||
|
Reference in New Issue
Block a user