bsp_adc换了新的
This commit is contained in:
parent
0752338f1e
commit
aa74f64e75
|
@ -12,7 +12,7 @@
|
||||||
#define __BSP_ADC_H__
|
#define __BSP_ADC_H__
|
||||||
|
|
||||||
|
|
||||||
#include "CH59x_common.h"
|
#include "CONFIG.h"
|
||||||
|
|
||||||
|
|
||||||
void BSP_ADC_Init(void);
|
void BSP_ADC_Init(void);
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
#include "bsp_adc.h"
|
#include "bsp_adc.h"
|
||||||
|
|
||||||
|
#include "bsp_uart.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
#undef LOG_ENABLE
|
||||||
|
#define LOG_ENABLE 1
|
||||||
|
|
||||||
|
#undef LOG_TAG
|
||||||
|
#define LOG_TAG "adc"
|
||||||
|
|
||||||
// https://www.cnblogs.com/gscw/p/17682385.html
|
// https://www.cnblogs.com/gscw/p/17682385.html
|
||||||
// 计算公式参考手册,建议使用 “建议实际可用测量电压范围” 作为 ADC 采集的增益选择判断标准。计算公式参考手册。
|
// 计算公式参考手册,建议使用 “建议实际可用测量电压范围” 作为 ADC 采集的增益选择判断标准。计算公式参考手册。
|
||||||
// 仅使用 ADC 功能,同时降低功耗,可以将引脚的数字输入功能关闭,配置 R16_PIN_ANALOG_IE。 注:如果引脚用于模拟功能(ADC/TouchKey),建议将该引脚的数字输入功能关闭,即设置数字输入禁用,从而可以降低功耗,并有利于减少干扰。
|
// 仅使用 ADC 功能,同时降低功耗,可以将引脚的数字输入功能关闭,配置 R16_PIN_ANALOG_IE。 注:如果引脚用于模拟功能(ADC/TouchKey),建议将该引脚的数字输入功能关闭,即设置数字输入禁用,从而可以降低功耗,并有利于减少干扰。
|
||||||
|
@ -23,7 +32,7 @@ void BSP_ADC_Init(void)
|
||||||
#if 0
|
#if 0
|
||||||
// ±10C,没啥参考价值
|
// ±10C,没啥参考价值
|
||||||
/* 温度采样并输出 */
|
/* 温度采样并输出 */
|
||||||
PRINT("\n1.Temperature sampling...\n");
|
logDebug("\n1.Temperature sampling...\n");
|
||||||
ADC_InterTSSampInit();
|
ADC_InterTSSampInit();
|
||||||
for (i = 0; i < 20; i++)
|
for (i = 0; i < 20; i++)
|
||||||
{
|
{
|
||||||
|
@ -33,7 +42,7 @@ void BSP_ADC_Init(void)
|
||||||
{
|
{
|
||||||
uint32_t C25 = 0;
|
uint32_t C25 = 0;
|
||||||
C25 = (*((PUINT32)ROM_CFG_TMP_25C));
|
C25 = (*((PUINT32)ROM_CFG_TMP_25C));
|
||||||
PRINT("%d %d %d \n", adc_to_temperature_celsius(adcBuff[i]), adcBuff[i], C25);
|
logDebug("%d %d %d \n", adc_to_temperature_celsius(adcBuff[i]), adcBuff[i], C25);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -56,11 +65,12 @@ void BSP_ADC_Init(void)
|
||||||
min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波
|
min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波
|
||||||
max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number);
|
max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number);
|
||||||
}
|
}
|
||||||
printf("min_number = %d, max_number = %d\n", min_number, max_number);
|
logDebug("min_number = %d, max_number = %d", min_number, max_number);
|
||||||
CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值
|
CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值
|
||||||
printf("AverageCountBat = %d\n", CountBat);
|
logDebug("AverageCountBat = %d", CountBat);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
// 默认情况下,ADC 引脚和所在 GPIO 引脚的数字功能是同时存在的
|
// 默认情况下,ADC 引脚和所在 GPIO 引脚的数字功能是同时存在的
|
||||||
// ,在进行 ADC 测量时候,需要吧 GPIO 设置为高阻输入
|
// ,在进行 ADC 测量时候,需要吧 GPIO 设置为高阻输入
|
||||||
// ,当 ADC 的电平处于中间态的时候,这时候往往会导致数字部分漏电
|
// ,当 ADC 的电平处于中间态的时候,这时候往往会导致数字部分漏电
|
||||||
|
@ -75,12 +85,12 @@ void BSP_ADC_Init(void)
|
||||||
ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
|
ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
|
||||||
|
|
||||||
RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
|
RoughCalib_Value = ADC_DataCalib_Rough(); // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中
|
||||||
PRINT("RoughCalib_Value =%d \n", RoughCalib_Value);
|
logDebug("RoughCalib_Value =%d", RoughCalib_Value);
|
||||||
|
|
||||||
// 刚上电,要给电容充电
|
// 刚上电,要给电容充电
|
||||||
DelayMs(300);
|
DelayMs(300);
|
||||||
|
|
||||||
printf("PA13:::::\n");
|
logDebug("PA13:::::");
|
||||||
ADC_ChannelCfg(3);
|
ADC_ChannelCfg(3);
|
||||||
|
|
||||||
for (i = 0; i < 20; i++)
|
for (i = 0; i < 20; i++)
|
||||||
|
@ -88,12 +98,9 @@ void BSP_ADC_Init(void)
|
||||||
adcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次
|
adcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value; // 连续采样20次
|
||||||
// DelayMs(5);
|
// DelayMs(5);
|
||||||
}
|
}
|
||||||
printf("original: ");
|
logDebug("original: ");
|
||||||
for (i = 0; i < 20; i++)
|
logHexDumpAll(adcBuff, 20);
|
||||||
{
|
// 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象
|
||||||
PRINT("%d ", adcBuff[i]); // 注意:由于ADC内部偏差的存在,当采样电压在所选增益范围极限附近的时候,可能会出现数据溢出的现象
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
for (i = 0; i < 20; i++)
|
for (i = 0; i < 20; i++)
|
||||||
{
|
{
|
||||||
|
@ -106,9 +113,9 @@ void BSP_ADC_Init(void)
|
||||||
min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波
|
min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波
|
||||||
max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number);
|
max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number);
|
||||||
}
|
}
|
||||||
printf("min=%d, max=%d, diff=%d\n", min_number, max_number, (max_number - min_number));
|
logDebug("min=%d, max=%d, diff=%d", min_number, max_number, (max_number - min_number));
|
||||||
countadc = (countadc - min_number - max_number) / 18; // 删除最小与最大值
|
countadc = (countadc - min_number - max_number) / 18; // 删除最小与最大值
|
||||||
printf("countaveradc = %d\n", countadc);
|
logDebug("countaveradc = %d", countadc);
|
||||||
/*
|
/*
|
||||||
int16_t adc_raw;
|
int16_t adc_raw;
|
||||||
adc_raw = ADC_ExcutSingleConver() + RoughCalib_Value;
|
adc_raw = ADC_ExcutSingleConver() + RoughCalib_Value;
|
||||||
|
@ -122,6 +129,9 @@ void BSP_ADC_Init(void)
|
||||||
voltage_mv = adc_raw*1050/4096 + (1050/2);
|
voltage_mv = adc_raw*1050/4096 + (1050/2);
|
||||||
*/
|
*/
|
||||||
voltage = (double)(countadc) / 2048 * 1.05;
|
voltage = (double)(countadc) / 2048 * 1.05;
|
||||||
printf("voltage=%1.3lf V\n", voltage);
|
logDebug("voltage=%1.3lf V", voltage);
|
||||||
PRINT("VIN: %1.3lf V\n", voltage * 2);
|
logDebug("VIN: %1.3lf V", voltage * 2);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue