已回答假定已回答

AD2S1210 Fault读取问题,角度更新延时

avery 在 2017-9-18 詢問的問題
最後回覆由nandin於2017-10-11提供

请教5个问题:

 

1.  数据更新到SPI寄存器的时间,是否是ns级别?(时钟是8M)如果Sample保持低电平或高电平,是不是不会更新数据到SPI寄存器中?

  2  使用12位情况下,角度阶跃改变10°/179° 时,芯片跟踪角度的延时是多少?分别是2.2ms/4.75ms吗?这是不是从信号输入到旋变到角度输出的延时?

 

3. 配置模式下,写入寄存器后,第一次读取到的数据tempBuf1是0x7E,紧接着再读取后tempBuf2就不是0x7E了,试了其它寄存器也一样,只能读取一次,第二次就返回默认值了?

   ad2s1210SPIConfigWrite(AD2S1210_DOSRSTMITHRES, 0x7E);

   ad2s1210SPIConfigRead(AD2S1210_DOSRSTMITHRES, &tempBuf1); /*read register  */

   ad2s1210SPIConfigRead(AD2S1210_DOSRSTMITHRES, &tempBuf2); /*read register  */

 

4. datasheet30页串口时序图,*注是什么意思?,如下图中读取position后是不是要设为Velocity(A0=0,A1=1)模式才读取到速度信息,中间需不需有时间间隔?  t34的时间间隔是不是必须要的?

5. 请问如下代码有没有时序上的问题,不知道为啥我读取到的fault总是和Velocity一个值?

void ENC_QSPI_ISR(void)

{

   EncPosVolBuf[EncPosVolBufIndex] = getReg(QSPI0_SPDRR);

   EncPosVolBufIndex++;

   if (EncPosVolBufIndex > 4)

   {

      EncPosVolBufIndex = 0;

      AD2S1210_POSITION_MODE;

      QSPI_SSPIN_PULL_HIGH;

 

      f16PositionEl = ((Frac16)((((unsigned int)EncPosVolBuf[0])<<8)|(unsigned int)(EncPosVolBuf[1]))) + f16PosAdd ;

      f16Speed = (Frac16)((((unsigned int)EncPosVolBuf[2])<<8)|(unsigned int)EncPosVolBuf[3]);

      u16Fault = EncPosVolBuf[4];

      return ;

   }

   else if (EncPosVolBufIndex > 1)

   {

      AD2S1210_VELOCITY_MODE;     

      QSPI_SSPIN_PULL_HIGH; 

      QSPI_SSPIN_PULL_LOW;    

   }

   setReg(QSPI0_SPDTR, AD2S1210_POS_VEL);

}

 

多谢!

結果