范例三 电子罗盘

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

范例三 电子罗盘
一.系统概述
本系统的目标是设计一个两轴数字罗盘系统。

对其所指的方向进行测量。

当系统工作时,系统中的磁阻传感器(HMC022)对所在地的地磁进行A/D 采集,然后对采集量进行处理,将所在的方向相对正北的角度通过串口发送给高端。

本系统可工作在正常状态和标定状态。

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

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

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

二.系统输入/输出分析
两轴数字罗盘系统的系统框图如图627所示。

M C U
2
磁阻传感器
2
PC 机
磁阻传感器
复位置位电路
图627 数字罗盘系统框图
从系统框图中可以看出,两轴数字罗盘系统大体可以分为模拟量输入、开关量输出以及通信量 3 类。

模拟量输入分析如表65所示。

表65 数字罗盘系统模拟量输入
类型 编号 名称 命名 备注
模拟量输入
A 轴采集量 A_data 磁阻传感器 范围为0mV ~+0mV 2
B 轴采集量
B_data
磁阻传感器
范围为0mV ~+0mV
开关量输出分析如表66所示
表66 数字罗盘系统开关量输出
类型 编号 名称 命名 控制对象 备注
开关量 输入
复位置位信号
R/S
磁阻传感器
对HMC022进行复位置位,0.5A ~4A
表67 数字罗盘系统通信量
编号
名称
命名
备注
串口发送数据 TxD 向PC 端发送数据 2
串口接受数据
RxD
接收PC 端发来的数据
三.硬件设计
芯片选型
选取芯片时应该注意:不要将所有的I/O 口用满,应当预留一定的输入输出端口,以便扩展需要。

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

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

2 设计框图
数字罗盘系统的硬件框图如图628所示,下面将分析A/D 采集中的电压放大模块、HMC022(磁阻传感器)的置位/复位电路和SCI(RS232)通信模块。

MR8
ATD0-1/PTA0-1
PTB3/TCH0A
PTB1/TxD PTB0/RxD
电压放大电路
置位/复位电路
out+(A) out-(A) out+(B) out-(B)
s/r+(A) s/r+(B)
H M C 1022
PC 机
SCI 通信
图628 基于MR8的数字罗盘系统框图
3 MCU 引脚汇总列表
数字罗盘系统中MR8的I/O 口具体分配情况如表68所示。

分类 名称 编号 MCU 引脚 目标对象
说明
AD 模块 ATD0/PTA0(25) HMC022放大后的信号输入(A) 获得磁阻传感器的信号
2 ATD/PTA(26) HMC022放大后的信号输入(B)
2 R/S 模块
3 PTB3/TCH0A(9) IRF705.G,G2
使HMC022获得较高的
灵敏度
3
SCI 模块
4 PTB/TxD(7) 利用MAX3232将TTL 电平转换为RS232电平
5
PTB0/RxD(6)
4 模块硬件分析及设计
() A/D 采集模块
在该模块中,使用MR8内部的A/D 模块对HMC022产生的两路电压采集。

考虑到在地球磁场下HMC022输出的电压范围在5mv ~5mv 之间,对于如此小的电压,模数转换器无法准确转换,因此需要对其输出电压进行放大。

在该放大电路中使用了AD 公司的AMP04。

其输出公式为Vout=(Vin+ Vin)*Gain+Vref ,其中Vout 为放大后输出的电压,Vin+ 、Vin 为HMC022
表68 MR8的I/O 分配
产生信号,Gain 为放大倍数,Vref 为3.3V 。

考虑到A/D 采集信号最大为5V ,决定将放大倍数设为500。

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

具体的信号放大电路如图629所示。

(2) HMC022复位/置位
磁阻传感器所处的磁场并非纯洁磁场,不可防止的会收到来自外界磁场的影响。

如果磁阻传感器长时间受到外部磁场的影响,会导致其灵敏度下降。

环境中的强磁场(大于5Gauss 时)会导致磁阻传感器输出信号变异,为了消除这种影响并使输出信号到达最正确,就需要利用传感器中的用来置位或复位的两个合金带来消除剩余磁场。

具体是对集成在芯片内部的置位/复位合金带加以3~5安培的脉冲电流,这样就可以重新校准或反置传感器内的磁敏元件。

电路中采用MOS 管IRF705产生置位/复位电流。

图630给出了IRF705的引脚。

引脚含义简要说明如下: S 〔脚〕:地〔GND 〕 S2〔3脚〕:正电源端,接+5V
G 〔2脚〕:使能NChannel
G2〔4脚〕:使能PChannel
D 〔7、8脚〕:NChannel,产生电流
D2〔5、6脚〕:PChannel,产生电流
图63是本系统所采用的一种置位/复位电路。

(3) SCI(RS232)通信模块
由于MCU 的SCI 模块输出及接收电平为TTL 电平,而RS232总线规定的电平为RS232电平,两者不一致。

因此要用RS232总线进行串行通信,就需要外接电路实现电平转换。

在该系统中使用目前使用比拟多的MAX232。

该芯片使用单一+5V 电源供
电实现电平转换。

图632给出了MAX232的引脚。

引脚含义简要说明如下: Vcc 〔6脚〕:正电源端,一般接+5V GND 〔5脚〕:地
C2+、C2〔4、5脚〕:一般接μF 的电容 C+、C 〔、3脚〕:一般接μF 的电容
1 8
2 7
3 6
4
5 S1 G1 S2 G2 D1 D1 D2 D2
图630 IRF705的管脚
图63 HMC 的支撑及置位/复位电路
输入输出引脚分两组,根本含义见表69所示。

在实际使用时,假设只要一路,可使用其中任意一组。

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

表69 MAX232芯片输入输出引脚分类与根本接法
组别TTL电平引脚方向典型接口232电平引脚方向典型接口
2 输入
输出
接MCU的TxD
接MCU的RxD
3
4
输入
输出
连接到接口与其它
设备通过232相接
2 0
9
输入
输出
同上
8
7
输入
输出
同上
四.软件设计
编写硬件驱动程序注意点
硬件驱动程序的文件数量(.h,.c)应该与划分的硬件模块个数一致,一个硬件模块对应一个H文件和一个C文件。

②一个C文件中可以包含假设干个函数,所有对外函数必须在H文件中声明,仅在该文件内部调用的函数就在该文件中声明与实现。

③一个与硬件相关的C文件,头部是说明该文件对外的函数,可以对外的函数按照头部说明的顺序放在最前面,每个函数头的说明要有足够的使用信息。

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

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

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

图633 SCI电平转换电路
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 SCS //SCI状态存放器
#define ReTestBit 5 //接收缓冲区满标志位
#define SendTestBit 7 //发送缓冲区空标志位
#define ReSendDataR SCDR //数据存放器
//串行接收与发送函数声明
extern void SCIInit(void);
extern INT8U SCIRe(INT8U *p); //接收字节
extern INT8U SCIReN(INT8U n,INT8U ch[]); //接收n字节
extern void SCISend(INT8U o); //发送字节
extern void SCISendN(INT8U n,INT8U ch[]);//发送n字节
3 误差补偿算法
在该系统的使用中,系统误差主要表现在两方面:一种是对传感器零位的影响;另一种是其两轴灵敏度不一致的影响。

() 零位误差
零位误差是由于A/D采集到电压在放大时加上了Vref,同时,在实际环境中,软磁场的影响使得A/D的输出并非关于原点对称,而是发生了坐标偏移,如图634所示。

这样就需要对采样值进行一定的补偿,使其恢复到理想状态,如图635所示。

对于该误差的消除,可以如下方法:
在水平状态下,将传感器旋转一圈,测出X、Y轴的最大和最小值,通过计算其新的原点,从而使以后采集的值处于所计算新原点的坐标轴中。

(2) 灵敏度误差
当X轴和Y轴的灵敏度不一致时,这时理想的圆会变为一个椭圆。

可以先求出K=〔XmaxXmin〕/(YmaxYmin),假设以X为基准,那么:X =Xread ,Y=YreadK。

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

五.小结
通过一个具体的练习,可以了解到设计一个工程的流程:
首先,工程进行需求分析,分析出该系统的模拟量输入、开关量输入、模拟量输出、开关量输出以及通信等方面的信息;
第二步、根据分析出的输入/输出量选择适宜的芯片;
第三步、分析系统的各个模块,选择各个模块的芯片并画出对应的原理图;
第四步、写出各个模块的驱动程序及功能子程序,并测试;
最后,将各个功能子程序合成并测试。

通过这些步骤,我们才有可能可以做好一个工程。

相关文档
最新文档