/** ########################################################################## ** Filename : ** Project : ** Module : ** Processor : ** Version : 1.0 ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20230602- --V1.0-- --mingyea--- --修改-- ** #########################################################################*/ /*--------------------------------------------------------------------------- - I N C L U D E F I L E S ----------------------------------------------------------------------------*/ #include "cpu.h" #include "gpio.h" #include "adc.h" /*--------------------------------------------------------------------------- - D E F I N E S / M A C R O S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - T Y P E D E F I N I T I O N S ----------------------------------------------------------------------------*/ typedef struct { u16 system_voltage ; //bat 转换成总电压值 u16 md_voltage; u16 channel[ADC_LOGIC_MANAGE_CHANEL_MAX]; }adc_manage_s; /*--------------------------------------------------------------------------- - S T A T I C V A R I A B L E S ----------------------------------------------------------------------------*/ static adc_manage_s g_adc_manage; /*--------------------------------------------------------------------------- * G L O B A L V A R I A B L E S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - C O N S T A N T S ----------------------------------------------------------------------------*/ //倒序--原来底层根据通道的大小值排的 FL_ADC_INTERNAL_VREF1P2 排第一,FL_ADC_EXTERNAL_CH15排第二,以此类推 const u32 g_adc_drv_channel[ADC_LOGIC_CHANNEL_MAX] = { FL_ADC_INTERNAL_VREF1P2, //ADC_CHANNEL_4_PHY_ID, //ADC_CHANNEL_3_PHY_ID, ADC_CHANNEL_0_PHY_ID, ADC_CHANNEL_1_PHY_ID, ADC_CHANNEL_6_PHY_ID, ADC_CHANNEL_8_PHY_ID, ADC_CHANNEL_2_PHY_ID, ADC_CHANNEL_5_PHY_ID, ADC_CHANNEL_7_PHY_ID, }; /* ADC 时钟设置 */ const FL_ADC_CommonInitTypeDef g_ADC_CommonInitStruct = { FL_CMU_ADC_CLK_SOURCE_RCHF, /** ADC工作时钟源选择 */ FL_ADC_CLK_PSC_DIV8, /** ADCCLK预分频配置 */ FL_ADC_REF_SOURCE_VDDA, /** ADC基准源选择 */ FL_ADC_BIT_WIDTH_12B /** ADC数据位选择 */ }; const FL_ADC_InitTypeDef g_ADC_InitStruct = { #if ADC_ENABLE_DMA_MODE == 0u FL_ADC_CONV_MODE_SINGLE, /** 连续转换模式配置 */ #else FL_ADC_CONV_MODE_CONTINUOUS, /** 连续转换模式配置 */ #endif FL_ADC_SINGLE_CONV_MODE_AUTO, /** 单次自动转换模式配置 */ FL_DISABLE, /** 等待模式配置 */ //DMA必须关闭 FL_ENABLE, /** 覆盖模式配置 */ FL_ADC_SEQ_SCAN_DIR_BACKWARD, /* 通道正序扫描 */ //倒序,是想先采集1.2v //FL_ADC_SEQ_SCAN_DIR_FORWARD FL_ADC_TRIGGER_EDGE_NONE, /** 触发信号使能配置 */ FL_ADC_TRGI_LUT0, /** 触发源选择 */ FL_ADC_FAST_CH_SAMPLING_TIME_2_ADCCLK, /** 快速通道采样时间配置 */ FL_ADC_SLOW_CH_SAMPLING_TIME_192_ADCCLK, /** 慢速通道采样时间配置 */ FL_ENABLE, /* 过采样打开 */ FL_ADC_OVERSAMPLING_MUL_8X, /** 过采样率配置 */ /* 8倍过采样 */ FL_ADC_OVERSAMPLING_SHIFT_3B, /** 过采样移位配置 */ /* 数据右移, /8 */ }; /*--------------------------------------------------------------------------- - F U N C T I O N P R O T O T Y P E ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ void adc_manage_task(void) { u16 l_voltage; l_voltage = adc_get_voltage_value(ADC_LOGIC_CHANNEL_VBAT); g_adc_manage.system_voltage = l_voltage*ADC_SBAT_COEFFICIENT_DIV + ADC_SBAT_DIODE_DIFF;//+ 700u; //mv 三极管 //g_adc_manage.system_voltage += 700; //mv 三极管 //电机反馈 //l_voltage = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD_MD); //g_adc_manage.md_voltage = l_voltage; //AD4-物理AN3, S14,S15 //g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_1] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD4); //AD3,物理AN2, S12,S13 g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_1] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD3); //AD2,物理AN1, S10,S11 g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_2] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD2); //AD1,物理AN0, S8,S9 g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_3] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD1); //AD7,物理AN5,S4 S3 S1 g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_4] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_ADRH); //AD5 温度 g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_5] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_NTC); //AD7,SNS g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_6] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_SNS); } /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ adc_voltage_t adc_manage_get_sbat_voltage(void) { return g_adc_manage.system_voltage; } /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ adc_voltage_t adc_manage_get_voltage(u8 id) { adc_voltage_t l_result =0u; if(id