数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5866|回复: 26

[other] STC8A系列ADC转换问题请教

[复制链接]
发表于 2020-3-13 22:18:51 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
最近在做多路电压测量,使用的是STC8A8K64S4A12,看中了它的12位ADC,但是在测试过程中发个问题,即一个ADC端口加上电压后,其他端口也会串进来电压,会导致其他没有电压的测试端误测。

实测两组数据如下:
1、设置P1.0~P1.7为高阻输入(P1M0=0x00, P1M1=0xff)
2、在ADC0施加2.197V电压,ADC0读出的电压值正确
3、用万用表测量另外6个ADC端口,各个端口均有25mV左右的电压,ADCx读出的电压值也是该值
4、在ADC0施加4.01V电压,ADC0读出的电压值正确
5、用万用表测量另外6个ADC端口,各个端口均有98mV左右的电压,ADCx读出的电压值也是该值

VCC、AVCC和AVref短接,即参考电压为VCC=5V,除此以外没有任何外围电路。
程序用的是STC自带的范例程序,不过感觉和软件没有太大关系。

为此,还使用AVR做了对比,发现AVR没有该现象,难道是STC芯片设计的问题?
在此请教各位高人,有没有熟悉STC ADC的?应该怎么解决这个问题?十分感谢!
发表于 2020-3-13 22:40:47 | 显示全部楼层
减小ad端口输入内阻,或许能可以,要不就是通道间串扰电压抑制能力差,那有啥办法啊,先天不足:titter:
回复 支持 反对

使用道具 举报

发表于 2020-3-13 22:41:56 | 显示全部楼层
您不是单片机高手吗,有些板子上就印的好奇心啊:loveliness:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 22:58:52 | 显示全部楼层
人艰不拆了 发表于 2020-3-13 22:40
减小ad端口输入内阻,或许能可以,要不就是通道间串扰电压抑制能力差,那有啥办法啊,先天不足 ...

我也认为是通道间串扰,那就是先天不足了:sweat:
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-13 23:06:49 | 显示全部楼层
人艰不拆了 发表于 2020-3-13 22:41
您不是单片机高手吗,有些板子上就印的好奇心啊

:sweat:惭愧惭愧
回复 支持 反对

使用道具 举报

发表于 2020-3-13 23:29:45 | 显示全部楼层

哈哈,别误会我的意思啊:loveliness:,我都是瞎说的
回复 支持 反对

使用道具 举报

发表于 2020-3-13 23:41:32 | 显示全部楼层
要看是只开了一个端口的ADC,还是所有端口的ADC。
因为同一个ADC模块Sample and Hold电容在所有ADC端口上是公用的,通道切换时会对其他悬空的ADC端口产生影响。
如果其他ADC端口没开ADC,那么这个芯片在这方面可能有点问题。
其实未使用的ADC引脚是不推荐悬空的。接低阻抗点应该也能解决问题。
回复 支持 反对

使用道具 举报

发表于 2020-3-14 00:42:59 | 显示全部楼层
貌似说STC的BUG挺多的,还是玩STM8吧:lol:
回复 支持 反对

使用道具 举报

发表于 2020-3-14 08:16:03 | 显示全部楼层
正常,共用积分电容,通道切换完要给时间释放电荷
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 08:35:20 | 显示全部楼层
mrjingf 发表于 2020-3-13 23:41
要看是只开了一个端口的ADC,还是所有端口的ADC。
因为同一个ADC模块Sample and Hold电容在所有ADC端口上是 ...

P1所有端口的ADC都开了,仔细看了pdf,STC8A和STC15系列在ADC端口设置上不太一样,STC8A只需要设置端口为高阻输入即可,而STC15还需要将端口设置为模拟功能,即多了个P1ASF,STC8A没有这个寄存器。
测试了下不进行通道切换,只是设置P1口为高阻状态,发现有同样的问题。AVR却没有,其他单片机没测试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 08:37:29 | 显示全部楼层
再吐槽下STC的datasheet,太粗糙了,STC8的pdf连ADC的结构框图都没有,STC15倒是有:dizzy:
回复 支持 反对

使用道具 举报

发表于 2020-3-14 09:47:05 | 显示全部楼层
通道间有串扰吧,但是也不是什么大事啦。因为你其它通道是悬空的,所以少量的漏电流影响比较大的。但是如果你每个引脚的驱动信号源相对阻抗比较低,也许那点漏电流就没啥大事了。也就是说不要测量浮空的IO脚电压,没有意义。
回复 支持 反对

使用道具 举报

发表于 2020-3-14 09:48:36 | 显示全部楼层
不要以为浮空的IO脚ADC转换值就是0,这点不可能的,STM32也办不到。STM32IO是高阻态时,IO口还有1.6V左右的电压呢。
回复 支持 反对

使用道具 举报

发表于 2020-3-14 10:51:07 来自手机浏览器 | 显示全部楼层
看见大佬发帖 来看热闹
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 11:09:10 | 显示全部楼层
la45088d1 发表于 2020-3-14 09:47
通道间有串扰吧,但是也不是什么大事啦。因为你其它通道是悬空的,所以少量的漏电流影响比较大的。但是如果 ...

测量浮空的I/O脚电压怎么能没意义?比如两路电压测量,没有经过分压,如果浮空还能测出电压来是不是就有问题了?会误认为该端口输入了电压,实际上并没有。
高阻态还有1.6V的电压还叫高阻吗?
回复 支持 反对

使用道具 举报

发表于 2020-3-14 12:12:31 | 显示全部楼层
浩祺心 发表于 2020-3-14 08:35
P1所有端口的ADC都开了,仔细看了pdf,STC8A和STC15系列在ADC端口设置上不太一样,STC8A只需要设置端口为 ...

不同单片机可能IO部分有区别,这个也正常。
也许内部有弱上拉未关闭,具体的不好说了。把有漏电的ADC端口接低阻抗看看吧。
回复 支持 反对

使用道具 举报

发表于 2020-3-14 12:47:00 | 显示全部楼层
cbcb4cb 发表于 2020-3-14 08:16
正常,共用积分电容,通道切换完要给时间释放电荷

这个关键的提示为什么没有人注意呢。唉!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 14:43:49 | 显示全部楼层
sz1988 发表于 2020-3-14 12:47
这个关键的提示为什么没有人注意呢。唉!

谢谢:)通道没有切换,直接测量的I/O管脚也是有电压,通道切换的时候已经丢弃了前两个转换值。
回复 支持 反对

使用道具 举报

发表于 2020-3-14 14:55:46 | 显示全部楼层
浩祺心 发表于 2020-3-14 11:09
测量浮空的I/O脚电压怎么能没意义?比如两路电压测量,没有经过分压,如果浮空还能测出电压来是不是就有 ...

反正我就跟你说,STM32设置高阻IO口依然有1.6V的电压,不可能是0的,亲测。
但是是少量漏电流引起的,你对地接一个100K以内的电阻就可以去除掉了。
STC8也这样,浮空的IO读取没意义,哪怕没有漏电流,也会受到各种电磁辐射的干扰读取它的结果就是随机值。
为了防止这种问题,就应该在IO口接一个较大的下拉电阻,这样IO才能在没输入的时候保持接近0的电平。
回复 支持 反对

使用道具 举报

发表于 2020-3-14 14:59:27 | 显示全部楼层
la45088d1 发表于 2020-3-14 14:55
反正我就跟你说,STM32设置高阻IO口依然有1.6V的电压,不可能是0的,亲测。
但是是少量漏电流引起的,你 ...

你好像对高阻有什么误解,高阻只是说IO口的驱动关闭,几乎没有对外驱动能力。但是由于漏电流存在总会产生电压的,如果IO口被低阻信源驱动,那点漏电流会直接被旁路掉,不会再有明显电压。你要是完全悬空,那有非常明显的电压一点都不奇怪。你悬空引脚还有理了??
加一个下拉电阻的事,你不会不知道吧?
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-23 11:34 , Processed in 0.499200 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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