shaoxuesong 发表于 2009-11-28 14:41:31

ADIS16350 spi读取数据正常,写控制命令写不进去,请教!

向ADIS16350的控制寄存器写一个字节数据
//***********SPI Write to Register****************
unsigned int Write_Reg(unsigned int address,unsigned char data)
{
        unsigned int addr;
        addr = address;
        addr <<= 8;
        addr &= 0xFF00;
        addr |= data;
        addr |= 0x8000;
        addr &= 0xBFFF;
        SPI2BUF = addr;
        while(!IFS1bits.SPI2IF);      //等待发送完成
    IFS1bits.SPI2IF=0;            //清除发送完成标志位
        return SPI2BUF;               //读取接收寄存器(即使是无效数据也需清空
}

谢谢

real_sugar 发表于 2009-11-28 14:44:56

片选后需要延时一段时间~

shaoxuesong 发表于 2009-11-28 15:08:20

好像不是延时的问题,我试了好多都不行,下面是向0x39,0x38地址里写0x0402,写进去数据之后读出来还是原来的数
        CS =0;
        DelayMS(10);
        Nop();
        Nop();
        filter_temp = Write_Reg(0x0038,0x02);
        Nop();
        Nop();
//        CS = 1;
        Nop();
        Nop();
//        CS =0;
//        DelayNS(100);
        Nop();
        Nop();
        filter_temp = Write_Reg(0x0039,0x04);
        Nop();
        Nop();
        CS = 1;
        Nop();
        Nop();

feng_matrix 发表于 2009-11-28 20:51:09

默认值就是0402,你读出来是什么呢?

feng_matrix 发表于 2009-11-28 21:09:00

还有注意下DATASHEET上关于Tdatastall、Tdatarate的描述:

http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_508561.JPG
(原文件名:未命名.JPG)

Data stall time, fast mode SMPL_ PRD ≤ 0x09 (fS ≥ 164 Hz) 9 μs
Data Stall time, normal mode (, SMPL_ PRD ≥ 0x0A (fS ≤ 149 Hz) 75 μs

Tdatarate Data rate time, fast mode, SMPL_ PRD ≤ 0x09 (fS ≥ 164 Hz) 40 μs
Data rate time, normal mode, SMPL_ PRD ≥ 0x0A (fS ≤ 149 Hz) 160 μs

shaoxuesong 发表于 2009-11-30 19:10:25

feng_matrix 悟   您好
我知道ADIS16350在0x39,0x38寄存器默认的值是0x0402,之前我想改变这个值,调整内部滤波器的的参数,但是写不进去,所以我用了DEMO软件改变了寄存器的值,变成了0x0406,所以读出来的数是0x0406。在程序里我往寄存器里写0x0402根本写不进去。
关于您说的stall time 和 rate time 的问题,我的理解应该是片选信号有效的相关问题,我在片选信号之后尝试延时了不同长度的时间,都写不进值,而且读数都是正常的,所以我觉得可能问题不在这,但是也不知道怎么回事,希望再帮帮忙

shaoxuesong 发表于 2009-11-30 19:31:38

feng_matrix:看了您在论坛上很热心帮助大伙,加了您的MSN,想跟您了解下有关ADIS16350的问题,可几天都没见您上线。
我现在遇到的最大问题就是漂移问题,从ADIS16350得到的角速度信号,通过单片机采集积分之后输出角度,但是偏移量很大,我的采样速率在4ms,也不算太慢,传感器内部的Bartlett Windows Fir已经调到最大0x0406了,效果依然不好,我又在外面设计了Kalman滤波器感觉没有太大改善,希望能进一步交流,也希望用过ADIS16350的大虾们多多指点

feng_matrix 发表于 2009-12-1 11:19:34

第一个问题:
ADIS16350的SPI接口最高速度2M,你用的多少?你的MCU用什么?如果命令格式无误,怀疑多数是时序问题
还有最好别用NOP、DELAY之类去控制通信延时,浪费MCU处理资源且不时间不准
一般SPI接口函数中应该已经有相应的控制参数,比如AVR32的software_framework中SPI接口定义:

//! Option structure for SPI channels.
typedef struct
{
//! The SPI channel to set up.
unsigned char reg;

//! Preferred baudrate for the SPI.
unsigned int baudrate;

//! Number of bits in each character (8 to 16).
unsigned char bits;

//! Delay before first clock pulse after selecting slave (in PBA clock periods).
unsigned char spck_delay;

//! Delay between each transfer/character (in PBA clock periods).
unsigned char trans_delay;

//! Sets this chip to stay active after last transfer to it.
unsigned char stay_act;

//! Which SPI mode to use when transmitting.
unsigned char spi_mode;

//! Disables the mode fault detection.
//! With this bit cleared, the SPI master mode will disable itself if another
//! master tries to address it.
unsigned char modfdis;
} spi_options_t;


第二个问题:
你想把16350放在哪方面应用上?静态姿态检测情况多?还是动态姿态检测多?平面运动?还是3D运动?

积分角度不准,这个很正常,除了提高积分间隔时间Dt准确度外,关键在惯性导航算法
可参考此贴13楼:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3546165&bbs_page_no=1&bbs_id=9999
如果陀螺仪算角度没有漂移问题,16350里要三轴加速度传感器干吗啊?

shaoxuesong 发表于 2009-12-1 14:47:39

第一个问题已经解决了,用的方法就是重复多写几次,基本就可以写进去了。

我的16350是安装在一个移动的四足机器人身上,及时了解它的三维运动姿态。16350的采样最高采样频率是819.2HZ,我用的是PIC的16位单片机6014A,采样频率在250HZ。现在用的方法一种是对采样数据积分累加,发现漂移较大,另一种是用x和y轴与重力加速度的夹角来反正弦得出俯仰角和横滚角,但是在角度较大是误差很大。我使用了16350内部的滤波器,自己又设计了一个简单的KM滤波器,效果都不理想。看了你所介绍的惯导姿态结算方法,我现在没有磁力计,所以即使可以也只能在俯仰和横滚上提高精度,还没有实现。。。现在就是不知道16350能提供多大精度的数据

liufeng 发表于 2010-1-3 21:22:20

to feng_matix:
   买16355的时候说有过静电损坏的情况,如何设计保护电路啊?

夏笑然 发表于 2013-5-31 15:46:40

feng_matrix 发表于 2009-12-1 11:19 static/image/common/back.gif
第一个问题:
ADIS16350的SPI接口最高速度2M,你用的多少?你的MCU用什么?如果命令格式无误,怀疑多数是时 ...

您能不能给我一个关于关于对这个惯性测量单元进行数据采集的程序吗?类似的也可以   谢谢啦
页: [1]
查看完整版本: ADIS16350 spi读取数据正常,写控制命令写不进去,请教!