如何对MAX22530/MAX22531/MAX22532 4通道隔离式ADC进行编程

描述

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之间的接口。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分