查看: 6825|回复: 6

[已解决] 关于LPC824芯片的ADC采样数据问题

[复制链接]
  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-9-26 17:18:43 | 显示全部楼层 |阅读模式
    使用MBED工程,实现2路ADC采样,今天突然发现一个问题:
    当电位器有最低——相当于GND开始调大,可以看到电压由几百个乱蹦的字开始直到32767,在调大则突然显示数据变成-32768开始,逐步上调,数值最大[绝对值减小],直到最后数百字乱蹦为-数百。拿图来说话:
    描出来的数值时是在I象限有最小逐渐增大,符合常理,但到了32767 时,突然变成-32768,——转到第III象限,再继续调电位器,则电压继续增加[绝对值减小],直到最后。
    很是奇怪,采样的电压不是连续的,是在I和III非连续的两个象限中?采样的连续电压怎么会有此结果呢?
    有这块板子的网友们,你们采样ADC时是这样吗?两路一样都如此。
    求助解释。最好能有Why?




    非连续的电压,在I和III象限

    非连续的电压,在I和III象限




    最佳答案

    看看你的程序,如果存储采样结果的变量是16位有符号数,确实可能有这个现象。 +32767 = 0111 1111 1111 1111 -32767 = 1000 0000 0000 0000
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-19 12:05
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    9

    主题

    78

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    387
    最后登录
    2025-6-19
    发表于 2016-9-26 18:31:59 | 显示全部楼层
    顶一下,占个座
    今天好开心
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3304
    最后登录
    2023-6-23
    发表于 2016-9-26 23:34:45 | 显示全部楼层
    看看你的程序,如果存储采样结果的变量是16位有符号数,确实可能有这个现象。

    +32767 = 0111 1111 1111 1111
    -32767 = 1000 0000 0000 0000
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-10-28 18:00
  • 签到天数: 24 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    24

    主题

    526

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3346
    最后登录
    2021-10-14
    发表于 2016-9-27 08:21:32 | 显示全部楼层
    楼上说的有可能
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    2016-9-27
    发表于 2016-9-27 09:52:06 | 显示全部楼层
    顶一下。。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-12-5 08:29
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    107

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    338
    最后登录
    2018-1-4
    发表于 2016-9-27 09:56:48 | 显示全部楼层
    用无符号数看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
     楼主| 发表于 2016-9-27 17:56:06 | 显示全部楼层
    香水橙 发表于 2016-9-26 23:34
    看看你的程序,如果存储采样结果的变量是16位有符号数,确实可能有这个现象。

    +32767 = 0111 1111 1111 11 ...

    谢谢您的讨论,您说的确实有道理,这需要查看他的函数来源设置的寄存器是否就是带符号输出,但如果是带符号输出则此输出不符合ADC的采样规则——18为采样输出应该是0~65535的连续数值,即便是符号也不对,试解算如下:
    +32767=0111 1111 1111 1111;-32768=1000 0000 0000 0000,继续-32767=1000 0000 0000 0001,再继续-32766=1000 0000 0000 0010,...如果是补码说的过去,1000 0000 0000 0001的补码为0111 1111 1111 1110+1=0111 1111 1111 1111=-32767,同样地儿歌输的补码=0111 1111 1111 1101+1=0111 1111 1111 1110=-32766,符合到最后的绝对数值为0,但不是您讨论的那个结果,您说是吗?
    如果不是补码,则他的算法有问题造成的之间出现不连续的跳变——我认为硬件应该没有问题,应该是软件算法的问题,有空我会看看找到他的原出处看看如何实现的这个结果。
    再次谢谢。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-2 05:41 , Processed in 0.113666 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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