陀螺仪的测试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SUCCESS BELONGS TO THE ONE WITH CLEAR AND LONG-TERM GOALS!

电子陀螺仪的角度获取测试

2013-06-07 16:11 by DarkHorse, 111 阅读, 0 评论, 收藏, 编辑

导航中经常用到电子陀螺。为了测试陀螺仪在静止下的零漂输出和运动情况下的输出角度值,做了2个实验。用的陀螺仪型号是:L3G4200DTR

是一个三轴输出的MEMS电子陀螺。

1 零漂测试

让陀螺仪静止不动,运行5分钟,记录串口输出数据,并解析出三个轴的角速度值。在matlab里面进行仿真。

function main

clc;

clear;

dataFile = input('put file: ','s');

nCount = 0;

fileHandle = fopen(dataFile,'r');

while ~feof(fileHandle)

string = fgetl(fileHandle);

nCount = nCount + 1;

end

nCount = nCount-2;

frewind(fileHandle);

i = 1;

while ~feof(fileHandle)

string = str2num(fgetl(fileHandle));

zData(i) = string(3);

i = i + 1;

if i > nCount

break;

end

end

fclose(fileHandle);

figure(1);

plot(zData,'b-');

hold on;

meanZData = mean(zData);

title('原始Z轴输出数据');

xlabel('ms');

ylabel('dps(degree per second)');

text(3500, 1.2, ['mean=',num2str(meanZData)]);

figure(2);

newData = runge_kutta_intergration(zData);

plot(newData);

xlabel('ms');

ylabel('degree');

title('积分输出的角度');

function newData = runge_kutta_intergration(rawData) samplePeriod = 0.1;%%100ms

size = length(rawData);

i=1;

while (i <= size)

%%%%%简单的积分累加获取角度

if(i == 1)

Data(i) = rawData(i);

else

Data(i) = Data(i-1) + rawData(i)*samplePeriod;

end

%%%%runge-kutta积分累加获取角度

%{

if i<4

Data(i) = rawData(i);

else

Data(i) =

Data(i-1)+1/6*(rawData(i-3)+2*rawData(i-2)+2*rawData(i-1)+rawData(i))*sample Period;

end

%}

i = i+1;

end

newData = Data;

输出结果:

结果表明,静止情况下的陀螺仪也存在很大的累加误差(本身的零漂和温度引起的漂移),5分钟后居然产生了160度的角度误差。

2 运动情况下的输出测试

实验中,我把仪器逆时针旋转90度,然后还原到原来的位置,再顺时针旋转90度,然后回到原来的位置。同样记录在文件中,解析文件,对解析出来的数据进行测试。因为旋转理论上只会导致Z轴的角速率变化,所以只分析这个轴上的角度输出。

function main

clc;

clear;

dataFile = input('put file: ','s');

nCount = 0;

fileHandle = fopen(dataFile,'r');

while ~feof(fileHandle)

string = fgetl(fileHandle);

nCount = nCount + 1;

end

nCount = nCount-2;

frewind(fileHandle);

i = 1;

while ~feof(fileHandle)

string = str2num(fgetl(fileHandle));

zData(i) = string(3);

i = i + 1;

if i > nCount

break;

end

end

fclose(fileHandle);

figure(1);

plot(zData,'b-');

hold on;

zData = zData-mean(zData);%为了抑制零漂,采用减均值的方式plot(zData,'r-');

title('原始Z轴输出数据');

legend('未减均值','减均值');

xlabel('ms');

ylabel('dps(degree per second)');

hold off;

figure(2);

newData = runge_kutta_intergration(zData);

plot(newData);

title('积分输出的角度');

xlabel('ms');

ylabel('degree');

function newData = runge_kutta_intergration(rawData) samplePeriod = 0.1;%%100ms

size = length(rawData);

i=1;

while (i <= size)

%%%%%简单的积分累加获取角度

if(i == 1)

Data(i) = rawData(i);

相关文档
最新文档