找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24|回复: 0
打印 上一主题 下一主题
收起左侧

在12位ADC 计算公式是除4096还是除4095是选择题而不是对错题

[复制链接]
跳转到指定楼层
楼主
ADC变换在单片机控制甚至在整个自动化控制领域都占有重要的一席之地,ADC变换也是一切数字探测器的基础。
对于在ADC转换公式ADCn通道的输入电压  = (转换结果 /4096)  * ADC_VRef+中的除法分母究竟应该是“除4096还是除4095”的问题一直是一个存在争议的问题。在网络上,在AI问答中,实际应用中、在教科书中,在各种手册中,选哪一个的都有。
本文介绍了笔者用STC的打狗棒核心板实际做ADC转换实验的结果,通过实际实验结果想说明:
究竟是“除4096还是除4095”不是一道“谁对谁错”的对错题,而是一道“选谁或者不选谁”的选择题。
1)将P01管脚直接连接到VCC上,对应ADC09测量通道。
P02管脚直接连接到GND上,对应ADC10测量通道。

2)直接使用打狗棒的STC官方例程中的“05-16ADC转换-串口2返回结果”。
3)将例程中的串口2程序修改为串口1输入输出,运行程序得到以下的结果:
                    
[10:59:22.975]接收←ADC00=2760
[10:59:23.179]接收←ADC01=2783
[10:59:23.379]接收←ADC02=0613
[10:59:23.583]接收←ADC03=2803
[10:59:23.787]接收←ADC04=2768
[10:59:23.991]接收←ADC05=2771
[10:59:24.195]接收←ADC06=2767
[10:59:24.395]接收←ADC07=2746
                    
[10:59:24.599]接收←ADC08=2773
[10:59:24.803]接收←ADC09=4092  
[10:59:25.007]接收←ADC10=0000  
[10:59:25.208]接收←ADC11=2772
[10:59:25.410]接收←ADC12=2777
[10:59:25.614]接收←ADC13=2764
[10:59:25.818]接收←ADC14=2766
[10:59:26.022]接收←Bandgap=1100
从中可以看到在这轮采样中,12ADC输入端的测量值连接VCC的为ADC09=4092,连接GND的为ADC10=0000
4)修改范例程序,假定VCC=5.0000V,也就是假定在ADC转换公式ADCn通道的输入电压  = (转换结果 /4096)  * ADC_VRef+中的ADC_VRef+等于“VCC=5.0000V”,然后编程分别输出除以40954096的结果。
程序修改分两个地方,一个地方是只输出91015通道:

另一个地方是分别输出不同除数计算得到电压值:

1)修改了第143行,不进行16次采样平均,因为采样平均值很难到达4095.
2)增加了第164行和165行程序,分别计算了用40954096作为除数得到的电压结果。
3)修改第166行程序输出计算出来的结果。
5)下面是计算VCC5V电压的输出结果,由于有噪声,对VCC的采样结果不是每次都得到同样的值:
    ADC09=4095  4095->5.000000  4096->4.998779
      ADC10=0000  4095->0.000000  4096->0.000000
      Bandgap=1138  
     ------------
   ADC09=4095  4095->5.000000  4096->4.998779
      ADC10=0000  4095->0.000000  4096->0.000000
      Bandgap=1127  
      ------------
      ADC09=4093  4095->4.997558  4096->4.996338
      ADC10=0000  4095->0.000000  4096->0.000000
      Bandgap=1139  
      ------------
     ADC09=4095 4095->5.000000  4096->4.998779
      ADC10=0000  4095->0.000000  4096->0.000000
      Bandgap=1135  
6)从上面可以看到,如果是除以“4095”,则可以显示对VCC的采样的计算值是“5.000000”,而如果是除以“4096”,则可以显示对VCC的采样的计算值是“4.998779”。
7)假如一个工厂需要生产一款“数字电压表”,那么具体承担编写程序的工程师就需要做出一个具体的选择“是除4096还是除4095”,所以这实际上是一道选择题而不是对错题
8)既然是选择题,那么选什么答案就会依选择者的身份或者立场不同而不同:1)比如作为用户,我认为他肯定选择除“4095的那一款,原因是他明明已经知道被测电压是VCC,他明明已经知道VCC的电压值是VCC=5.0000V,他为什么不选择测量显示值已经等于“5.000000”的产品,非要选择一个测量显示值不等于5.000000”而是等于4.998779”的产品。
2)比如作为卖产品的售货员,我认为她肯定选择除“4095的那一款。毕竟向顾客解释清楚“4.998779”就等于“5.000000”是只差一个LSB的正常现象是一个高超难度的困难,这个难度不亚于向顾客推销一款新年钟声响起时却只显示时间“23:59:00”的电子钟的难度,那也是只差一个LSB
3)比如作为生产产品的老板,我认为他肯定选择除“4095”,因为电压表不过是一个日常工具,为什么要故意选择显示4.998779”人用户怀疑产品的质量呢?
4)比如作为上大学生“ADC原理”课的老师,我认为他肯定选择除“4096”,因为他当初学的书本上就那么写的。
5)比如作为上“ADC原理”课的大学生,我认为他肯定选择除“4096”,毕竟谁一定要跟考试成绩过不去呢?
9)既然是选择题,如果你是具体编写程序的程序员,或者你是一名研究生,我认为你应该像我一样,具体编写实验程序,同时給出两种选择的效果,然后交给你的老板或者老师,请他做出选择。
附件1_05-16路ADC转换-串口2返回结果.rar (23.59 KB, 下载次数: 0)
附件2_ADC转换测试-串口1返回结果.rar (53.91 KB, 下载次数: 0)
附件3_ADC转换测试-5V_计算.rar (58.06 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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