蓝桥杯ADC081C201使用方法+数据手册解读之IIC通信协议和原理图-蓝桥杯ADC081

1.ADC081C021简介

ADC081C021 是TI公司生产的一款低功耗、单片、8 位模数转换器 (ADC),采用 2.7 至 5.5V 电源供电。该转换器基于逐次逼近寄存器架构,具有内部采样保持电路,可处理高达 11MHz 的输入频率。ADC081C021 采用单电源供电,该电源也用作参考。该器件具有一个 I2C 兼容串行接口,可在所有三种速度模式下工作,分别是Supports Standard (100kHz), Fast (400kHz), and High Speed (3.4MHz) Modes。


2. 原理图分析

蓝桥杯FPGA竞赛开发板上使用的ADC 芯片为ADC081C021,在开发板4T/CT137X竞赛平台上的电路原理图如下:

原理图截取自4T官网

简单易懂,

VA 和GND是供电引脚,该电源也用作参考电压;

Vin就是模拟量输入引脚了,接了一个电位器实现对3.3V的分压,所以模拟量的输入范围是0V-3.3V;

ALERT是警报输出引脚,比如当输入的模拟量超出设定的阈值时,就会发出警报。

SCL和SDA就是本文要讲解的重点了,这是IIC通信的两个引脚,挂载在IIC总线上,SDA负责传输数据,SCL传输时钟信号。

根据TI官方的数据手册(如下图),ALERT、SDA、SCL三个引脚都是开漏输出结构,所以不能主动输出高电平,只能把总线拉低。所以需要外接上拉电阻。这样就时为什么原理图上接了三个10K的电阻上拉到3V3.

另外需要注意的是,原理图上ALERT引脚并没有标记网络标签,说明这个信号没有传到FPGA或者其他处理器上,那么官方设计原理图时就舍弃了这个警报功能。所以接下来的讲解,将不再涉及ADC081C201的ALERT警报功能。简化了我们的工作量,点赞!


3.如何读取模数转换结果

电路原理图分析完,接下来看看通过IIC读取模数转换结果的操作流程。

硬件地址(从机地址)

4T开发板使用的是 ADC081C021的 SOT-6 封装版本,这个版本器件的硬件地址不可引脚配置,被设置为 1010_100;其他封装或其他系列的,可参见数据手册

读取转换结果的流程

ADC081C021具有 8 个内部数据寄存器和 1 个地址指针寄存器(Poniter Register),如下图

 其中圈起来的Conversion Result就是存储模数转换结果的数据寄存器,其他数据寄存器暂时可以无须关心。根据这个图,如果需要读取转换结果,需要先通过IIC接口将指针寄存器配置为指向转换结果寄存器,然后发起IIC总线的读操作,即可读取这个寄存器的内容,图中用带箭头红线指示出了这个流程。


4.相关寄存器的构成

根据上面分析的流程,需要先了解地址指针寄存器(Poniter Register)和转换结果数据寄存器(Conversion Result)的构成。

指针寄存器(Poniter Register)

指针寄存器的内容如下:

可以看到,只需要将指针寄存器的内容配置为00h就指向了转换结果寄存器。

需要指出的是,当ADC081C201上电复位后,所有寄存器都会恢复到默认初值。而指针寄存器的默认初值就是00H,所以如果上电后用户没有修改过指针寄存器,则默认指向转换结果寄存器,那么最简单省事的办法是可以直接读取转换结果。这点很关键,为我们节省了工作量,点赞!这时是工作在普通模式(下文具体介绍)下的,如果需要其他模式,可以先通过指针寄存器指向有关配置寄存器并进行配置,本文为简便起见,不再讨论,感兴趣者可自行阅读。

在这种普通模式下,读取当前转换结果后自动启动下一次转换。所以每次读取的是上一次的转换结果,如果介意这一点的话,可以连续读取两次结果。这点很关键!

转换结果寄存器(Conversion Result)

转换结果寄存器是只读的,不可写入。默认值是0000h, 转换结果寄存器的具体内容如下:

从上表可以看出,转换结果寄存器是双字节的寄存器,共16bit,其中的D11:D4是我们关心的转换结果,是以二进制形式存储的8位数据,其中的D11数据最高位(MSB),D4是数据最低位(LSB)。8位转换结果被拆成了两半儿存在两个字节里。


5.读取AD转换结果的IIC时序

万事具备,接下来分析具体的时序!

根据数据手册,读取两字节寄存器的时序如下:

至此,很清晰了。最简单方便的操作方法是,上电后,参照标准IIC协议的读写操作规定,直接发起I2C读操作,按照上图时序读取转换结果即可,还是很简单的。

因为8位转换结果被拆成了两半儿存在两个字节里,所以读出后两个字节后,还需要做一个拼接和转换操作,这也没啥难度。

先写这么多吧,有人需要的话,我再贴一个 verilog 代码。


6.其他

自动转换模式

正文结束,接下来提一下ADC081C201数据手册里提到的稍微高级一点的操作:自动转换模式(AUTOMATIC CONVERSION MODE),这个模式是通过配置地址为02h的Configuration Register来实现的,见下表:

当其中的Cycle Time不为0时,按照设定的周期启动自动转换,这样很方便精确控制。若有需要,可了解下,本文不再深入探讨。

读出速度限制

Conversion Time 表现如下,所以不要读取太块,否则会导致不能正确响应,或浪费处理器资源。

此外还要注意Throughput Rate最大为188.9 ksps (Max),是两个连续转换开始之间所需的最小时间,它是采样时间加上转换时间。
 

本文部分数据参考自:

ADC081C021 数据表、产品信息和支持 | 德州仪器 TI.com.cn

4T-FPGA 设计与开发竞赛实训平台

若本文有不当之处,请您斧正,谢谢!

感谢阅读,希望对您有帮助,,若有其他问题欢迎评论留言交流。

### ADC081C021 使用教程 ADC081C021 是一款低功耗、CMOS、8位模数转换器(ADC),具有串行接口,适用于多种应用场合[^1]。 #### 主要特性 - 供电电压范围宽:2.7V 至 5.5V - 转换时间短:小于2μs (典型值) - 接口简单:三线SPI兼容型串行接口 - 功耗极低:工作电流仅需350µA (最大) #### 应用领域 该器件广泛应用于便携式电池供电设备中的模拟信号数字化处理,如手持仪器仪表、传感器数据采集系统等场景中[^1]。 #### 初始化配置 为了初始化并读取来自 ADC 的数值,在设置通信参数之前需要先了解其寄存器结构: | 寄存器名称 | 地址 | 描述 | | --- | --- | --- | | 配置寄存器 | `0x0` | 设置输入通道及其他选项 | ```python import spidev spi = spidev.SpiDev() spi.open(0, 0) # 打开 SPI 设备 /dev/spidev0.0 def read_adc(channel): r = spi.xfer([1,(8+channel)<<4,0]) adc_out = ((r[1]&3) << 8) + r[2] return adc_out >> 2 ``` 上述 Python 代码展示了如何通过 SPI 总线与 ADC 进行交互来获取指定通道上的采样结果。这里假设已经完成了必要的硬件连接,并且操作系统支持 Linux 下的标准 SPI API[^1]。 #### 示例程序解析 这段简单的脚本实现了对单个 ADC 输入端子的选择以及相应的测量操作。具体来说: - 创建了一个名为 `read_adc()` 的函数用于执行实际的数据传输过程; - 函数接收一个整数类型的参数 channel 表示目标信道编号; - 利用了列表推导式的技巧构建发送给从机的命令序列; - 解析接收到的消息以提取有效负载部分即转换后的二进制表示形式; - 返回经过适当缩放之后最终得到的量化电平值作为返回值传递回调用者处[^1]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值