如何利用ADI-MEMS陀螺仪测量运动倾角
0赞ADI公司的MEMS产品主要包括陀螺仪、加速度计、麦克风等,加速度计也可以作为倾角计使用,其原理是测量重力加速度在其他轴上的分量,但是他的缺点是只局限于静态基座上的角度变化,也就是说只要被测物体有运动变化那么它的测量结果就不会准确。而陀螺仪虽然输出的是角速率信号,但只要对其进行积分,一样可以得到角度,而且即使有剧烈运动也没有关系,这也是航空航天领域测量飞行器姿态的方法,下面以ADXRS610陀螺仪为例,介绍测量空间运动角度的方法。
设备:ADUC7026单片机,adxrs610陀螺仪,电源
设备简介:
ADuC7026:
ADuC7026中集成了一个12位16路A/D转换器。此模块可在2.7~3.6电压下工作,在时钟频率为41.78MHZ时,可提供高达1MSPS的数据量。此模块为用户提供多通路复用器,差分跟踪保持电路、片内参考电压和一模数转换器。在伪差分和单端模式时,输入电压范围是0V-VREF,在伪差分和单端模式下的输出编码为标准二进制。
其中:1 LSB=FS/4096,或2.5V/4096=0.61mV。
ADXRS610技术参数:
测量范围±300º/s
温度漂移±2%
静止时典型输出2.5v,最小输出2.2v,最大输出2.8v
带宽最大可达2500Hz
工作电压5v
看了上面的参数,大家会问ADUC7026的AD转换输入电压最大支持2.5V,而陀螺仪输出范围是0-5V,如何解决电压不匹配问题呢?
其实ADI公司已经为你想好了,在陀螺仪上很人性化的为你提供了Vratio引脚,即信号输出电平参考,你可以把它接到你想要的基准源,这里我们要它的输出范围0-2.5V,那么我们就给这个引脚接2.5V电源,如果还嫌大可以接1.2V。
硬件就说这么多,软件采样和积分程序如下,在ADUC7026中实现:
/***********************************从传感器处读取数值(Pitch方向陀螺)***********************************/
int ReadGyroPitch()
{
int ReadPitchValue;
ADCCP = 0x00;
ADCCON = 0x7E3;
while(!ADCSTA){}
ADCCON &=0xF7F;
ReadPitchValue = (ADCDAT >> 16);
return ReadPitchValue;
}
/***************************积分程序********************************/
void IRQ_Handler() __irq
{
if ((IRQSTA & GP_TIMER_BIT) !=0)
{
angle=angle+rate*0.001;
T1CLRI = 0;
}
return;
}
在中断中实现积分,定时器每1ms中断一次
