找回密码
 立即注册
查看: 108|回复: 11

STC32G ADC采集数据不正常

[复制链接]
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
    发表于 2024-5-8 10:29:08 | 显示全部楼层 |阅读模式
    单片机型号,STC32G8K64,用的是3.3V供电,内部晶振选24MHz,尝试了官网例程DMA方式,ADC中断方式,ADC查询方式,均不成功。
    以下代码是比较接近的,但是也有问题。
    现象1:采用通道2的值会受通道3影响,P1.2脚接入3.3V,采集不到ADC值,通道2和通道3都没有变化。
    现象2:P1.3脚接入3.3V,通道3ADC能捕捉到3.3V,但是通道2的值也会跟着变化,电压值有1.8V。
    尝试,1秒采集轮巡两个通道各采集一次,均无法成功。
    尝试,单独采集通道2,通道2的值无法采集,烦请技术支持下。

    IO配置:
    P1_MODE_IN_HIZ(GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6|GPIO_Pin_7);


    //ADC 配置
    void        ADC_config(void)
    {
            ADC_InitTypeDef                ADC_InitStructure;                //结构定义
           
            ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
            ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道选择时间控制 0(默认),1
            ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道选择保持时间控制 0,1(默认),2,3
            ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X1T;                //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
            ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
            ADC_Inilize(&ADC_InitStructure);                //初始化
           
            ADC_PowerControl(ENABLE);                                                        //ADC电源开关, ENABLE或DISABLE
            NVIC_ADC_Init(DISABLE,Priority_3);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
    }

    u16        Get_ADCResult(u8 channel)        //channel = 0~15
    {
            if(channel > ADC_CH15)        return        4096;        //错误,返回4096,调用的程序判断       
            ADC_RES = 0;
            ADC_RESL = 0;
           
            ADC_CONTR = (ADC_CONTR & 0xf0) | channel; //设置ADC转换通道
            ADC_START = 1;//启动ADC转换
            NOP(4);                        //对ADC_CONTR操作后要4T之后才能访问

            while(ADC_FLAG == 0);
            ADC_FLAG = 0;//清除ADC结束标志
      return (((u16)ADC_RES << 8) | ADC_RESL);
    }
    //采集ADC部分
    ADC_VAL = Get_ADCResult(2);
    ADCSUM1 += Get_ADCResult(2);
    ADC_VAL = Get_ADCResult(3);
    ADCSUM2 += Get_ADCResult(3);
    if(++SumCount>=10)
    {
      SumCount=0;
      //求平均值
      INVALUE1=ADCSUM1/10;
      INVALUE2=ADCSUM2/10;
      //把累加值清零
      ADCSUM1=0;
      ADCSUM2=0;
      //计算电压,这里*33而不是乘以3.3,相当于把电压值乘以10倍。
      BatV1=((INVALUE1*33)/4096);
      BatV2=((INVALUE2*33)/4096);
    }



    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 100 天

    [LV.6]常住居民II

    70

    主题

    652

    回帖

    2004

    积分

    超级版主

    积分
    2004
    QQ
    发表于 2024-5-8 16:43:14 | 显示全部楼层
    有没有在线仿真看看呢
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2024-5-8 16:57:22 | 显示全部楼层
    国学芯用 发表于 2024-5-8 16:43
    有没有在线仿真看看呢

    从业十几年,51单片机我还没有用过仿真器,一直没有买那个仿真工具
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-5 13:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    12

    主题

    271

    回帖

    1660

    积分

    超级版主

    积分
    1660
    发表于 2024-5-8 17:03:58 | 显示全部楼层
    不需要买,可以免费包邮送您LINK1D一套,可以下载仿真。
    电话:0513-55012946 QQ:2195591714  微信:  19952583740
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2024-5-8 17:07:03 | 显示全部楼层
    主要是看看怎么解决问题,看看有没有技术,支持把这代码改改什么的,,仿真器用不用,倒无所谓。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3174

    回帖

    7175

    积分

    超级版主

    积分
    7175
    发表于 2024-5-9 10:46:26 | 显示全部楼层
    专门写个测试程序给你,我测试没有任何问题。ADC0~ADC7输入的是参考电压的 1/16~8/16,由于分压电阻有误差(使用误差1%的电阻),所以跟理论值有几个字误差是正常的。
    理论读数: 256、512、768、1024、1280、1536、1792、2048。
    测试结果截图:


    02-8路12位ADC0~7转换-串口1(P3.1)返回结果.rar (89.02 KB, 下载次数: 8)

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2024-5-9 11:39:31 | 显示全部楼层
    好的,谢谢,我晚点测试一下看看,再来回复测试结果
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2024-5-9 22:55:25 | 显示全部楼层
    测试后,ADC3正常,可以采集到4095,ADC2接VDD,没有值,规格书,STC32G8K64的这个引脚图是不是不对?
    截图202405092255219124.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2024-5-9 23:07:16 | 显示全部楼层
    用例程,刚刚再测试了下,我把VDD脚搭在P5.4脚,ADC2的值能跑到4095,但是ADC3的值从500左右变成1000左右。两个通道值会相关这先不讲,起码现在能怀疑的一点,规格书里面这个描述可能是不对的:
    截图202405092307052411.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    1

    主题

    19

    回帖

    101

    积分

    注册会员

    积分
    101
     楼主| 发表于 2024-5-9 23:09:57 | 显示全部楼层
    应该可以复现的,烦请用STC32G8K64 LQFP32封装的单片机验证一下。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-16 08:02 , Processed in 0.071915 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表