From b458a575779be19364c6a5e4dd6fef8c1bb55699 Mon Sep 17 00:00:00 2001 From: "DESKTOP-2E6P1Q6\\Administrator" <1625800082@qq.com> Date: Wed, 24 Sep 2025 10:46:14 +0800 Subject: [PATCH] =?UTF-8?q?ADC=E6=9A=82=E6=97=B6=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/main/main.c | 25 ++------- drivers/drv_adc.c | 112 +++++++++++++++++++++++---------------- drivers/drv_adc.h | 4 +- 3 files changed, 71 insertions(+), 70 deletions(-) diff --git a/applications/main/main.c b/applications/main/main.c index 793dd9c..ce1d499 100644 --- a/applications/main/main.c +++ b/applications/main/main.c @@ -107,27 +107,8 @@ int main(void) // 进入主循环或启动其他任务 while (1) { - #ifdef ADC_MODE_3 - - - for(uint8_t i=0; i等到SET - adc_flag_clear(ADCX, ADC_FLAG_EOC); - value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器 - } - else if (SEQUENCE_CHANNEL == ADC_INSERTED_CHANNEL) - { - while (adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束 - adc_flag_clear(ADCX, ADC_FLAG_EOIC); - value_I = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器 - } + #ifdef ADC_MODE_0 + while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束 + adc_flag_clear(ADCX, ADC_FLAG_EOC); + value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器 + #endif + + #ifdef ADC_MODE_1 + while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束 + adc_flag_clear(ADCX, ADC_FLAG_EOIC); + value_I = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器 + #endif + + #ifdef ADC_MODE_3 + value_I = BSP_ADCDataAcquire(1); + #endif /* 间接测量,11倍分压/放大 */ adc1_i[adc1_i_num] = (((float)value_I / 4095.0 * 3.3) - 3.3 / 2) / 0.132; @@ -274,13 +299,9 @@ float ptz_Current_collect_adc1_task() } -//温度采集 +/* 温度采集 */ float ptz_temperature_collect_tmp75_task() { - static float tmp75[5]; - static unsigned char tmp75_num; - static float curtmp75_out; - tmp75[tmp75_num] = tmp75_read_temp(); tmp75_num ++; @@ -296,7 +317,7 @@ float ptz_temperature_collect_tmp75_task() return 0; } - +/* 滤波函数 */ float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel) { uint8_t j,k; @@ -315,7 +336,6 @@ float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel) } } } - for(uint8_t i = filterdel; i < filterlens - filterdel; i++) { curadc = curadc + filter[i]; diff --git a/drivers/drv_adc.h b/drivers/drv_adc.h index f302071..8534fd4 100644 --- a/drivers/drv_adc.h +++ b/drivers/drv_adc.h @@ -24,10 +24,10 @@ #define LB_I_DEL 2 //电流滤波最高最低各删除个数 #define LB_T_DEL 1 //温度滤波最高最低各删除个数 -// #define ADC_MODE_0 //规则组、单次转换、非扫描 +#define ADC_MODE_0 //规则组、单次转换、非扫描 // #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集 // #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集 -#define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集 +// #define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集 /* adc模式配置参数