找回密码
 立即注册
楼主: rm543

关于STC8 USB功能导致ADC读取跳动的问题

[复制链接]

6

主题

88

回帖

1057

积分

金牌会员

积分
1057
 楼主| 发表于 2026-1-24 22:19:46 | 显示全部楼层
梁*** 发表于 2026-1-24 20:58
电路有些不合理的地方,注意红色标记:
下图中R1~R4=22R太小,起不到保护作用,改为200R更好。电位器输出 ...


我重新焊接了一块PCB,实际焊接的元件如下原理图:


SCH_Schematic1_1-P1_2026-01-22.png
SCH_Schematic1_2-P2_2026-01-22.png
实物图:
IMG_20260124_215223.jpg

VREF电压为2.502V,USB电压约5.1V

打开USB串口功能的数据:

[22:07:34.717]接收←VIN1_ADC = 1812,MAX = 1813,MIN = 1812,Jump = 0001
                    VIN2_ADC = 0001,MAX = 0005,MIN = 0001,Jump = 0004
                    VIN3_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN4_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VREF_ADC = 2046,MAX = 2052,MIN = 2046,Jump = 0006
                    VCC_ADC  = 2103,MAX = 2104,MIN = 2103,Jump = 0001
                    
[22:07:37.302]接收←VIN1_ADC = 1812,MAX = 1818,MIN = 1807,Jump = 0011
                    VIN2_ADC = 0001,MAX = 0007,MIN = 0000,Jump = 0007
                    VIN3_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN4_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VREF_ADC = 2047,MAX = 2054,MIN = 2046,Jump = 0008
                    VCC_ADC  = 2102,MAX = 2104,MIN = 2094,Jump = 0010
                    
[22:07:39.882]接收←VIN1_ADC = 1812,MAX = 1817,MIN = 1811,Jump = 0006
                    VIN2_ADC = 0002,MAX = 0007,MIN = 0001,Jump = 0006
                    VIN3_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN4_ADC = 0000,MAX = 0005,MIN = 0000,Jump = 0005
                    VREF_ADC = 2046,MAX = 2052,MIN = 2041,Jump = 0011
                    VCC_ADC  = 2103,MAX = 2112,MIN = 2093,Jump = 0019


关闭USB转串口的数据:

[22:08:39.293]接收←VIN1_ADC = 1812,MAX = 1814,MIN = 1812,Jump = 0002
                    VIN2_ADC = 0001,MAX = 0002,MIN = 0000,Jump = 0002
                    VIN3_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN4_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VREF_ADC = 2046,MAX = 2047,MIN = 2046,Jump = 0001
                    VCC_ADC  = 2103,MAX = 2104,MIN = 2103,Jump = 0001
                    
[22:08:41.873]接收←VIN1_ADC = 1812,MAX = 1813,MIN = 1812,Jump = 0001
                    VIN2_ADC = 0001,MAX = 0002,MIN = 0001,Jump = 0001
                    VIN3_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN4_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VREF_ADC = 2046,MAX = 2047,MIN = 2046,Jump = 0001
                    VCC_ADC  = 2103,MAX = 2105,MIN = 2103,Jump = 0002
                    
[22:08:44.455]接收←VIN1_ADC = 1812,MAX = 1813,MIN = 1811,Jump = 0002
                    VIN2_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN3_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN4_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VREF_ADC = 2046,MAX = 2047,MIN = 2046,Jump = 0001
                    VCC_ADC  = 2103,MAX = 2104,MIN = 2103,Jump = 0001


很明显在USB功能打开和关闭时,ADC结果的跳动是不同的。

我知道电路上不是电容越多越好,实际应用中肯定是按需分配,
但这块是测试板,主要是为了保证在芯片外围电路提供最大的电压稳定度,
所以才在外围预留了比正常使用多的电容,
在开始测试时,我也是先焊接最少工作稳定的电容,然后再往上加,
但测试结果并不影响,在电容多和少的状态,
USB不打开也可以保证ADC跳动在±1,打开USB跳动的范围依旧增加5~10。

在Ucap上,只加100nF电容的话,USB工作时候的纹波会非常大,
VCC上的纹波也会跟随USB运行的产生和Ucap相关的纹波,
放置最大容量的电容后,基本上可以让示波器上看到的纹波不随USB运行而变化。
手头上的示波器刚好坏了,周一用大示波器抓波形。

我知道USB和ADC是两个独立的模块,他们独立运行的时候各自功能都良好,
但现在合在一起运行时,ADC有受到了干扰的现象。
STC8H USB系列都没有独立的AGND引脚,不然可以用带独立引脚的封装进行对比。



回复

使用道具 举报 送花

6

主题

88

回帖

1057

积分

金牌会员

积分
1057
 楼主| 发表于 2026-1-24 22:38:24 | 显示全部楼层
神*** 发表于 2026-1-24 14:46
楼主将自己实际用的电路出个实际使用的原理图,
实际焊的电阻电容大小都标号,大家好帮您

解释一下一些电路设计参考来源信息:


这是 ti 官方2005版本的TL431手册24页
截图202601242224405537.jpg
这是 ti 官方2024版本的TL431手册27页
截图202601242223403636.jpg
这个是TL431精密可调稳压器的经典应用电路,
通过对输出电压进行分压到FB引脚进行对输出电压的调节。

我电路上原使用的 1.5KΩ/7.5KΩ 分压,目的是使稳压电压为3V,
这个输出电压在其他项目上需要设置为3V,因为电源是3.3V输入,
在没有VREF引脚的芯片中,需要一路ADC进行采样基准电压时,
更高的基准电压可以获得更准确的电压基准计算精度,
更高的基准电压可以获得更高的噪声裕量,
但分压会引入电阻噪声,这个需要权衡。

这是 ti 官方2024版本的TL431手册7页
截图202601242235124443.jpg
这是 ti 官方2024版本的TL431手册16页
截图202601242237441779.jpg
对于TL431的性能参数测试,通常使用10mA作为稳压电流测试值,
一般厂家进行测试使用的条件通常是比较良好的工作条件,
所以在电路功耗允许的范围内,我会尽量时TL431的工作电流接近10mA,
如果电路功耗不允许,就按照最低运行电流1mA进行设计。
回复

使用道具 举报 送花

已绑定手机

123

主题

5133

回帖

1万

积分

超级版主

无情的代码机器

积分
11465
发表于 2026-1-24 23:00:36 | 显示全部楼层
楼主试下 ADC15通道 内部信号源 1.19V:
硬件串口:


截图202601242300114087.jpg
USB串口:
截图202601242300182289.jpg

三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

6

主题

88

回帖

1057

积分

金牌会员

积分
1057
 楼主| 发表于 2026-1-25 20:17:15 | 显示全部楼层
erci*** 发表于 2026-1-24 23:00
楼主试下15通道内部信号源:
硬件串口:

测试了ADC15通道内部Band gap的ADC值,跳动值大约一直在3左右,不受USB的影响。


以下是测试对比:
我程序中加入了一个CDC请求的超时判断,超过100mS没有主机请求视为CDC关闭,
显示 USB CDC Disable ;
满电容板的参考电压是3V,标准电容板的参考电压是2.5V,
VIN1接P32上拉,满电容板 VIN 分压电阻是 20K/10K,标准电容板 VIN 分压是 30K/10K
满电容板22欧.PNG 标准电容板22欧.PNG

现象中看出内部Bandgap通道的采样不受USB运行影响,提出一个USB数据引脚引入干扰的可能性,
于是尝试加大 USB D+ 和 D- 串联的电阻,但并没有改善,加大到100Ω时不能通讯。
应该不是这个影响,因为此前测量过P30 和 P31 引脚也没有电压毛刺。
回复

使用道具 举报 送花

6

主题

88

回帖

1057

积分

金牌会员

积分
1057
 楼主| 发表于 2026-1-26 19:49:12 | 显示全部楼层
梁*** 发表于 2026-1-24 20:58
电路有些不合理的地方,注意红色标记:
下图中R1~R4=22R太小,起不到保护作用,改为200R更好。电位器输出 ...

使用示波器测试了两块板单片机电源的波形,

测量均使用接地弹簧最小回路测量,示波器带宽200MHz,采样率1GHz,垂直分辨率8bit,
默认表笔x10,关闭带宽抑制。

满电容板主电源使用电池供电,单片机VCC和UCAP分别使用一个3.3V线性稳压器供电,
单片机VREF使用ME431提供3.0V参考电压,焊接所有滤波电容;


标准电容板主电源使用USB供电,电解电容仅在USB电源输入放置一颗,
单片机VCC直连USB电源,使用100nF+10uF 陶瓷电容滤波,
单片机UCAP外接一颗 100nF 陶瓷电容,
单片机VREF使用ME431提供2.5V参考电压,使用两颗10uF陶瓷电容滤波;


满电容板 USB CDC关闭(会有一个USB HID 1mS间隔轮询但不返回):
1,由于USB是电脑输出,电脑机箱和示波器的地线之间会存在干扰
(示波器已经使用隔离电源,但隔离度不是完全理想)
所以进行一个表笔弹簧接GND,笔尖测量GND的底噪测量:

USB供电时,存在一个约86KHz的开关电源噪声,后面的波形需要减去这个底噪。

2,测量单片机VCC引脚对GND的波形:
截图202601261924273496.jpg
3,测量单片机VREF引脚对GND的波形:
截图202601261925067509.jpg
4,测量单片机UCAP引脚对GND的波形:
截图202601261925224840.jpg
5,测量单片机VCC_ADC引脚对GND的波形:
截图202601261926182453.jpg

满电容板 USB CDC启动(会有一个USB HID 1mS间隔轮询但不返回):
6,测量单片机VCC引脚对GND的波形:
截图202601261927216418.jpg
7,测量单片机VREF引脚对GND的波形:
截图202601261928435426.jpg
8,测量单片机UCAP引脚对GND的波形:
截图202601261929058621.jpg
可以看到UCAP上会有些小的工作电流波动

9,测量单片机UCAP引脚对GND的波形(表笔x1):
截图202601261929574623.jpg
UCAP引脚放大可以看到USB的工作电流,和USB通讯的时钟12MHz是对应的。

10,测量单片机VCC_ADC引脚对GND的波形:
截图202601261930218421.jpg


标准电容板 USB CDC关闭(会有一个USB HID 1mS间隔轮询但不返回):
1,表笔弹簧接GND,笔尖测量GND的底噪测量:

截图202601261937075495.jpg
2,测量单片机VCC引脚对GND的波形:
截图202601261937413329.jpg
3,测量单片机VREF引脚对GND的波形:
截图202601261938416842.jpg
4,测量单片机UCAP引脚对GND的波形:
截图202601261939105931.jpg
这个是USB HID 的轮询请求,时间间隔 1ms

5,测量单片机VCC_ADC引脚对GND的波形:
截图202601261940007648.jpg

标准电容板 USB CDC启动(会有一个USB HID 1mS间隔轮询但不返回):
1,测量单片机VCC引脚对GND的波形:
截图202601261940501155.jpg
2,测量单片机VCC引脚对GND的波形(表笔x1):
截图202601261941418678.jpg
可以在VCC上看到有USB通讯的电流

3,测量单片机VREF引脚对GND的波形:
截图202601261942402927.jpg
4,测量单片机UCAP引脚对GND的波形:
截图202601261942551029.jpg
可以在UCAP上看到USB通讯的电流,和VCC上的跌落时间间隔对应
USB工作时UCAP上会有大概80mV的纹波峰峰值,
也会对应地从VCC上抽取电流(如果使用内部稳压器供电)

5,测量单片机VCC_ADC引脚对GND的波形:
截图202601261946404837.jpg


以上就是我测量单片机外围电压波形的结果,如果有更多需要测量的可以继续提出。




截图202601261923462809.jpg
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-1-26 21:46:30 | 显示全部楼层
1, STC8H8K64U/STC32G12K128 内部ADC最重要的 基准

    AVREF-/AGND/MCU-GND, 封装时这 3根线,
    封装时接到了同一个 MCU-GND 管脚
2, AVREF+, 这个管脚是独立的


只要管好 【AVREF-, AVREF+】
===MCU的ADC应用你就算设计成功了
再管好你被测量信号源的 【AGND, 模拟输出】
===你系统 ADC 部分就设计成功了


将 【被 测量信号源的-AGND】直接短接到:
STC8H8K64U 的 AVREF-/AGND/MCU-GND管脚
===越短越粗,越好
这样 就假定 AGND 干净不受干扰了,
再抖动就是被测量信号源的抖动 !


截图202601262146209733.jpg



回复

使用道具 举报 送花

6

主题

88

回帖

1057

积分

金牌会员

积分
1057
 楼主| 发表于 2026-1-26 22:21:30 | 显示全部楼层
神*** 发表于 2026-1-26 21:46
1, STC8H8K64U/STC32G12K128 内部ADC最重要的 基准

    AVREF-/AGND/MCU-GND, 封装时这 3根线,


ADC的采集中这几个模拟线固然是非常重要,我也很清楚STC在这方面下了狠功夫,
因为我确实尝试在具有几十mV纹波的开关电源供电中,只要保证了Vref稳定,
ADC值就可以稳定的效果,这个我是信任的。

现在单片机外部已经使用尽可能粗短的连接来保证信号进入单片机可靠,
而且用示波器在芯片外部引脚测量不到波动了(当然测量幅度有限),
ADC的值还是会随着USB通讯的启动而跳动变大。
唯独内部Bandgap电压跳动值没变。
如果可以的话,用你们最理想的测试环境看是否可以复现,很简单的事情。


因为在USB通讯启动前,ADC的跳动都是在±1,
说明板独立进行ADC采样和模拟量参考是稳定的。

USB通讯后跳动值变大到10,这按道理在外围可以用示波器很清晰地看到,
但现在我并没有捕捉到这个异常,所以很疑惑,希望可以解决问题。
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-1-27 00:04:14 | 显示全部楼层
被测量信号源的抖动 !
===1, USB 通信 干扰到 被测信号源了 ?
===2, USB通信时电流变大,干扰到 被测量信号源的电源了 ?
回复

使用道具 举报 送花

6

主题

88

回帖

1057

积分

金牌会员

积分
1057
 楼主| 发表于 2026-1-27 23:53:53 | 显示全部楼层
神*** 发表于 2026-1-27 00:04
被测量信号源的抖动 !
===1, USB 通信 干扰到 被测信号源了 ?
===2, USB通信时电流变大,干扰到 被测 ...


感谢反复提醒注意 AVREF AGND ,电源质量,PCB地线布局分割等诸多事项,
我也尽我的所能去实现这些,并且去排查验证效果,如果有不足请继续提出。

我继续做了一个验证,这也可能是我能在芯片外围能做到最好的效果了
我对 P5.4 引脚的 ADC2 通道进行测量,TSSOP20 的第7引脚;


直接在 ADC 引脚(P54/ADC2)焊接一个 0Ω 电阻到单片机的 GND 引脚
IMG_20260127_222617.jpg
再进一步应该就只能挖开封装焊在晶圆的打线上了


按道理,这样做应该排除了电路板上的其他干扰源了吧?
或者可以解释一下:此时 “被测量信号源的抖动 ” 是怎么发生的?
此时信号的共模和差模成分在此频率等级下,引脚之间应该小于0.8mV了吧?


但是就这样做,USB CDC打开时,ADC 2 通道也可以读回来最大8,
在关闭 USB CDC 时,ADC 2 通道是稳定读回来0。

打开USB CDC:

                    VIN1_ADC = 0000,MAX = 0001,MIN = 0000,Jump = 0001
                    VIN2_ADC = 0000,MAX = 0004,MIN = 0000,Jump = 0004
                    VIN3_ADC = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    VIN4_ADC = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    VREF_ADC = 2043,MAX = 2044,MIN = 2039,Jump = 0005
                    VCC_ADC  = 2239,MAX = 2246,MIN = 2238,Jump = 0008
                    BAND_ADC = 1625,MAX = 1627,MIN = 1624,Jump = 0003
                    ADC_CH_2 = 0001,MAX = 0008,MIN = 0000,Jump = 0008
                    USB CDC Enable


关闭USB CDC:

                    VIN1_ADC = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    VIN2_ADC = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    VIN3_ADC = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    VIN4_ADC = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    VREF_ADC = 2043,MAX = 2044,MIN = 2043,Jump = 0001
                    VCC_ADC  = 2239,MAX = 2240,MIN = 2239,Jump = 0001
                    BAND_ADC = 1626,MAX = 1627,MIN = 1625,Jump = 0002
                    ADC_CH_2 = 0000,MAX = 0000,MIN = 0000,Jump = 0000
                    USB CDC Disable



以下我作出一种假设:
芯片内部的模拟部分和数字部分供电是独立的,
在共用 AGND 和 GND 引脚的封装上,各个模块的GND单独打线到引脚上进行单点接地,
但由于这些打线之间的距离通常非常近,同时也具有比较可观的长度,
当模拟电源的GND阻抗较大时,数字电源GND上的高频电流可能会耦合到模拟电源的AGND上,
然后在模拟电源的AGND与GND焊盘上形成压降。
这可能可以解释为什么在USB运行时,ADC测量外部信号会产生波动,
但是ADC测量内部的参考电压却不会产生新的波动。

当然这只是我的一种假设,一切以实际为准。
无标题222.png

还是希望官方可以验证一下这个问题。


video_20260127_230300_edit.mp4

76.35 MB, 下载次数: 149

回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25432
发表于 2026-1-28 08:30:49 | 显示全部楼层
重新再整个板子吧,另外 UCAP 0.1uF--->10uF
ADC不要用,UCAP旁边的 ADC通道
===我们是没问题的
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-8 01:21 , Processed in 0.086201 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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