AD2S1210和DSP28335的模拟SPI读写问题

你好:

        我在使用AD2S1210和DSP28335通信的过程中,参考官方例程“ExampleCode_RDC_AD2S1210”,仅对 void SPIRead(unsigned char count, unsigned char *buf)中的SDO输出更改为:   iTemp = GpioDataRegs.GPBDAT.bit.GPIO55;    且CS引脚接到地一直保持低电平,程序其他部分参照官方例程未做更改。但是出现以下问题:

      问题一:在以上设置的前提下,现在无法正确读取任何值。因为SDO引脚一直为高电平,导致任何时候、任何方式读取的值全为1,请问这是什么原因呢?

      问题二:还有关于时序的问题,在官方例程中模拟SPI的时序是否要做出修改?我发现在上电复位时序中的t-Track为10至60ms,但是程序中明显没有满足毫秒级别的延时啊,这是为什么?

      问题三:保证励磁输出和正余弦输入信号正确,但LOT和DOS引脚都为低电平,该如何解决呢?

void AD2S1210Initiate()
{
//RESET->0 initially                                                          
CLR_RESET();
SET_SPL();
delay(1);
SET_RESET();
delay(2);
CLR_SPL();
delay(1);
SET_SPL();
}

    谢谢各位专家和大神了!

Parents
  • +1
    •  Analog Employees 
    on Aug 7, 2019 6:08 AM over 1 year ago

    先检查下AD2S1210是否工作正常,可以查看AB/N接口或者EXC激励输出,然后再检查时序是否正确,可以再普通模式下测试看看

    刚上电之后,做一次故障清除操作,LOS/DOS是锁存的

  • 专家你好,经检查后确认AD2S1210激励输出正确、正余弦输入正确、时序是按照官方例程来的。

    现在SDO引脚可以读出值,但仍出现的两个问题是:

    1.配置模式下读写不正确。向0x91设定激励频率寄存器中写0x14,硬件电路无法改变激励频率(说明写  不正确)。读取0x92控制寄存器及其他阈值设定寄存器,读取的值都不是默认值(说明读 不正确),向0x92控制寄存器写入0x7F,读取的是0x40。

    2.普通模式下位置读取不正确。通过手慢慢转动旋变,发现在0度和180度附近读取的值是正确的,但是在90度和270度附近读取的值不对。具体表现为:在59度到135度之间,位置数据没有变化,仍为上次读取的值。

    以下是各个波形及程序:

    一、波形

    1.EXC正负激励峰峰值:

    2.正余弦输入峰峰值 (上:正弦,下:余弦)

    90度位置处的正余弦输入峰峰值(上图)

    0度位置处的正余弦输入峰峰值(上图)

    3.四路正余弦对地输入(从上到下依次为:SIN  SINLO  COS  COSLO)

    90度位置处的波形,COS和COSLO为2.12V、2.18V(上图)

    0度位置处的波形,SIN和SINLO为2.08V、2.04V(上图)

    二、程序

    main()//主函数:(先上电复位,再清除故障寄存器,最后进行读写操作)
    {
    AD2S1210Initiate();
    
    AD2S1210SelectMode(CONFIG);
    ReadFromAD2S1210(CONFIG,FAULT,buf);
    RDC_FLULT[0]=buf[0];
    DELAY_US(5);
    
    WriteToAD2S1210(CONTROL,0x7F);//写入控制寄存器的值0111 1111
    ReadFromAD2S1210(CONFIG,CONTROL,buf);
    buffer[7]=buf[0];
    DELAY_US(5);
    
    while(1)
    	{
    		AD2S1210SelectMode(POSITION);
    		ReadFromAD2S1210(POSITION,POS_VEL,buf);
    		buffer[2]=buf[2];//高8位数据
    		buffer[1]=buf[1];//低8位数据
    		RDC_FLULT[1]=buf[0];//故障位
    		buffer[8]=(buffer[2]<<8) | (buffer[1]);//buffer[8]:AD2S1210位置读取值
    		RDC_POSITION=buffer[8]*0.329589898/60;//角度(度)  LSB=0.3296角分
    	}
    }
    
    void AD2S1210Initiate()//上电复位子函数
    {
    	CLR_RESET();
    	SET_SAMPLE();
    	DELAY_US(15);//15微秒
    	SET_RESET();
    	DELAY_US(65000);//65毫秒
    	CLR_SAMPLE();
    	DELAY_US(5);
    	SET_SAMPLE();
    }
    
    

    其余读写子函数、模拟SPI读写子函数等和官方例程一致,只是CS接地恒为低电平。其中所有的延迟子函数均改为DELAY_US(1)微妙级别的延迟,时序和官方参考例程一致。


    感谢专家查看问题并给出回复,谢谢!

Reply
  • 专家你好,经检查后确认AD2S1210激励输出正确、正余弦输入正确、时序是按照官方例程来的。

    现在SDO引脚可以读出值,但仍出现的两个问题是:

    1.配置模式下读写不正确。向0x91设定激励频率寄存器中写0x14,硬件电路无法改变激励频率(说明写  不正确)。读取0x92控制寄存器及其他阈值设定寄存器,读取的值都不是默认值(说明读 不正确),向0x92控制寄存器写入0x7F,读取的是0x40。

    2.普通模式下位置读取不正确。通过手慢慢转动旋变,发现在0度和180度附近读取的值是正确的,但是在90度和270度附近读取的值不对。具体表现为:在59度到135度之间,位置数据没有变化,仍为上次读取的值。

    以下是各个波形及程序:

    一、波形

    1.EXC正负激励峰峰值:

    2.正余弦输入峰峰值 (上:正弦,下:余弦)

    90度位置处的正余弦输入峰峰值(上图)

    0度位置处的正余弦输入峰峰值(上图)

    3.四路正余弦对地输入(从上到下依次为:SIN  SINLO  COS  COSLO)

    90度位置处的波形,COS和COSLO为2.12V、2.18V(上图)

    0度位置处的波形,SIN和SINLO为2.08V、2.04V(上图)

    二、程序

    main()//主函数:(先上电复位,再清除故障寄存器,最后进行读写操作)
    {
    AD2S1210Initiate();
    
    AD2S1210SelectMode(CONFIG);
    ReadFromAD2S1210(CONFIG,FAULT,buf);
    RDC_FLULT[0]=buf[0];
    DELAY_US(5);
    
    WriteToAD2S1210(CONTROL,0x7F);//写入控制寄存器的值0111 1111
    ReadFromAD2S1210(CONFIG,CONTROL,buf);
    buffer[7]=buf[0];
    DELAY_US(5);
    
    while(1)
    	{
    		AD2S1210SelectMode(POSITION);
    		ReadFromAD2S1210(POSITION,POS_VEL,buf);
    		buffer[2]=buf[2];//高8位数据
    		buffer[1]=buf[1];//低8位数据
    		RDC_FLULT[1]=buf[0];//故障位
    		buffer[8]=(buffer[2]<<8) | (buffer[1]);//buffer[8]:AD2S1210位置读取值
    		RDC_POSITION=buffer[8]*0.329589898/60;//角度(度)  LSB=0.3296角分
    	}
    }
    
    void AD2S1210Initiate()//上电复位子函数
    {
    	CLR_RESET();
    	SET_SAMPLE();
    	DELAY_US(15);//15微秒
    	SET_RESET();
    	DELAY_US(65000);//65毫秒
    	CLR_SAMPLE();
    	DELAY_US(5);
    	SET_SAMPLE();
    }
    
    

    其余读写子函数、模拟SPI读写子函数等和官方例程一致,只是CS接地恒为低电平。其中所有的延迟子函数均改为DELAY_US(1)微妙级别的延迟,时序和官方参考例程一致。


    感谢专家查看问题并给出回复,谢谢!

Children
No Data