找回密码
 立即注册
查看: 739|回复: 6

10位/12位ADC采样速度问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-09-26 16:02:26

4

主题

7

回帖

100

积分

注册会员

积分
100
发表于 2024-1-11 15:56:10 | 显示全部楼层 |阅读模式
我想了解下,这个stc8G的数据手册写着,10位的速度最高500k,12位的最高800k,可是看图片的计算公式,不是应该10位的速度更快吗
71CACF16ABBBA1A96F3F4ECC92172CD2.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2024-1-11 16:53:23 | 显示全部楼层
STC8G/STC8H/STC8A 的实际ADC速度,10位 ADC 最快 500K,  12位 ADC 最快 800K
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-09-26 16:02:26

4

主题

7

回帖

100

积分

注册会员

积分
100
发表于 2024-1-11 17:10:37 | 显示全部楼层
神*** 发表于 2024-1-11 16:53
STC8G/STC8H/STC8A 的实际ADC速度,10位 ADC 最快 500K,  12位 ADC 最快 800K

那采样频率的计算是根据上面的公式计算计算的吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2024-1-11 17:13:43 | 显示全部楼层
按数据手册
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-09-26 16:02:26

4

主题

7

回帖

100

积分

注册会员

积分
100
发表于 2024-1-11 18:01:54 | 显示全部楼层

图片就是数据手册的截图,35mhz的时候,SPEED[3:0]  = 0;CSSETUP = 1;CSHOLD[1:0] = 1,SMPDUTY[4:0]  = 10,代进去10位的计算结果最高可以设置到700k,12位的反而只有650k左右,这是为什么?另外手册说10位最高不要超过500k,是哪个参数不能设置太高。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

积分
16661
发表于 2024-1-11 18:19:19 | 显示全部楼层
截图202401111814395838.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-06-17 10:15:05

74

主题

6092

回帖

1万

积分

超级版主

积分
12731
发表于 2024-1-11 19:29:33 | 显示全部楼层
ADC的几个参数是可以设置的:
#define ADC_START        (1<<6)           /* 自动清0 */
#define ADC_FLAG        (1<<5)             /* 软件清0 */

#define        ADC_SPEED        1            /* 0~15, ADC时钟 = SYSclk/2/(n+1) */
#define        RES_FMT       (1<<5)        /* ADC结果格式 0: 左对齐, ADC_RES: D9 D8 D7 D6 D5 D4 D3 D2, ADC_RESL: D1 D0 0  0  0  0  0  0 */
                                                          /*                     1: 右对齐, ADC_RES: 0  0  0  0  0  0  D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0 */

#define CSSETUP                (0<<7)        /* 0~1,  ADC通道选择时间      0: 1个ADC时钟, 1: 2个ADC时钟,  默认0(默认1个ADC时钟) */
#define CSHOLD                (1<<5)         /* 0~3,  ADC通道选择保持时间  (n+1)个ADC时钟, 默认1(默认2个ADC时钟)                */
#define SMPDUTY                20              /* 10~31, ADC模拟信号采样时间  (n+1)个ADC时钟, 默认10(默认11个ADC时钟)                                */
                                                           /* ADC转换时间: 10位ADC固定为10个ADC时钟, 12位ADC固定为12个ADC时钟.                                 */

        P_SW2 |=  0x80;               //访问XSFR
        P1n_pure_input(0xff);        //设置要做ADC的IO做高阻输入
        P3n_pure_input(0x7f);        //设置要做ADC的IO做高阻输入
        ADC_CONTR = 0x80 + 0;    //ADC on + channel
        ADCCFG = RES_FMT + ADC_SPEED;
        ADCTIM = CSSETUP + CSHOLD + SMPDUTY;

经验上,采样时间不能太短,最好大于等于9个ADC时钟。10位ADC最短一般为22个时钟,12位ADC最短位24个时钟。
由于ADC有大量的模拟器件,所以用最高的速度可能得不到额定的精度(12位ADC精度为略小于1LSB),从我大量的经验来看,要达到12位精度,ADC转换时间(12个ADC时钟)最好在3us以上,我一般最常用的是:ADC时钟为3MHz,ADC转换时间为4us,加上采样等等大约8us。
要高速的,可以参考我的示波器例子,都是500KHz采样的。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 11:38 , Processed in 0.137197 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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