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
若本文有不当之处,请您斧正,谢谢!
感谢阅读,希望对您有帮助,请点个赞吧,若有其他问题欢迎评论留言交流。