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)
{
#ifdef 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)
#if (defined ADC_MODE_0) || (defined ADC_MODE_1) || (defined ADC_MODE_3)
voltage = ptz_Voltage_collect_adc1_task();
rt_thread_mdelay(500);
@ -138,6 +119,7 @@ int main(void)
#ifdef ADC_MODE_2
adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取
#endif
//测试mb铁电读写
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
//下次移到drv_adc.c文件里
#ifdef ADCX_IRQn
void ADC_IRQHandler()
{

View File

@ -21,6 +21,20 @@ uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0};
#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_i_flag = 0;//滤波开启标志位,全局改变一次
bool filter_t_flag = 0;//滤波开启标志位,全局改变一次
@ -182,34 +196,41 @@ void adc_interrupt_int(void)
}
#endif
/* ---------------------------------------------------采集---------------------------------------------------- */
// adc电压采集
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;
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
{
adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);
}
#ifdef ADC_MODE_0
/* 模式1需先配置 */
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);// 软件触发使能 后续接读取
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
{
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
adc_flag_clear(ADCX, ADC_FLAG_EOC);
value_V = 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_V = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器
}
#endif
#ifdef ADC_MODE_0
while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束
adc_flag_clear(ADCX, ADC_FLAG_EOC);
value_V = 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_V = adc_inserted_data_read(ADCX, ADC_INSERTED_CHANNEL_0); // 读取注入组数据寄存器
#endif
#ifdef ADC_MODE_3
value_V = BSP_ADCDataAcquire(0);
#endif
/* 间接测量11倍分压/放大 */
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;
}
if (filter_v_flag)
if (filter_v_flag)//等读满一组开始滤波
{
return Filtering(adc1_v, LB_V_TIMES, LB_V_DEL);
}
@ -232,29 +253,33 @@ float ptz_Voltage_collect_adc1_task()
// adc电流采集
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;
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
{
adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);
}
#ifdef ADC_MODE_0
/* 模式1需先配置 */
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);// 软件触发使能 后续接读取
#endif
if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL)
{
while (adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束->等到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];

View File

@ -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模式配置参数