[声效]
在本视频中,在培训系列的“使用独立
ADC的单相电表的设计软件”部分中,
我们讨论了初始化
ADS131M04,从器件
获取样品以及验证完整性的过程,
通过计算CRC校验获得的样本。
在左侧,我们看到用于
初始化ADS131M04的过程。
在MSP432微控制器复位后
首次设置ADS131M04时,
以及每次执行校准时,
都会执行此过程。
在设置ADS131M04器件之前,
ADS131M04的调制时钟被禁用,
以防止该器件在尝试建立时产生新的采样。
通过保存MSP432微控制器的SMCLK
输出来禁用调制时钟,
该微控制器被馈送到ADS131M04的CLKIN引脚。
禁用SMCLK输出只需
在校准后完成,
而不是在MSP430微控制器
复位事件之后,因为SMSPK时钟
输出在MSP432微控制器复位后立即自动输出。
禁止SMCLK输出后,
MSP432微控制器的B0 SPI模块配置
为与ADS131M04器件通信。
B0 SPI模块专门配置为使用
三线模式的屏蔽器件,其中芯片选择
信号在测试软件中
手动置为高电平和低电平,
而不是使用SPI模块的芯片选择功能。
基于8.192兆赫SMCLK
时钟驱动,SPI速度为8.192
兆赫。
SPI建立后,所有中断都被禁用,
并且使用SPI从MSP432微控制器向ADS131M04
发送复位命令。
然后重新使能中断,
MSP432微控制器向ADS131M04发送命令以配置其寄存器。
此时,请注意MSP432微控制器
尚未输出调制时钟,
这意味着尚未开始采样。
通过SPI向ADS131M04发送命令,
可以配置ADS131M04寄存器。
具体而言,为CRC选择16位
CCITT CRC选项。
字大小设置为24位。
当新ADC采样不可用时,DRDY设置为高电平;
当ADC采样准备就绪时,DRDY设置为低电平。
此外,CT和电压通道的
PGA增益设置为1,分流通道的
PGA增益设置为32。
此外,如果器件进入待机模式
并在SYNC / RESET引脚上提供脉冲,
则使能电流检测模式。
对于此设计,不使用相位和增益校准寄存器,
因为这是在软件中完成的。
但是,ADS具有进行增益校准
和相位校准的能力。
最后,该设备被配置为512的OSR。
所有频道均已启用。
并选择高分辨率调制功率模式。
正确初始化ADS131M04寄存器后,
MSP432微控制器配置为
在DRDY引脚发生下降沿时产生
端口中断,这表明ADS131M04
具有可用的新电压电流样本。
接下来,MSP432微控制器
将SMCLK时钟输出到ADS131M04,从而开始电压
和电流采样。
顶部的图片显示了采样电压
和电流时发生不同事件的时间。
在顶部的图片中,绿色项目是由
硬件设置自动
完成的项目。
为了完成图中所示的过程,
每个OSR有效的新样本就准备就绪,
或者对于这个设计,调制时钟周期为512。
一旦新样品准备就绪,ADS131M04
将DRDY引脚置为低电平。
ADS131M04上的DRDY引脚引起GPIO端口中断,
从而触发MSP432上的端口ISR。
在端口ISR内,ADS131M04的片选线
被置为低电平,以便与器件通信。
然后将DMA设置为自动
发送对ADS131M04的最新采样,
第n个减1采样的请求,并从ADS131M04
接收数据包响应。
DMA模块自动完成对电流
和电压采样的请求和接收。
与从每个样品的M04接收
最新电压电流样本并行地
对先前样本执行处理,
所述先前样本是从ADS131M04
获得的第n减去2个样本。
ADS131M04目前还在对
下一个电压电流样本进行采样,
这是第n个样本。
每个样本处理用于
更新用于计算
度量参数的
中间点积量。
只要DMA从M04获得了整个第n个减1的数据包,
就会自动调用DMA ISR。
在DMA ISR中,如果CRC校验通过,
则解析第n个减1分组,
以便下次调用样本DSP时
可以将其用于电压和电流样本。
对每个电压和电流样本遵循整个
过程。
下图显示了分组数据由MSP432
微控制器的DMA和来自
ADS131M04的响应数据包传输,
该数据由DMA接收和汇编。
发送和接收包
包含六个字,每个字长3个字节。
请求ADS131M04器件的ADC数据时,
必须发送到ADS131M04的
第一个字是命令字。
由于测试软件不需要在典型ADC采样读数期间更改M04的设置或读取
任何寄存器,
并且将空命令
发送到M04,
这允许您从M04获取ADC采样
而不更改状态设备。
null命令的实际大小是16位。
但是,由于使用了24位,
因此必须在数据包末尾使用额外值
0x00填充16位命令。
因此,null命令将发送值0x000000。
当MSP432微控制器移出命令字时,
MSP432同时将响应字
移入前一个数据包的
命令字。
空命令的响应字
是状态寄存器的内容。
设计中未使用状态
寄存器的内容。
因此,忽略从ADS131M04收到的第一个字。
在写入命令字之后,
需要为要读取的每个字节
形成伪写入。
虚拟字节写操作是启用
SPI时钟所必需的,这是从ADS131M04器件
读取字节所必需的。
对于每个虚拟字节写入,将值0x00
写入SPI发送寄存器。
写入命令字节后立即写入3,
然后写入允许MSP432微控制器
从M04的通道0接收3字节ADC值。
写下接下来的9个虚拟字节
分别获得通道1,通道2和通道3的ADC数据。
在读取通道三样本后,
写下三个虚拟字节得到CRC字。
CRC字是24位。
但请注意,实际CRC仅
为16位,它们位于
24位字的最高有效位中。
结果,在解析CRC字时,
不需要最后一个字节。
但请注意,为了正确的ADS131M04操作,
仍必须发送此0填充字节的虚拟字节。
ADS131M04发送的数据包中的
最后一个字是CRC字。
CRC可用于验证MSP432是否正确
接收了ADS131M04发送的
数据。
ADS131M04支持两种类型的
CRC计算。
对于此设计,使用CRC15-CCITT CRC
选项是因为我们可以使用
MSP432的CRC模块加速这些计算,
因为MSP432的CRC模块专门使用CRC类型。
对于该CRC类型,
使用此处所示的多项式,
基于ADS131M04分组的多项式除法的
余数来获得CRC。
只要DMA从ADS131M04接收到
整个数据包,就会自动调用DMA ISR。
在ISR内,CRC是根据五个命令
和ADC字计算的;总共15个字节。
该CRC计算使用MSP432
微控制器的CRC模块。
由于CRC模块使用偶数个字节,
但总共有15个字节可用,
因此CRC模块用于前14个字节。
最终CRC是根据CRC模块结果
和第15个字节计算的软件。
请注意,仅在最后一个字节上
进行软件CRC计算是必要的,因为在本设计中
字长被选择为3个字节。
如果字大小被选择为2字节或4字节,
则不需要软件CRC计算,
因为将存在偶数个字节。
底部的代码片段用于
通过使用MSP432 CRC模块和软件计算15字节
以上的CRC。
在代码段中,您可以看到MSP432上的CRC模块
首先被初始化。
然后,M04数据包一次送入MSP432的CRC
模块2个字节,直到输入前14个字节为止。
然后将来自M04分组的第15个字节
和来自前14个字节的CRC结果馈送到软件算法,
该算法从MSP432 CRC码示例获得
以计算最终CRC。
一旦通过分组计算了CRC,
就将其与从M04发送的分组中获得的
CRC进行比较。
从M04分组的字节16和17解析
发送的CRC。
如果计算的CRC和解析的CRC相等,
则CRC校验通过,
并且解析ADC数据以获得第n个减1
电压和电流样本的值。
解析后的电压和电流样本
放入临时缓冲区,以便下次
调用解析样本DSP函数和下一个
中断时使用它们。
在DMA中断结束之前,芯片选择线
再次拉高,这样我们可以在下次