stm32电子指南针要点Word下载.docx
《stm32电子指南针要点Word下载.docx》由会员分享,可在线阅读,更多相关《stm32电子指南针要点Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
硬件资源:
TFT的显示屏,STM32的实验板,GY271三轴加速度传感器,烧录线
设计指导书:
ARM系统板配套光盘
四、要求的设计成果
(1)在显示屏上显示具体方位。
(2)撰写课程设计说明书,要求简洁、通顺,格式规范,设计方案正确,实现技术路线明确,论述内容完整、清楚、规范,数据、资料真实可靠,软件程序运行良好。
(3)要求有完整的电路设计原理图及软件源代码。
五、进程安排
(1)第1天:
任务布置及相关知识讲解
(2)第2-3天:
资料查阅与方案制定
(3)第4-8天:
硬件设计、程序编制与调试阶段
(4)第9天:
撰写设计报告
(5)第10天:
答辩与考核阶段
六、主要参考资料
[1]田泽.嵌入式系统开发与应用实验教程.北京航空航天工业大学出版社,2005.
[2]郭荣佐,王霖.《嵌入式系统原理》.北京航空航天大学出版社,.2008.
[3]周根林.嵌入式系统原理与应用.南京大学出版社,2006.
[4]谭浩强.C语言程序设计(第2版).清华大学出版社,2008
[5]丁峰.ARM系统开发——从实践到提高.中国电力出版社,2007.
[6]游雨云.单片机PWM信号控制智能小车的实现方法.技术与市场,2009,(12)
[7]袁新娜,余红英,超声波传感器在智能小车避障系统中的应用.大众商务教育版(民办教育研究),2009,(8)
指导教师(签名):
20年月日
目录
1.前言1
2.总体设计方案2
2.1总体设计2
3.硬件设计3
3.1STM323
3.2显示模块4
4.软件设计6
4.112864模块6
4.2主函数模块7
5.系统调试10
6.结论11
7.心得与体会13
1.前言
指南针是用以判别方位的一种简单仪器,是一种重要的导航工具,可应用在多种场合中。
指南针的前身是中国古代四大发明之一的司南。
主要组成部分是一根装在轴上可以自由转动的磁针。
磁针在地磁场作用下能保持在磁子午线的切线方向上。
磁针的北极指向地理的北极,利用这一性能可以辨别方向。
常用于航海、大地测量等方面。
随着人们对指南针原理认识的不断深入,指南针也由先前笨重的“司南”发展到现在的便携式的指南针。
但其基本构造是没有改变的,都是属于机械的指针式,其指示的机械结构基本上没有改变,都是利用某种支撑使得磁针能够受到地磁场的影响而自由的旋转。
由于机械的先天因素导致了指针式指南针在便携性、灵敏度、精度以及使用寿命上都有一定的限制。
由于国内外电子技术的飞速发展,特别是在磁传感器和专用芯片上的发展使能指南针的基本实现机理有了质的改变,不再是机械结构而采用了磁场传感器和专用处理器对磁场进行测量和处理后指示方向,这就是当前应用较为广泛的电子式指南针。
电子指南针内部结构固定,没有移动部分,可以简单地和其它电子系统接口,因此可代替旧的磁指南针。
并以精度高、稳定性好等特点得到了广泛运用。
本设计采用Honeywell公司的各向异性磁阻(AMR)传感器芯片HMC5883L。
霍尼韦尔HMC5883L是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,HMC5883L包括最先进的高分辨率HMC118X系列磁阻传感器,并附带霍尼韦尔专利的集成电路包括放大器、自动消磁驱动器、偏差校准、能使指南针精度控制在1°
~2°
的12位模数转换器。
简易的I2C系列总线接口。
HMC5883L采用霍各向异性磁阻(AMR)技术,该技术领先于这些各向异性传感器具有在轴向高灵敏度和线性高精度的特点。
传感器具有的对正交轴的低灵敏度的固相结构能用于测量地球磁场的方向和大小,其测量范围从负8高斯到8高斯(gauss)。
本文介绍了电子指南针的工作原理及电路硬件及软件的设计,同时给出了其抗干扰设计以及信号和数据的处理方法。
2.总体设计方案
2.1总体设计
通过以上测量分析思路所得传感器信号,经过STM32数据预处理和算法补偿后在上传到12864液晶屏上显示。
结合以上各方案选择及设计思路可得出以下总体方案框图。
图2.2总体方案设计框图
3.硬件设计
对于此次电路设计,我们采用的是老师给的STM32最小系统,外加显示模块,我们是采用12864LCD来显示;
三轴加速度传感器模块我们采用的是GY—271传感器。
由于板子上的高低电平引脚不够,我们自己外扩了引脚模块。
3.1STM32
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。
按性能分成两个不同的系列:
STM32F103“增强型”系列和STM32F101“基本型”系列。
增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;
基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。
两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。
时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
其参数与主要特点如下:
1.参数:
2V-3.6V供电,容忍5V的I/O管脚,优异的安全时钟模式,带唤醒功能的低功耗模式,内部RC振荡器,内嵌复位电路,工作温度范围:
-40°
C至+85°
C或105°
C。
2.特点:
(1)内核:
ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/MHz。
单周期乘法和硬件除法。
(2)存储器:
片上集成32-512KB的Flash存储器。
6-64KB的SRAM存储器。
(3)时钟、复位和电源管理:
2.0-3.6V的电源供电和I/O接口的驱动电压。
POR、PDR和可编程的电压探测器(PVD)。
4-16MHz的晶振。
内嵌出厂前调校的8MHzRC振荡电路。
内部40kHz的RC振荡电路。
用于CPU时钟的PLL。
带校准用于RTC的32kHz的晶振。
(4)低功耗:
3种低功耗模式:
休眠,停止,待机模式。
为RTC和备份寄存器供电的VBAT。
(5)调试模式:
串行调试(SWD)和JTAG接口。
(6)DMA:
12通道DMA控制器。
支持的外设:
定时器,ADC,DAC,SPI,IIC和UART。
(7)2个12位的us级的A/D转换器(16通道):
A/D测量范围:
0-3.6V。
双采样和保持能力。
片上集成一个温度传感器。
(8)2通道12位D/A转换器:
STM32F103xC,STM32F103xD,STM32F103xE独有。
(9)最多高达112个的快速I/O端口:
根据型号的不同,有26,37,51,80,和112的I/O端口,所有的端口都可以映射到16个外部中断向量。
除了模拟输入,所有的都可以接受5V以内的输入。
(10)最多多达11个定时器:
4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。
2个16位的6通道高级控制定时器:
最多6个通道可用于PWM输出。
2个看门狗定时器(独立看门狗和窗口看门狗)。
Systick定时器:
24位倒计数器。
2个16位基本定时器用于驱动DAC。
(11)最多多达13个通信接口:
2个IIC接口(SMBus/PMBus)。
5个USART接口(ISO7816接口,LIN,IrDA兼容,调试控制)。
3个SPI接口(18Mbit/s),两个和IIS复用。
CAN接口(2.0B)。
USB2.0全速接口。
SDIO接口。
(12)ECOPACK封装:
STM32F103xx系列微控制器采用ECOPACK封装形式。
3.2显示模块
12864是128*64点阵的图形型液晶显示模块,控制器ST7920.可显示汉字及图形,内置8192个中文汉字(16*16点阵),128个字符(8*16点阵)及64*256点阵显示RAM(GDRAAM).可与CPU直接接口,提供两种界面来连接微处理器:
8—位并行及串行两种连接方式。
具有多种功能:
光标显示,画面移位,睡眠模式等。
图3.1.112864LCD引脚图
图3.1.2引脚说明图
模块的外部接口:
1、逻辑工作电压(VDD):
3.3V~5.3V(默认出货为5V)模块在V0悬空时逻辑电压5V显示最佳
2、电源地(GND):
0V
3、工作温度(Ta):
-20~75℃(宽温)-30-80℃(默认出货是宽温-20-70)
4.软件设计
4.112864模块
在设计该模块代码时,最主要的就是驱动程序。
在12864液晶显示屏的初始化代码写好了,需要检测是否处于忙碌状态,一切正常进行后就可以开始自己的设计了。
在其中运用最多的就是写地址与写数据,在写了地址之后才能进行写数据,我一共定义了两个用于写现实的函数:
voidlcd_write_string(unsignedcharx,unsignedchary,u8*ch)和voidlcd_write_x(unsignedcharx,unsignedchary,unsignedintnum,unsignedcharlen,unsignedcharmode)下面为这两个函数的代码,在voidlcd_write_string()中x,y为坐标,char为字符串,在voidlcd_write_x()中,x,y为坐标,num为数字,len为所写的长度限制,mode表示开显示。
voidlcd_write_string(unsignedcharx,unsignedchary,u8*ch)
{
lcd_pos(x,y);
while(*ch!
='
\0'
)
lcd_dat(*ch);
ch++;
}
voidlcd_write_x(unsignedcharx,unsignedchary,unsignedintnum,unsignedcharlen,unsignedcharmode)
u8t,temp;
u8enshow=0;
for(t=0;
t<
len;
t++)
temp=(num/lcd12864_Pow(10,len-t-1))%10;
if(enshow==0&
&
(len-1))
{
if(temp==0)
{
if(mode)
lcd_dat('
'
);
else
0'
continue;
}elseenshow=1;
}
lcd_dat(temp+'
}
4.2主函数模块
在主函数中,一开始就是对自己所要用的所有模块进行初始化,这样接下来才能成功调用,写了罗盘自检之后就是现实程序了,现实代码如下:
while
(1){
HMC5883_Angle=HMC5883_AngelInDegrees();
lcd_write_string(1,0,"
电子指南针"
lcd_write_string(3,0,"
王金辉曾立制作"
if(HMC5883_Angle<
90&
HMC5883_Angle>
0||HMC5883_Angle==0)
lcd_write_string(2,0,"
东偏南"
lcd_write_x(2,3,HMC5883_Angle,2,0);
lcd_write_string(2,4,"
度"
}
if(90<
HMC5883_Angle&
HMC5883_Angle<
180||HMC5883_Angle==90)
HMC5883_Angle=180-HMC5883_Angle;
西偏南"
if(180<
HMC5883_Angle<
270||HMC5883_Angle==180)
HMC5883_Angle=HMC5883_Angle-180;
西偏北"
if(270<
360||HMC5883_Angle==270)
HMC5883_Angle=360-HMC5883_Angle;
东偏北"
}}
由于处于正东方向的时候只是一瞬间的,所以一开始准备现实正东是不可能的,函数一直在写,所以正东的现实是不可能实现的,所以我就把正东、正南、正北、正西添加到了相应的角度显示中。
主函数当中主要就是写显示,利用处理过得到的角度值来进行显示。
5.系统调试
在系统调试当中,主要用到的就是12864,在上面的现实看是否与自己想要的结果一样,不一样则再次进行调试,其中首先进行的就是看硬件是否有问题。
在12864中,我首先就是写了简单的代码,设置坐标后显示简单的字符,看输出是否为自己所想要的,如果是,则可以开始写自己的任务中所要完成的显示,在GY_271初始化好了之后,利用其传输的数据处理后送到显示器上面显示,看是否与理论的相符,这样可以判断自己在处理数据的时候是否有错误并加以改正,在确认无误之后,再转化为东偏南、东偏北、西偏南、西偏北与之相符的位置,其中,在0度的时候指的方向为正东方向。
在调试的过程中,我开始想着到了0度、90度、180度、270度的时候可以分别显示为正东方向、正南方向、正西方向、和正北方向,而在动传感器的时候始终都不会显示这几个方向,最后分析了一下发现:
角度是一直在测的,由于传感器不可能处于绝对的这几种状态,总是有偏幅,即显示的时候写正东方向之类的出现的次数很少,而12864一直在写,故写的正东方向人为的是看不出来的,所以我就取消了这几个方向的显示。
6.结论
最终显示的结果会随着传感器的方位的变化而变化,即成功了。
最终成果图如下。
图6.1方位:
西偏南
图6.2方位:
西偏北
图6.3方位:
东偏北
图6.4方位:
东偏南
7.心得与体会
本次的课程设计主要是基于STM32板来制作的,主要用到三轴加速度传感器和12864液晶显示屏来制作电子指南针。
这次是第一次接触32板,本次的程序设计主要是借用张恒的原来的各个模块的代码,在看着程序和注释弄懂了指南针模块的工作原理,在通过自己所了解的12864的资料后,把初始化弄好之后就写了两个简单的写函数,功能分别为写数据和写字符。
初次之外,最主要的就是主函数,一开始我在主函数当中准备指出八个方向的,但是由于指南针检测的角度为0,、90、180、270时分别显示正东、正南、正西、正北着几个方向,但是由于绝对的处于着几个角度是不可能的,写函数一直在写,因此写的这四个方向人眼是不可能观察出来的,所以我就取消了这几种显示,加到了另外四种显示当中,在这次的设计中,我没有用指南针模块测得的Z轴数据,只用到了X、Y轴的数据。
通过这次设计,了解了并能够很好的运用三加速度传感器了,并且知道了STM32板的端口定义是和51单片机不同的,总之这次的课设还算是可以的,收获也颇多。
课程设计成绩评定表
成
绩
评
定
项目
比例
得分
平时成绩(百分制记分)
30%
业务考核成绩(百分制记分)
70%
总评成绩(百分制记分)
100%
评定等级
优良中及格不及格
20年月日