查看: 3859|回复: 6

[已解决] KL02开发板ADC0测量结果跟实际电压老是相差大概0.3V

[复制链接]
  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
    发表于 2016-10-28 15:47:15 | 显示全部楼层 |阅读模式
    大家下午好!
          我的问题就是题目所示。事情经过大概是这样的:最先我是先用自己根据SDK2.0给的ADC16例程,自己简写了一个测量外部引脚电压程序,然后测量的结果如题目所示。我找原因找了一段时间没找到原因,就用官方例程测量一下,想查看一下寄存器里的值,发现跟自己写小程序测量结果的一样。实际电压大概在3.0V左右的时候,ADC测量值就达到4095了。
          走过路过的版友,有时间的帮忙看看是啥问题
          程序如下:

    void ADC0_POTINIT(void)
    {
          //打开端口A时钟
          CLOCK_EnableClock(kCLOCK_PortA);
         //选择PA8引脚,设置为模拟状态(PA8---ADC0_SE3----AD3)
         PORT_SetPinMux(PORTA, 8U, kPORT_PinDisabledOrAnalog);
    }
    void ADC0_Init(void)
    {
      uint32_t tmp32;
      //打开ADC0时钟
      SIM->SCGC6 |= 1<<27;

      //选择时钟来源(这里选择了异步时钟)和采样精度(单端12位转换)
      tmp32 = ADC_CFG1_ADICLK(0x01) | ADC_CFG1_MODE(0x01);
      //选择输入时钟分频系数(8分频)
      tmp32 |= ADC_CFG1_ADIV(0x01);  
      //将配置写进相应寄存器
      ADC0->CFG1 = tmp32;

      //先清异步时钟输出使能位 高速配置位 长采样时间选择位
      tmp32 = ADC0->CFG2 & ~(ADC_CFG2_ADACKEN_MASK | ADC_CFG2_ADHSC_MASK | ADC_CFG2_ADLSTS_MASK);
      //使能异步时钟输出位
      tmp32 |= ADC_CFG2_ADACKEN_MASK;
      ADC0->CFG2 = tmp32;

      //先清电压参考选择位
      tmp32 = ADC0->SC2 & ~(ADC_SC2_REFSEL_MASK);
      //选择Vrefh Vrefl 两个引脚作为 AD 转换的参考电压;
      tmp32 |= ADC_SC2_REFSEL(0);
      ADC0->SC2 = tmp32;  

      //是否选择“持续转换”(不选择)
      ADC0->SC3 &= ~ADC_SC3_ADCO_MASK;
       //软件触发
       ADC0->SC2 &= ~ADC_SC2_ADTRG_MASK;
    }


    //设置ADC0通道
    void ADC0_SetChannelConfig(void)
    {
      uint32_t sc1 = ADC_SC1_ADCH(0x03);//这里选择了PA8引脚
      ADC0->SC1[0] = sc1;//寄存器通道组0用于组A寄存器,通道组1用于组B寄存器。
    }


    //ADC0的数据处理
    void ADC_Value_Handle(void)
    {
      short ADC_Vlaue,Voltage;
      //等待转换完成
      while (0U == (kADC16_ChannelConversionDoneFlag &
                    ADC16_GetChannelStatusFlags(ADC0, 0)))
      {
      }
      //读取数据
      ADC_Vlaue = ADC0->R[0];
      //value[0]=(uint8_t)ADC_Vlaue;
      //value[1]=(uint8_t)(ADC_Vlaue>>8);
      //ADC_Vlaue++;
      //PRINTF("ADC Value: %d\r\n", ADC_Vlaue);
      //计算为正常的电压值。
      //Voltage = (ADC_Vlaue*3.3)/4095;  //4095---12位的精度  255--8位的精度
    // return Voltage;
    }


    main()
    {
        set_fee();
        ADC0_Init();
       while(1)
       {
             ADC0_SetChannelConfig();
          ADC_Value_Handle();
          //延时1S
          lptmr_LPO_clock_counter(1000);
       }

    }


    最佳答案

    足球爱好者 发表于 2016-10-28 17:19 刚刚测了一下,还真是2.95V!谢谢版主!! 不客气,ADC转换的准确性,参考基准电压是关键。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-10-28 15:48:33 | 显示全部楼层
    自己先顶顶
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-10-28 16:06:11 | 显示全部楼层

    刚刚忘了上测量图了。ADC值=3833,测量电压=3833*3.3/4095=3.08V。



    测量方式

    测量方式

    ADC测量值

    ADC测量值
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-10-28 16:41:33 | 显示全部楼层
    楼主你好!
    测试下你的VREFH引脚,是不是3V,如果是3V,你的结果就是正确的,注意测试最接近VREFH的引脚。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-10-28 17:19:23 | 显示全部楼层
    小恩GG 发表于 2016-10-28 16:41
    楼主你好!
    测试下你的VREFH引脚,是不是3V,如果是3V,你的结果就是正确的,注意测试最接近VREFH的引脚。 ...

    刚刚测了一下,还真是2.95V!谢谢版主!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2024-3-21 15:13
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    32

    主题

    1820

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1785
    最后登录
    2024-3-21
    发表于 2016-10-30 01:15:55 | 显示全部楼层
    参考的基准电压不准
    好多年没来了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-10-31 09:57:41 | 显示全部楼层
    足球爱好者 发表于 2016-10-28 17:19
    刚刚测了一下,还真是2.95V!谢谢版主!!

    不客气,ADC转换的准确性,参考基准电压是关键。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 15:10 , Processed in 0.137577 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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