ADC暂时结束

This commit is contained in:
DESKTOP-2E6P1Q6\Administrator 2025-09-24 10:46:14 +08:00
parent 61e3485689
commit b458a57577
3 changed files with 71 additions and 70 deletions

View File

@ -107,27 +107,8 @@ int main(void)
// 进入主循环或启动其他任务 // 进入主循环或启动其他任务
while (1) while (1)
{ {
#ifdef ADC_MODE_3
#if (defined ADC_MODE_0) || (defined ADC_MODE_1) || (defined ADC_MODE_3)
for(uint8_t i=0; i<CHANNEL_LENGTH; i++)
{
tmp_value = BSP_ADCDataAcquire(i);
if (i == 0)
{
voltage = tmp_value/ 4095.0 * 3.3;
}
else
{
current = tmp_value/ 4095.0 * 3.3;
}
}
rt_thread_mdelay(250);
#endif
#if (defined ADC_MODE_0) || (defined ADC_MODE_1)
voltage = ptz_Voltage_collect_adc1_task(); voltage = ptz_Voltage_collect_adc1_task();
rt_thread_mdelay(500); rt_thread_mdelay(500);
@ -138,6 +119,7 @@ int main(void)
#ifdef ADC_MODE_2 #ifdef ADC_MODE_2
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取 adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
#endif #endif
//测试mb铁电读写 //测试mb铁电读写
read_mb_id((uint8_t*)&tiedian_id);//读取铁电ID read_mb_id((uint8_t*)&tiedian_id);//读取铁电ID
@ -151,7 +133,7 @@ int main(void)
} }
} }
#ifdef DMAX #ifdef ADC_MODE_3
/* /*
***************************************************************************** *****************************************************************************
@ -189,7 +171,6 @@ void DMA1_Channel0_IRQHandler(void)
#endif #endif
//下次移到drv_adc.c文件里
#ifdef ADCX_IRQn #ifdef ADCX_IRQn
void ADC_IRQHandler() void ADC_IRQHandler()
{ {

View File

@ -21,6 +21,20 @@ uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
#endif #endif
float adc1_v[LB_V_TIMES];
float curadc1_out_v;
uint8_t adc1_v_num = 0;
float adc1_i[LB_I_TIMES];
float curadc1_out_i;
uint8_t adc1_i_num = 0;
float tmp75[LB_T_TIMES];
float curtmp75_out;
uint8_t tmp75_num;
bool filter_v_flag = 0;//滤波开启标志位,全局改变一次 bool filter_v_flag = 0;//滤波开启标志位,全局改变一次
bool filter_i_flag = 0;//滤波开启标志位,全局改变一次 bool filter_i_flag = 0;//滤波开启标志位,全局改变一次
bool filter_t_flag = 0;//滤波开启标志位,全局改变一次 bool filter_t_flag = 0;//滤波开启标志位,全局改变一次
@ -182,34 +196,41 @@ void adc_interrupt_int(void)
} }
#endif #endif
/* ---------------------------------------------------采集---------------------------------------------------- */ /* ---------------------------------------------------采集---------------------------------------------------- */
// adc电压采集 // adc电压采集
float ptz_Voltage_collect_adc1_task() float ptz_Voltage_collect_adc1_task()
{ {
static float adc1_v[LB_V_TIMES];
static float curadc1_out_v;
static uint8_t adc1_v_num = 0;
uint16_t value_V = 0; uint16_t value_V = 0;
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL) #ifdef ADC_MODE_0
{ /* 模式1需先配置 */
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480); adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
} #endif
#if (defined ADC_MODE_0) || (defined ADC_MODE_1)
/* 模式1 + 2 */
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取 adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL) #endif
{
#ifdef ADC_MODE_0
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束 while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
adc_flag_clear(ADCX, ADC_FLAG_EOC); adc_flag_clear(ADCX, ADC_FLAG_EOC);
value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器 value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
} #endif
else if (SEQUENCE_CHANNEL == ADC_INSERTED_CHANNEL)
{ #ifdef ADC_MODE_1
while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束 while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束
adc_flag_clear(ADCX, ADC_FLAG_EOIC); adc_flag_clear(ADCX, ADC_FLAG_EOIC);
value_V = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器 value_V = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器
} #endif
#ifdef ADC_MODE_3
value_V = BSP_ADCDataAcquire(0);
#endif
/* 间接测量11倍分压/放大 */ /* 间接测量11倍分压/放大 */
adc1_v[adc1_v_num] = (float)value_V / 4095.0 * 3.3; adc1_v[adc1_v_num] = (float)value_V / 4095.0 * 3.3;
@ -220,7 +241,7 @@ float ptz_Voltage_collect_adc1_task()
filter_v_flag = 1; filter_v_flag = 1;
} }
if (filter_v_flag) if (filter_v_flag)//等读满一组开始滤波
{ {
return Filtering(adc1_v, LB_V_TIMES, LB_V_DEL); return Filtering(adc1_v, LB_V_TIMES, LB_V_DEL);
} }
@ -232,29 +253,33 @@ float ptz_Voltage_collect_adc1_task()
// adc电流采集 // adc电流采集
float ptz_Current_collect_adc1_task() float ptz_Current_collect_adc1_task()
{ {
static float adc1_i[LB_I_TIMES];
static float curadc1_out_i;
static uint8_t adc1_i_num = 0;
uint16_t value_I = 0; uint16_t value_I = 0;
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
{ #ifdef ADC_MODE_0
/* 模式1需先配置 */
adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480); adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
} #endif
#if (defined ADC_MODE_0) || (defined ADC_MODE_1)
/* 模式1 + 2 */
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取 adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
#endif
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL) #ifdef ADC_MODE_0
{ while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
while (adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束->等到SET
adc_flag_clear(ADCX, ADC_FLAG_EOC); adc_flag_clear(ADCX, ADC_FLAG_EOC);
value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器 value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器
} #endif
else if (SEQUENCE_CHANNEL == ADC_INSERTED_CHANNEL)
{ #ifdef ADC_MODE_1
while (adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束 while(adc_flag_get(ADCX, ADC_FLAG_EOIC) == RESET); // 等待转换结束
adc_flag_clear(ADCX, ADC_FLAG_EOIC); adc_flag_clear(ADCX, ADC_FLAG_EOIC);
value_I = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器 value_I = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_1); // 读取注入组数据寄存器
} #endif
#ifdef ADC_MODE_3
value_I = BSP_ADCDataAcquire(1);
#endif
/* 间接测量11倍分压/放大 */ /* 间接测量11倍分压/放大 */
adc1_i[adc1_i_num] = (((float)value_I / 4095.0 * 3.3) - 3.3 / 2) / 0.132; 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() 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[tmp75_num] = tmp75_read_temp();
tmp75_num ++; tmp75_num ++;
@ -296,7 +317,7 @@ float ptz_temperature_collect_tmp75_task()
return 0; return 0;
} }
/* 滤波函数 */
float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel) float Filtering(float *filter, uint8_t filterlens, uint8_t filterdel)
{ {
uint8_t j,k; 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++) for(uint8_t i = filterdel; i < filterlens - filterdel; i++)
{ {
curadc = curadc + filter[i]; curadc = curadc + filter[i];

View File

@ -24,10 +24,10 @@
#define LB_I_DEL 2 //电流滤波最高最低各删除个数 #define LB_I_DEL 2 //电流滤波最高最低各删除个数
#define LB_T_DEL 1 //温度滤波最高最低各删除个数 #define LB_T_DEL 1 //温度滤波最高最低各删除个数
// #define ADC_MODE_0 //规则组、单次转换、非扫描 #define ADC_MODE_0 //规则组、单次转换、非扫描
// #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集 // #define ADC_MODE_1 //注入组、单次转换、扫描、转换结束标志位采集
// #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集 // #define ADC_MODE_2 //注入组、单次转换、扫描、中断转换结束标志位采集
#define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集 // #define ADC_MODE_3 //规则组、连续转换、扫描、DMA采集
/* /*
adc模式配置参数 adc模式配置参数