1、12013 年全国大学生电子设计竞赛线阵 LED 图文显示装置2013 年 7 月 22 日组员 许卫 赵俊 饶建玲2摘 要:本设计是利用人眼视觉暂留效应原理来实现的。通过直流电机带动线阵LED 以合适的速度旋转,以 MSP430G2553 单片机为核心,来精确地控制 LED 的亮灭时间,从而实现 LED 的各种变换。本设计由 MSP430 控制电路模块,电机及其驱动模块,线阵 LED 驱动模块,亮度自动调节模块等主要模块组成。利用霍尔传感器来确定线阵 LED 的起始位置,使用取模软件来实现显示文图,通过光敏电阻来自动控制 LED 亮度,并运用按键切换来控制显示不同的内容。关键词:MSP430
2、G2553 视觉暂留 线阵 LED 霍尔传感器 光敏电阻Abstract: This design is to use the principle of persistence of vision effect to the human eye. Driven by dc motor linear array LED rotating at a speed of right, MSP430G2553 single-chip microcomputer as the core, to destroy the precise control of the LED light time, so as
3、 to realize the transforming of the LED. This design by MSP430 control circuit module, motor and driver module, linear array LED driver module, brightness automatically adjust the module of main modules. Using hall sensor to determine the starting position of linear array LED, using modulus software
4、 to implement the display figure, through the photoconductive resistance to automatically control the LED brightness, and using the key switch to control the display different content.Keywords: MSP430G2553 Persistence of vision Linear array LED Hall sensor Photosensitive resistance3目录目 录1系统方案选择和论证 4
5、1.1 课题任务及要求 41.2 系统方案论证及选择 .41.2.1 电机的比较与选择 41.2.2 电机驱动电路的比较与选择 .51.2.3 LED 亮度控制电路比较与选择 51.2.4 供电方案的比较与选择 52理论分析与计算 62.1 线阵 LED 参数计算 62.2 线阵 LED 运动参数分析与计算 .62.3 显示亮度自动调节分析与计算 .63.电路与程序设计 .73.1 电路设计 .73.1.1 系统总体方案设计 73.1.2 单元电路及原理分析 73.1.4 电路原理图 93.2 程序设计 93.2.1 程序功能描述与设计思路 .93.2.2 程序总体流程图 103.2.3 程序
6、清单 .104.测试方案与测试结果 .114.1 测试条件与仪器 .114.2 测试结果及分析 .115. 结论 .116. 参考文献 11附录 1:电路原理图 .12附录 2:光敏电阻、L298 12附录 3:原器件清单 .1341系统方案选择和论证1.1 课题任务及要求(1) 制作一个由 16 只 LED 构成的线状点阵及其控制电路,安装于可旋转的平台上,在平台的中心设置一个按键,用于功能的切换,电机带动平台以合适速度旋转。(2) 开机时装置完成显示自检,能对点阵中 16 只 LED 逐个点亮,每只LED 显示时间约为 1 秒,此时平台不旋转。(3) 通过按键切换,实现 16 个同心圆图形
7、分别顺序(由大到小)和逆序(由小到大)显示,每个同心圆图形显示时间为 0.3 秒左右。(4) LED 显示亮度能依据环境亮度变化自动调节。2. 发挥部分(1) 通过按键切换,显示字符“TI 杯”,要求字符显示稳定,无明显漂移。(2) 通过按键切换,显示一个指针式秒表,该秒表以标志杆为起始标志,秒针随时间动态旋转,旋转一周的时长为 601 秒。(3) 其它。1.2 系统方案论证及选择1.2.1 电机的比较与选择方案一:使用步进电机,步进电机停转时具有最大的转矩,而且每步的精度在 3%5%,并且误差不会累计到下一步,因而有较好的位置精度和运动重复性,但是其控制不当容易产生共振,且难以运转较高的速度
8、。方案二:开关磁阻电机,结构简单,成本低,可用于高速运转,可控参数多,调速性能好,但是因为转矩是由脉冲转矩叠加而成,合成的转矩不是恒定转矩,噪声震动比一般电动机大。方案三:直流电机有优良的控制性能,其机械性能和调速特性均为平行的直线,且启动转矩大,效率高,过载能力强,调速方便动态性能好。通过对本次项目的综合考虑 ,故采用方案三。1.2.2 电机驱动电路的比较与选择方案一:中功率三极管直接搭建。在电机驱动要求不高的地方可以由三极管直接搭建一个驱动电路。使用三极管搭建的电路,其电路简单,但功率和性能一般,集电极电流过大,电阻消耗的功率加大,造成发热,影响系统的性能,并且对输入信号要求较高,输出性能
9、只能满足一般要求。方案二:使用 L298N 芯片驱动电机 L298N 既可以驱动直流电机也可以驱动步进电机,本设计中考虑到电机的带负载能力以及效率和调速方便等问题所以选择用直流电机。L298N 电路简单,使用比较方便。通过比较,使用 L298N 芯片充分发挥了它的功能,能稳定地驱动直流电机,且价格不高,故选用 L298N 驱动电机51.2.3 LED 亮度控制电路比较与选择方案一:通过光敏二极管和一个 2.7K 的电阻一起控制 NPN 型三极管基极的电流,从而控制加在 LED 上面的电流,这样不需要在每个 LED 前面加限流电阻。只需要用一个限流电阻,电路简单。光敏二极管暗电流较小,有光时光电
10、流较大。但是其效果并不明显,且电路不稳定。 (图 1)图 1方案二::采用光敏电阻与 TLC555 搭建电路。用 TLC555、电容、电位器组成振荡电路产生稳定的 PWM 波输出。而光敏电阻的变化引起输出 PWM 波占空比的变化,从而改变显示亮度。电路简单,且易于控制。通过比较选定此方案二作为环境亮度变化调节电路。1.2.4 供电方案的比较与选择方案一:采用电刷供电。即在电机的转轴上手工增加一个电刷,通过电刷为系统供电。此方法能够让系统长期供电,但是由于增加了电刷,电机的摩擦增大,势必会使系统的功耗增加,且不易控制,比较麻烦。方案二:采用锂电池供电。即在电路板是直接附带一个锂电池,为系统供电。
11、锂电池体积小,供电时间长,容易固定。使用时将电池固定在电路板,既解决旋转时因重力引起的重心不稳,同时也省去制作的时间。综合考虑本设计的电路模式,采用方案二。2理论分析与计算2.1 线阵 LED 参数计算LEDoncIV限 流 电 阻LED 与电阻串联,所以该限流电阻为:根据 设计要求,Vcc=3.3v,Vled=1.8v,Von=0.6v,Iled=10mA;可求得的限流电阻为 R=90.为了方便最后电阻取为 R=100.2.2 线阵 LED 运动参数分析与计算在电机的带动下,线阵 LED 依靠旋转平台进行旋转,在 40 毫秒之内运动的物体认得眼睛无法辨别,线阵 LED 就能很好的地显示图文。
12、设电机周期为 ,我t6们取周期 t 为 40 毫秒。2.4 显示亮度自动调节分析与计算采用 TI 的 TLC555、电容 , 、电阻 和光敏电阻 等组成振荡电路1C21R3产生稳定的 PWM 波输出。则产生 PWM 波的周期、充电时间及其占空比的计算公式如下:周期为:T=(R1+R2)C1高电平时间为:T1=R1C121TR占 空 比经测试,光敏电阻的阻值在 200 到 16K 变化,正常光线下,阻值为 2K,取 R1 为2K,占空比的变化范围较大。 光敏电阻的变化引起输出 PWM 波占空比的变化,从而改变显示亮度。占空比越大,LED 接通的时间越长,断开的时间越短,显示越亮。3.电路与程序设
13、计3.1 电路设计3.1.1 系统总体方案设计MSP430G2553霍尔传感器 线阵 LED电机驱动 L298亮度控制(光敏电阻)12V 电源 直流电机3.3V 电源按键图 2其总体设计如上图所示,霍尔传感器采集数据通过 MSP430 的处理控制电机的转速;MSP430G2553 的控制通过按键的中断使 LED 显示不同的图文,当环境亮度改变时,由光敏电阻和 NE555 组成的占空比可调的电路自动改变 LED 的亮度,环境光线越亮,灯越亮,满足设计要求。3.1.2 单元电路及原理分析亮度控制电路:采用 NE555 与光敏电阻搭建电路。用 555,电阻,电容及二7极管组成振荡电路,产生稳定的 P
14、WM 波输出,而光敏电阻的变化输出 PWM 波占空比的变化,从而改变 LED 的显示亮度,实现亮度随外界的变化而变化。 (图3)图 3 线阵 LED 控制电路:我们所做电路选用的控制芯片用是有 20 个引脚MSP430G2553,所以控制 16 个 LED 显然不够用,因此利用 74HC595 实现串转并来控制线阵 LED.(图 4)图 4 PWM 产生及控制 L298 电路:采用两片 LM358 及电容电阻稳压二极管来构成三角波发生电路产生三角波,通过比较器 LM311 与一直流量比较产生 PWM,通过调节其占空比来控制 L298.(图 5)8图 5机驱动电路: L298 是双 H 桥高电压
15、大电流集成电路,直接采用 TTL 逻辑电平控制。通过外接信号来调节 PWM.在一个 PWM 周期内,电机承受双极性电压,电机的速度和方向均有 PWM 决定。 (图 6)图 6 3.1.4 电路原理图见附录一。3.2 程序设计见附录四。3.2.1 程序功能描述与设计思路单片机 MSP430G2553 通过 74HC595 进行串转并来控制 16 个 LED。初始化,LED自检后,逐个依次点亮;通过独立按键控制线阵 LED 显示不同的图文3.2.2 程序总体流程图当系统上电单片机初始化后,线阵 LED 进行自检,此时 16 个 LED 逐个点亮,当按键按下时,LED 根据程序的设计显示不同的图文,
16、流程图如下:(图 7)9开始初始化LED 自检按键按键次数 tt=1同心圆由大到小t=2T=3同心圆由小到大TI 杯t=4指针式秒表ynynyyynnn图七3.2.3 程序清单见附录四。4.测试方案与测试结果4.1 测试条件与仪器数字示波器 万用表 信号发生器4.2 测试结果及分析本设计的基本要求均已完成,可以在运转时按按键切换显示的内容,但也存在值得改进的地方。旋转平台不太稳,导致显示出现稍许飘移,秒表指针显10示也不能达到精确的 60 秒一周。因为单片机内部的 DCO 本来就存在误差,而延时又是用 delay 来延时的,这样误差更大,为了减小这些误差,应该使用外部晶振,并且用定时器来延时。
17、 5. 结论经过多日的辛勤努力,系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。通过这次的项目,我们都学到了很多东西,因为这个项目主要针对的是软件方面,所以我们在软件方面下了很大功夫,有些程序在我们平时都没有训练过的,经过不断的摸索与实验,和其它同学交流,软件上有很大的进步。在硬件调试的过程中,我们也遇到很多问题,主要体现在线阵的平衡和稳定上面。由于时间紧,工作量大,系统还存在许多可以改进的地方。本次竞赛锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步。6. 参考文献1 秦龙编著.
18、MSP430 单片机常用模块与综合系统实例精讲.北京:电子工业出版社,2007.72 沈建华等 .MSP430 系列 16 位超低功耗单片机实践与系统设计.北京:清华大学出版社,2005.43 董诗白、华成英等 .模拟电子技术基础.北京:高等教育出版社.2005.6附录 1:11附录 2:光敏电阻、L298光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。L298N 是 SGS 公司生产的直流电机驱动集成电路。内部包含 4 通道逻辑驱动电路,可以方便地驱动两个直流电机,或一个两相步进电机。工作电压为 46V,输出电压最高可达
19、50V,可以直接通过电源来调节输出电压;输出电流可达2.5A,最大可以达到 4A,可驱动电感性负载;可以直接用单片机的 IO 口提供信号;而且电路简单,使用比较方便。L298N 可接受标准 TTL 逻辑电平信号VSS,9 脚 VSS 可接 4.57V 的电压。4 脚 VS 接电源电压,VS 电压范围 VIH 为2.546V。1 脚和 15 管脚下的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298 可驱动 2 个电动机,此时 OUT1,OUT2 和 OUT3,OUT4之间可分别接电动机。5、7、10、12 脚接输入控制电平,控制电机正反转;ENA,ENB 脚接控制使能端,控制电
20、机的停转。L298 逻辑功能表IN1 IN2 ENA 电机状态 0 停止0 0 0 停止0 1 1 逆时针1 0 1 顺时针1 1 0 停止12附录 3:原器件清单元器件名称 元器器件型号 元器件个数单片机 MSP430G2553 1电机 174HC595 74HC595 2电机驱动芯片 L298 1比较器 LM311 1集成运放 LM358 2光敏电阻 1电源 锂电池 1传感器 霍尔传感器 1按键 独立按键 1电容 若干电阻 若干导线 若干附录四: 程序清单/*程序功能:线阵 LED 图文显示作者 :许卫日期 :2013.7.25All rights reserved!*/#include#
21、define uchar unsigned char#define uint unsigned int/*74HC595 引脚定义*/#define L_DATA BIT1#define L_CLK BIT5#define L_STR BIT4#define L_OE BIT3/*全局变量定义*/uchar t50ms,ts,tm=32,th=12;uchar count=0,num;13uchar Clock_buff=“12:35:20“;uchar const disp_buff64;uchar const num_buff;uchar sort_buff164;uchar sort_b
22、uff264;/*延时函数*/void delay_ms(uint time)uint i,j;for(i=time;i0;i-)for(j=250;j0;j-);/*延时函数*/void delay_320us(uchar time)uint i,j;for(i=time;i0;i-)for(j=77;j0;j-); /320us/*数组元素重新排序*/void Re_sort()uchar i;for(i=0;i=1;P2OUT|=L_STR; /上升沿数据锁存P2OUTP2OUT /输出使能/*写一个字符串*/void disp_ascii(uchar *p)unsigned int t
23、emp;unsigned char i,j;for(j=0;*p!=0;j+)for(i=0;i=1;temp=0x0001;for(i=0;i=5) count=1; while(!(P1INif(P1IFGif(count=1) P1IE /关中断draw_circle();P1IE|=BIT1; /同心圆显示完后开中断else if(count=2) /每次霍尔中断就显示一次 TI 杯P2OUT|=L_OE;draw_TI_cup(sort_buff2);P2OUT|=L_OE; else if(count=3) TACTL|=MC_1; /开始定时draw_second_hand();
24、else if(count=4)Clock_buff0=ts%10+0x30;Clock_buff1=ts/10+0x30;Clock_buff3=tm%10+0x30;Clock_buff4=tm/10+0x30;Clock_buff6=th%10+0x30;Clock_buff7=th/10+0x30;disp_ascii(Clock_buff); /Timer A0 interrupt service routine#pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A0 (void)19t50ms+;if(t50ms=20)t50m
25、s=0;ts+;if(ts=60)ts=0; tm+;if(tm=60)tm=0;th+;if(th=24)th=0;uchar const disp_buff64=0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00,0x10,0x40,0x11,0x80,0x16,0x00,0xFF,0xFF,0x12,0x00,0x51,0x
26、20,0x40,0x40,0x40,0x80,0x43,0x00,0x4F,0xFF,0x70,0x00,0x41,0x00,0x40,0x80,0x40,0x60,0x40,0x30,0x00,0x00,;uchar const num_buff=0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00, /*“0“,0*/ /数据已经处理0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x1F,0xFC,0x08,0x04,0x08,0x04,0x00,0x
27、00, /*“1“,1*/200x00,0x00,0x0E,0x0C,0x11,0x84,0x10,0x44,0x10,0x24,0x10,0x14,0x0E,0x0C,0x00,0x00, /*“2“,2*/0x00,0x00,0x0C,0x70,0x12,0x88,0x11,0x04,0x11,0x04,0x10,0x04,0x0C,0x18,0x00,0x00, /*“3“,3*/0x00,0x00,0x00,0x24,0x1F,0xFC,0x08,0x24,0x04,0x24,0x03,0x20,0x00,0xE0,0x00,0x00, /*“4“,4*/0x00,0x00,0x10,
28、0x70,0x10,0x88,0x11,0x04,0x11,0x04,0x10,0x84,0x1F,0x98,0x00,0x00, /*“5“,5*/0x00,0x00,0x00,0x70,0x18,0x88,0x11,0x04,0x11,0x04,0x08,0x88,0x07,0xF0,0x00,0x00, /*“6“,6*/0x00,0x00,0x10,0x00,0x1C,0x00,0x13,0x00,0x10,0xFC,0x10,0x00,0x1C,0x00,0x00,0x00, /*“7“,7*/0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00, /*“8“,8*/0x00,0x00,0x07,0xF0,0x08,0x88,0x10,0x44,0x10,0x44,0x08,0x8C,0x07,0x00,0x00,0x00, /*“9“,9*/0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, /*“:“,10*/;