找回密码
 立即注册
楼主: 神农鼎

一次完整的 A/D 时间含【ADC输入通道的切换时间+采样的时间+关闭采样的时间+固定转换

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-09-13 08:29:49

12

主题

318

回帖

2451

积分

金牌会员

积分
2451
发表于 2024-3-22 14:35:00 | 显示全部楼层
梁*** 发表于 2024-3-5 23:52
分辨率越高的ADC,其对输入信号阻抗就要求越小,比如一些24 bits ADC其手册中的参数是在信号源内阻为10欧姆 ...

学习到了,能否详细讲解下:如何用16位DAC扫描得到曲线的?

点评

16位DAC,从0开始输出,做ADC,之后每次都加1再输出做ADC,一共扫描65535个点,绘成曲线,做数据分析。  详情 回复 发表于 2024-3-22 15:36
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2025-09-13 11:21:33

76

主题

6721

回帖

1万

积分

超级版主

积分
14125
发表于 2024-3-22 15:36:33 | 显示全部楼层
jw*** 发表于 2024-3-22 14:35
学习到了,能否详细讲解下:如何用16位DAC扫描得到曲线的?

16位DAC,从0开始输出,做ADC,之后每次都加1再输出做ADC,一共扫描65535个点,绘成曲线,做数据分析。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-09-13 08:29:49

12

主题

318

回帖

2451

积分

金牌会员

积分
2451
发表于 2024-3-22 16:39:05 | 显示全部楼层
梁*** 发表于 2024-3-22 15:36
16位DAC,从0开始输出,做ADC,之后每次都加1再输出做ADC,一共扫描65535个点,绘成曲线,做数据分析。 ...

谢谢!清楚了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:492
  • 最近打卡:2025-09-13 09:58:17

9

主题

421

回帖

3009

积分

论坛元老

积分
3009
发表于 2024-4-1 11:38:17 | 显示全部楼层

截图202404011124092578.jpg

人家这个电阻,是指信号源内阻,用来评估ADC对高阻信号源采样的能力,并非要自己焊个电阻上去,
ADC采样速度受限于电路的RC时间常数,这个RC包括芯片内部的等效电阻杂散电容和取样保持电容,以及用户外接电路的信号源内阻和分布电容,
总的时间常越小,取样保持电路建立时间越短,保证精测前提下,ADC速度才更快.
但是,高速的采样保持时间也不见得就是好事,很可能把高频噪声也采样到.ADC外部串联电阻,可以跟分布电容形成低通滤波器,对高频噪声有一定抑制作用,
所以串不串电阻,串多大电阻,加不加电容,加多大电容,要不要做抗混叠滤波,需要实际电路应根据实际情况来定,不能生搬硬套.



回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:181
  • 最近打卡:2025-09-13 08:46:11

778

主题

1万

回帖

1万

积分

管理员

积分
19081
发表于 2024-4-8 16:23:05 | 显示全部楼层
一用户,信号是 0V ~ 40V 变化,速度要求不高,用的 90K/10K 分压
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:31
  • 最近打卡:2025-03-31 16:46:26

2

主题

19

回帖

220

积分

中级会员

积分
220
发表于 2024-5-8 11:15:53 | 显示全部楼层
单片机型号,STC32G8K64,用的是3.3V供电,内部晶振选24MHz,输入串了个1K欧的电阻,尝试了官网例程DMA方式,ADC中断方式,ADC查询方式,均不成功。
以下代码是比较接近的,但是也有问题。
现象1:采用通道2的值会受通道3影响,P1.2脚接入3.3V,采集不到ADC值,通道2和通道3都没有变化。
现象2:P1.3脚接入3.3V,通道3ADC能捕捉到3.3V,但是通道2的值也会跟着变化,电压值有1.8V。
尝试,1秒采集轮巡两个通道各采集一次,均无法成功。
尝试,单独采集通道2,通道2的值无法采集,烦请梁工看看。

IO配置:
P1_MODE_IN_HIZ(GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6|GPIO_Pin_7);


//ADC 配置
void        ADC_config(void)
{
        ADC_InitTypeDef                ADC_InitStructure;                //结构定义
       
        ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
        ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道选择时间控制 0(默认),1
        ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道选择保持时间控制 0,1(默认),2,3
        ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X1T;                //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
        ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
        ADC_Inilize(&ADC_InitStructure);                //初始化
       
        ADC_PowerControl(ENABLE);                                                        //ADC电源开关, ENABLE或DISABLE
        NVIC_ADC_Init(DISABLE,Priority_3);                //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
}

u16        Get_ADCResult(u8 channel)        //channel = 0~15
{
        if(channel > ADC_CH15)        return        4096;        //错误,返回4096,调用的程序判断       
        ADC_RES = 0;
        ADC_RESL = 0;
       
        ADC_CONTR = (ADC_CONTR & 0xf0) | channel; //设置ADC转换通道
        ADC_START = 1;//启动ADC转换
        NOP(4);                        //对ADC_CONTR操作后要4T之后才能访问

        while(ADC_FLAG == 0);
        ADC_FLAG = 0;//清除ADC结束标志
  return (((u16)ADC_RES << 8) | ADC_RESL);
}
//采集ADC部分
ADC_VAL = Get_ADCResult(2);
ADCSUM1 += Get_ADCResult(2);
ADC_VAL = Get_ADCResult(3);
ADCSUM2 += Get_ADCResult(3);
if(++SumCount>=10)
{
  SumCount=0;
  //求平均值
  INVALUE1=ADCSUM1/10;
  INVALUE2=ADCSUM2/10;
  //把累加值清零
  ADCSUM1=0;
  ADCSUM2=0;
  //计算电压,这里*33而不是乘以3.3,相当于把电压值乘以10倍。
  BatV1=((INVALUE1*33)/4096);
  BatV2=((INVALUE2*33)/4096);
}

点评

专门写个测试程序给你,我测试没有任何问题。ADC0~ADC7输入的是参考电压的 1/16~8/16,由于分压电阻有误差(使用误差1%的电阻),所以跟理论值有几个字误差是正常的。 理论读数: 256、512、768、1024、1280、1536、  详情 回复 发表于 2024-5-9 01:00
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2025-09-13 11:21:33

76

主题

6721

回帖

1万

积分

超级版主

积分
14125
发表于 2024-5-9 01:00:47 | 显示全部楼层
独风*** 发表于 2024-5-8 11:15
单片机型号,STC32G8K64,用的是3.3V供电,内部晶振选24MHz,输入串了个1K欧的电阻,尝试了官网例程DMA方式 ...

专门写个测试程序给你,我测试没有任何问题。
ADC0~ADC7输入的是参考电压的 1/16~8/16,
由于分压电阻有误差(使用误差1%的电阻),所以跟理论值有几个字误差是正常的。
理论读数: 256、512、768、1024、1280、1536、1792、2048。

测试结果截图:
测试结果截图.JPG

02-8路12位ADC0~7转换-串口1(P3.1)返回结果.rar (89.02 KB, 下载次数: 209)


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-02-08 16:51:56

4

主题

14

回帖

280

积分

中级会员

积分
280
发表于 2024-10-21 09:56:03 | 显示全部楼层
好复杂
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:108
  • 最近打卡:2025-09-13 20:52:15
已绑定手机

0

主题

20

回帖

546

积分

高级会员

积分
546
发表于 2025-6-3 09:25:38 | 显示全部楼层
先学习ADC模块。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:110
  • 最近打卡:2025-09-13 18:20:46

2

主题

131

回帖

780

积分

高级会员

积分
780
发表于 4 天前 | 显示全部楼层
感觉有点明白了,好像又还没搞清楚
学无止境
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-14 04:42 , Processed in 0.142075 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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