盲人导向仪说明书

更新时间:2023-05-19 16:52:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课题:盲人导向仪的设计

设计者:吴长贵

目 录

1 引言..........................................................................................................................................2

1.1 功能简介……..............................................................................................................2

1.2 系统简介…………………………………………………………………...……..….2

2 系统硬件设计…………….....................................................................................................2

2.1硬件框图……………………………………………………………………….….….2

2.2 硬件功能模块说明…………………………………………………………....……..3

2.3 常用功能函数介绍(用户API)…………………………………………………..9

2.4 磁偏角修正………………………………………………………………………..…9

2.5 SPLC501 液晶模组特性.….......................................................................................10

3 硬件电路.................................................................................................................................11

3.1 LCD显示器…….........................................................................................................11

4 应用举例……........................................................................................................................12

4.1 硬件连接.……...........................................................................................................12

4.2 操作步骤.……...........................................................................................................13

4.3 注意事项.……...........................................................................................................13

5 系统软件设计..........................................................................................................................13

5.1 主程序.........................................................................................................................14

5.2 键盘扫描..…...............................................................................................................14

5.3 PNI11096 驱动程序....................................................................................................15

5.4 液晶驱动程序….........................................................................................................16

5.5 盲人导向仪校正程.....................................................................................................17

5.6 盲人导向仪发送命令程序…….................................................................................18

5.7 更新时钟程序….........................................................................................................18

5.8 更新日期程序……............................................................................................….....19

5.9 更新秒表程序……….................................................................................................19

5.10 设置日期时间程序…...............................................................................................20 6 电子导向模组使用说明书…………………………………………………………………22

6.1 操作步骤………………………………………………………………………....….22 7 附录…………………………………………………………………………………………25

7.1 电路原理图………………………………………………………………….…....…25

7.2 丝印图…………………………………………………………………..…....…...…25

7.3 应用接口列表……………………………………………………………………….26

7.4 配件清单及配件说明……………………………………………………….…...….26

8 结语……….............................................................................................................................26

1 引言

盲人导向仪是为盲人指引方向的重要仪器,也可作为指南针,而指南针是航海航行的重要仪器,也是人们外出旅行、考察的必备工具。使用16位单片机实现该系统,可以很好的掌握单片机的应用,同时可以熟悉电子导向的原理。 该方案具有很强的趣味性,配合SPLC501 液晶模组,可以实现图形及文字显示当前方向、语音播报方向、方向校正、显示日期、时间,秒表,闹钟,语音报时等功能。

1.1 功能简介

本方案可以实现:

1. 图形及文字显示当前方向;

2. 语音播报方向;

3. 方向校正;

4. 时钟功能,包括日期,时间,秒表,闹钟,语音报时。

1.2 系统简介

基本特性与参数指标

1、工作电压:DC5V;

2、尺寸:电子导向模组:31.8mm×26.7mm;

主要功能

可以通过向电子导向模组发送不同的命令字,得到X 轴和Y 轴磁性传感器的测量值,经过计算可以得到电子导向模组与正北方向的顺时针夹角。

注意事项

1、不要把16位单片机的“+”、“-”与模组的“+”、“-”接反;

2、16位单片机上的J5 接口要选择5V,使用电池盒供电时,注意电压是否达到系统要求;推荐使用5V 的稳压源给16位单片机供电;

2 硬件模块说明

2.1 硬件框图

盲人导向仪系统框图,系统以16位单片机为核心,外扩SPLC501 液晶模组,利用电子导向模组得到与正北方向沿顺时针方向的夹角,在液晶屏上显示角度信息。

图2.1 盲人导向仪框图

16位单片机精简开发板SPLC501液晶模组电子导向模组,使用标准的SPI接口与上位机进行通讯,16位单片机使用IO口模拟SPI接口与电子导向模组通讯。电子导向模组硬件框图如图 2.1。电子导向模组通过J1 接口与16位单片机一组IO口连接,电子导向模组由16位单片机直接供电。

电子导向模组硬件框图

2.2 硬件功能模块说明

电子导向模组由PNI公司高可靠性的磁性传感器及驱动芯片组成,集成度非常高,实现了高可靠性、高精度、强抗磁场干扰的数码盲人导向仪功能。电子导向模组有两个磁性传感器SEN-S65 和一个驱动芯片PNI-11096 构成。磁性传感器SEN-S65 里面包含一个LR振荡电路,当磁性传感器SEN-S65 与地球磁感线平行方向夹角发生变化时,LR振荡电路的磁感应系数也会发生变化。驱动芯片PNI-11096 通过磁性传感器SEN-S65 磁感应系数的变化可以计算出磁性传感器与地球磁感线之间的夹角,驱动芯片PNI-11096 最多可以连接三个磁性传感器SEN-S65,这三个磁性传感器SEN-S65 方向互为垂直,这样就可以测量在三维

方向上与地球磁感线的夹角,从而得到当前的三维方向。电子导向模组只要得到水平方向上与地球磁感线的夹角就可以测得方向了,因此驱动芯片PNI-11096 上使用了两个磁性传感器SEN-S65

电子导向模组电路

电子导向模组采用SPI接口输入与输出,16位单片机使用IO口模拟SPI接口与电子导向

模组通讯。电子导向模组在每个时钟周期的上升沿,锁存数据。

SPI 总线时序图

从SPI总线时序图可以看出首先上位机发送1 个字节的命令字,命令字指定了电子导向模组的工作模式;当电子导向模组准备好数据时,DRDY数据线变为高电平;然后从 电子导向模组读出2 个字节的数据。控制电子导向模组的命令字如表

AS1、AS0 决定测量哪个轴如表

向电子导向模组发送不同的命令字可以得到不同的坐标轴的测量值,本电子导向模组只有01、10 两种选择有效。 表AS1、AS0 选择测量轴 MOT 当置位为1,各个方向轴上的磁性振荡管可以由AS1、AS0 选择 ODIR 当MOT 位为1 时,ODIR 将决定磁性震荡管的方向,当MOT 位为0 时此位无效。注意此位只在调试模式下使用,正常模式下不使用。 PS0、PS1、PS2 决定磁性传感器SEN-S65L/R磁性振荡器的频率,如表

L/R 磁性振荡器频率选择 根据上面命令字的意义,我们可以得到X 轴测量数据的命令字默认为0xE9 ;得到Y 轴测量数据的命令字默认为0xEA。 从电子导向模组得到X轴方向和Y轴方向测量数据后,根据公式angle = atan(y / x)就可以计算出与正北方向的顺时针夹角了。注意坐标轴的方向与平时使用的不一样,X轴正半轴方向指向正北,如图

在理想状态下,X轴测量数据与Y轴测量数据变化范围都应是-32768~32767 之间,X轴数据与Y轴数据组成的坐标刚好构成一个正圆形如图 2.4,但实际测量中,X轴测量数据与Y轴测量数据最大值或最小值均达不到-32768~32767 这个范围,则导致这两个数据组成坐标构成的图形成为一个中心不在原点的椭圆形,如图

电子导向模组实际测量坐标图

为了得到准确的方向值必须对电子导向模组返回的数据进行校正,将椭圆调整为正圆形,这样才能得到更准确的角度值。这就需要电子导向模组进入校正模式得到四个校正参数,这

四个校正参数分别是椭圆中心的坐标(xOffset,yOffset)和椭圆两个半轴的长度xRange,yRange。电子导向模组校正模式执行的操作为持续纪录X 轴、Y 轴测量数据的最大值和最小值,因此在校正模式下要不停的旋转电子导向模组来得到尽可能精确的X 轴、Y 轴测量数据的最大值和最小值。得到X 轴、Y 轴测量数据的最大值和最小值后就可以求出四个校正参数了。每次开机或每到一个新地方都应该进入校正模式,重新获得校正参数。计算校正参数的参考代码如下。

int Xmax,Xmin,Ymax,Ymin;

int Xraw,Yraw;

int i;

Xmax = Ymax = -32768; // 将最大值赋值为最小值

Ymin = Ymin = 32767; // 将最小值赋值为最大值

for(i = 0; i <100; i++)

{

Xraw = F_PNI_11096_Read(0xE9); // 得到x 轴大小

Yraw = F_PNI_11096_Read(0xEA); // 得到Y 轴大小

if(Xraw > Xmax)

Xmax = Xraw; // 得到一个尽可能大的值作为X 最大值

if(Xraw < Xmin)

Xmin = Xraw; // 得到一个尽可能小的值作为X 最小值

if(Yraw > Ymax)

Ymax = Yraw; // 得到一个尽可能大的值作为Y 最大值

if(Yraw < Ymin)

Ymin = Yraw; // 得到一个尽可能小的值作为Y 最大值

}

xOffset = (Xmax + Xmin)>>1; // 得到X 轴偏移量

yOffset = (Ymax + Ymin)>>1; // 得到Y 轴偏移量

xRange = Xmax - Xmin; // 得到X 轴取值范围

yRange = Ymax -Ymin; // 得到Y 轴取值范围

return 0;

在正常的测量模式下,电子导向模组X 轴、Y 轴测量数据都要利用在校正模式下得到的参

数进行校正,校正方法如下。

xValue = F_PNI_11096_Read(0xE9);

yValue = F_PNI_11096_Read(0xEA);

xRevise = xValue - xOffset; // 根据校正结果,校正X 轴

yRevise = yValue - yOffset; // 根据校正结果,校正X 轴

if(xRange > yRange)

yRevise = (yRevise*xRange)/yRange;

else

xRevise = (xRevise*yRange)/xRange;

电子导向模组X轴、Y轴测量数据经过校正后,形成的坐标系如图

电子导向模组校正后测量坐标图

从电子导向模组得到X 轴方向和Y 轴方向测量数据经过较正后,根据公式angle = atan(y / x)就可以计算出电子导向模组与正北方向的顺时针夹角了。还有一个问题是要根据角度所在的不同的象限,对求得的角度值加以修正。参考程序如下。

Ratio = yRevise / xRevise;

if( Ratio < 0)

Ratio = 0 - Ratio;

Angle = atanf(Ratio) *180 /PI; // 使用反正玄函数计算角度值

if((xRevise > 0) && (yRevise > 0)) // 如果角度是在其它象限中,那么进行修正

return 360 - Angle;

else if((xRevise < 0) && (yRevise > 0))

return 180 + Angle;

else if((xRevise < 0) && (yRevise < 0))

return 180 - Angle;

else if((xRevise > 0) && (yRevise < 0))

return Angle;

2.3 常用功能函数介绍(用户API)

PNI_Driver.asm 文件中定义了PNI 初始化函数和PNI 读取函数;下面介绍这两个函数函数:

1、F_PNI_11096_Init PNI 初始化

程序:void F_PNI_11096_Init(void)

描述:电子导向模组初始化函数,配置IO 口

参数:无

返回:无

注意:在使用电子导向模组前,首先应执行该函数,使与电子导向模组连接的IO 口处于正确的配置状态

2、F_PNI_11096_Read 电子导向模组读取函数

程序:int F_PNI_11096_Read(unsigned int op);

描述:向电子导向模组发送命令字,然后返回测量数据

参数:unsigned int op 向电子导向模组发送的命令字

返回:测量数据

注意:无

2.4 磁偏角修正

'磁偏角'是指磁针静止时,所指 的 北 方 与真正北方的夹角,它的产生是由于地球的磁极与地理的南北极不重合,略有些偏差。由于磁偏角的影响使得指南针不能准确的指示地理的北方,如果希望获得尽可能精确的方向值,可以从专业地图上得到磁偏角进行修正。由于

磁偏角每个地方都不同,且随着时间的推移磁偏角还是不断变化的,因此只有使用各地不同的磁偏角才可以。通常中国境内从10 度到0 度不等,感兴趣的读者可以查找自己所在的磁偏角对从电子导向模组得到的角度进行校正。 '磁偏角'定义方式为向东为正偏移,如磁北极在地理北极的东边10 度,则磁偏角为10 度;向西为负偏移,如此北极在地理北极的西边10 度,则磁偏角为-10 度。从盲人导向仪得到方向值后加上磁偏角即与地理北极之间的夹角。计算公式为: Angle = Angle + Angle_declination;

下面是一些城市的磁偏角值。

2. 5 SPLC501 液晶模组特性

SPLC501 液晶模组具有以下特性:

显示模式:黄色模式STN 液晶;

显示格式:128×64 点阵的图形液晶;

输入数据:兼容68/80 系列MPU 时序。

SPLC501 液晶模组的实物图如图所示,更详细的资料请参考SPLC501 的Datasheet:

SPLC501 液晶模组

3 硬件电路

3. 1 LCD 显示器

SPLC501 液晶模组提供的LCD显示器采用凌阳SPLC501 液晶驱动芯片,点阵分辨率为128×64。SPLC501 液晶模组的电路图如图

SPLC501 液晶模组的电路图

4 应用举例

4.1 硬件连接

为从一个电子导向模组的得到X轴、Y轴测量数据的实例,硬件接口连接框图如图4.1

4.1应用实例硬件接口连接图

61 板上J5 选择5V 和Vio 短接; 将电子导向模组插到IOB8~15 上; 连接IOA8~15 连接SPLC501 液晶模组的D0~D7;IOB4~6 分别连接SPLC501 液晶模组的A0、R/W、EP。

4.2 操作步骤

第一步:按照图3.1 所示连接图连接好硬件,连接好Probe(或者下载线)和电源,打开电源;

第二步:在\\电子导向模组\DemoCode\compass_driver 路径下双击打开compass_driver.spj 工程; Rebuild All 工程,把工程下载到16位单片机上;

第三步:全速运行,这时候从液晶屏上观察x 轴、y 轴方向的测量数据及通过计算得到的角度值。

4.3 注意事项

1、注意连接电子导向模组时要按照板上标注的插接顺序连接。

2、61 板上J5 选择5V。

5系统软件设计

本系统包括下面程序模块:

主 程 序: 首先完成硬件模块的初始化,显示主界面,进行键盘扫描,

处理键盘信息,再根椐键值跳转到各功能子模块;

键盘扫描程序: 完成对16位单片机三个按键的扫描并加入去抖功能;

PNI11096 驱动程序: 模拟SPI 时序完成对PNI11096 的控制及读取数据;

SPLC501 驱动程序: 驱动SPLC501 LCD ;

盲人导向仪各功能子程序:实现命令的发送与接收、数据校正、图形显示、方向数值显

示;

时钟功能程序: 实现显示时间、日期及秒表,闹铃功能;

语音播报程序: 实现方向、日期时间语音播报。

5.1 主程序

主程序流程如图。程序运行后首先初始化各个硬件模块,校正指南针模组,然后程序进入主循环,不停的读取指南针模组的方向并显示,同时进行按键扫描,根据按键进入相应的功能模块。

主程序流程图

5.2 键盘扫描程序

键盘扫描程序提供如下三个API 函数供用户使用。

函数:void Key_Init(void)

描述:键盘初始化函数,设置IOA 口低三位为下拉输入方式。

参数:无

返回值:无

程序:void Key_Scan(void)

描述:键盘扫描函数,每执行一次,对键盘进行一次扫描。利用128Hz 中断调用该函数,完成获取键值及去抖功能。

参数:无

返回值:无

程序:int Key_GetValue(void)

描述:得到键值函数,判断当前是否有键按下

参数:无

返回值: 按下返回键值,没有按下返回0

5.3 PNI11096 驱动程序

16位单片机通过IO 口模拟SPI 接口与电子导向模组通信。PNI11096 驱动程序包括二个函数,PNI11096

驱动程序分别是初始化函数、PNI11096 驱动程序读取函数。

PNI11096 驱动程序读取函数的程序流程如图:

PNI11096 驱动程序读取函数的程序流程图

5.4 液晶驱动程序

LCD显示部分采用SPLC501 液晶模组附带的驱动程序。该驱动程序的架构如图:

LCD 驱动程序架构

驱动程序由5 个文件组成,分别为:底层驱动程序文件SPLC501Driver_IO.inc、SPLC501Driver_IO.asm;

用户API 功能接口函数文件SPLC501User.h、SPLC501User.c、DataOSforLCD.asm。 SPLC501Driver_IO.inc:该文件为底层驱动程序的头文件,主要对使用到的寄存器(如端口控制寄存器等)进行定义,还对SPCE061A 与SPLC501 液晶显示模组的接口进行配置;用户可以根据自已的需求来配置此文件,但要使端口的分配符合实际硬件的接线。

SPLC501Driver_IO.asm:该文件为底层驱动程序,负责与SPLC501 液晶显示模组进行数据传输的任务, 主要包括端口初始化、写控制指令、写数据、读数据等函数;这些函数仅供SPLC501User.c 调用,不建议用户在应用程序中调用这些函数。

SPLC501User.h:该文件为用户API 功能函数文件的头文件,主要对一些记住符进行定义,以及配置LCD 的一些设置,另外该文件里还对SPLC501User.c 中的函数作了外部声

明,用户需要使用LCD 的API 功能函数时,需要把该文件包含在用户的C 文件中。

SPLC501User.c:文件中定义了针对LCD 显示的各种API 功能函数。

DataOSforLCD.asm:该文件中提供了一些供API 功能函数调用的数据处理子程序,主要完成显示效果的叠加、画圆偏差量的计算等。

5.5 盲人导向仪校正程序

校正命令的原理是尽可能精确得到X 轴、Y 轴测量数据的最大极值和最小极值。利用公式: Xoffset = (Xmax + Xmin)/ 2

Yoffset = (Ymax + Ymin)/ 2

Xrange = Xmax – Xmin

Yrange = Ymax – Ymin

分别得到X轴、Y轴测量数据所形成椭圆的中心点坐标(Xoffset,Yoffset)和椭圆两个轴的长度Xrange、Yrange。程序流程如图

:

校正模式程序流程图

5.6 盲人导向仪发送命令程序

系统通过PNI11096 驱动向电子导向模组发送命令字,电子导向模组根据命令返回相应的数据,根据返回的数据计算与正北方向的顺时针角度值。程序流程图如图:

发送命令程序流程图

5.7 更新时钟程序

此程序在2Hz时基中断中调用,每0.5 秒更新一次时间。更新时钟程序流程图如图

:

更新时钟程序流程图

5.8 更新日期程序

此程序在2Hz时基中断中调用,更新日期、月份、年份。更新日期程序流程图如图

:

更新日期程序流程图

5.9 更新秒表程序

选择菜单项“秒表”系统可以实现秒表计时功能,1KHz时基中断实现秒表计时。更新秒表程序流程图如图:

更新秒表程序流程图

5.10 设置日期时间程序

选择菜单项“时间设置”可以对日期时间进行设置。设置日期时间程序流程图如图:

本文来源:https://www.bwwdw.com/article/wyq4.html

Top