#include "FM_ADC.h" /* adc采集转换的比例 */ /* 安卓系统启动后输出这个电压 */ static float P_PwrOn_Voltage; /* 输入网关的电压 */ static float P_In_Voltage; /* 输入网关的电流 */ static float P_In_Current; /* 参考电压的大小 */ #define referenceVoltage 3.3f /** * @brief 将采集的adc进行校准 * @param val 采集的adc数据 * @retval 校准后的adc数据 */ static uint16_t Get_ConversionVal(int16_t val) { if((val + Calibrattion_Val) < 0 || val == 0) return 0; if((Calibrattion_Val + val) > 4095 || val == 4095) return 4095; return (val + Calibrattion_Val); } /** * @brief 初始化adc * @param * @retval */ void FM_ADC_Init(void) { HD_ADC_InIt(); ADC_DMA_Init(); startAdcCapture(); } /** * @brief 打印adc生成的数据 * @param * @retval */ void printf_adc_data(void) { printf("adc : %d, %d, %d\n", adcData[0], adcData[1], adcData[2]); printf("getSOCPwrOnVoltage: %d\n", (int)(getSOCPwrOnVoltage() * 1000.0f)); printf("getInCurrent: %d\n", (int)(getInCurrent() * 1000.0f)); printf("getInVoltage: %d\n", (int)(getInVoltage() * 1000.0f)); } /** * @brief 初始化转换的比例 * @param * @retval */ void proportionalInt(void) { P_PwrOn_Voltage = referenceVoltage / 4095.0f; P_In_Voltage = ((100.0f + 10.0f) / 10.0f) * referenceVoltage / 4095.0f; P_In_Current = ((1.0f / 50.0f) / (0.01f)) * referenceVoltage / 4095.0f; } /** * @brief 得到soc启动后输出电压 * @param * @retval */ float getSOCPwrOnVoltage(void) { return (Get_ConversionVal(adcData[0]) * P_PwrOn_Voltage); } /** * @brief 得到输入网关盒子的电流 * @param * @retval */ float getInCurrent(void) { return (Get_ConversionVal(adcData[1]) * P_In_Current); } /** * @brief 得到输入网关盒子的电压 * @param * @retval */ float getInVoltage(void) { return (Get_ConversionVal(adcData[2]) * P_In_Voltage); }