摘要 随着社会的发展,科技也得到进步。相对的,人们对人文的需要也越来越重视。我们从科技服务于人文的角度出发,设计出本POV-LED显示系统。该系统使用STC89C52RC作为主要控制单元,采用的是POV -LED(POV即persistence of vision视觉停留)技术,借助人眼的视觉暂留效果,通过旋转LED灯的方式来显示各种图像。原理是通过电动机带动上层的LED灯绕电机为中心轴高速旋转,同时单片机采集传感器反馈的信息,控制各个LED灯在旋转平面对应的位置上点亮,构成一幅点阵画,由于人的视觉暂留效果,会认为LED是同时点亮的,从而显示图像。
一、系统设计方案 1.1、总体方案 本设计采用双电源供电的方式,一部分供给下层的点击,另一部分供给上层的单片机。旋转线阵LED显示屏在高速旋转时,使用通过软件延时使之在相应的时刻亮灭,人的视觉暂留现象,从而形成完整连续的图像。因此对于显示方面可以采用单片机依据其晶振频率控制延时来实现。采用霍尔传感器采集数据并检测标志杆,标志杆作为现实的起点,从而得到稳定的显示画面。由独立按键开关的切换程序功能,从而显示不同的画面。 系统框图如下: 1.2系统组成 电源部分: 供电部分主要由两排4节5号电池通过电池盒固定连接组成,能在较长时间内稳定输出5v的直流电压供电机及单片机使用。 单片机部分:单片机部分采用STC89C52RC系列单片机芯片,该系列芯片造价低廉,工作稳定。 旋转显示部分:旋转显示部分主要由16颗贴片式led发光二极管组成。 传感器部分:传感器部分采用霍尔传感器。 2.1主控板的选择 | | 采用ARM为系统的控制核心,优点是功能强大,集成度度高,提高了运行稳定性,系统的处理速度高,适合作为大规模的系统的控制核心。
| 采用51单片机作为系统的控制核心。用其控LED,足以实现预期的性能指标,操控。51单片机运算功能强,软件编程灵活、自由度大,功耗低、体积小、技术成熟,价格低廉。 |
由于考虑到不宜太高,那么对系统处理信息的速度要求也就不会太高。综合成本考虑,我们选择采用方案二。 2.2 供电方式选择 LED旋转采用电机旋转的方式,以下是两种电机方案的对比: | | 采用单电源供电,通过单电源同时给主控板和减速直流电机进行供电,该方案的优点是,减少机身的重量,操作简便。其缺点是,使得单片机的波动较大,影响单片机的工作性能,稳定性比较弱。 | 采用双电源供电,通过两个独立电源分别对单片机和减速直流电机进行供电,此方案的优点是,减少信号波动,稳定性比较好,小车运行较稳定。 |
通过对以上方案尽心比较以上两种方案,为了得到更稳定的效果,我们选取方案二。
2.3 驱动电机选择 | | 采用减速直流电机,优点是电路简单。转速稳定,调速简便,且价格低廉。对于智能车的运行,能够很好的控制。 | 采用步进电机,步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。可以按照人们的预定的速度调速,但是电机的控制较为复杂。 |
表1.1 电机性能对比
综合考虑,采用减速直流电机作为LED旋转电机。 2.4传电方案的选择 该装置的难点之一在于供电底座与需要用电的旋转发光部分的电气连接,装置要求能给旋转发光部分提供稳定的直流电压的同时阻力较小不影响电机带动其转动。 1电刷连接 优点:成本相对较低,能提供稳定电压,同时电刷工作时旋转有一定的美观性,阻力较大。 缺点:会有轻微的噪声,稳定性较差,易损毁,接触电阻较大,电压损耗较大,制作工艺要求高。 2划环 优点:能提供稳定电压,接触电阻极其小,电压损耗较小,占用体积较小,阻力较小。 缺点:元件价格高。 3无线供电 优点:能提供稳定电压,阻力较小。 缺点:电路元件数量较多,占用体积较大 综合考虑我们采用无线供电方式。 2.5旋转显示部分的选择 贴片式Led发光二极管 优点:体积较小,重量较轻。 缺点:亮度稍暗,不适用于室外强光环境。 直插式led发光二极管 优点:亮度较高,显示效果好。 缺点:占用体积较大,重量较大。 综合考虑我们采用贴片式Led发光二极管。 3、电路与程序设计 3.1无线供电 单片机系统和LED灯都分布在电机上,被电机带东旋转,如果直接用电线必然会被绞在一起然后断掉,有团队考虑了两种方案:1.电刷供电;2.无线供电。在尝试第一种电刷时,由于电机转动会产生微微振动,使得电刷不够稳定导致单片机芯片一直处于重置状态。所以采用了无线供电,电路图如下: 原直流电电源供电经过高频振荡电路产生振荡电流传到传送模块—感应线圈。用感应线圈把电能传到电机上的电路,传上了的电是交流电,经过整流桥和电容整流滤波后,产生一个稳定的直流电压给单片机供电。 3.2起始位置校准 电机转速的稳定性直接决定了显示是否有重影和浮影。然而,要其完全不变是不可能的。在这种情况下,误差会积累而形成浮影。 所以,对起始位置的不断矫正是理由非步进电机制作旋转LED显示屏必不可少的技术。通过霍尔传感器检测置于固定位置的小磁铁来不断定位起始位置消除积累误差。本装置中当霍尔原件到固定小磁铁位置,就会反向导通产生低电平而触发外部中断。指针板每旋转一周,就会产生这样一个中断信号,这个信号被称为“过零信号”。 外部中断的任务是将旋转角度清零,以此消除积累误差。 3.3功能切换 通过当按住按键时,让STC89C51芯片IO口检测到低电位,然后通过程序设计来实现功能切换; 3.4最小系统与LED线阵 一个条状电路板上集成了16个贴片型发光LED—线阵LED。集成有LED的电路板绕其一端随电动机转动。由STC89C51芯片IO口控制,当转动到合适的角度时,对应的IO口输出高电平点亮合适的LED就可以显示需要显示的内容。 4 软件设计 4.1 软件平台 简介:Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。[3]工作界面如图4.4.1。
另一款用到的软件是PCtoL2002,可以有效减少程序开发周期。工作界面如图4.4.2
4.2程序流程设计 该POV-LED通过实时检测各个模块传感器的输出电平,利用红外对管检测黑线实现寻迹,通过火焰传感器实现报警和灭火,从而实现比赛的基本要求。其程序流程图如图4.4所示。 5 结束语 项目设计以STC89C52RC单片机为核心,采用了霍尔传感器,工作灵敏。该机器人可以实现了如下能: 6附录
单片机源程序如下:
- #include <reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- //Led P1,P2
- sbit key=P3^3;//霍尔开关
- sbit key_1=P3^4;//功能开关
- voidtongxinyuan();
- voidhanzi();
- int s;
- s=0;
- uchar code table[]={
- 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x20,0x80,0x10,0x80,0x10,0x80,0x08,0x80,0x08,
- 0x80,0x0C,0x80,0x04,0x90,0x06,0x90,0x02,0x88,0x03,0xC8,0x01,0xD8,0xF9,0xF8,0xFF,
- 0xF4,0x7F,0x54,0x02,0x46,0x02,0x46,0x02,0x42,0x02,0x40,0x04,0x00,0x04,0x00,0x04,
- 0x00,0x04,0x40,0x04,0x40,0x04,0xC8,0x02,0x90,0x02,0x90,0x02,0x10,0x02,0x00,0x02,
- 0x01,0x02,0x03,0x02,0xFF,0xFF,0xFE,0xFF,0xFE,0x3F,0x00,0x02,0x00,0x02,0x00,0x02,
- 0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"科",0*/
-
- 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x18,0x00,0x18,0x40,0x18,0x40,0x08,
- 0x40,0x08,0x40,0x44,0x40,0x84,0x40,0x84,0x40,0x86,0x43,0xE2,0xFF,0xFF,0xFE,0xFF,
- 0x22,0x01,0x20,0x01,0x20,0x00,0x20,0x80,0x00,0x80,0x00,0x80,0x00,0x86,0x20,0x86,
- 0x20,0x46,0x20,0x46,0x20,0x4A,0x20,0x4A,0x21,0x71,0xF3,0x31,0xFE,0x31,0x3E,0x31,
- 0x36,0x39,0x12,0x7F,0x10,0x6F,0x10,0x47,0x10,0xC1,0x10,0xC1,0x10,0xC0,0x10,0x80,
- 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"技",1*/
-
- 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,
- 0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x18,0x00,0x08,0x00,0x0C,0x00,0x06,0x00,0x06,
- 0x00,0x03,0x80,0x01,0xC0,0x01,0xE0,0x00,0x70,0x00,0x7C,0x00,0xBC,0x00,0x1C,0x01,
- 0x0C,0x01,0x04,0x03,0x00,0x02,0x00,0x06,0x00,0x04,0x00,0x0C,0x00,0x0C,0x00,0x18,
- 0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,
- 0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"人",2*/
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x40,0x21,0x40,0x21,0x40,0x21,
- 0x20,0x22,0x20,0x32,0x22,0x16,0x22,0x1C,0x22,0x1C,0x26,0x0E,0xE6,0x0F,0xE6,0x1F,
- 0xE4,0x11,0xE0,0x30,0x10,0x30,0x10,0x20,0x10,0x60,0x10,0x60,0x10,0x40,0x10,0xC0,
- 0x10,0xC0,0x10,0xC0,0x10,0xC0,0x10,0xC0,0x10,0xC0,0x00,0x80,0x00,0x80,0x00,0x80,
- 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"文",3*/
-
- };
-
- voiddelayms(uint z)
- {
- uinti,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
-
- }
- /*****n(us)延时子程序*****/
- voidDelayUs(uint N)
- {
- uint x;
- for(x=0; x<=N;x++);
- }
- /*****键盘扫描*****/
- intkeyscan()
- {
- if(key_1==0)
- {
- delayms(10);
- if(key_1==0)
- {
- while(!key_1);
- if(++s==3)s=0;
- }
- }
- return s;
- }
-
- //****************同心圆******************
- voidtongxinyuan()
- {
- int k;
- P1=0x01;
- for(k=0;k<8;k++)
- {
- delayms(500);
- P1=_crol_(P1,1);
- }
- P1=0x00;
- P2=0x01;
- for(k=0;k<8;k++)
- {
- delayms(500);
- P2=_crol_(P2,1);
- }
- P2=0x00;
- while(key_1);
- }
- //****************汉字******************
- voidhanzi()
- {
- inti;
- if(key==0)
- {
- for(i=0;i<512;i++)
- {
- P1=table[i];
- P2=table[++i];
- DelayUs(10);
- }
- P1=0x00;
- P2=0x00;
- }
- }
-
- //****************主函数******************/
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整的Word格式设计报告文档51黑下载地址:
基于STC89C52的POV.docx
(323.17 KB, 下载次数: 218)
|