diff --git a/applications/main/main.c b/applications/main/main.c index a3664da..0e9111d 100644 --- a/applications/main/main.c +++ b/applications/main/main.c @@ -46,6 +46,7 @@ float current; float current_origin; float adc_value; char tiedian_id[3]={0}; + #ifdef MDAX uint32_t ctl_data = 0; #endif @@ -150,6 +151,7 @@ int main(void) voltage = ptz_Voltage_collect_adc1_task(); rt_thread_mdelay(500); + current = ptz_Current_collect_adc1_task(); rt_thread_mdelay(500); diff --git a/drivers/drv_adc.c b/drivers/drv_adc.c index a359a4f..3490fa2 100644 --- a/drivers/drv_adc.c +++ b/drivers/drv_adc.c @@ -13,10 +13,12 @@ #include "drv_adc.h" + +#ifdef DMAX /*全局声明区*/ uint16_t USER_ADC_DMA_DATA_BUFF[16] = {0}; uint32_t ctl = 0; - +#endif void adc_init(void) { @@ -126,7 +128,6 @@ __weak void DMA1_Channel0_IRQHandler(void) { } - #endif @@ -143,8 +144,13 @@ void adc_config(void) /* 设置转换通道序列 */ adc_channel_length_config (ADCX, SEQUENCE_CHANNEL, CHANNEL_LENGTH);// 配置规则序列的长度:2个通道 - adc_routine_channel_config (ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480); - adc_routine_channel_config (ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480); + if (SEQUENCE_CHANNEL == ADC_INSERTED_CHANNEL) + { + //通道注入顺序 + /* 配置规则序列:序号0是电压通道,序号1是电流通道 */ + adc_inserted_channel_config (ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480);//电压 + adc_inserted_channel_config (ADCX, 1, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480);//电流 + } /* 使能外部触发:这里使用软件触发,所以先禁用硬件触发 */ @@ -177,14 +183,24 @@ float ptz_Voltage_collect_adc1_task() float tem; float curadc1; uint16_t value_V = 0; - - /* 配置规则序列:序号0是电压通道,序号1是电流通道 */ - adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480); + if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL) + { + adc_routine_channel_config(ADCX, 0, VOLTAGE_ADC_CHANNEL, ADC_SAMPLETIME_480); + } adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取 - while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束 - value_V = adc_routine_data_read(ADCX); // 读取规则组数据寄存器 - + 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); // 读取注入组数据寄存器 + } /* 间接测量,11倍分压/放大 */ adc1_v[adc1_v_num] = (float)value_V / 4095.0 * 3.3; @@ -227,16 +243,28 @@ float ptz_Current_collect_adc1_task() float tem; float curadc1; uint16_t value_I = 0; - - // 配置规则序列:序号0是电压通道,序号1是电流通道 - adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480); + if (SEQUENCE_CHANNEL == ADC_ROUTINE_CHANNEL) + { + adc_routine_channel_config(ADCX, 0, CURRENT_ADC_CHANNEL, ADC_SAMPLETIME_480); + } adc_software_trigger_enable(ADCX, SEQUENCE_CHANNEL);// 软件触发使能 后续接读取 - while(adc_flag_get(ADCX, ADC_FLAG_EOC) == RESET); // 等待转换结束->等到SET - value_I = adc_routine_data_read(ADCX); // 读取规则组数据寄存器 + + 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); // 读取注入组数据寄存器 + } /* 间接测量,11倍分压/放大 */ - adc1_i[adc1_i_num] = (((float)value_I / 4096.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; adc1_i_num++; if(adc1_i_num >= LB_I_TIMES) diff --git a/drivers/drv_adc.h b/drivers/drv_adc.h index 7d69767..82533ea 100644 --- a/drivers/drv_adc.h +++ b/drivers/drv_adc.h @@ -23,15 +23,15 @@ #define LB_I_DEL 2 //电流滤波最高最低各删除个数 /* - adc模式配置参数 ENABLE DISABLE */ #define CONTINUOUS_STATUS DISABLE // 是否开启连续转换 -#define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 注入组还是规则组 -#define SCAN_STATUS DISABLE // 是否开启扫描模式 -#define CHANNEL_LENGTH 1 // 通道数量:1~16 +// #define SEQUENCE_CHANNEL ADC_ROUTINE_CHANNEL // 注入组还是规则组 +#define SEQUENCE_CHANNEL ADC_INSERTED_CHANNEL // 注入组还是规则组 +#define SCAN_STATUS ENABLE // 是否开启扫描模式 +#define CHANNEL_LENGTH 2 // 通道数量:1~16