ZHCU648B March 2019 – February 2021
图 2-10 显示了进行电压和电流采样时发生的不同事件,其中用橄榄绿色标出的项目在硬件设置(而不是测试软件)中完成。
图 2-10 电压和电流采样事件回顾图 2-10 中提到的过程,每个相位的新电流样本在每 OSR(此设计中为 512)个调制时钟周期准备就绪。假设 ADS131M04 器件最近一次就绪的相电流和电压样本对应于第 Nth - 1 个电流和电压样本,即 Iphx[N - 1] 和 Vphx[N - 1]。一旦新样本准备就绪,ADS131M04 就会将 DRDY 引脚置位为低电平。ADS131M04 上 DRDY 引脚的下降沿将使 MSP432 MCU 上的 GPIO 端口中断,从而触发 MSP432 MCU 上的端口 ISR。后台进程在端口 ISR 内运行。图 2-11 显示了后台进程,该进程主要处理测试软件中有严格时序要求的事件。
图 2-11 后台进程在后台进程中,先前获得的电压样本 (Vphx[N – 2]) 和先前获得的电流样本 (Iphx[N – 2]) 会存储起来,以便稍后供 per_sample_dsp 函数使用(该函数负责更新用于计算计量参数的中间点积数量)。在存储先前获得的电压和电流样本后,通过将片选信号置位为低电平来启用与 ADS131M04 的通信。然后,将 DMA 配置为针对 ADS131M04 器件最新电流和电压样本(Iphx[N – 1] 和 Vphx[N – 1])发送请求,并接收来自 ADS131M04 的数据包响应。电流样本的请求和接收由 DMA 模块自动完成,而不是由软件完成。
图 2-12 显示了由 MSP432 MCU 的 DMA 发送的数据包,以及同样由 DMA 接收和组装的来自 ADS131M04 的响应数据包。发送和接收数据包中包含六个字,其中每个字的长度为三个字节。
图 2-12 ADS131M04 ADC 采样请求数据包从 ADS131M04 器件请求 ADC 数据时,必须发送到 ADS131M04 的第一个字是命令字。测试软件不需要在典型的 ADC 样本读出期间更改 ADS131M04 的设置或读取任何寄存器,因此会向 ADS131M04 发送 NULL 命令,这使您能够无需更改器件状态即可从 ADS131M04 获取 ADC 样本。null 命令的实际大小是 16 位;但是,由于使用的是 24 位字,16 位命令必须在命令末尾填充一个额外的值 0x00。因此发送的 NULL 命令字的值为 0x000000。当 MSP432 MCU 移出命令字时,MSP432 同时将响应字移入前一个数据包的命令字。NULL 命令的响应字是 STATUS 寄存器的内容。此设计中不使用 STATUS 寄存器的内容,因此从 ADS131M04 接收到的第一个字将被忽略。
写入命令字后,需要对每个要读取的字节执行一次虚拟写入。若要启用 SPI 时钟,便需要写入虚拟字节,这是从 ADS131M04 器件读取一个字节所必需的。每次写入虚拟字节时,都会将值 0x00 写入 EUSCIB0 的 SPI 发送寄存器。通过在写入命令字节后立即写入三个虚拟字节,MSP432 MCU 可以从 ADS131M04 的通道 0 接收 3 字节的 ADC 值。写入后续 9 个虚拟字节将分别获取通道 1、通道 2 和通道 3 的 ADC 数据。最后,写入接下来的三个虚拟字节将得到 CRC 字。CRC 字为 24 位;但是,请注意实际的 CRC 只有 16 位,这些位对应于 24 位字的最高有效位。因此,在解析 CRC 字时,不需要最后一个字节(但请注意,为了使 ADS131M04 正确运行,仍必须发送虚拟写入的这个零填充字节)。
图 2-12 显示了每当 DMA 接收到整个 Iphx[N - 1] 数据包时,便会自动调用 DMA ISR。在 ISR 内,CRC 基于五个命令和 ADC 字计算(共计 15 字节)。此 CRC 计算使用 MSP432 MCU 的 CRC 模块。CRC 模块使用偶数个字节,但总共有 15 个字节可用,因此 CRC 模块用于前 14 个字节。最终 CRC 在软件中根据 CRC 模块结果和第 15 个字节计算。请注意,只需要对最后一个字节进行软件 CRC 计算,因为在本设计中字大小选择为三个字节。如果字大小改为选择两个字节或四个字节,则不需要进行软件 CRC 计算,这是因为有偶数个字节。图 2-13 展示了使用 MSP432 CRC 模块和软件用 15 个字节计算 CRC 的代码片段。
图 2-13 使用 MSP432 MCU 的 CRC 模块基于奇数个字节计算 CRC 的代码片段计算出数据包的 CRC 后,会将其与从 ADS131M04 发送的数据包中获得的 CRC 进行比较。发送的 CRC 根据 ADS131M04 数据包的字节 16 和 17 进行解析(字节 18 是 CRC 字的一部分,进行了补零,因此不用于解析)。如果计算出的 CRC 和解析的 CRC 相等,则 CRC 校验通过,并解析 ADC 数据以获取时间 N - 1 处的电压和电流样本值。解析的电压和电流样本被置于临时缓冲区中,以便在下一次中断调用 per_sample_dsp 函数时使用。在 DMA 中断结束之前,片选线被再次上拉回高电平,以便在下次来自 ADS131M04 的电流样本准备就绪之前正确复位 ADS131M04 通信。
在使用 DMA 从 ADS131M04 接收最新电流样本的同时,ADS131M04 对下一个电压样本 (Vphx[N]) 和电流样本 (Iphx[N]) 进行采样,并且测试软件还会对从 ADS131M04 获得的最后一个电压样本 (Vphx[N – 2]) 和电流样本 (Iphx[N – 2]) 执行逐样本处理。可使用这种逐样本处理方法来更新用于计算计量参数的中间点积。处理样本后,后台进程使用“per_sample_energy_pulse_processing”执行电能比例脉冲的计算和输出。一旦 per_sample_energy_pulse_processing 完成,测试软件便会从端口 ISR 退出。