一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

易于驱动Delta-Sigma adc提供强大的功能并减少设计工作量

来源:analog 发布时间:2024-07-23

摘要: Easy Drive delta-sigma adc功能丰富,但易于使用。易驱动功能简化或消除了输入的有源放大或滤波。甚至软件接口也比其他adc简单得多。

介绍

Easy Drive delta-sigma adc功能丰富,但易于使用。易驱动功能简化或消除了输入的有源放大或滤波。甚至软件界面也比其他ADC简单得多(参见第6页的侧栏)。总的来说,围绕ADC的许多传统复杂性,如外部组件和软件时序,都消失了,节省了大量的设计时间。

表1列出了18个可用的Easy Drive设备的功能,包括具有I(2)C或SPI接口的1,4或16通道版本。24位设备适用于非常高性能的应用程序,而16位设备更通用。可编程增益放大器(PGA)可用于16位器件的中间要求或需要容纳多个输入范围。

表1 完成Easy Drive delta-sigma系列
零件号#输入接口临时PGA
LTC24801SPI163mm × 3mm DFN
LTC24811我(2)C163mm × 3mm DFN
LTC24821SPI16


3mm × 3mm DFN
LTC24831我(2)C16


3mm × 3mm DFN
LTC24841SPI24
3mm × 3mm DFN
LTC24851我(2)C24
3mm × 3mm DFN
LTC24862/4SPI163mm × 4mm 14DFN
LTC24872/4我(2)C163mm × 4mm 14DFN
LTC24882/4SPI16


3mm × 4mm 14DFN
LTC24892/4我(2)C16


3mm × 4mm 14DFN
LTC24922/4SPI24
3mm × 4mm 14DFN
LTC24932/4我(2)C24
3mm × 4mm 14DFN
LTC24948/16SPI165mm × 7mm QFN
LTC24958/16我(2)C165mm × 7mm QFN
LTC24968/16SPI16


5mm × 7mm QFN
LTC24978/16我(2)C16


5mm × 7mm QFN
LTC24988/16SPI24
5mm × 7mm QFN
LTC24998/16我(2)C24
5mm × 7mm QFN

易驱动技术简化了高阻抗传感器的测量

Delta-Sigma adc具有高精度和高抗噪性,是直接测量多种类型传感器的理想选择。然而,输入采样电流可以压倒高源阻抗或低带宽,微功率信号调理电路。Easy Drive通过平衡输入电流解决了这个问题,从而简化或消除了对信号调理电路的需要。

得尔塔 - 西格马 ADC的一个常见应用是热敏电阻测量。图1显示了得益于Easy Drive技术的热敏电阻数字化的两个例子。第一个电路(应用于输入通道CH0和CH1)使用两个相等的参考电阻,使输入共模电压等于参考共模电压,并平衡差分输入源电阻。如果参考电阻R1和R4完全相等,则输入电流为零,不会产生误差。如果这些电阻具有1%的容差,则由于共模电压的移位,测量电阻的最大误差为1.6欧姆,远远小于参考电阻本身的1%误差。不需要放大器,使其成为微功率应用的理想解决方案。


图1所示 Easy Drive adc简化了高阻抗传感器的测量。

Easy Drive还使极低功耗、低带宽放大器能够驱动LTC2492的输入。如图1所示,CH2由LT1494驱动。LT1494具有出色的直流规格,适用于1.5 μ A供电电流的放大器,最大失调电压为150 μ V,开环增益为100,000。然而,它的2kHz带宽使得它不适合驱动传统的得尔塔 -sigma adc。添加一个1k欧姆, 0.1µF滤波器通过提供一个电荷库来提供LTC2492的瞬时电流来解决这个问题,而1k欧姆电阻器将电容负载与LT1494隔离开来。传统的得尔塔 - 西格马 adc的输入采样电流由于外部RC网络的不完全沉降而导致直流误差。Linear Technology的Easy Drive技术消除了差分输入电流。通过使用1k欧姆-0.1µF RC网络平衡负输入(CH3),可以消除共模输入电流引起的误差。

完成Easy Drive Delta-Sigma系列

Easy Drive adc在大量的应用中都很受欢迎。24位,16通道LTC2498集成温度传感器是高性能数据采集系统的理想选择。它可以直接数字化热电偶,不需要任何信号调理,并提供冷端补偿。它也可以直接测量低电平应变计输出。同时,它可以处理工业传感器电压,加上一个简单的电阻分压器,不需要有源电路。

16位,16通道设备适用于测量具有几个大电流电源的大型电路板上的电压和电流。如果COM引脚接地到所有电源的公共点,则可以进行多达16个接地参考测量。使用相应的输入(最多8个差分输入通道),只要分流共模电压小于或等于adc的电源电压,就可以实现电流分流的高侧感应。差分测量还允许远程感应电压,消除由于大接地电流造成的误差。

使用得尔塔 - 西格马 ADC进行电源测量的另一大优点是非常强的抑制噪声和开关瞬态。ADC的内部SINC4滤波器与ADC输入端的简单1极滤波器相结合,足以将开关电源噪声衰减到ADC底噪声以下。剩下的就是对电源电压或电流的直流值进行极其精确的测量。

单通道LTC2482是成本敏感型应用的理想选择,如便携式医疗设备和消费产品。不要被它相对较低的成本所迷惑,它本质上是一个完美的16位ADC,与24位部件共享相同的600nV输入噪声底。这意味着它也将是理想的4(1/2)位手持式或台式电压表与±1计数线性规格。

外部缓冲器/放大器的自动失调校准

除了Easy Drive输入电流消除外,16通道Easy Drive ADC允许在多路复用器输出和ADC输入之间插入外部放大器(见图2)。这在源阻抗不可能平衡或源阻抗非常高的应用中非常有用。一对外部缓冲器/放大器可以在所有17个输入之间共享。LTC2498在每个转换周期执行内部偏移校准,以消除ADC的偏移和漂移。这种校准是通过前端开关和数字处理的组合来执行的。由于外部放大器位于多路复用器和ADC之间,因此它位于该校正环路内。这导致自动去除外部放大器的偏移和偏移漂移。


图2 外部缓冲器提供高阻抗输入和放大器偏移自动取消。

LTC6078是实现该功能的优秀放大器。工作电压低至2.7V,电压噪声低至18(nV)/(√)赫兹). LTC2498的Easy Drive输入允许RC网络直接添加到LTC6078的输出。电容降低了ADC输入端的电流尖峰的幅度,电阻器将电容负载与运放输出隔离开来,从而实现稳定的运行。

软件界面

线性技术的易驱动adc的接口要求的简单性与其串行接口的简单性相匹配。无延迟架构消除了在多通道设备上切换通道后必须丢弃路由的烦恼。转换的开始由串行接口直接控制,因此可以在适当的时候切换外部信号调理或传感器激励。在每次转换中发生的隐式偏移和增益校准消除了复杂的内部寄存器设置或校准周期的需要。SPI和I(2)C接口部分的通信是一个简单的读/写操作,其中从一个转换中读取数据,作为下一个通道的配置被编程到ADC中。

图3显示了LTC2498的数据输入/输出操作。这是具有最多通道和功能的SPI接口ADC -其他SPI部件具有类似的接口。


图3 SPI接口,配置和数据定时输出

图4显示了LTC2499的数据输入/输出操作。同样,这是功能最丰富的I(2)C部分,其他I(2)C部分也有类似的接口。图5显示了将通道和配置写入输入寄存器的细节。


图4 I(2)C转换序列


图5 I(2)C配置和数据输出定时

为了帮助软件/固件设计人员入门,请参阅与LTC2448和LTC2449进行基本通信的C代码驱动程序的侧栏。这些函数可以很容易地移植到任何C编译器,也可以很容易地适应其他Easy Drive adc。

与LTC2448和LTC2449基本通信的示例代码驱动程序

//确保这个结构适用于
//下列函数的上下文。
struct fourbytes //定义四个连续字节的结构
{//允许字节访问32位整型或浮点数。
int8 te0;//
int8 te1;//某些编译器中的make32 函数会
int8 te2;//也可以,但是4字节和32位int的并集
int8 te3;//更易于移植,因为它是标准的C语言。
}

//一些I2C通信的定义
#define READ 0x01 //位或与地址的读或写
#define WRITE 0x00

/***************************************************************
read_LTC2498 函数的阻塞版本。当被调用时,它将等待LTC2498完成转换,然后读取数据。该函数返回的最长时间应该是LTC2498的最大转换时间。当您的程序具有这样的阻塞功能时,使用看门狗是一个好主意。

spi_readwrite 函数同时从SPI端口读取和写入一个8位字节。大多数支持具有硬件SPI端口的处理器的编译器都具有类似的功能。

作为起点,配置SPI端口用于下降时钟沿上的数据转换,在上升沿上有效。

参数:channel -用于下一次转换的程序通道
配置-下次转换的配置位

当转换完成时,从LTC2498返回:32位字
****************************************************************/
Int32 read_LTC2498(char channel, char config);
{
//创建一个4字节结构和32位结构的联合
/ /整数签署。
Union // adc_code。Bits32全32位
{// adc_code.by。Te0字节0
Signed int32 bits32;/ / adc_code.by。字节1
Struct 4bytes by;/ / adc_code.by。字节2
} adc_code;/ / adc_code.by。Te3字节

output_low (CS_);//低芯片选择,启用串口
(输入(SDO));//等待SDO转低。你也可以加上a
//在这里超时,以防发生不好的事情
adc_code.by。Te3 = spi_readwrite(channel);
adc_code.by。Te2 = spi_readwrite(config);
adc_code.by。1 = spi_readwrite(0);
adc_code.by。Te0 = spi_readwrite(0);
返回adc_code.bits32;
} // read_LTC2498 结束

/***************************************************************
read_LTC2498 函数的非阻塞版本。调用时,它将查看LTC2498是否完成了转换。如果是,则读取并返回数据。如果不是,则返回0。由于来自LTC2498的所有零都不是有效代码,因此调用程序可以忽略返回结果,如果为零。

参数:channel -用于下一次转换的程序通道
配置-下次转换的配置位

返回:如果转换完成,则从LTC2498返回32位字,否则为零。
****************************************************************/

Int32 read_LTC2498(char channel, char config);
{
//创建一个4字节结构和一个32位的并集
/ /整数签署。
Union // adc_code。Bits32全32位
{// adc_code.by。Te0字节0
Signed int32 bits32;/ / adc_code.by。字节1
Struct 4bytes by;/ / adc_code.by。字节2
} adc_code;/ / adc_code.by。Te3字节
output_low (CS_);//低芯片选择,启用串口
(输入(SDO));//等待SDO转低。你也可以在这里设置一个超时以防发生不好的事情
adc_code.by。Te3 = spi_readwrite(channel);
adc_code.by。Te2 = spi_readwrite(config);
adc_code.by。1 = spi_readwrite(0);
adc_code.by。Te0 = spi_readwrite(0);
返回adc_code.bits32;
} // read_LTC2498 结束

/***************************************************************
非阻塞read_LTC2499 函数。

i2c_xxxx 函数的作用如下:

Void i2c_start(Void):生成i2c启动或重复启动条件
Void i2c_stop(Void):生成i2c停止条件
Char i2c_read(boolean):在生成ack或nack时返回8位i2c数据
布尔型i2c_write :发送8位i2c数据,并从设备返回ack或nack

这些函数是非常特定于编译器的,可以使用硬件i2c端口或软件模拟i2c端口。本例使用软件仿真。

在移植到其他处理器时,一个很好的起点是编写自己的i2c函数。请注意,每个处理器都有自己的配置i2c端口的方式,不同的编译器可能有也可能没有i2c端口的内置功能。

参数:addr - LTC2499 I2C地址
通道-下一个转换程序的通道
配置-下次转换的配置位

返回:如果转换完成,则从LTC2499返回32位字,否则为零。
*****************************************************************/

signed int32 read_LTC2499(char addr, char channel, char config)
{
Union // adc_code。Bits32全32位
{// adc_code.by。Te0字节0
Signed int32 bits32;/ / adc_code.by。字节1
Struct 4bytes by;/ / adc_code.by。字节2
} adc_code;/ / adc_code.by。Te3字节

//启动LTC2481通信
i2c_start  ;
if(i2c_write(addr | WRITE))//如果没有确认,返回0
{
i2c_stop  ;
返回0;
}
i2c_write(渠道);
i2c_write(配置);
i2c_start  ;
i2c_write(addr | READ);
adc_code.by。Te3 = i2c_read ;
adc_code.by。Te2 = i2c_read ;
adc_code.by。Te1 = i2c_read ;
qadc_code.by。0 = i2c_read ;
i2c_stop  ;
返回adc_code.bits32;
} // read_LTC2499 结束

/***************************************************************
注意:您可以通过重复尝试写入LTC2499地址来创建此函数的非阻塞版本,如果没有确认以保持总线空闲,则发送停止条件。当LTC2499确认时,读取数据并返回。
****************************************************************/

试试这个把戏!

虽然Easy Drive串行接口很容易编程——只需读取样本N的数据,同时为样本N+1编程通道——但通过调试器查看微控制器的寄存器时,要弄清楚刚刚读取的是什么仍然很棘手。这里有一个硬件技巧,可以显著减少代码设计难题。图6显示了一个简单的电路,它对每个单端输入施加已知的电压。如图所示,CH0的电压为101mV, CH1的电压为202mV,以此类推,直到CH15,产生1.616V。图7显示了差分输入的等效电路。使用这种设置可以快速地找出与每个输入通道相关联的SDI单词。


图6 使用这种设置可以快速地找出与每个输入通道相关联的SDI单词。


图7 使用这个设置可以快速地找出哪个SDI字与每个差分输入通道相关联。

声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: