AD2S1210使用问题

请教ADI工程师,我按照官方给出的例程更改代码的,现在有以下几个问题

1 芯片默认输出激励频率为10KHZ,这个正确,但是我用配置模式配置为5K 即

WriteToAD2S1210(EXFREQUENCY, 0x14);

  测得频率为23KHz,如果配置为0x50 则为31Khz,这与Datasheet 上面计算不一致。

我只连接例程上用到的几个引脚>CS  ->SCLK  >SDI >A0 >A1 >WR  >SPL  ->RD ->RESET

频率更改是必须断电后重启,才可以更改。

2 串口读不出数据,全部为零,激励信号输出正常,放大后连接旋转变压器激励信号波形失真,但是幅值和频率不变,所以我觉得没问题。sin +- cos+-包络波形有,即在转动电机时可以看到。

下面是我的主要代码

   InitSci();

/*  while(1)

   {

    scia_xmit(4);

    scia_xmit(1);

   }*/

  AD2S1210Initiate();

  AD2S1210SelectMode(CONFIG); //Configuration Mode

  WriteToAD2S1210(CONTROL, 0x7F);   //write control register address

  ReadFromAD2S1210(CONFIG, CONTROL, buf); //read control register

  scia_xmit(buf[0]);

  WriteToAD2S1210(EXFREQUENCY, 0x14);   //write frequency register address for 5KHz Excitation

  ReadFromAD2S1210(CONFIG, EXFREQUENCY, buf); //read frequency register

  scia_xmit(buf[0]);

  ReadFromAD2S1210(CONFIG, POSITIONMSB, buf); //read position register MSB

  scia_xmit(buf[0]);

  ReadFromAD2S1210(CONFIG, POSITIONLSB, buf); //read position register LSB

  scia_xmit(buf[0]);

  DELAY_US(5);

     WriteToAD2S1210(LOSTHRES, 0x01);   //write LOS register address >0.5V

  ReadFromAD2S1210(CONFIG, LOSTHRES, buf); //read control register

  scia_xmit(buf[0]);

  WriteToAD2S1210(DOSMISTHRES, 0x0D); //write DOS register address >0.5V

// AD2S1210SoftReset();

  ReadFromAD2S1210(CONFIG, FAULT, buf); //read/clear fault register

  scia_xmit(buf[0]);

  AD2S1210SelectMode(POSITION); //Normal Mode position output

  ReadFromAD2S1210(POSITION, POS_VEL, buf); //read data register

  scia_xmit(buf[2]);

  scia_xmit(buf[1]);

  scia_xmit(buf[0]);

  AD2S1210SelectMode(VELOCITY); //Normal Mode velocity output

  ReadFromAD2S1210(VELOCITY, POS_VEL, buf); //read data register

  scia_xmit(buf[2]);

  scia_xmit(buf[1]);

  scia_xmit(buf[0]);

  while(1)

     {

  AD2S1210SelectMode(POSITION); //Normal Mode position output

  ReadFromAD2S1210(POSITION, POS_VEL, buf); //read data register

  scia_xmit(buf[2]);

  scia_xmit(buf[1]);

  scia_xmit(buf[0]);

串口接收到的数据只有在while里面有,之前的接受不到。

  • 你好,

    1、请检查下你所使用的系统时钟是8.192M吗?根据你的测试来看,明显的寄存器数据读写有问题。下面这一段代码我看不出来是否进入配置模式进行激励信号的配置,你能用示波器观察下寄存器写操作时序是否和数据手册中Fig33/34一致吗?CLK下降沿进行数据的写入,另外在进行复位时,参照table27复位时间要求。

    频率的修改为什么需要重新断电呢?能测量下AD2S1210供电电压和电流情况吗?

    AD2S1210Initiate();

      AD2S1210SelectMode(CONFIG); //Configuration Mode

      WriteToAD2S1210(CONTROL, 0x7F);   //write control register address

      ReadFromAD2S1210(CONFIG, CONTROL, buf); //read control register

      scia_xmit(buf[0]);

      WriteToAD2S1210(EXFREQUENCY, 0x14);   //write frequency register address for 5KHz Excitation

    2、先保证数据的读写时序没有问题,再看数据是否正确,另外要想获得较好的性能,激励信号的质量比较重要,不能严重失真。

  • 您好,

    1.经过检测是我SPI配置I/O口出问题了,激励频率对了。关于AD2S1210那些函数,是官方给的例程配置。所以我不怀疑数据读写时序。AD2S1210供电电源正常。

    2.读出位置和速度数据值不变(改变电机转轴),配置寄存器的值正确.SPI读数据一部分正确。我用示波器读出的配置寄存器的数据是正确的,但是处理显示数据部分错误,这应该是我读的问题。示波器测SPI在位置和速度状态下的值感觉不对,只有0x71和0xf1两种数据。激励信号频率和幅度正确,至于波形非完美正弦波,但这不重要,cos sin输出包络正常的。

  • 您好,

    我的配置寄存器的值都读对,但是在电机静止状态时读出的位置和速度信号变化很大,模拟旋转变压器输出的AB都一直有波形变化。请问这是不是sin cos 输入信号影响的?输入包络正常,即静止时幅值一定,旋转时幅值正余弦变化。

  • 你好,旋转变压器的输入激励信号质量直接决定了输出的正余弦信号质量,输出的正余弦信号质量决定了计算粗来的角度速度值,不能仅仅只看包络线,你能把正余弦输入输出的波形用示波器观察下吗?在电机静止情况下,速度和角度不会出现剧烈跳动的,你能把你的测试数据说下吗?实际使用过程中AD2s1210的激励输出信号质量还比较理想,信噪比在60dB总有,不会有严重失真之类的,你能检查下你的电路设计吗?可以参考手册提供驱动电路或者CN0276进行驱动和滤波器的设计。

  • 您好,我这边经过改善激励信号及输入的sin cos 信号,输入的差分sin cos 信号Vpp值最大在3.6V,最小有0.5V,但是sin cos 单端对地信号在旋转电机时幅值最大时对地消波如下图

    手册中说sin cos 信号可以直接接入AD2S1210的,差分信号正常,如下图

    最后一张为差分最小幅值。

    电机静止时读出位置速度数据不准,特别是位置数据变动很大,故障寄存器11111001,偶尔也在变动,很多错误。

    请帮忙解决,谢谢!