2024年4月21日发(作者:)

范例三 电子罗盘

一.系统概述

本系统的目标是设计一个两轴数字罗盘系统。对其所指的方向进行测量。当系统工作时,

系统中的磁阻传感器(HMC1022)对所在地的地磁进行A/D采集,然后对采集量进行处理,将

所在的方向相对正北的角度通过串口发送给高端。本系统可工作在正常状态和标定状态。

1 正常状态

在该状态下,系统对地磁进行正常采集后进行校准,然后通过串口将计算的方向角发送

出来。

2 标定状态

在该状态下,系统对周围的磁场进行采集,以此为参考,推导出校准参数。退出该状态

时,将校准参数保存起来,以便用于对正常状态下采集的数据进行偏置校准。

二.系统输入/输出分析

两轴数字罗盘系统的系统框图如图6-27所示。

磁阻传感器

2

2

M

C

U

复位置位电路

PC机

磁阻传感器

图6-27 数字罗盘系统框图

从系统框图中可以看出,两轴数字罗盘系统大体可以分为模拟量输入、开关量输出以及

通信量 3 类。

模拟量输入分析如表6-5所示。

表6-5 数字罗盘系统模拟量输入

类型

模拟量

输入

编号

1

2

名称

A轴采集量

B轴采集量

命名

A_data

B_data

来源

磁阻传感器

磁阻传感器

备注

范围为-10mV~+10mV

范围为-10mV~+10mV

开关量输出分析如表6-6所示

表6-6 数字罗盘系统开关量输出

类型

开关量

输入

编号

1

名称

复位置位信号

命名

R/S

控制对象

磁阻传感器

备注

对HMC1022进行复位置位,0.5A~4A

通信量分析如表6-7所示。

表6-7 数字罗盘系统通信量

编号 名称 命名 备注

1

2

串口发送数据

串口接受数据

TxD

RxD

向PC端发送数据

接收PC端发来的数据

三.硬件设计

1 芯片选型

选取芯片时应该注意:不要将所有的I/O口用满,应当预留一定的输入输出端口,以便

扩展需要。通过分析数字罗盘系统的输入量和输出量,发现所需的I/O口较少,为5个。但考

虑到该系统对A/D采集精度要求较高并且要求有SCI模块以便于通信,故考虑该系统采用具

有10BitA/D采集和SCI模块的MR8。

2 设计框图

数字罗盘系统的硬件框图如图6-28所示,下面将分析A/D采集中的电压放大模块、

HMC1022(磁阻传感器)的置位/复位电路和SCI(RS-232)通信模块。

out+(A)

out-(A)

out+(B)

out-(B)

s/r+(A)

s/r+(B)

电压放大

电路

MR8

ATD0-1/PTA0-1

H

M

C

1

0

2

2

置位/复位

电路

PTB3/TCH0A

PTB1/TxD

SCI通信

PTB0/RxD

PC机

图6-28 基于MR8的数字罗盘系统框图

3 MCU引脚汇总列表

数字罗盘系统中MR8的I/O口具体分配情况如表6-8所示。

表6-8 MR8的I/O分配

分类

1

2

3

名称 编号

AD

模块

R/S

模块

SCI

模块

1

2

3

4

5

MCU引脚

ATD0/PTA0(25)

ATD1/PTA1(26)

PTB3/TCH0A(19)

PTB1/TxD(17)

PTB0/RxD(16)

目标对象

HMC1022放大后的信号输入(A)

HMC1022放大后的信号输入(B)

IRF7105.G1,G2

MAX3232.T1IN

MAX3232.R1OUT

使HMC1022获得较高

的灵敏度

利用MAX3232将TTL

电平转换为RS-232电平

说明

获得磁阻传感器的信号

4 模块硬件分析及设计

(1) A/D采集模块

在该模块中,使用MR8内部的A/D模块对HMC1022产生的两路电压采集。考虑到在地

球磁场下HMC1022输出的电压范围在-5mv~5mv之间,对于如此小的电压,模数转换器无

法准确转换,因此需要对其输出电压进行放大。在该放大电路中使用了AD公司的AMP04。

其输出公式为Vout=(Vin+ - Vin-)*Gain+Vref,其中Vout为放大后输出的电压,Vin+ 、Vin-为

HMC1022产生信号,Gain为放大倍数,Vref为3.3V。考虑到A/D采集信号最大为5V,决定将

放大倍数设为500。又有AMP04的放大倍数Gain=10K/R,所以在本系统中取R=200Ω。具

体的信号放大电路如图6-29所示。

(2) HMC1022复位/置位

磁阻传感器所处的磁场并非纯净磁场,不可避免的会收到来自外界磁场的影响。如果磁

阻传感器长时间受到外部磁场的影响,会导致其灵敏度下降。环境中的强磁场(大于5Gauss

时)会导致磁阻传感器输出信号变异,为了消除这种影响并使输出信号达到最佳,就需要利

用传感器中的用来置位或复位的两个合金带来消除剩余磁场。具体是对集成在芯片内部的置

位/复位合金带加以3~5安培的脉冲电流,这样就可以重新校准或反置传感器内的磁敏元件。

电路中采用MOS管IRF7105产生置位/复位电流。图6-30给出了IRF7105的引脚。

引脚含义简要说明如下:

S1(1脚):地(GND)

S1

D1

1 8

S2(3脚):正电源端,接+5V

D1

G1 2 7

G1(2脚):使能N-Channel

D2

S2 3 6

G2(4脚):使能P-Channel

D2

G2 4 5

D1(7、8脚):N-Channel,产生电流

D2(5、6脚):P-Channel,产生电流

图6-31是本系统所采用的一种置位/复位电路。

图6-30 IRF7105的管脚

图6-31 HMC的支撑及置位/复位电路

(3) SCI(RS-232)通信模块

由于MCU的SCI模块输出及接收电平为TTL电平,而RS-232总线规定的电平为RS-232电

平,两者不一致。因此要用RS-232总线进行串行通信,就需要外接电路实现电平转换。在

该系统中使用目前使用比较多的MAX232。该芯片使用单一+5V电源供

电实现电平转换。图6-32给出了MAX232的引脚。

引脚含义简要说明如下:

Vcc(16脚):正电源端,一般接+5V

GND(15脚):地

VS+(2脚):VS+=2Vcc-1.5V

VS-(6脚):VS-=-2Vcc-1.5V

C2+、C2-(4、5脚):一般接1μF的电容

C1+、C1-(1、3脚):一般接1μF的电容

输入输出引脚分两组,基本含义见表6-9所示。在实际使用时,若只要一路,可使用其

中任意一组。

在本系统中,使用了表6-9中的第一组来实现电平转换,具体电路图如图6-33所示。

表6-9 MAX232芯片输入输出引脚分类与基本接法

组别

1

2

TTL电平引脚

11

12

10

9

方向

输入

输出

输入

输出

典型接口

接MCU的TxD

接MCU的RxD

同上

232电平引脚

13

14

8

7

方向

输入

输出

输入

输出

典型接口

连接到接口与其它

设备通过232相接

同上

图6-33 SCI电平转换电路

四.软件设计

1 编写硬件驱动程序注意点

① 硬件驱动程序的文件数量(.h,.c)应该与划分的硬件模块个数一致,一个硬件模块对

应一个H文件和一个C文件。

② 一个C文件中可以包含若干个函数,所有对外函数必须在H文件中声明,仅在该文件

内部调用的函数就在该文件中声明与实现。

③ 一个与硬件相关的C文件,头部是说明该文件对外的函数,可以对外的函数按照头

部说明的顺序放在最前面,每个函数头的说明要有足够的使用信息。

④ 汇编中,原则上先用A,HX作为函数入口,不够用再考虑用HX指向内存地址。C中,

所有子程序不得用全局变量作为出口。

⑤ 当对划分好的模块编写硬件驱动程序时,要切记不能干预该模块未用到的引脚。

2 各模块头文件

#include "GP32C.H" //MCU头文件

#include "DataType.H" //数据类型头文件

#define COCOBit 7 //转换完成标志位

INT8U advalue(INT8U channel); //获取一路A/D转换

INT8U admid(INT8U channel); //获取中值滤波A/D转换

INT8U adave(INT8U n, INT8U channel); //获取均值滤波A/D转换

#include "GP32C.H" //MCU头文件

#define ReSendStatusR SCS1 //SCI状态寄存器

#define ReTestBit 5 //接收缓冲区满标志位

#define SendTestBit 7 //发送缓冲区空标志位

#define ReSendDataR SCDR //数据寄存器

//串行接收与发送函数声明

extern void SCIInit(void);

extern INT8U SCIRe1(INT8U *p); //接收1字节

extern INT8U SCIReN(INT8U n,INT8U ch[]); //接收n字节

extern void SCISend1(INT8U o); //发送1字节

extern void SCISendN(INT8U n,INT8U ch[]);//发送n字节

1 AD.h

2 SCI.h

3 误差补偿算法

在该系统的使用中,系统误差主要表现在两方面:一种是对传感器零位的影响;另一种

是其两轴灵敏度不一致的影响。

(1) 零位误差

零位误差是由于A/D采集到电压在放大时加上了Vref,同时,在实际环境中,软磁场的

影响使得A/D的输出并非关于原点对称,而是发生了坐标偏移,如图6-34所示。这样就需要

对采样值进行一定的补偿,使其恢复到理想状态,如图6-35所示。

对于该误差的消除,可以如下方法:

在水平状态下,将传感器旋转一圈,测出X、Y轴的最大和最小值,通过计算其新的原

点,从而使以后采集的值处于所计算新原点的坐标轴中。

(2) 灵敏度误差

当X轴和Y轴的灵敏度不一致时,这时理想的圆会变为一个椭圆。可以先求出K=(Xmax

-Xmin)/(Ymax-Ymin),假设以X为基准,那么:X = Xread ,Y=YreadK。

这样就取得比较理想的值,可以计数出方位了。

五.小结

通过一个具体的练习,可以了解到设计一个项目的流程:

首先,项目进行需求分析,分析出该系统的模拟量输入、开关量输入、模拟量输出、开

关量输出以及通信等方面的信息;

第二步、根据分析出的输入/输出量选择合适的芯片;

第三步、分析系统的各个模块,选择各个模块的芯片并画出对应的原理图;

第四步、写出各个模块的驱动程序及功能子程序,并测试;

最后,将各个功能子程序合成并测试。通过这些步骤,我们才有可能可以做好一个项目。