CH579 ADC采集电压异常?

CH579  ADC采集电压时,接0V测量数值有1120左右,接1.5V测量数值有3100左右,接3.0V测量数值只有3900左右?用示波器测量管脚电压都是正常,但读出来的数据为何如此?

#include "CH57x_common.h"


UINT16 abcBuff[40];
volatile UINT8  adclen;

void DebugInit(void)		
{
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
}

int main()
{
    UINT8 i;
    signed short  RoughCalib_Value=0;		// ADC粗调偏差值
    
/* 配置串口调试 */   
    DebugInit();
    PRINT( "Start @ChipID=%02X\n", R8_CHIP_ID );
	/* 单通道采样:选择adc通道9做采样,对应 PA0引脚, 带数据校准功能 */   
    PRINT( "\n2.Single channel sampling...\n");
    GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_Floating);
    ADC_ExtSingleChSampInit( SampleFreq_3_2, ADC_PGA_1_2 );
    
/* 
    注意:数据校准包括 粗调和细调:
    ADC_DataCalib_Rough() 是粗调函数,调用前需保证PA5引脚配置浮空输入模式,外部没有电压信号,在ADC初始化之后调用,一般调用一次,除非更改了ADC模式(增益改变)
    ADC_DataCalib_Fine() 是细调函数,对于粗调过的数据进行拟合算法运算,得到更精确数据
*/    
    GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_Floating);
    RoughCalib_Value = ADC_DataCalib_Rough();  // 用于计算ADC内部偏差,记录到全局变量 RoughCalib_Value中  
    PRINT("=%d \n", RoughCalib_Value); 
	
	
    while(1)
	{    
	    int sum=0;
		ADC_ChannelCfg( 9 );        
		for(i=0; i<21; i++)
		{
			abcBuff[i] = ADC_ExcutSingleConver() + RoughCalib_Value;      // 连续采样20次
			ADC_DataCalib_Fine( &abcBuff[i], ADC_PGA_1_2 );
			
			if(i>=1)	{sum += abcBuff[i];}
		}
		printf("ADC值:%d\r\n",sum/20);
	}		
}


去掉校准值也是这个变化趋势,只是数值会小一些


首先,不同的增益有不同的计算公式,也有着不同的使用范围,将你的测量值带入计算,1.5v是偏差较大,因为-6db增益下,建议实际测量范围是1.9V ~ 3V。

emobile_2022-06-17_15-34-27.png



你这也差得太大了吧!现在是1.5V~3.0V电压采集变化异常,那不和你这个冲突了吗?


理论可测-0.2~3.15V,虽然有会存在误差但也不应该是这个情况才是啊


我这边使用579M的demo板测试,1.5v,2v,3v的值误差都不是很大,但还是建议在实际可用范围内(1.9V ~ 3V)使用,GND最好接稳点。

emobile_2022-06-17_16-37-31.png


只有登录才能回复,可以选择微信账号登录