mcxhoten 发表于 2025-2-18 14:49:18

8h3k32s2 adc采集

各位大神求助个问题,用主控芯片8h3k32s2的adc采集电压,供电是3.3v,0v时采集出来原始值为3426,3.3v采集出来原始值为3596,很小的变化这是为什么,求解答一下谢谢

程序是这样的

void      ADC_config(void)
{      
      ADC_CONTR|=0x80;            //开AD转换电源
      delay_ms(10);         //适当延时等待AD转换供电稳定
      ADC_CONTR|=0x0A;                        //选择P0.4作为模拟功能AD使用
      ADC_CONTR&=0xFA;                        //选择P0.4作为模拟功能AD使用
      
      ADCCFG&=0xFC;             //AD转换速度为416个时钟数转换一次
      ADCCFG|=0x0C;             //AD转换速度为416个时钟数转换一次
      ADC_CONTR&=0xDF;          //清AD转换完成标志
               
      EADC=0;                   //禁止ADC转换中断
      ADCCFG|=0x20;             //ADC转换结果ADC_RES存高4位,ADC_RESL存低8位
      ADC_CONTR|=0x40;          //启动AD转换,ADC_START=1
}

/**************************************
功能描述:ADC口检测AD转换值函数
入口参数:无
返回值:ADC 12位数据
***************************************/
uint16      Get_ADC12bitResult(void)      
{
      uint16      AD_Dat=0;
ADC_CONTR&=0xDF;            // 将ADC_FLAG清0
      ADC_CONTR&=0xBF;      //关闭AD转换,ADC_START=0
      //12位AD结果的高4位放ADC_RES的低4位,低8位在ADC_RESL
      AD_Dat = ADC_RES;                     //将ADC_RES低4位移到应在的第9位至第12位
      AD_Dat <<= 8;
      AD_Dat|= ADC_RESL;               //将ADC_RESL的8位移到应在的低8位
      
ADC_CONTR|=0x40;         //启动AD转换,ADC_START=1
      return      AD_Dat;      
}

王昱顺 发表于 2025-2-18 14:53:59

采集ADC的时候需要将对应的IO口设置为高阻输入,否则其他的模式下,IO口同时在输出,就会对导致采样数据不正确

mcxhoten 发表于 2025-2-18 14:56:41

王昱顺 发表于 2025-2-18 14:53
采集ADC的时候需要将对应的IO口设置为高阻输入,否则其他的模式下,IO口同时在输出,就会对导致采样数据不 ...

设置了用的p1.1
        GPIO_InitStructure.Pin= GPIO_Pin_1;                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
        GPIO_InitStructure.Mode = GPIO_HighZ;                //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);        //初始化

mcxhoten 发表于 2025-2-18 15:00:51

王昱顺 发表于 2025-2-18 14:53
采集ADC的时候需要将对应的IO口设置为高阻输入,否则其他的模式下,IO口同时在输出,就会对导致采样数据不 ...

能看看上述原理图中有没有错误吗其中的avcc和agnd要接吗

王昱顺 发表于 2025-2-18 15:04:52

mcxhoten 发表于 2025-2-18 14:56
设置了用的p1.1
        GPIO_InitStructure.Pin= GPIO_Pin_1;                //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7 ...

原因是因为你设置ADC通道的时候设置为10通道了,数据手册查询,对应的是P0.2端口。
可以尝试将ADC的配置函数和查询函数更改为官方的示例部分,原函数有许多问题。

王昱顺 发表于 2025-2-18 15:06:52

mcxhoten 发表于 2025-2-18 15:00
能看看上述原理图中有没有错误吗其中的avcc和agnd要接吗

是需要接的,具体详见手册说明:



mcxhoten 发表于 2025-2-18 15:06:57

王昱顺 发表于 2025-2-18 15:04
原因是因为你设置ADC通道的时候设置为10通道了,数据手册查询,对应的是P0.2端口。
可以尝试将ADC的配置 ...

好的感谢

DebugLab 发表于 2025-2-18 18:47:27

https://www.stcaimcu.com/forum.p ... id=15124&pid=146538


梁工 发表于 2025-2-22 21:10:43

mcxhoten 发表于 2025-2-18 15:00
能看看上述原理图中有没有错误吗其中的avcc和agnd要接吗

AVCC与AGND没有连接,则ADC相关的模拟电路没有电源,所以异常。
请链接AGND与GND链接,AVCC与VCC链接,即可正常。
页: [1]
查看完整版本: 8h3k32s2 adc采集