查看: 3797|回复: 6

[已解决] ADC0_SE_7b通道采样异常问题

[复制链接]
  • TA的每日心情
    郁闷
    2019-3-21 17:33
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    127
    最后登录
    2020-12-23
    发表于 2019-3-21 16:54:35 | 显示全部楼层 |阅读模式
    ADC0_SE_7b通道采样异常这个情况在去年的时候遇到过一次,但是没有解决就抛弃了这个问题,现在这个问题还是阻碍了项目进展。

    本人使用的单片机是kinetis KL15这颗MCU。

    从芯片手册得到,ADC0_SE_7b这个通道只能通过硬件方式来触发AD采样。因此AD部分配置如下。
            /* 触发方式设置 */
            ADC16_EnableHardwareTrigger(base,true);

            /* 硬件触发源设置 */
            SIM->SOPT7 = SIM_SOPT7_ADC0ALTTRGEN(1)        /* Alternate trigger selected for ADC0 */
                            |SIM_SOPT7_ADC0PRETRGSEL(1)        /* Pre-trigger B */
                            |SIM_SOPT7_ADC0TRGSEL(10);                /* TPM2 overflow */
           
            /* B通道设置 */
            ADC0->SC1[1] = ADC_SC1_DIFF(0)        /* Single-ended conversions and input channels are selected */
                                    |ADC_SC1_ADCH(7)   /* AD7 is selected as input */
                                    |ADC_SC1_AIEN(1);  /* Conversion complete interrupt is enabled */

            /* 开启中断 */
            EnableIRQ(ADC0_IRQn);

    通过TPM2的溢出来触发AD转换。

    ADC0的中断服务函数如下,中断里面只读取ADC0转换出来的值。
    void ADC0_IRQHandler(void)
    {
            if(((uint8_t)ADC0->SC1[1]&ADC_SC1_COCO_MASK)==ADC_SC1_COCO_MASK)
            {
                  Encoder_BattVoltage=ADC0->R[1];
            }
    }


    现在的问题是,ADC_SE_7b输入的电压值不变,但是每次进入中断后读取到的AD转换值会有很大的波动。
    每次出现的数据可能如下:
    Encoder_BattVoltage=0x3C17;
    Encoder_BattVoltage=0x9A74;
    Encoder_BattVoltage=0x7917;
    Encoder_BattVoltage=0x9A74;
    Encoder_BattVoltage=0x8119;
    Encoder_BattVoltage=0x9A72;
    Encoder_BattVoltage=0x803A;
    等转换结果。(待测电压1.65V左右的情况下),当待测电压为0V的时候,转换结果同上会变化很大。

    如果将ADC0_SE_7b改成ADC0_SE_6b,程序就将
            /* B通道设置 */
            ADC0->SC1[1] = ADC_SC1_DIFF(0)        /* Single-ended conversions and input channels are selected */
                                    |ADC_SC1_ADCH(6)   /* AD7 is selected as input */
                                    |ADC_SC1_AIEN(1);  /* Conversion complete interrupt is enabled */


    ADC_SC1_ADCH(7)改成ADC_SC1_ADCH(6) ,其它配置不变
    测试结果记录如下:
    Encoder_BattVoltage=0x2950;
    Encoder_BattVoltage=0x295B;
    Encoder_BattVoltage=0x295C;
    Encoder_BattVoltage=0x295C;
    Encoder_BattVoltage=0x2958;
    这样测试出来的结果就很符合实际。

    可是为什么ADC0_SC1_ADCH(7)这个通道每次转换的差异这么大?  跪求答案!!!

    请问有人有类似的经验吗?





    最佳答案

    hhhluotuofei 发表于 2019-3-22 11:16 多块电路上测试都是这样的现象,如电路原理图部分所示:ADC0_SE_7b采集Input_1电压,PTC7是控制Input的输 ... 请确认MUXSEL设置为1,[attach]454703[/attach] ...
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24890
    最后登录
    2025-7-21
    发表于 2019-3-22 10:17:02 | 显示全部楼层

    回帖奖励 +30 NXP金币

    请问该现象有在多块板子上复现吗?还有关于ADC部分的原理图能分享一下吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-3-21 17:33
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    127
    最后登录
    2020-12-23
     楼主| 发表于 2019-3-22 11:07:45 | 显示全部楼层
    本帖最后由 hhhluotuofei 于 2019-3-22 11:08 编辑
    小恩GG 发表于 2019-3-22 10:17
    请问该现象有在多块板子上复现吗?还有关于ADC部分的原理图能分享一下吗? ...

    AD采样部分原理图

    AD采样部分原理图
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-3-21 17:33
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    127
    最后登录
    2020-12-23
     楼主| 发表于 2019-3-22 11:16:30 | 显示全部楼层
    小恩GG 发表于 2019-3-22 10:17
    请问该现象有在多块板子上复现吗?还有关于ADC部分的原理图能分享一下吗? ...

    多块电路上测试都是这样的现象,如电路原理图部分所示:ADC0_SE_7b采集Input_1电压,PTC7是控制Input的输入的开关。ADC0_SE_6b采集Input_2输入电压。
    经过测试发现,ADC0_SE_6b与ADC0_SE_7b在相同配置的情况下,出现如1楼描述的情况。

    交换测试,将R2、C1、R1去掉,并且将Input_2短路到ADC0_SE_7b引脚,经过Debug测试,ADC0_SE_6b与ADC0_SE_7b的AD转换值不同,并且ADC0_SE_7b一直变化,如1楼描述的一样。

    现在是能想到的办法都试了,不知道该如何解决,望提供帮助啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24890
    最后登录
    2025-7-21
    发表于 2019-3-22 14:35:29 | 显示全部楼层
    hhhluotuofei 发表于 2019-3-22 11:16
    多块电路上测试都是这样的现象,如电路原理图部分所示:ADC0_SE_7b采集Input_1电压,PTC7是控制Input的输 ...

    请确认MUXSEL设置为1, 2019-03-22_14-33-06.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2019-3-21 17:33
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    127
    最后登录
    2020-12-23
     楼主| 发表于 2019-3-22 15:13:28 | 显示全部楼层
    小恩GG 发表于 2019-3-22 14:35
    请确认MUXSEL设置为1,

    将MUXSEL设置为1 后解决啦!  非常感谢啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24890
    最后登录
    2025-7-21
    发表于 2019-3-25 09:59:56 | 显示全部楼层
    hhhluotuofei 发表于 2019-3-22 15:13
    将MUXSEL设置为1 后解决啦!  非常感谢啊

    不客气
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 12:39 , Processed in 0.102947 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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