单片机创意小制作,GPS记录器DIY
全球定位系统,小名GPS,大家一定不陌生,对于我们来说,它只有一个功能——定位,说白了,就是它能告诉我们现在所处的经纬度。
虽然功能简单,可由此衍生出来的应用可就不少了,比如车载导航仪,不光能告诉我们现在在哪,还能告诉我们怎么去想去的地方;又如某个车队要了解车辆的位置,那就给每个车子装个GPS和无线收发设备,实时了解车辆信息。
图12.1 GPS 记录器的显示界面
除此之外,还有些另类的应用:比如 GPS授时,所谓授时,就是告诉我们现在几点钟了。虽然这有点大材小用的意思,不过这时间是相当准确的,可以精确到毫秒级,可以作为许多应用的标准时钟。再有就是今天我们要DIY的这个“GPS 记录器”(见图12.1)了,简单来说,就是把我们所经过的位置记录下来的装置。有人要问了,这有什么用呢?假如有驴友旅行过程中发现一段非常漂亮的路径,路上湖光山色,风景秀丽,他就可以利用这个装置将路径记录下来和朋友们分享;假如探险家外出探险,也可以利用这个装置将路径记录下来,探险结束后按原路安全返回。这,就是路径回溯功能。
接下来让我们了解一下必备的基础知识。
GPS原理简介
GPS应用已经非常普及,现在很多手机都集成了GPS导航的功能,但是光有导航仪或者是GPS接收器是不行的,它还得有天上挂着的24颗卫星作为信号的来源。这24颗卫星就像草莓外面的籽一样均匀地分布在地球上空,基本上在全球任意地方都能接收到GPS卫星的信号。接收器根据卫星发送的含有报文的信号来计算处于哪个位置。除此之外,我们不能将卫星发射上去之后就不管了,所以,地球上还有地面中心对这些卫星进行监控和数据修正。所以,完整的GPS系统包括 GPS卫星、用户接收端、地面监控中心。
图12.2 解析流程
GPS 接收端与通信协议
上面讲的GPS系统包含3部分,但是我们平时能接触到的只有接收端。别看现在市面上各种牌子的导航仪和接收器数不胜数,但上面用的GPS接收处理的芯片,全球就只有几家公司有能力设计。其中,SiRF的芯片占据了民用市场七八成的份额,而目前用的比较多的是2004年发布的SiRFstar III,也就是所谓的“第3代”芯片。
接下来就是让其他产品能“听懂”从GPS芯片发出的数据是什么意思了,这时就需要有个通信协议。目前大部分GPS模块采用的是NMEA0138协议。这个协议涵盖了许多方面,GPS只是用到其中的一部分。
NMEA 协议简介
NMEA 是由美国全国海洋电子协会(The National Marine Electronics Association)制定的一套通信协议,是目前GPS最常见的通信协议。
以笔者的这个GPS 模块为例,它将接收到的GPS卫星信号解码之后,通过串口以NMEA格式输出,而用到的语句只有4个:$GPGGA、$GPGSA、$GPGSV、$GPRMC,其中美元符号($)代表前缀,表示语句开始;GP 代表对象,代表用在 GPS 上;后面的GGA、GSA、GSV、RMC等是语句类型;每条语句的各个数据字段用半角逗号(,)分开;结尾为*XX,XX 是整个语句的校验和,以检验收到的语句是否正确,代表回车和换行,表示该条语句结束。
我们所要做的就是将其接收下来,解析出我们要的数据,再进行下一步的应用。
数据解析和保存
有了从模块那里收到的数据,接下来就是解析出里面有用的数据了。图12.2所示为简单的解析流程。
由于使用的是单片机,所以最简单的保存数据的方案便是使用SPI接口的Flash。另外由于NMEA语句是为了便于传输,采用字符形式,所以“身材”比较大,基本上每次的数据量在300~500字节,由于Flash容量限制,不能将原始的NMEA 语句直接保存,所以我们自己定义了一个存储格式,将其中有用的数据摘出来以二进制的格式保存,这样每次的数据顺利地缩小了。在实际应用中,每个点的数据只需要32字节。
如何浏览路径
说到这里,就必须请出神器——Google Earth了。这是谷歌出的一款可以看卫星图的软件,可惜的是目前的6.0 版还不能直接支持 NMEA 协议。不过 Google Earth 支持另外一种语言,那就是KML。其全称是Keyhole Markup Language,基于XML,同样,它包含了很多复杂和高级的内容,在此不再赘述,我们只需要用到其中一部分——在Google Earth 中画路径。
Path from GPS Logger V2
Path Name
这个KML文件被Google Earth读取后会生成:
简单来说,它告诉Google Earth,生成一个文档,名字为Path from GPS Logger V2,其中有一个路径,名字叫Path Name,路径的是“连线”的模式,颜色为黄色(ff00ffff),线宽5像素,而具体经纬度信息则包含在标签中,继而Google Earth会根据其中的经纬度信息绘制出一条折线。
所以,只要将之前保存的每个点的数据,依次填充到标签中,则生成的KML被Google Earth读取之后显示的就是我们记录的路径。
至此,我们自制记录器所需要了解的背景都全部知道了,接下来便是制作的过程了。
主要功能目标
直接显示当前日期和时间、经纬度、海拔、速度、方向等信息,显示卫星信号强度、卫星数目、分布情况等。
将位置信息记录到存储器中,并显示当前空间使用情况。板载的Flash可用保存50994个记录点,按每秒一次计,可连续记录14小时。当空间满了之后,可以将数据转存至TF卡之后重新记录。可实时浏览存储器中的数据,也可将存储器中的记录导出,或者转换成 Google Earth可以识别的KML格式。
图12.3 GPS 记录器的模块框图
GPS 记录器的设计
GPS记录器的模块框图如图12.3所示。数据通信方面,GPS模块通过串口与MCU通信,TF卡和SPI Flash则分别挂载在两个硬件SPI上,LCD通过并行方式与MCU连接。供电方面,采用锂电池(自带过充过放保护电路)供电,由于GPS内置了LDO(低压差线性稳压器),所以直接与电池连接;另外一路则经3.3V LDO输出给MCU、LCD、Flash和TF卡供电;同时,用STM32自带的ADC模数转换测出锂电池的电压,以此估算剩余电池电量。图12.4为根据框图设计出的PCB原理图。
图12.4 GPS 记录器的PCB 原理图
绘制 PCB
根据液晶显示屏的尺寸,确定了主控板的大小。元器件不多,所以PCB尺寸只有显示屏的1/2左右。制作完成的PCB图与实物如图12.5所示。
表12.1 制作所需原材料和元器件
图12.5 制作完成的PCB图与实物
图12.6 焊接完元器件的PCB
图12.7 GPS 模块通过支架来安装,电池也加以更换
焊接元器件和PCB调试
笔者的习惯是焊接完一部分立刻检测该部分是否能正常工作,这样可以尽早发现问题并快速判断出问题源。
在焊接之前,目测一下板子是否有断路或短路的情况,然后用万用表测量电源正负极之间是否短路。
首先焊接电源部分,将USB座、LDO稳压管和充电芯片及阻容元件焊上,然后供电,测量输出是否为3.3V,有条件的话,还可以接在示波器上看看输出的电压是否纯净。
在LDO输出和整版的供电之间,笔者增加了一个0Ω的电阻,这个电阻可作为跳线使用,断开后可以检测芯片部分是否有短路等情况,调试完成后可直接短接导通。
电源部分完成后,接下来焊接单片机和外围的晶体振荡器、复位电路,组成最小系统。要判断单片机是否能运行起来,可以将板上的两个LED也装上,然后编写一个测试程序,循环点亮和熄灭,如果成功,则表明单片机基本正常。
最后焊接Flash芯片、TF卡座、按键等。
至此,原来的空PCB已经比较像一块电路板了,如图12.6所示。
一般来说,使用陶瓷天线的GPS模块需要尽量使天线面向天空,这样才能尽可能地接收信号,所以安装GPS模块的时候设计了一个支架,使得模块天线与接收器成45°角,平时手持的时候刚好面向天空,即使平放或立着放都能部分面向天空,如图12.7所示。另外,还为模块换了一个备用电池。
全部元件组装完成后的样子如图12.8所示。装上电池和后盖,如图12.9所示,硬件装配至此就完成了。
软件设计思路与调试
由于功能简单,软件不需要复杂的结构,流程如图12.10所示。开机初始化完成后,系统便进入无限主循环中,循环检查GPS是否接收完毕,是否有按键按下。
图12.8 全部元器件组装完毕的样子
图12.9 装上电池和后盖
GPS接收和解析使用了中断,当接收完成后,设置标志位,主循环检测到数据接收完成,便将数据显示在LCD上,如果设置需要记录,则再记录到SPI Flash中。
如果“菜单”按键被按下,则转到菜单函数;如果“显示模式”按键被按下,则切换显示模式;如果“记录”按键被按下,则切换是否记录到SPI Flash中。
图12.10 软件流程框图
操作方式和界面
记录器上部有4个按钮,用途分别为“菜单/退出”、“上一个/显示模式”、“下一个/记录模式”、“确定”。
常规显示时屏幕分为3个区域,顶部显示电池电量、卫星信息、时间等,中间用大字体显示当前经纬度,下半屏则根据显示模式分别显示卫星信息、速度航向和记录信息3种模式。按“显示模式”按键可以在3种模式中循环切换,如图12.11所示。
图12.11 显示屏下半部具备3种显示模式
图12.12 将数据存储到 TF 卡中
按“记录模式”键可以切换记录开始和停止模式。按“菜单”键可进入功能菜单。选择“菜单→转储→TF卡(KML)”可将存储器中的数据以KML文件的格式转存到TF卡中,如图12.12所示。选择“菜单→转储→TF卡(转储)”可将存储器中的数据以原始二进制格式存到TF卡中。
转储之后,在TF卡的GPS目录中就会有已经生成好的KML 文件,如果装了 Google Earth,就会出现如图12.13所示的图标。
图12.13 存储在TF卡中的KML文件
直接双击之后会自动打开 Google Earth,黄色的连线就是我们记录下的路径,如图12.14所示。
图12.14 GPS记录器记录下的路径可在 Google Earth 中显示
选择“菜单→浏览记录”可以实时浏览存储器中记录的路径和记录点的信息,并能直观地了解存储器空间使用情况,如图12.15所示。选择“菜单→擦除空间”,可将数据擦除,继续记录,如图12.16所示。
后记
其实市场上早已有产品化的GPS记录器,而且成本更低、功能更强,但是DIY的乐趣在于更深地了解其中的原理,以及发挥自己的想象力,根据自己的需要定制。比如,还是这套硬件,通过修改软件,还能实现GPS测面积的功能。
图12.15 实时浏览存储器中记录的路径和记录点的信息
图12.16 擦除记录
单片机万用表设计
原文链接:http://www.51jrft.com/jsj/jsjkxyjs/368.html
目前,数字万用表以其耗电低、测量精度高等优点正逐步取代模拟万用表成为电子测量领域的霸主。本设计利用AT89C52单片机设计了一种数字万用表,该万用表以单片机作为控制核心,包括各种测量电路、模/数转换电路、显示电路、报警电路等。硬件电路设计主要包括一些芯片的选择以及电路的具体设计,为使系统更加稳定,使系统整体精度得以保障,本电路使用了ADC0808作为A/D转换芯片,单片机系统设计采用AT89C52单片机作为主控芯片,配以RC上电复位电路和11.0592MHZ震荡电路,显示模块采用液晶屏LM016L。程序每执行周期耗时缩到最短,这样保证了系统的实时性。软件设计则主要涉及单片机如何控制各个模块。最后使用proteus软件对整个系统进行仿真与测试,检测系统设计是否符合预期目标。 HM000055
本文设计的数字万用表可测量交直流电压、电流、电阻和电容元件的值,最终的测量结果直接显示在液晶屏上,便于使用者直接读取数据,而且它的制作成本低廉,性价比高,非常适合在校学生进行电子设计时测量各类数据。
关键词:数字万用表;单片机;proteus软件;模/数转换
2.2主要芯片的选择
一般来说,在进行电子设计时肯定会用到芯片,如常见的单片机、液晶屏等,然而市面上同种类型的芯片也是令人眼花缭乱,这时候选择何种芯片则直接关系到整体系统稳定性、性价比等诸多方面。本课题设计的数字万用表里面所用到的主要芯片有单片机、液晶屏以及模/数转换芯片,接下来就将详细讲解各种芯片是如何选择的。
2.2.1单片机的选择 查看完整请+Q:351916072获取
单片机作为本次设计的核心,选择的结果直接关系到整体系统的好坏,因此在选择单片机型号时也是斟酌再三,主要考虑了以下两种方案。
方案一:PIC单片机:PIC单片机具有许多优点,如:自带模数转换,驱动能力强,可直接驱动数码管,而且抗干扰能力也很强。但是缺点也较为明显,主要是价格偏高、使用起来较为复杂,对于本次设计来说有点大材小用。
方案二:51单片机,如:AT89C52。AT89C52是ATMEL公司生产的一款低电压,高性能CMOS 8位单片机。它的功能虽不如PIC单片机强大,但是它的价格低廉,而且对于51单片机由于之前课程设计时经常用到,所以比较容易上手,它所使用的集成开发环境是我们比较熟悉的Keil C51,编程效率很高。
在本次设计中经过综合考虑最后选择了方案二,使用一款51单片机,即AT89C52作为核心芯片,这主要是因为选择熟悉的芯片可以节省大量的时间,而且它的售价也只需几块钱,较为便宜。
2.2.2模/数转换芯片的选择
模/数转换芯片的主要功能是将模拟量转换为数字量,所以模/数转换芯片的好坏直接关系到最后测量数据的精确度,本次设计主要考虑了以下两种方案。
方案一:选用ADC574。ADC574是12位CMOS单片型逐次逼近式模数转换芯片,只需两根线就可以很好的与单片机组成测量系统,但是它的售价较高。
方案二:选用ADC0808。ADC0808是8位CMOS单片型逐次逼近式模数转换芯片,性能虽然不如ADC574,但对于本次设计来说已经够用了,更为重要的是价格较之ADC574更为便宜。
因此,综合考虑两种方案后,还是选择了方案二,ADC0808更具性价比,更适合于本次设计。
2.2.3液晶屏的选择
液晶屏的作用主要是显示最后测量得到的数值,液晶屏的选择也考虑了两种方案。
方案一:选择Nokia5110。这款液晶采用3.3V供电,功耗小,采用点阵方式显示包括汉字在内的多种字符。它有84x48 的点阵可以显示4 行汉字;采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9条。
方案二:选择LM016L。这款液晶可用于显示数字、字母、符号等,采用HD44780控制器。HD44780具有简单而功能强大的指令集,可实现字符移动、闪烁等功能。
方案一中Nokia5110虽然功能强大,但是它的供电电压是3.3V,如果选择此方案则需要额外提供3.3V的电源。方案二中的LM016L则不存在这个问题,本次设计中液晶屏只需显示一些字符和数字,LM016L完全可以胜任,而且它的价格还稍微便宜,因此选用方案二。
2.3本章小结 查看完整请+Q:351916072获取
经过前期的仔细思考和选择,最终本次设计的基本框架终于确定下来,整个硬件系统采用分模块设计的方案,共分为交直流电压测量模块、直流电流测量模块、电阻测量模块、电容测量模块、单片机最小系统模块、A/D转换模块。同时硬件系统所需要用的芯片也确定了下来:单片机选择AT89C52、模数转换芯片选择ADC0808、液晶屏选择LM016L。同时硬件的整体布局也得到明确,本次毕业设计的雏形出现。
第1章 绪 论 1
1.1 课题研究背景 1
1.2 课题研究意义 2
1.3 课题的研究内容 2
第2章 总体方案论证 3
2.1 总体框架设计 3
2.2 主要芯片的选择 4
2.2.1 单片机的选择 4
2.2.2 模/数转换芯片的选择 5
2.2.3 液晶屏的选择 5
2.3 本章小结 6
第3章 数字万用表硬件电路设计 7
3.1 测量模块 7
3.1.1 直流电压测量模块 7
3.1.2 交流电压测量模块 8
3.1.3 直流电流测量模块 10
3.1.4 电容测量模块 10
3.1.5 电阻测量模块 11
3.2 单片机最小系统模块 12
3.3 模/数转换模块 14
3.4 液晶显示模块 15
3.5 报警模块 16
3.6 本章小结 16
第4章 数字万用表软件设计 17
4.1 Keil C51简介 17
4.2 单片机软件设计 18
4.3 电压测量软件设计 20
4.4 电流测量软件设计 21
4.5 电阻测量软件设计 22
4.6 本章小结 24
第5章 数字万用表仿真与测试 25
5.1 Proteus软件简介 25
5.2 测量模块仿真与测试 27
5.2.1 直流电压模块测试 27
5.2.2 交流电压模块测试 28
5.2.3 电流模块测试 29
5.2.4 电阻模块测试 30
5.2.5 电容模块测试 31
5.3 本章小结 32
第6章 总结与展望 33
致谢 34
参考文献 35
附 录 36
相关问答
单片机 方案 万用表 优缺点?1.单片机方案万用表具有一定的优点和缺点。2.优点:单片机方案万用表具有测量精度高、稳定性好的特点,能够提供更准确的测量结果;同时,单片机方案万用表还具...
低端 万用表 芯片型号?目前单片机万用表芯片DTM0660,广泛应用在几十块钱的低端万用表产品中。目前单片机万用表芯片DTM0660,广泛应用在几十块钱的低端万用表产品中。
万用表 表笔触碰晶振管脚 单片机 复位?-ZOL问答你就算用手碰到那个引脚都会导致停振。停振之后,如果你的单片机启用了看门狗功能,应该会自动复位。你把悬空的表笔接在毫伏表的最低量程上,你都能看...
单片机 工程师需具备哪些技能,市场需求大吗?首先单片机工程师的市场需求应该是非常大的!现在基本上所有的电子产品都都用到单片机。只要有电子的地方基本上都需要有电子工程师或者单片机工程师的参与。要...
单片机 感应灯怎么连接?单片机感应灯的连接步骤如下:1.确认电源已连接,一般情况下感应灯的感应部分与电源直接连接,与插座、开关或其它电路连接。2.确认感应灯的感应部分与电源连...
恩, 万用表 是做什么的,以及 万用表 怎么用 - Biei49ojWn 的回答...万用表的使用的注意事项(1)在使用万用表之前,应先进行“机械调零”,即在没有被测电量时,使万用表指针指在零电压或零电流的位置上。(2)在使用万用表...
怎么控制 单片机 蜂鸣器只响两声-ZOL问答1.确定单片机工作~检查复位电路:复位按键按下测量9(RES)脚是否置高(不按为低)~...3.若程序烧进去,用万用表测量各电路是否连接正确,确定没有虚焊漏焊以及短路现...
请问数字 万用表 液晶屏怎么驱动?_汽配人问答[最佳回答]电极是方波。段码与背电极有电压该段显示如果把背电极换成地,还能被驱动。但是液晶的频率较低一般50~100Hz程序不好写,再者液晶采用直流驱...段码...
万用表 开机的时候总是显示电池电压不足然后就自动关机是怎么...怎么用指针万用表测量电热水器的瓦数?1967浏览7回答徕卡测距仪1.9万浏览7回答同样是高级语言为什么C语言可以编写51单片机程序,JAVA却不能编写?1868浏...
数字 万用表 怎么用-设计本有问必答4、以上方法在测量范围和精度上都有一定的不足,而电子计数法主要通过单片机进行控制。由于单片机的较强控制与运算功能,电子计数法的测量频率范围宽...