罗盘是利用地球自身的磁场来确定南北方向的,把罗盘给出的模拟信号数字化以后再输出,那么得到的方位信息便是数字化的,即为数字罗盘。传统的罗盘有一个很重要的应用要求,就是使用时一定要保持罗盘的水平,现代数字罗盘上加入倾斜传感谢器,通过软件进行罗盘的倾斜补偿,这样用户在使用时就不必刻意地保持罗盘的水平了,这就极大地方便了罗盘在定位中的应用。
HRM数字罗盘上自带标准的D型九针串口插头,可以利用插头与单片机串口连接,一般为了满足机载设备或是便携式设备的需要,采用单片机和HRM组成测控系统。单片机基于HRM3000的定位系统电路设计如下图
HMR3000与单片机通信系统设置HMR3000工作于选通模式,如果想获取一组方向俯仰数据,需要首先发停止指令使罗盘停止,然后发询问HPR语句的专用信息,再接收数据并存储。程序流程图如下
程序
***************************************************************************
程序的主要功能是向HRM发出询问指令(以询问 HPR 为例,$PTNT,HPR*78<cr><lf>),读取HRM3000送出的航向、俯仰、横滚状态信息,存储到内存即可
******************************************************************************
#include <reg51.h> // 引用标准库的头文件
#include <stdio.h>
#include <absacc.h>
#include <math.h>
#define uchar unsigned uchar
#define uint unsigned uint
sbit P10=P1^0
uchar dbuf[6]
uchar comanum, data1, data2, data3,;
main()
{
TMOD=0x20; 定时器工作模式设定
TH1=0xfd; 定时初值
TL1=0xfd;
PCON=0x00;;
SCON=0x50;
IE=;0x90
TR1=1;
P10=0;
K=2;
P12=1;
while(1){;}
}
//单片机与HRM3000采用串口中断的方式进行串行通信,通信可靠//
void sint() interrupt 4 using 1
{
RI=0; 软件清除中断标志位
If(SBUF=0x24) //判断是否收到HPR格式语句的第一个字符“$”,其数值为
{ //0x24,如果收到就开始记录数据,并设置记录标志
record=1;
i=0;
data1=0; //航向数据字符数量变量
data2=0; //俯仰数据字符数量变量
data3=0; //横滚数据字符数量变量
comanum=0;
}
If(record=1) //开始处理数据信息
{
If(SBUF=0x2c) //利用逗号区分收到的字符属于何种数据
{comanum++;}
If(comanum=1) //第一个逗号之后的字符数据航向数据
{
Dbuf[Data1]=SBUF;
Data1++;
}
If(comanum=3) //第三个逗号之后的数据属于俯仰数据
{
Dbuf[Data2]=SBUF;
Data2++;
}
If(comanum=5) //第五个逗号之后的数据属于横滚数据
{
Dbuf[Data3]=SBUF;
Data3++;
}
If(SBUF=”*’) 判断收到的数据是否是“*”如果是,结束记录
{
Dbuf1[data1]=’\’; 写航向数据字符结束标志“\”
Dbuf2[data2]= ’\’;
Dbuf[3data3]= ’\’;
Data1=0; ,所有的控制变量清零
Data2=0;
Data3=0;
Comanum=0;
Data1=0;
Data2=0;
Data3=0;
}
}
} |