2025-04-26 16:03:23 +08:00

182 lines
6.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** ##########################################################################
** 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 */