前言
精準(zhǔn)的轉(zhuǎn)子位置對于電機(jī)精確控制來說至關(guān)重要,利用旋轉(zhuǎn)變壓器獲取轉(zhuǎn)子位置角度是一種常見方案。因此在電控程序中只需要通過主控芯片(以DSP28335為例)與旋變解碼芯片(以AD2S1210為例)進(jìn)行通信(以SPI通信為例)。
問題描述
在實(shí)際操作中,通過SPI從旋變芯片讀取絕對位置時(shí),讀取到的位置有效位的最高位始終是1。
解決方案
在經(jīng)過大量實(shí)驗(yàn)后發(fā)現(xiàn),是對28335SPI的SpiaRegs.SPICCR.bit.CLKPOLARITY位設(shè)置錯(cuò)了。因?yàn)樵贏D2S1210的數(shù)據(jù)手冊中對于串行數(shù)據(jù)的傳輸是這樣說明的:
導(dǎo)致我誤以為主控芯片需要在時(shí)鐘上升沿將數(shù)據(jù)移入,然而實(shí)際情況是數(shù)據(jù)在時(shí)鐘上升沿從旋變芯片移出后需要保持半個(gè)時(shí)鐘周期,隨后主控芯片在下降沿再將數(shù)據(jù)移入。否則就可能會(huì)出現(xiàn)前述情況或者其他問題。文章來源:http://www.zghlxwxcb.cn/news/detail-644691.html
其他注意事項(xiàng)
時(shí)序
需要對照具體的旋變芯片數(shù)據(jù)傳輸時(shí)序圖進(jìn)行正確的配置,例如我使用的旋變芯片在普通模式下的時(shí)序圖是這樣的:
因此對應(yīng)代碼如下:文章來源地址http://www.zghlxwxcb.cn/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");
}
到了這里,關(guān)于DSP28335使用SPI從AD2S1210(旋變芯片)讀取位置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!