找回密码
 立即注册
查看: 4302|回复: 13

过采样, 8H8K64U的12位ADC, 提升N位分辨率

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-6-4 14:17:41 | 显示全部楼层 |阅读模式
8H8K64U的12位ADC通过【过采样提升N位分辨率】:
===进行2的2N次方转换,累加值右移N位,提升N位分辨率
1,  8H8K64U, 8H1K08T,
     8H4K64TL, 8H4K64TLCD,
     8H3K64S4, 8A8K64D4
2,32G12K128, 32G8K64

过采样提升N位分辨率,演示程序下载
过采样, STC的12位ADC, 提升N位分辨率-1.png
深圳国芯人工智能有限公司-核心功能实验板 (stcai.com)
1,8H8K64U, 8H1K08T
STC的12位ADC通过过采样提升N位分辨率-1.png
STC的12位ADC通过过采样提升N位分辨率-2.png
/************************************************************************************************
本例程基于STC8H8K64U核心实验板(开天斧)进行编写测试。
对转接板的NTC进行采样,通过J2接口串口1(P1.6 P1.7)发送给上位机,波特率115200,N,8,1.
初始化时先把要ADC转换的引脚设置为高阻输入.
过采样提升N位分辨率:进行2的2N次方转换,累加值右移N位,提升N位分辨率
12位ADC,采样4次数值累加后除以2,结果便为13位过采样ADC数值.
同理12位ADC,采样16次数值累加以后除以4,结果便为14位过采样ADC数值.
程序提供了两种软件防抖的方式供参考选用:
1. 使用冒泡排序,去掉最高值、最低值,求中间平均值(不需要的话屏蔽 BUBBLE_SORT 定义)
2. 采样累加,求平均值(不需要的话可将 SUM_LENGTH 定义值改为 1 )

此外程序演示两种复位进入USB下载模式的方法:
1. 通过每1毫秒执行一次“KeyResetScan”函数,实现长按P3.2口按键触发MCU复位,进入USB下载模式。
   (如果不希望复位进入USB下载模式的话,可在复位代码里将 IAP_CONTR 的bit6清0,选择复位进用户程序区)
2. 通过加载“stc_usb_hid_8h.lib”库函数,实现使用STC-ISP软件发送指令触发MCU复位,进入USB下载模式并自动下载。
3. 如果data空间不够,可将Memory Model设为Large模式,然后使用“stc_usb_hid_8h_xdata.lib”库函数。

下载时, 选择时钟 24MHz (用户可自行修改频率).

************************************************************************************************/

2,32G12K128, 32G8K64   资料下载
STC的12位ADC通过过采样提升N位分辨率-3.png
STC的12位ADC通过过采样提升N位分辨率-4.png

12位ADC过采样,要提升 N 位,要进行 2的 2N次方的转换,结果累加,右移 N 位
, 提升1位
=== 12位ADC过采样,要提升 1 位,要进行 2的 2次方的采样转换/4次,结果累加,右移 1 位
, 提升2位
=== 12位ADC过采样,要提升 2 位,要进行 2的 4次方的采样转换/16次,结果累加,右移 2 位
, 提升3位
=== 12位ADC过采样,要提升 3 位,要进行 2的 6次方的采样转换/64次,结果累加,右移 3 位
, 提升4位
=== 12位ADC过采样,要提升 4 位,要进行 2的 8次方的采样转换/256次,结果累加,右移 4 位






回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2023-6-9 08:06:33 | 显示全部楼层
刚好写ADC程序需要这些功能,学习了,支持STC!!
不停地学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-7-1 22:01:26 | 显示全部楼层
1.png

太秀了!单片机内置ADC实现高分辨率采样?-电子工程专辑 (eet-china.com)


我也看不懂,但肯定是好东西 !需要的认真学习下
据说STC的真12位ADC,提到 14位的分辨率,是杠杠的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-7-2 14:28:38 | 显示全部楼层
下面我也看不懂,换了几个字,
肯定还是好东西,需要的认真看下
谈谈ADC过采样-电子工程专辑 (eet-china.com)
1.png

2.png

3.png

4.png

5.png


6.png

7.png





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-7-2 17:33:43 | 显示全部楼层
老梁爱捣鼓 说: 这两天在研究ADC过采样
STC8H8K64U的真12位ADC过采样
STC32G12K128的真12位ADC过采样

在满足白噪声幅度在1~2LSB的条件下才有效,
或者加入人工三角波做噪声(最好是同步加入)。
增加N位,则过采样至少为4^N次累加和÷2^N,
必须是均匀采样..., 等间隔采样,间隔多少 ?
比如用2560Hz采样256次累加再÷16可得到16位ADC结果,
数据率为10Hz,即100ms得到一个16位结果。
为了抗50Hz市频干扰,256次采样总时间又要是20ms的整数倍
STC的真12位ADC,比如输入2V叠加50Hz幅度为1V的正弦波,
即电压值为1~3V,采样平均后能将这1V的干扰完全去除,
偶尔会有1LSB的跳动。
===方案应该是可行的,多给我一些时间详细测试,要反复调整外围电路和程序

===这是研究,要学习理论,还要实践研发,再提高,不是吹水,要时间
争取明天发测试结果和演示方案例程,后续持续完善,形成经典案例



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4850

回帖

8384

积分

超级版主

DebugLab

积分
8384
发表于 2023-7-3 23:15:20 | 显示全部楼层
STC8H8K64U, STC32G12K128的真12位ADC, 过采样到16位
====================================
DMA_ADC, 256次采样平均,高字节、低字节、余数拼接后
得20位超采样值,实测抖到不能用,右移4位,
得16位超采样值稳定!===真的假的 ?
上代码(完整代码见附件):
                        for(i=0;i<ADC_CH;i++)
                        {
                                ADC_Value=DMA_Buffer[2*ADC_NUM+2];
                                ADC_Value<<=8;
                                ADC_Value|=DMA_Buffer[2*ADC_NUM+3];
                                ADC_Value<<=8;
                                ADC_Value|=DMA_Buffer[2*ADC_NUM+1];
                                ADC_Value
>>=4;        //20bit结果右移4位得16位结果
                        }
简陋的硬件(针对ADC优化一下会更稳定)

QQ图片20230703230925.jpg
QQ图片20230703231404.png

QQ图片20230703231631.png
QQ图片20230703231633.png
QQ图片20230703231420.png
USB_CDC_DMA_ADC_串口绘图.zip (105.7 KB, 下载次数: 229)




DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-02 14:37:11
已绑定手机

77

主题

4850

回帖

8384

积分

超级版主

DebugLab

积分
8384
发表于 2023-7-3 23:19:57 | 显示全部楼层
Debu*** 发表于 2023-7-3 23:15
DMA_ADC 256次采样平均,高字节、低字节、余数拼接后得20位超采样值,实测抖到不能用,右移4位,得16位超采 ...
使用ADC0,一箭双雕直接接S-RXD2了
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-7-3 23:23:29 | 显示全部楼层
大家帮完善,这16位ADC太简单了,一定有考虑不周的地方
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2023-7-4 23:34:11 | 显示全部楼层
过采样到16位程序已完成,用开天斧验证。

开天斧-STC8H8K64U 12位ADC过采样得到16位稳定结果 虚拟数码管显示
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2955
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:483
  • 最近打卡:2025-05-02 21:14:33
已绑定手机

1

主题

54

回帖

2355

积分

金牌会员

积分
2355
发表于 2024-4-9 17:55:54 | 显示全部楼层
Debu*** 发表于 2023-7-3 23:15
STC8H8K64U, STC32G12K128的真12位ADC, 过采样到16位
====================================
DMA_ADC, 256 ...

代码见附件):
                        for(i=0;i<ADC_CH;i++)
                        {
                                ADC_Value=DMA_Buffer[2*ADC_NUM+2];
                                ADC_Value<<=8;
                                ADC_Value|=DMA_Buffer[2*ADC_NUM+3];
                                ADC_Value<<=8;
                                ADC_Value|=DMA_Buffer[2*ADC_NUM+1];
                                ADC_Value>>=4;        //20bit结果右移4位得16位结果
                        }
不是累加吗?为什么要左移8位呢

点评

24位数据拼接  详情 回复 发表于 2024-4-9 20:35
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 22:11 , Processed in 0.235151 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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