前言
精准的转子位置对于电机精确控制来说至关重要,利用旋转变压器获取转子位置角度是一种常见方案。因此在电控程序中只需要通过主控芯片(以DSP28335为例)与旋变解码芯片(以AD2S1210为例)进行通信(以SPI通信为例)。
问题描述
在实际操作中,通过SPI从旋变芯片读取绝对位置时,读取到的位置有效位的最高位始终是1。
解决方案
在经过大量实验后发现,是对28335SPI的SpiaRegs.SPICCR.bit.CLKPOLARITY位设置错了。因为在AD2S1210的数据手册中对于串行数据的传输是这样说明的:
导致我误以为主控芯片需要在时钟上升沿将数据移入,然而实际情况是数据在时钟上升沿从旋变芯片移出后需要保持半个时钟周期,随后主控芯片在下降沿再将数据移入。否则就可能会出现前述情况或者其他问题。文章来源:https://www.toymoban.com/news/detail-644691.html
其他注意事项
时序
需要对照具体的旋变芯片数据传输时序图进行正确的配置,例如我使用的旋变芯片在普通模式下的时序图是这样的:
因此对应代码如下:文章来源地址https://www.toymoban.com/news/detail-644691.html
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");
}
到了这里,关于DSP28335使用SPI从AD2S1210(旋变芯片)读取位置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!