找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2228|回复: 14
收起左侧

单片机芯片内部ADC计算值不正确,为什么?

[复制链接]
ID:646328 发表于 2021-8-5 23:10 | 显示全部楼层 |阅读模式
各位大佬,请教个问题,这边使用STC15W408as主控芯片,测量通道内部第9的内部基准源电压数值,为什么总是算不对呢?我放上源码,请大神帮忙看下。使用的是ssop20的芯片,我看也没有Vref这个管脚,默认不是电压供电多少,计算的值就是多少吗?为什么算出来的值怎么大

ADC初始化

ADC初始化

主函数调用

主函数调用

显示结果

显示结果
回复

使用道具 举报

ID:235200 发表于 2021-8-6 01:30 | 显示全部楼层
程序中读出的是10位ADC转换值, 并没有算出来对应的电压值来

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:752974 发表于 2021-8-6 10:23 | 显示全部楼层
AD转换后的数据只是一个二进制数,定标后就是实际的物理量了。V=D*Vref/1024,D是AD后读取的数据。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:646328 发表于 2021-8-6 10:58 | 显示全部楼层
csmyldl 发表于 2021-8-6 01:30
程序中读出的是10位ADC转换值, 并没有算出来对应的电压值来

adc_value_Vcc=(unsigned long)(5000*(unsigned long)adc_value)/1024;
这句话不就是算电压值的吗?
回复

使用道具 举报

ID:646328 发表于 2021-8-6 10:58 | 显示全部楼层
munuc_w 发表于 2021-8-6 10:23
AD转换后的数据只是一个二进制数,定标后就是实际的物理量了。V=D*Vref/1024,D是AD后读取的数据。

adc_value_Vcc=(unsigned long)(5000*(unsigned long)adc_value)/1024;
我就是用这句话来根据这个公式算的
回复

使用道具 举报

ID:609524 发表于 2021-8-6 11:03 | 显示全部楼层
baocong2019 发表于 2021-8-6 10:58
adc_value_Vcc=(unsigned long)(5000*(unsigned long)adc_value)/1024;
我就是用这句话来根据这个公式算 ...

你是用内部vcc做参考电压的吗
回复

使用道具 举报

ID:646328 发表于 2021-8-6 11:05 | 显示全部楼层
杨天想 发表于 2021-8-6 11:03
你是用内部vcc做参考电压的吗

标定的供电电压是5v  = 5000
然后来测外部通道
回复

使用道具 举报

ID:401564 发表于 2021-8-6 13:31 | 显示全部楼层
PCON2默认是0x00
你在ADC初始化那加一条
PCON2=0x20;
试一下

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:928549 发表于 2021-8-6 15:27 | 显示全部楼层
假设有一个参考电压,其中一个通道测量该参考电压,那么就可以逆推出当前的电源电压(电源电压不一定有多么稳定,因此一般需要一个稳定的参考电压),然后用逆推出的电源电压去计算所要测量的电压,你这个5000乘的有点梦幻了吧,这个5000直接用逆推出的电源电压就可以了吧,,,如果对精度要求不高(直接乘5v就可以了),还有,我感觉程序有点问题 (ADC_RES<<8)|(ADC_RESL&3),这里有问题吧,把数增大了吧

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:646328 发表于 2021-8-6 17:09 | 显示全部楼层
1093562897 发表于 2021-8-6 15:27
假设有一个参考电压,其中一个通道测量该参考电压,那么就可以逆推出当前的电源电压(电源电压不一定有多么 ...

                adc_value_temp = (ADC_RES<<2)|(ADC_RESL&3);
最终问题解决了,是偏移位数的问题,高8位在RES寄存器,低2位在bit1-bit0,所以应该是左移2位,而不是左移8位。
回复

使用道具 举报

ID:401564 发表于 2021-8-6 18:08 | 显示全部楼层
ADC_RESL&3
你看一下数据手册,你这个公式对吗?
所以我叫你PCON2改一下试一下
回复

使用道具 举报

ID:584195 发表于 2021-8-6 18:18 | 显示全部楼层
学习了,虽然我不用STC单片机!
回复

使用道具 举报

ID:646328 发表于 2021-8-6 20:25 | 显示全部楼层
Y_G_G 发表于 2021-8-6 18:08
ADC_RESL&3
你看一下数据手册,你这个公式对吗?
所以我叫你PCON2改一下试一下

不是PCON2寄存器的问题,是移位出现了问题
回复

使用道具 举报

ID:401564 发表于 2021-8-6 21:08 | 显示全部楼层
baocong2019 发表于 2021-8-6 20:25
不是PCON2寄存器的问题,是移位出现了问题

哦哦,汇编用习惯了,就觉得高位会变成低位了...
你这样也是对的
但,如果你有看过PCON2的说明,你就会知道,你最初的公式是PCON2的ADRJ位为1时的公式,网上大多是用这个公式的,但ADRJ默认是0的,别人的程序是要设定PCON2的
这就是我提醒你修改PCON2试一下原因
回复

使用道具 举报

ID:569384 发表于 2021-8-10 11:48 | 显示全部楼层
ad值需要用公式换算会电压值,而且检测的电压值要做降压处理,不能超过参考电压,再根据降压比推算会原来的电压值。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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