基于单片机的智能循迹小车文献综述.docx
《基于单片机的智能循迹小车文献综述.docx》由会员分享,可在线阅读,更多相关《基于单片机的智能循迹小车文献综述.docx(36页珍藏版)》请在冰点文库上搜索。
基于单片机的智能循迹小车文献综述
旋转时钟的设计
摘要
POVLED(POV即persistenceofvision视觉暂留),它指的是,借助人的视觉暂留效果,通过少量LED灯的机械扫描方式来显示各种字符或者图像。
其原理很简单,就是靠电动机带动一排LED灯绕电机轴高速旋转,与此同时单片机控制各个LED灯在旋转平面相应的位置上点亮,构成一幅点阵画,虽然它们不是同时点亮的,但由于人的视觉暂留效果,会误以为每个点都是同时点亮的。
这就是我这篇论文研究的对象。
研究的目的第一是为了巩固大学四年所学的关于模数电及单片机的知识,并加深对它们的印象,另外LED旋转显示器并没有被人们广泛认知,作为电子爱好者就应该把新鲜有趣的电子作品发扬光大。
论文中我详细地叙述了扫描显示的原理,介绍了各种扫描显示的电子作品。
通过对这些类似作品的比较,再加入我自己的想法和创意,确立了我所要制作的旋转时钟的方案。
接着具体说明了制作旋转时钟所需要的硬件设备的功能与特性,主要包括单片机STC12C5A32S2、时钟芯片DS1302以及红外遥控芯片TC9012。
之后进行软件设计,画出各程序的流程图,并对重要程序代码作了解释。
最后通过软硬件调试得出结论,证明了我所设计的旋转时钟方案是可行的。
希望通过我的写作能让更多人了解并喜欢POVLED。
关键词:
视觉暂留;旋转时钟;扫描显示
Abstract
POVLED(POVisshortforpersistenceofvision),itreferstothatwiththehelpoftheeffectofhumanPOV,afewofLEDscandisplaythecharactersorimagesbythemethodofmechanicalscanning.Itsprincipleisverysimple:
arowofLEDsrotatearoundamotor'saxisathighspeed,whiletheMCUcontrolseachoneoftheLEDstolighteninthecorrespondingpositionoftherotatingplane,formingalatticepicture,althoughnotalltheLEDsarelighteningatthesametime,becauseoftheeffectofPOV,wewillmistakealltheLEDsforlighteningatthesametime.Thisismyobjectofthisthesis.Thefirstpurposeofmyresearchistoconsolidatetheknowledgewehavelearntincollege;secondlytherotatingLEDdisplayhasnotbeenunderstoodbymanypeople,asaloverofelectronicworksshouldcarrythefreshandinterestingelectronicworksforward.InmythesisIhadexpoundedtheprincipleofthescanningdisplay,andintroducednumbersofthesimilarelectronicworks.Aftercomparingtheseproductions,andaddingmyownthoughtsandideas,IhadestablishedtheprogramoftherotatingclockwhichIwantedtomake.ThenIspecifiedthefunctionandcharacteristicsofthehardwarewhichwereneededformakingtherotatingclock,includingtheSTC89C52,theclockchipDS1302aswellastheinfraredremotecontrolchipTC9012.ThenIdesignedthesoftware,drewthescheme,andexplainedtheimportantcode.Finally,afterdebuggingthesoftwareandthehardware,Ihadmadetheconclusionthatmyalternativeofrotatingclockwasfeasible.IhopethatmorepeoplewillknowandlikePOVLEDafterreadingmythesis.
Keywords:
persistenceofvision;rotating;clockscanningdisplay
目录
第一章旋转时钟的原理及制作方案.....................................5
1.1旋转时钟原理分析............................................5
1.2方案的确定..................................................6
第二章硬件设计.....................................................8
2.1指针板的硬件设计............................................8
2.1.1单片机端口分配........................................8
2.1.2指针板电源驱动方式....................................9
2.1.3时钟芯片DS1302........................................9
2.1.4红外对管..............................................11
2.2红外遥控设备的硬件设计......................................11
2.3电源基板的硬件设计.........................................14
2.4电机的选择.................................................15
2.5电刷的制作.................................................15
2.6元器件焊接时应注意的问题...................................16
第三章软件设计....................................................17
3.1LED扫描显示程序设计........................................17
3.2单片机读写DS1302程序设计..................................19
3.3单片机对红外遥控代码的译码程序设计.........................21
第四章系统调试....................................................24
4.1硬件调试...................................................24
4.2软件调试...................................................24
结论.............................................................25
致谢.............................................................26
第1章旋转时钟的原理及制作方案
1.1旋转时钟原理分析
肯定有人会疑惑,就用图1.1(a)中这么一列发光二极管就能显示出一幅如图1.1(b)这么
漂亮的时钟画面吗其实原理很简单,就是利用了人眼的视觉暂留的错觉。
人的视觉有一种
惰性,当看一幅画的时候,这幅画的信息就保存在眼睛里了,即使这幅画突然消失,但保存在眼睛里的信息还将保留一会儿(大约十分之一秒),大脑的感觉就好像这幅画还存在似的,只要在1秒钟内这幅画能间断重复地显示十次以上,即使它在闪烁,但人会觉得这幅画是在一直稳定地显示着,这就是视觉暂留。
“a”静止状态下的旋转时钟“b”工作中的旋转时钟
它也是利用了视觉暂留的原理。
最内侧的一个发光二极管和最外侧的一个发光二极管在点亮并绕电机轴高速旋转后就形成了如图1.2(b)所示的内框和外框。
紧挨着外框的那个LED灯用来显示时间刻度,如图1.2(b)所示。
假设12点那个刻度为0°,那么每个小时时针之间的角度为360°÷12=30°,于是当整一列发光二极管每旋转30°,该LED灯就点亮一个瞬间以呈现出时间刻度。
如果在小于0.1秒内这列LED灯能旋转完一圈,人眼就会误认为先后产生的12个刻度是同一时间显示出来的。
显示秒针、分针和时针的方法跟显示时间刻度的原理一样。
我们假设用10支发光二极管来显示秒针,10支里面靠内部的9支用来显示分针,再靠内的7支作为时针的显示灯,如图1.2(a)所示。
举个例子,若要显示3点零5秒,在时间刻度的显示基础上,控制整列发光二极管在0°时点亮9支LED灯以显示分针在12点位置上,紧接着整列发光二极管又转过30°即到了1点的位置,此时点亮10支LED灯,用以显示秒针在5秒的位置上,当发光二极管再转过60°时,再点亮5支来显示时针指在3点的位置上,因为发光二极管在不断高速旋转,在1秒内已经重复点亮12点位置上的9支、1点位置上的10支和3点位置上的7支LED灯10次以上,所以人眼就会产生所示的画面。
时钟画面是由一列发光二极管绕圆心按顺时针方向逐列高速扫描过去,每到一列单片机控制相应的LED灯点亮或者熄灭,要在0.1秒内扫描完一圈,然后再重复执行这样的扫描,人的眼睛看上去就形成了一幅时钟的画面。
转速越高,LED灯越多,分辨率就越高,看上去就越逼真。
各个时刻并不一定用点来显示,还可以用数字来显示,接下来分析下发光二极管是如何
显示数字时间的。
如果一列LED灯在0.1秒内转一圈,那么我们最终看到的效果是这一列LED
在一圈内各个位置的图像的叠加。
用1表示,熄灭则为0,所以数字“3”从上至下、从左至右编码为0100010、1000001、1000001、1001001、1001001、1001001、0110110。
如果我们用单片机控制这一列发光二极管在相邻的7个等分时刻内显示7个不同的编码值,旋转一周后”小于0.1s”又重复输出这些代码,就会稳定地显示一个数字“3”。
同理还可以显示英文字符或者汉字,LED灯足够多,分辨率足够大。
1.2方案的确定
网上旋转时钟的资料比较多,款式也各有不同,但大致由底座、电机、指针板三大块组
成。
底座主要用来固定电机,是基础,必须要牢固,而电机是用来带动指针板高速旋转,是
出力的“苦工”,指针板是核心部分,上面有单片机、LED灯以及各种外围元器件,各种时钟画面就是靠指针板显示出来的。
通过对资料的整理总结出以下几种方案:
最简单就是用七八支LED灯来显示12个刻度点、分针和时针,显示、计时都靠单片机完成,没有掉电保护和调时功能,LED灯与单片机等各元件都由装在指针板上的电池供电工作。
这种方案虽然很简单,制作起来也较方便,但是由于电池装在指针板上,电池又相对较重,在高速旋转时一定要装对重才能保持指针板平衡,这样对电机的功率要求就比较大,而且浪费电源。
另外这种方案也没有掉电保护和调时功能,即使用电脑通过软件来调时间也很难调准,而且一旦掉电后就又得重新调,基本上是无法显示正确时间的,时钟最重要的就是时间准确,所以这种方案没有实际意义,只能做摆设,毕业设计当然要做得有意义一点,因此我不采取这种方案。
最复杂的方案是除了指针版外还在底座上加了块基板,板上有电源插孔,通过变压器送电进来,还有芯片,包括红外解码、按键检测、声控信号检测,指针板主要包括单片机、时钟芯片、数十支高亮LED灯、温度传感器和蜂鸣器等。
可以通过遥控或者直接用语言对基板下达指令,选择旋转时钟开起或者关闭、显示的模式如时钟模式、温度模式或者汉字模式,最重要的是可以当场调时了。
指针板上还有一个蜂鸣器,在执行按键等控制命令时鸣叫以及闹鸣叫功能和整点鸣叫报时功能。
温度传感器负责采集温度,并可以显示出来。
另外有了时钟芯片后旋转时钟就不怕掉电了,时钟芯片有后备电源,会同步时间,下次开起后不用调就能显示正确的时间。
更巧妙的是指针板的电是通过电机轴用电刷的方式提供的,就不需要
经常换电池了,而其指针板也轻了很多,电机功率可以取小一点。
我所设计的旋转时钟是介于最简单和最复杂方案之间的。
单片机负责数据的处理并控制LED的显示,红外接收模块负责接收和处理红外遥控器发出的红外遥控信号,因为旋转时钟在旋转显示时,不方便用按键调时,所以引入红外遥控技术,使得作品更加实用,时钟模块负责记录时间数据,从而节省了单片机的资源,提高其工作效率,并采用时钟芯片,可在系统掉电后正常计时,不需重新设定时钟时间,这使得时钟的使用更加便捷。
以上模块都集成在指针板上。
电源模块则装在底座上,经变压器送电给电机,再经稳压管通过电刷给指针板上各模块供电。
第2章硬件设计
2.1指针板的硬件设计
指针板是旋转时钟的关键部分,负责显示功能,指针板上有一排超高亮的LED灯。
它们
就是显示部件了,亮点所在。
为了制作方便,我把单片机、时钟芯片、发光二极管、一体化
红外接收头等器件焊接在一块指针型的电路板上,这样可以使旋转的电路成为一个独立的系
统,只需要外部送电进来就可以正常运作。
电路板中心钻一个电机轴插孔,插孔为半圆并且
半径与电机轴相等,电机轴插入其中带动指针板旋转。
该电路板越轻越好,LED灯可用贴片式。
LED灯数目根据不同用处可选多选少,我设计的时钟需要能显示“12、3、6、9”这四个整点数字和秒针、分针、时针,这样我用7支LED灯显示数字,21支用来显示秒、分、时三针,另外再加一支内框一支外框灯,总共30支LED灯,也足够用来显示汉字和英文。
在这个项目中,一共采用了30支LED。
也就是说每一列上可以分辨的显示点有30个点。
当然,这只是视觉上的显示效果。
但为了节省单片机I/O管脚,并不是每支LED灯都由一个I/O管脚控制的。
通过分析,我发现靠近内圈的那十几支LED,除了用做显示时钟指针外,并不适合用来显示字符。
而在显示指针时,这部分LED的亮灭是同时发生的,这样就可以用一个I/O口来控制这组LED,让它们是同时亮或者同时灭。
为了满足驱动电流,我加了一支三极管来驱动。
除了以上几点外,需要考虑的还有显示稳定问题:
比如指针板旋转扫描一圈完成了数字“12”的显示,如果电机速度因为各种原因而不稳定,转下一圈所用的时间多于”或少于”上一圈的,那么数字“12”将会移到上一次显示位置的左侧”或右侧”。
为了解决这个问题,在指针板上加装一个红外接收管,如图2.1所示。
当接收到与之配对的红外发光二极管”红外发光二极管安装在电机外壳上,并与接收管对齐”发出的红外线后,就会反向导通、.接到单片机外部中断、.将会触发外部中断。
指针板每旋转一周、.就会产生这样一个中断信号、.这个信号被称为“过零信号”。
有了这个信号、.单片机就可以在指针板旋转过程中实时检测计算指针板的角度位置、.并根据指针板所处的不同位置、.点亮相应的LED,这样每转一圈就能消除一圈的误差,使得显示内容保持稳定。
接下来我介绍一下指针板的供电方式和所用到的各个芯片的资料。
2.1.1单片机端口分配
旋转时钟的核心部件单片机主要用于对红外遥控代码的译码,读写DS1302的时间数据以及控制LED显示熄灭。
对单片机的程序存储量和控制能力要求并不高,选择STC89C52单片机绰绰有余。
本设计充分运用89C52的各个接口:
首先是28支LED灯,由于有13支LED灯只用来显示时针,所以它们是同时点亮或者熄灭的,可以接在同一个I/O接口上,取P2.7口。
P0.0-P0.7和P2.0-P2.7这16个引脚分别于16支LED灯连接,可以用来显示不同的字符,其次X1、X2引脚接12MHz晶振,P3.2口接一体化红外接收头,作为高优先级的外部中断,P3.3口接红外接收管,作为低优先级外部中断,P1.5-P1.7分别接DS1302的SLCK、I/O及CE引脚。
2.1.2指针板电源驱动方式
根据我收集到的资料,整理出以下三种供电方式:
一、电池供电。
这是最简单的方法,直接在指针板上安装两到三节7号电池就行了。
采
用这种方式不用担心电压波动,也没有接触不良的问题,能够十分稳定地给指针板供电。
但
是电池很不耐用,经常要换,既不经济又不环保,最大问题是太重,一般电机带不动,需要
选择较大功率电机,成本较大。
二、自感应发电。
这种方法是将一根导线中间部分绕在电机内部的转子上,电机旋转时该导线切割磁场,两头产生感应电动势,经过整流后作为指针板上的电源。
这种方式设计很巧妙,无机械磨损。
可惜提供的电流有限,只能适合LED较少的旋转时钟,当LED数量较多时,需要更大的电流,这种方式就不能满足了。
另外这种方式要对电机本身进行改造,也有一定的难度。
并不是所有的电机都适合这种改造,而且这种改造可能会给电机带来损害。
三、电刷传导供电。
就是在指针板上焊接一个滑环,套在电机轴上,但要与电机轴绝缘,电刷扣在滑环上,并接直流电正极。
负极接在电机轴上。
这种方法既能提供较大的电流又不会给指针板增重。
缺点是有机械摩擦、会产生磨损.因此要求滑环和电刷材料要耐磨。
另外还得有足够的弹性、并且要耐锈、否则会导致接触不良。
当然也会产生机械阻力因此要求电机功率要较大一点、还会产生机械噪音。
经过再三权衡、.我还是选择了用电刷供电的方法、.因为这种方法并不难实现、.电刷对电机产生的机械阻力应该小于装电池所要克服的惯性力。
2.1.3时钟芯片DS1302
大多数的单片机没有实时时钟部件,一旦系统掉电时钟就不能运行,下次再运行,时间就
不准确了。
即便使用备用电池,但要维持单片机系统的较大功耗也是坚持不了多久的。
而我所做的旋转时钟用到的单片机主要是来准确显示时间的,因此实时时钟部件必不可少,这我用了MAXIM公司的DS1302时钟芯片作为实时时钟部件,保证时间的长久准确性。
DS1302有着很强的功能。
包括时钟/日历寄存器和31字节”8位”的数据暂存寄存器,数据通信仅通过一条串行输入输出口。
实时时钟/日历提供包括秒、分、时、日期、月份和年份信息。
闰年可自行调整,可选择AM/PM的12小时制或24小时制。
只通过三根线进行数据的控制和传递:
CE(输入信号,在读、写数据期间,必须为高。
该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑,其次,CE提供结束单字节或多字节数据传输的方法。
),I/O(三线接口时的双向数据线),SCLK(串行时钟输入)。
通过备用电源可以让芯片在小于1MW的功率下运作。
对时钟寄存器初始化可以设定当前时间,控制芯片的运行,时间是用BCD码保存的,RAM可以用来存取用户数据,在用了备用电池后RAM内的数据在系统掉电时能够保持不丢失。
芯片采用了简单的I2C三线通信方式,便于节省芯片资源和与之接口的MCU的引脚。
芯片有着2.0-5.5V的宽供电电压范围,在5V供电时其接口与TTL电平兼容。
并且有着很低的功耗,在2.0V供电时仅耗300nA的电流。
引脚X1和X2连接32.768kHz晶体,与内部振荡器组成时钟。
晶体的精度直接影响着芯片时间的准确与否。
DS1302有两个电源引脚VCC1和VCC2,分别连接备用电池和电源VCC。
VCC2与主电源连接,VCC1接备用电池。
当VCC2低于VCC1时,芯片由VCC1供电,当VCC2-VCC1≥0.2V时,备用电池为芯片供电。
在VCC2供电时芯片能够对接在VCC1的备用电池充电,并且是否充电和充电电流都可以由芯片内地址为08H的时钟寄存器进行控制。
在进行任何数据传输时,CE必须被制高电平”虽然CE被置为高电平,但内部时钟还是在晶振作用下不停地计时的”,在每个SCLK上升沿时读入数据,下降沿时写出数据。
每个字节的传输都是由控制字节(如表2.1所示)指定的,控制字节的最高位Bit7必须是“1”,否则读写将会被禁止。
bit6为“0”则指定对时钟/日历寄存器进行读写操作,为“1”则对RAM区的数据进行读写操作,bit1-bit5指定相关寄存器进行输入输出操作,最低位bit0指定是输入还是输出,为“0”则为写,相反则为读,输入输出根据脉冲的上升沿和下降沿串行进行。
1RAM/CK用来表示相关寄存器的地址RD/WR控制字总是从最低位开始输出。
在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位”0位”开始。
同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
通过8个脉冲便可读取一个字节,从而实现串行输入与输出。
最初通过8个时钟周期载入控制字节到移位寄存器。
如果控制指令选择的是单字节模式,连续的8个时钟脉冲可以进行8位数据的读写操作。
8个脉冲便可读写一个字节。
载入控制字节后就可以对时钟/日历寄读寄存器写寄存器BIT7BIT6BIT5BIT4BIT3BIT2-BIT0范围
81h80hCH16-59秒0-15秒00-59
83h82h16-59分0-15分00-59
85h84h
12
0
20-23
15-19时0-15时
1-12/
24AM/PM0-23
87h86h00016-31日0-15日1-31
89h88h00010月月1-12
8Bh8Ah000001-7周1-7
8Dh8Ch015-99年0-15年00-99
8Fh8EhWP0—
秒寄存器”81h、80h”的位7定义为时钟暂停标志”CH”。
当该位置1时,时钟振荡器停止,DS1302处于低功耗状态,当该位置为0时,时钟开始运行。
小时寄存器”85h、84h”的位7用于定义DS1302是运行于12小时模式还是24小时模式。
当为高时,选择12小时模式。
在12小时模式下,位5为1时,表示PM。
在24小时