使用DSP28335通过SPI读取AD2S1210旋变芯片的位置信息

前言

精准的转子位置对于电机精确控制来说至关重要,利用旋转变压器获取转子位置角度是一种常见方案。因此在电控程序中只需要通过主控芯片(以DSP28335为例)与旋变解码芯片(以AD2S1210为例)进行通信(以SPI通信为例)。

问题描述

在实际操作中,通过SPI从旋变芯片读取绝对位置时,读取到的位置有效位的最高位始终是1。

解决方案

在经过大量实验后发现,是对28335SPI的SpiaRegs.SPICCR.bit.CLKPOLARITY位设置错了。因为在AD2S1210的数据手册中对于串行数据的传输是这样说明的:
SDO输出
导致我误以为主控芯片需要在时钟上升沿将数据移入,然而实际情况是数据在时钟上升沿从旋变芯片移出后需要保持半个时钟周期,随后主控芯片在下降沿再将数据移入。否则就可能会出现前述情况或者其他问题。

其他注意事项

时序

需要对照具体的旋变芯片数据传输时序图进行正确的配置,例如我使用的旋变芯片在普通模式下的时序图是这样的:
时序图
因此对应代码如下:

void SPI_GetPos(void)
{
    SAMPLE_ENABLE;
    asm(" RPT #100 ||NOP");
    asm(" RPT #200 ||NOP");
    WR_ENABLE;
    asm(" RPT #50 ||NOP");
    SPI_Send(0x00);
    while(!SpiaRegs.SPISTS.bit.INT_FLAG){};
    SPI_RX = (SpiaRegs.SPIRXBUF>>4);
    asm(" RPT #50 ||NOP");
    WR_DISABLE;
    SAMPLE_DISABLE;
    asm(" RPT #50 ||NOP");
}
物联沃分享整理
物联沃-IOTWORD物联网 » 使用DSP28335通过SPI读取AD2S1210旋变芯片的位置信息

发表评论