|
发表于 2009-8-20 16:51:08
|
显示全部楼层
0.000042是分辨率,因为是24位的输出。0.0016 是In-Run Bias Stability,稳定性、漂移的速度,应该理解为精度吧。虽然AD能采到24位,但不代表最后几位是对的。但是过采样提供了用数字方法提高精度的途径
我感觉选陀螺仪最恶心的就是选漂移小的,但是漂移种类有很多,像温漂,电压漂,还有随机漂。有人说随机游走是陀螺仪最主要的性能,就是那个Angle Random Walk吧,即便你AD采的再准,温度补偿做得再好,也会漂。
我只用过ADIS16255,最好的时候五分钟静置零漂没超过一度,要仔细改修正值。而且内部的采样速率设置,滤波参数和供电电压影响都不可忽略。特别是温度影响,因为集成度高,所以运行一段时间后会变热,室温25左右时,工作温度在43~45左右(内部传感器),虽说ADIS16255最大的卖点就是温漂小,温度变了的时候你还是能发现那个角度输出蹦的你心烦。。。
前两天刚有人拿到了16300,据他说比255稳定多了,10分钟内没超过1度,而且其30s自动校正功能强大,使用方便。后来对比datasheet,发现300的确还比255漂移特性好,当初选陀罗看了很多,特别关注了355,但是355的标称漂移特性没255好,选了255,不过就是没看300的资料。郁闷啊,被255自带温度传感器这个特性给忽悠了。
现在正打算买16130,看起来大概漂移是255的1/8左右,谁知道实际效果会咋样呢?
另外这些芯片在国内卖太贵了,谁有办法搞到便宜的?当然是合法,正品。。。。。。那估计是没有了。
另附我写的mega8和255通信的伪16位spi,高手们看了应该会吐血的。排版太乱,估计谁看了都会吐血。
虽说完全无效率可言,但是个人感觉时序清晰,而且写出来就能用。能写出这种东西来能说明我的c语言一定学的不好,哈哈。
#define spi_sck 5
#define spi_out 4
#define spi_in 3
#define spi_cs 2
#define cs_h() sbi(PORTB,spi_cs)
#define cs_l() clb(PORTB,spi_cs)
#define sck_h() sbi(PORTB,spi_sck)
#define sck_l() clb(PORTB,spi_sck)
#define out_h() sbi(PORTB,spi_out)
#define out_l() clb(PORTB,spi_out)
#define read_in() bv(PINB,spi_in) //这些是自己定义的位操作
#define _NOP() __asm__ __volatile__ ("nop"::)
#define _wait() _NOP() ; _NOP(); _NOP() //在这里调spi频率。
volatile unsigned int spi_output , spi_get , spi_buf , spi_bit ,counter=0; //注意都是int哦。
volatile unsigned char i;
void fspi(void)
{
spi_buf=0;spi_bit=32768;
sck_h();
cs_l();
_NOP();
for(i=0;i<=15;i++)
{
sck_l();
if((spi_output/spi_bit)%2) //传说中的16位位操作。在mega8里用int运算,判断某一位是不是1
out_h();
else
out_l();
_wait();
sck_h();
if(read_in())
spi_buf +=spi_bit;
else
_NOP();_NOP();
_wait();
spi_bit /=2;
}
spi_get = spi_buf;
_NOP();
cs_h();
}
有啥想交流的可发信ilawp*mail.ustc.edu.cn(把*换成@),我现在也快闲起来了 |
|