外部ADC之AD7949——14bit、8通道、250k

news2025/1/23 22:33:31

前言

在实际项目中,仅靠单片机内部的ADC采样,很有可能达不到实际采样精度,这个时候就需要外接外部ADC芯片进行采样,这些外部ADC一般都是SPI接口或者是并口

单片机通过SPI接口或并口读写芯片内部寄存器,配置参考极性、采样通道、低通滤波器带宽、基准电压源、通道序列器等。

本文主要对ADI家的14bit、8通道、250k的ADC7949做一个总结,这款ADC在实际项目中使用,采样精度达到要求,读取时序有点点绕,但是是一款十分常用的ADC芯片。就是价格不太友好哈哈,一块芯片快60。
image.png

一、AD7949 特点

AD7949是一款8通道、14位、电荷再分配、逐次逼近型(SAR)模数转换器(ADC),采用单电源(VDD)供电

AD7949内置多通道、低功耗数据采集系统所需的元件,包括:
无失码的真14位SAR型ADC;
用于将输入配置为单端输入(使用或不使用参考地)、差分输入或双极性输入的8通道、低串扰多路复用器;
内部低漂移基准电压源(可以选择2.5 V或4.096 V)和缓冲;温度传感器;
可选择的1极点滤波器;以及多通道按顺序连续采样时所用的序列器。

AD7949使用简单的SPI接口实现配置寄存器的写入和转换结果的接收。SPI接口使用单独的电源(VIO),其被设定为主逻辑电平。功耗与吞吐量成正比。

AD7949采用20引脚微型LFCSP封装,工作温度范围为-40°C至+85°C。

上面说了这么多,其实就几点

  • 8通道、14bit、逐次逼近型ADC
  • 8通道输入可选择单端输入、差分输入或双极性输入
  • 基准电压可选 2.5V或4.096V
  • 内部自带温度传感器
  • 内部自带滤波器
  • 可选择单通道采样或顺序连续采样
  • SPI接口配置寄存器,读取ADC转换结果,SPI接口兼容SPI、QSPI和DSP

二、引脚

下图是数据手册里的详细介绍
image.png
根据上图说明,可以总结为以下几点

  • REF 基准电压,可选内部基准源 2.5V 或 4.096V 基准电压
  • IN0-IN7 ADC采样的8个通道
  • CNV 转换输入,此引脚接SPI接口的CS引脚
  • DIN 数据输入,此引脚接SPI接口的MOSI引脚,主要用来配置芯片内部CFG寄存器
  • SCK 时钟输入,此引脚接SPI接口的SCLK时钟引脚
  • SDO 数据输出,此引脚接SPI接口的MISO引脚,接受ADC转换后的数据

三、设计参考电路

AD7949在设计时单个通道一般采用运放和其相连,配置好参考电压,使用电容去耦。

而外部驱动则使用SPI接口

  • CNV :转换输入(连接MCU的片选引脚),在上升沿CNV启动转换
  • DIN:数据输入,此输入用于写入14位配置寄存器
  • SCK:串行时钟输入,此输入用于为MSB优先方式在SDO上输出数据,以及在DIN上输入数据来提供时钟
  • SDO:串行数据输出。转换结果将通过此引脚引出,与SCK进行同步,单极性模式下,转换结果为二进制

image.png

四、内部寄存器

AD7949的内部寄存器为14位寄存器,CFG[13:0],可以在转换期间、采集期间或转换全程写入寄存器

而寄存器更新发生在转换tconv(最大值)结束时

注意了,这个也是一个需要特别注意的点,上电时CFG寄存器没有定义,需要两次伪转换以便更新寄存器

另外也可以使用工厂预加载CFG寄存器,应使DIN处于高电平并且保持两次转换的时间,即重置CFG寄存器,CFG[13:0] = 0x3FFF;

下图为数据手册对CFG寄存器的详细介绍,介绍的非常详细
image.png

AD7949的配置一般为

  • CFG[13] CFG CFG寄存器是否更新。覆盖寄存器的内容
  • CFG[12:10] INCC 一般选择单极性参考地
  • CFG[9:7] INX 根据自己的采样通道配置
  • CFG[6] BW 是否选择低通滤波器,配置带宽
  • CFG[5:3] REF 基准电压,根据自己实际的参考基准电压配置
  • CFG[2:1] SEQ 通道序列器,是否允许IN0-IN7的方式扫描通道,如果自己只有几个通道就可不选,这是7949通道序列器采样
  • CFG[0] RB CFG寄存器是否回读,一般不选

五、读写时序

芯片内部的寄存器通过SPI接口写入,同时ADC转换后的结果将通过SDO接口输出
下图是关于SPI读写寄存器的详细介绍
image.png

无繁忙指示器和繁忙指示器?

可看下图,有无繁忙指示器,就是在SDO(ADC数据输出)时接了一个监测繁忙的引脚,这个引脚应该是接入单片机的中断引脚,监测数据是否就绪,是否可以读取

而我们一般使用的是无繁忙指示器的时序,下文也只针对无繁忙指示器的时序进行说明
image.png
image.png

时序

下图是无繁忙指示器的通用时序
通用时序又分为转换期间读取/写入(RDC)、转换后读取/写入(RAC)、转换全程读取/写入(RSC)
image.png
通过时序可以看到,无论何种读取/写入模式,上电之后的前三次转换结果都是没有定义的,因为最高有效CFG直到第二个EOC之后才出现,所以需要两次伪转换

这个怎么理解呢,看下图
image.png
写入CFG三次,第一次是n,第二次是n+1,第三次是n+2
再CFG是n+2的时候,这个时候的DATA才是DATA(n),也就是说在读取数据时,要写入三次CFG,前两次无效,第三次出现有效数据,这个时候就可以读取数据。

六、通道序列器

AD7949包括一个通道序列器,可用于重复扫描通道。确定序列的最后一个通道后,以逐个或成对方式扫描通道,包括或不包括温度传感器

简单来说是什么呢,这个模式可以重复扫描通道

再看这种模式的时序,上电时只读一次寄存器,空读一次数据,即可实现多通道一起读取,这种模式很适合于多通道一起读取,且写寄存器读数据花费时间较短,极大缩短ADC采样时间,很方便。
image.png

如何使用这种方式
在配置CFG寄存器时,把这个模式打开
image.png
然后在读取时,写一次寄存器内容,空读一次,后面多通道即可一起读取

七、部分demo

单通道采样

bsp_adc_reg_write(CFG_OVERWRITE | INCC_UNIPOLAR_TO_GND | IN0 | BW_FULL | REF_IN_4V096 | SEQ_DISABLE | RB_DISABLE);
bsp_adc_reg_write(CFG_OVERWRITE | INCC_UNIPOLAR_TO_GND | IN0 | BW_FULL | REF_IN_4V096 | SEQ_DISABLE | RB_DISABLE);
bsp_adc_reg_write(CFG_OVERWRITE | INCC_UNIPOLAR_TO_GND | IN0 | BW_FULL | REF_IN_4V096 | SEQ_DISABLE | RB_DISABLE);
adc = bsp_adc_data_read();

通道序列器采样

// 上电初始化 写一次寄存器  空读一次
bsp_adc_reg_write(CFG_OVERWRITE | INCC_UNIPOLAR_TO_GND | IN2 | BW_FULL | REF_IN_4V096 | SEQ_SCAN | RB_DISABLE);
bsp_adc_data_read(); 

//后面就顺序读取
adc1 = bsp_adc_data_read();

adc2 = bsp_adc_data_read();

八、参考

ADI官网介绍的非常清楚,数据手册和参考资料都可以从其上下载

AD7949 数据手册和产品信息 | 亚德诺(ADI)半导体

九、后期计划更新

  • AD7606 16bit 200k
    • SPI 接口读取ADC转换后的数据
    • 并口方式读取ADC转换后的数据
  • ADS1118 16bit
    • SPI接口读取ADC转换后的数据

总结

我在项目初期,也是疯狂网上查资料,看有无前人或大佬对这款芯片做一个介绍或者是参考代码等,可是没有。后来没办法呀,只能自己研究数据手册,一个一个字的看,看了好几遍才明白这款芯片的工作原理和工作模式等。

还是要自己多对数据手册研究研究,其实也不是想的那么难,在看数据手册的同时,最主要的还是要关注

  • 芯片内部引脚
  • 芯片内部寄存器
  • 芯片工作模式
  • 芯片外部接口
  • 芯片读写时序
  • 一些基本的知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023 年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷 B部分解析

2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析 【赛程名称】第一场:模块一 私有云、模块二 容器云【任务 1】私有云服务搭建[5 分]【题目 1】1.1.1 基础环境配置[0.2 分]【题目 2】1.1.2 Yum 源配置[0.2 分]【题目 3】1.1.3 配置无秘钥 ssh[0.2 分]【题…

javacv和opencv对图文视频编辑-裸眼3D图片制作

通过斗鸡眼,将左右两张相似的图片叠加到一起看,就会有3D效果。 3D图片,3D眼镜,3D视频等原理类似,都是通过两眼视觉差引起脑补产生3D效果。 图片: 图片来源: 一些我拍摄的真*裸眼3D照片 - 哔哩…

[Docker] 基本名词

镜像(iamge): Docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务, 容器(container): Docker利用容器技术,独立运行一个或则多个应用,通过镜像来创建的。 启动,停止&a…

LeetCode-1672/1572/54/73

1.最富有客户的资产总量(1672) 题目描述: 给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​​​​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。 客户的 资产总…

鸿蒙Harmony-线性布局(Row/Column)详解

人生的下半场,做个简单的人,少与人纠缠,多看大自然,在路上见世界,在途中寻自己。往后余生唯愿开心健康,至于其他,随缘就好! 目录 一,定义 二,基本概念 三&am…

Linux实操学习

Linux常用操作 一、帮助命令1. man1.1 基本语法1.2 快捷键1.3 注意事项 2. help2.1 基本语法2.2 注意事项 3. 常用快捷键 二、文件目录类1. 常规操作1.1 pwd1.2 cd1.3 ls 2. 文件夹操作2.1 mkdir2.2 rmdir 3. 文件操作3.1 touch3.2 cp3.3 rm3.4 mv 4. 文件查看4.1 cat4.2 more4…

浏览器进程模型和JS的事件循环

一、浏览器的进程模型 1、什么是进程? 程序运行所需要的专属内存空间 2、什么是线程? ​​​​​运行​代码的称为线程(同一个进程中的线程共享进程的资源) ⼀个进程⾄少有⼀个线程,所以在进程开启后会⾃动创建⼀个线…

软件测试|Pydantic BaseModel使用详解

简介 当我们在Python中编写应用程序时,通常需要处理和验证数据。Pydantic 是一个流行的库,它可以帮助我们定义数据模型并自动进行数据验证。在Pydantic中,BaseModel是一个核心概念,它用于定义数据模型和验证输入数据。在这篇文章…

Uibot (RPA设计软件)网页表单填写————课前材料四

微信群发助手机器人的小项目友友们可以参考小北的课前材料二博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~) 紧接着小北的前两篇博客,友友们我们即将开展新课的学习~RPA 培训前期准备指南——安装Uibot(RPA设计软件&#x…

第 5 课 编写简单的发布器 Publisher

文章目录 第 5 课 编写简单的发布器 Publisher 第 5 课 编写简单的发布器 Publisher 本节以创建一个velocity_publisher.py的(发布者)节点为例进行讲解。 输入指令“roscd beginner_hiwonder”,回车。进入beginner_hiwonder软件包。 roscd…

电脑重置网络后连不上网了怎么办

一般电脑重置网络后都会自动重新下载好网络配置,但是不免会出现一些意外,接下来就我遇到的重置后无法联网的解决方案 做一个分享: 1、按下“winR”打开运行输入 services.msc 。 2、找到 WLAN AutoConfig 和 Wired AutoConfig 服务&#xff…

蓝桥杯AcWing学习笔记 8-2数论的学习(下)

蓝桥杯 我的AcWing 题目及图片来自蓝桥杯C AB组辅导课 数论(下) 蓝桥杯省赛中考的数论不是很多,这里讲几个蓝桥杯常考的知识点。 约数个数定理 我们如何去求一个数的约数个数呢? N N N分解质因数的结果: N P 1 α…

【嘿,“怪”回来了】半年未见,好久不见。新年伊始,共赴新约。

您的阅读概要: 故事的开头总是极尽温柔,故事会一直温柔……半年未见,好久不见新年伊始,共赴新约忙碌的敲代码也不要忘了浪漫呀 故事的开头总是极尽温柔,故事会一直温柔…… ✨【自我介绍】:你好&#xff0c…

【ArcGIS Pro微课1000例】0056:度分秒与十进制度互相转换(度分秒→度、度→度分秒)

ArcGIS软件可以很方便的直接实现度分秒转度、度转度分秒(度分秒→度、度→度分秒)。 文章目录 一、转换预览二、工具介绍三、案例解析一、转换预览 借助ArcGIS快速实现度分秒与度及其他格式的坐标转换,例如:度分秒→度、度→度分秒。 1. 度→度分秒 2. 度分秒→度 转换后…

Lagrange对偶法

这里写自定义目录标题 5.1.1 The Lagrangian5.1.2 The Lagrange dual function5.2 The Lagrange dual problem5.2.3 Strong duality and Slater’s constraint qualification5.2.3 Strong duality and Slater’s constraint qualification5.5.3 KKT optimality conditions Lagr…

k8s node节点加入集群,token过期

1、master01节点执行 kubeadm token create --print-join-command 2、执行命令 kubeadm join 192.168.0.236:16443 --token qucd8q.hsfq4a1afluzaky3 --discovery-token-ca-cert-hash sha256:92175a356db070deb2ddd3823e288e3005a4baeec9b68580dcc11ce4d3767195 3、查看node02…

VMware安装CentOS7虚拟机

VMware 安装 获取 VMware 安装包 下载地址:链接:https://pan.baidu.com/s/1ELR5NZa7rO6YVplZ1IUigw?pwdplz3 提取码:plz3 包括:当然,也可以自己去别的地方下载,WMware 版本都差不多,现在用的比…

大量的视频如何批量随机分割的方法:批量剪辑不求人

在处理大量视频文件时,经常要进行随机分割,满足不同的需求。制作短视频、片段集锦等,批量随机分割视频都是一个高效的方法。下面来看云炫AI智剪如何操作的吧。 分割后的视频缩略图展示,被分割的视频自动分类保存在对应的文件夹中。…

【SAP ABAP】数据赋值

1. 赋值 语法格式 f2 f1. 表示将变量f1的值赋值给变量f2 输出结果如下: 扩展补充(带偏移量的赋值) 输出结果如下: 将lv_a从偏移2位开始的位置,取长度为3的内容345赋值给 lv_b,赋值覆盖lv_b从偏移4位开始的位置且长度为3的内容…

【如何在 GitHub上面找项目】【转载】

很多的小伙伴,经常会有这样的困惑,我看了很多技术的学习文档、书籍、甚至视频,我想动手实践,于是我打开了GitHub,想找个开源项目,进行学习,获取项目实战经验。这个时候很多小伙伴就会面临这样的…