MAX22530系列器件为4通道隔离式ADC。4-模拟输入持续数字化,并支持使用内部数字比较器的通道输入阈值检测。
介绍
MAX22530系列器件(MAX22530/MAX22531/MAX22532)为电隔离、四通道、多路复用12位模数转换器(ADC)。现场侧ADC通过隔离式DC-DC转换器在内部供电,因此除了ADC输入的模拟输入连接外,不需要额外的硬件开销。
该器件连续数字化现场侧的输入,并以每通道20ksps (典型值)的速度通过隔离栅传输数据。ADC数据的每个通道均可通过串行外设接口(SPI)获得。此外,该器件还提供现场侧诊断和滤波后的ADC数据平均读数。
MAX22530、MAX22531和MAX22532功能相似。MAX22530具有SPI,但没有数字比较器输出引脚。MAX22531具有用于ADC1和ADC2通道的数字比较器输出引脚,MAX22532具有用于所有四个ADC通道的数字比较器输出引脚选项。
本应用笔记给出了简单且经过验证的解决方案的示例源代码,用于对MAX22530进行编程和接口(图1)。示例代码以 ANSI-C 格式提供,易于移植到任何常见的微控制器。有关MAX22530/MAX22531/MAX22532引脚、工作模式和控制寄存器的详细信息,请参考MAX22530/MAX22531/MAX22532数据资料。
图1.MAX22530/MAX22531/MAX22532功能框图
图1所示为MAX22530系列的主要功能块,包括:
多路复用器不断从 AIN1 切换到 AIN4。
隔离式 DC-DC 转换器,为现场侧 ADC 和 1.8V 基准供电。
逐次逼近寄存器 (SAR) ADC,具有内部生成的 1.8V 基准电压源。
跨现场和逻辑端的内部隔离。
带有SPI端口的逻辑端接口,用于访问所有器件寄存器和硬件标志以进行诊断。
MAX22530 SPI
MAX22530 SPI命令的长度为24位(8位指令+16位数据),CRC禁用,如果使能CRC,则CRC8将增加8位。命令字节的 6 MSB 是寄存器地址位,后跟一个写入或读取位,以及一个突发位,用于执行突发读取操作。
禁用CRC的SPI命令结构如表1所示,启用CRC的SPI命令结构如表2所示。MAX22530的SPI模式为CPOL = 0 (CLK空闲= 0),CPHA = 0 (上升沿/第一沿对数据进行采样)。数据/命令需要首先以 MSB 为单位计时。
表 1.MAX22530 SPI命令结构,禁用CRC
8 位 | 16 位 | ||
---|---|---|---|
地址 | 控制 | 数据 | |
6 位 A[5:0], MSB 至 LSB |
W/R 读取 = 0,写入 = 1 |
突发位 0 = 正常操作 1 = 突发读取操作 |
数据 [15:0] MSB 到 LSB |
表 2.MAX22530 SPI命令结构,使能CRC
8 位 | 16 位 | 8 位 | ||
---|---|---|---|---|
地址 | 控制 | 数据 | 结直肠癌 | |
6 位 A[5:0], MSB 至 LSB |
W/R 读取 = 0,写入 = 1 |
突发位 0 = 正常操作 1 = 突发读取操作 |
数据 [15:0] MSB 到 LSB |
C [7:0] MSB 到 LSB |
SPI读写周期的完整细节以及寄存器表和指令可在MAX22530数据资料中找到。
MAX22530代码应用示例
MAX22530设计用于支持终端设备中的工业应用,如过程自动化和配电自动化,这些应用需要使用多通道隔离式ADC进行连续监测。典型应用威廉希尔官方网站 如图2所示。
图2.高压线路监控。
连接每个单独的输入(AIN1 到 AIN4)以监视现场侧的高压线,该线路使用电阻分压器衰减,以将模拟电压相对于现场接地保持在 1.8V 以内。除了从ADC读取模拟电压外,MAX22530还为每个输入提供内部数字比较器,用于执行二进制输入操作。MAX22530的现场侧ADC功能诊断和SPI通信系统自诊断简化了系统设计和维护。
源代码
本应用笔记提供C源代码示例,提供基本的驱动功能,用于访问MAX22530中的多个寄存器,以实现配置、数据读取、控制和诊断功能。MAX22530、MAX22531和MAX22532在功能上等效,三款器件的C代码接口示例相同。所有软件均使用MAX22530评估板进行实现和测试。仅使用本文档中的功能作为参考,并根据应用程序中的微控制器和硬件实现设计自己的固件/软件。
初始化
该例程在初始化时运行,以识别MAX22530并执行应用中的初始配置。以下函数通过读取产品 ID 寄存器来识别设备。成功识别后,内部数字比较器配置为给定设置和上限/下限阈值电平。
/***************************************************************************//** @brief Example code for first time initialization of the device. @return status – MAX2253x Status = 0; device not recognized/ unavailable MAX2253x Status = 1; if device recognized after Init() Function When successfully recognized, configure registers *******************************************************************************/ Void Initialize() { uint8_t answer = MAX22530_Init(); /* Initializes and checks if the device is present*/ printf("MAX2253x status = "); printf(answer); /* Answer: 1 when the device is initialized and the ID is read and recognized */ if (answer == 1) { printf("Device Recognized. Device Configuration ongoing"); // Configuring the Digital Comparators /* Digital Input Mode with Unfiltered ADC results, setting upper threshold to 50% of range * and lower threshold to 10% of range*/ MAX22530_write_register(COUTHI1,0x0800); MAX22530_write_register(COUTLO1,0x019A); /* Digital Status Mode with filtered ADC results, setting upper threshold to 70% of range * and lower threshold set to 40%*/ MAX22530_write_register(COUTHI2,0xcb32); MAX22530_write_register(COUTLO2,0x0667); /* Writing default upper threshold values for COUTHI3 and COUTHI4 * in Digital Status mode and using default lower threshold values*/ MAX22530_write_register(COUTHI3,0x8b32); MAX22530_write_register(COUTHI3,0x8b32); } }
以下“Test”函数演示了设备初始化后的设备读取寄存器。在此示例中,将打印寄存器读取数据。实际应用可能必须采取进一步措施,但这超出了本应用笔记的范围。
void test() { printf("COUTHI1: "); printf(MAX22530_read_register(COUTHI1)); printf("COUTHI2: "); printf(MAX22530_read_register(COUTHI2)); printf("COUTHI3: "); printf(MAX22530_read_register(COUTHI3)); printf("COUTHI4: "); printf(MAX22530_read_register(COUTHI4)); printf("COUTLO1: "); printf(MAX22530_read_register(COUTLO1)); printf("COUTLO2: "); printf(MAX22530_read_register(COUTLO2)); printf("COUTLO3: "); printf(MAX22530_read_register(COUTLO3)); printf("COUTLO4: "); printf(MAX22530_read_register(COUTLO4)); printf("ADC1: "); printf(MAX22530_read_register(ADC1)); printf("ADC1 Voltage: "); printf(Convert_to_Voltage(ADC1)); printf("COUTLO2 Voltage: "); printf(Convert_to_Voltage(COUTLO2)); MAX22530_Burst_read_register(ADC1); printf(Burst_reg1); printf(Burst_reg2); printf(Burst_reg3); printf(Burst_reg4); printf(Burst_INT_status); }
结论
本应用笔记介绍了如何对MAX22530进行编程,以读取/突发读取ADC通道、配置寄存器和监视诊断。该代码使用MAX22530评估板进行测试。通过利用本应用笔记中的C代码示例,工程师可以快速轻松地实现常用微控制器与MAX22530之间的接口。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !