182 lines
6.2 KiB
C
Raw Permalink Normal View History

2025-04-26 16:03:23 +08:00
/** ##########################################################################
** 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, S14S15
//g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_1] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD4);
//AD3,物理AN2, S12S13
g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_1] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD3);
//AD2,物理AN1, S10S11
g_adc_manage.channel[ADC_LOGIC_MANAGE_CHANEL_2] = adc_get_voltage_value(ADC_LOGIC_CHANNEL_AD2);
//AD1,物理AN0, S8S9
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<ADC_LOGIC_MANAGE_CHANEL_MAX)
{
l_result = g_adc_manage.channel[id];
}
return l_result;
}
/* [] END OF FILE */