已回答假定已回答

AD2S1210并行读取模式切换问题

yup775@163.com 在 2017-8-31 詢問的問題
最後回覆由nandin於2017-9-7提供

您好!

我在调试AD2S1210时,使用并行接口进行读写。

全部工作在配置模式下时,代码如下,读取的速度,位置和错误寄存器值均正确。在电机不转的情况下速度和角度值均为一条直线。

ReadRegFromAD2S1210(CONFIG, POSITIONMSB, &buf_data); 
Position[0] =  buf_data;  
ReadRegFromAD2S1210(CONFIG, POSITIONLSB, &buf_data); 
Position[1] =  buf_data;
ReadRegFromAD2S1210(CONFIG, VELOCITYLSB, &buf_data); 
Speed[1] =  buf_data;
ReadRegFromAD2S1210(CONFIG, VELOCITYMSB, &buf_data); 
Speed[0] =  buf_data;
ReadRegFromAD2S1210(CONFIG, FAULT, &fault);  

工作在普通模式下,只读取速度和位置时值是对的,代码如下。

ReadPFromAD2S1210(POSITION,&Pos);
Position[1]=Pos&0x00ff;
Position[0]=(Pos>>8)&0x00ff;
ReadPFromAD2S1210(VELOCITY,&Vel);
Speed[1]=Vel&0x00ff;
Speed[0]=(Vel>>8)&0x00ff;

当在上边代码后边加入切换到配置模式,读取错误寄存器的代码后,

即加入

ReadRegFromAD2S1210(CONFIG, FAULT, &fault);

读出的值会有大概率出错现象。即度回来的值不是一条直线 。

此外,我按照手册上的波形图,在读取完位置和速度值后立刻读取错误寄存器。(读取循环前已经向地址寄存器写入0xFF)得到的结果同前面一样,也是有错误的数据。

经调试,我发现只要在读取过程中存在普通模式与配置模式的切换,读到的值就会出现问题。

 

请问是我对读取操作的哪个地方理解有误呢?

硬件上,采用2812控制,WR使用总线功能的WR,RD采用IO口控制,CS采用IO口控制。下面是读写函数的定义。

多谢百忙之中的解答。

結果