线阵LED图文显示Word文档格式.docx
《线阵LED图文显示Word文档格式.docx》由会员分享,可在线阅读,更多相关《线阵LED图文显示Word文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
使用三极管搭建的电路,其电路简单,但功率和性能一般,集电极电流过大,电阻消耗的功率加大,造成发热,影响系统的性能,并且对输入信号要求较高,输出性能只能满足一般要求。
使用L298N芯片驱动电机L298N既可以驱动直流电机也可以驱动步进电机,本设计中考虑到电机的带负载能力以及效率和调速方便等问题所以选择用直流电机。
L298N电路简单,使用比较方便。
通过比较,使用L298X芯片充分发挥了它的功能,能稳定地驱动直流电机,且价格不高,故选用L298X驱动电机
LED亮度控制电路比较与选择
通过光敏二极管和一个的电阻一起控制\P\型三极管基极的电流,从而控制加在LED上面的电流,这样不需要在每个LED前面加限流电阻。
只需要用一个限流电阻,电路简单。
光敏二极管暗电流较小,有光时光电流较大。
但是其效果并不明显,且电路不稳定。
(图1)
图1
:
采用光敏电阻与TLC555搭建电路。
用TLC555、电容、电位器组成振荡电路产生稳定的PWM波输出。
而光敏电阻的变化引起输出PWM波占空比的变化,从而改变显示充度。
电路简单,且易于控制。
通过比较选定此方案二作为环境充度变化调节电路。
供电方案的比较与选择
采用电刷供电。
即在电机的转轴上手工增加一个电刷,通过电刷为系统供电。
此方法能够让系统长期供电,但是由于增加了电刷,电机的摩擦增大,势必会使系统的功耗增加,且不易控制,比较麻烦。
采用锂电池供电。
即在电路板是直接附带一个锂电池,为系统供电。
锂电池体积小,供电时间长,容易固定。
使用时将电池固定在电路板,既解决旋转时因重力引起的重心不稳,同时也省去制作的时间。
综合考虑本设计的电路模式,采用方案二。
2.理论分析与计算
线阵LED参数计算
限流电阻=
LED与电阻串联,所以该限流电阻为:
根据设计要求,Vcc=,Vled=,Von=,Iled=10mA;
可求得的限流电阻为R=90Q.
为了方便最后电阻取为R=100。
.
线阵LED运动参数分析与计算
在电机的带动下,线阵LED依靠旋转平台进行旋转,在40亳秒之内运动的物体认得眼睛无法辨别,线阵LED就能很好的地显示图文。
设电机周期为/,我们取周期t为40毫秒。
显示亮度自动调节分析与计算
采用TI的TLC555、电容G,g、电阻叫和光敏电阻&
等组成振荡电路产生稳定的PWM波输出。
则产生PWM波的周期、充电时间及其占空比的计算公式如下:
周期为:
T=(R1+R2)C1
高电平时间为:
T1=R1C1
经测试,光敏电阻的阻值在200到16K变化,正常光线下,阻值为2K,取R1为2K,占空比的变化范围较大。
光敏电阻的变化引起输出PWM波占空比的变化,从而改变显示克度。
占空比越大,LED接通的时间越长,断开的时间越短,显示越克。
3.电路与程序设计
电路设计
系统总体方案设计
图2
其总体设计如上图所示,霍尔传感器采集数据通过MSP430的处理控制电机的转速;
MSP430G2553的控制通过按键的中断使LED显示不同的图文,当环境充度改变时,由光敏电阻和NE555组成的占空比可调的电路自动改变LED的光度,环境光线越亮,灯越亮,满足设计要求。
单元电路及原理分析
亮度控制电路:
采用NE555与光敏电阻搭建电路。
用555,电阻,电容及二极管组成振荡电路,产生稳定的PWM波输出,而光敏电阻的变化输出PWM波占
空比的变化,从而改变LED的显示充度,实现先度随外界的变化而变化。
(图3)
线阵LED控制电路:
我们所做电路选用的控制芯片用是有20个引脚MSP430G2553,所以控制16个LED显然不够用,因此利用74HC595实现串转并
PWM产生及控制L298电路:
采川两片LM358及电容电阻稳压二极管来构成三角波发生电路产生三角波,通过比较器LM311与一直流量比较产生PWM,通过调节其占空比来控制L298.(图5)
机驱动电路:
L298是双H桥高电压大电流集成电路,直接采用TTL逻辑电平控制。
通过外接信号来调节PWM.在一个PWM周期内,电机承受双极性电压,电机的速度和方向均有PWM决定。
(图6)
电路原理图
见附录一。
程序设计
见附录四。
程序功能描述与设计思路
单片机MSP430G2553通过74HC595进行申转并来控制16个LED。
初始化,LED
自检后,逐个依次点先;
通过独立按键控制线阵LED显示不同的图文
程序总体流程图
当系统上电单片机初始化后,线阵LED进行自检,此时16个LED逐个点兜,当按键按下时,LED根据程序的设计显示不同的图文,流程图如下:
(图7)
开始
初始化
LED自检
y
按键次数t
指针式秒
图七
程序清单
4.测试方案与测试结果
测试条件与仪器
数字示波器万用表信号发生器
测试结果及分析
本设计的基本要求均已完成,可以在运转时按按键切换显示的内容,但也存在值得改进的地方。
旋转平台不太稳,导致显示出现稍许飘移,秒表指针显
示也不能达到精确的60秒一周。
因为单片机内部的DC0本来就存在误差,而延时乂是用delay来延时的,这样误差更大,为了减小这些误差,应该使用外部晶振,并且用定时器来延时。
5.结论
经过多日的辛勤努力,系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。
通过这次的项目,我们都学到了很多东西,因为这个项目主要针对的是软件方面,所以我们在软件方面下了很大功夫,有些程序在我们平时都没有训练过的,经过不断的摸索与实验,和其它同学交流,软件上有很大的进步。
在硬件调试的过程中,我们也遇到很多问题,主要体现在线阵的平衡和稳定上面。
由于时间紧,工作量大,系统还存在许多可以改进的地方。
本次竞赛锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但总体上成功与挫折交替,困难与希望并存,我们将继续努力争取更大的进步。
6.参考文献
[1]秦龙编着.《MSP430单片机常用模块与综合系统实例精讲》.北京:
电子工业出版社,
[2]沈建华等.《MSP430系列16位超低功耗单片机实践与系统设计》.北京:
清华大学出版社,
[3]董诗白、华成英等.《模拟电子技术基础》.北京:
高等教育出版社.
UJ
,2(1Ms1
nMMrrrjQ
iyr芟
h«
R,y
,1,TPTWF1<
TAJfT>
tTaX>
^i(TAJT»
n>
y■.
附录2:
光敏电阻、L298
光敏电阻器是利用的制成的一种电阻值随入射光的强弱而改变的电阻器;
入射光强,电阻减小,入射光弱,电阻增大。
必
L298N是SGS公司生产的直流电机驱动集成电路。
内部包含4通道逻辑驱动电路,可以方便地驱动两个直流电机,或一个两相步进电机。
工作电压为46V,输出电压最高可达50V,可以直接通过电源来调节输出电压;
输出电流可达,最大可以达到4A,可驱动电感性负载;
可以直接用单片机的10口提供信号;
而且电路简单,使用比较方便。
L298N可接受标准TTL逻辑电平信号VSS,9脚VSS可接〜7V的电压。
4脚VS接电源电压,VS电压范围VIH为+〜46V。
1脚和15管脚下的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。
L298可驱动2个电动机,此时0UT1,0UT2和0UT3,0UT4之间可分别接电动机。
5、7、10、12脚接输入控制电平,控制电机正反转;
ENA,E\B脚接控制使能端,控制电机的停转。
L298逻辑功能表
IN1
IN2
ENA
电机状态
X
停止
1
逆时针
顺时针
附录3:
原器件清单
元器件名称
元器器件型号
元器件个数
单片机
MSP430G2553
电机
74HC595
2
电机驱动芯片
L298
比较器
LM311
集成运放
LM358
光敏电阻
电源
锂电池
传感器
霍尔传感器
按键
独立按键
电容
若干
电阻
导线
附录四:
f
•I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I••I•
程序功能:
作者:
许卫
日期:
rightsreserved!
#include<
>
#defineucharunsignedcharttdefineuintunsignedint
/**74HC595引脚定义**/
MefineL_DATABill
itdefineL_CLKBIT5
^defineL_STRBIT4
^defineL_0EBIT3
/**全局变量定义**/
uchart50ms,ts,tm=32,th=12;
ucharcount=0,num;
ucharClock_buff[]={,z12:
35:
20z/};
ucharconstdisp_buff[64];
ucharconstnum_buff[];
ucharsort_buff1164];
ucharsort_buff2164];
/****延时函数****/voiddelay_ms(uinttime)(
uinti,j;
for(i=time;
i>
0;
i--)for(j=250;
j>
j—);
)
/****延时函数****/
voiddelay_320us(uchartime)(
i一-)for(j=77;
j>
j—);
//320us
}
/****数组元素重新排序****/
voidRe_sort()(
uchari;
for(i=0;
i<
64;
i++)
sort_buff1[63-i]=disp_buff[i];
32;
i++)(
sort_buff2[2*i]=sort_buff1[2*i+l];
sort_buff2[2*i+l]=sort_buff1L2*i];
/****单片机初始化函数****/
voidmcu-init()(
WDTCTL二WDTPW+WDTHOLD;
BCSCTL1=CALBC1」MHZ;
//DCO设置为IMDCOCTL二CALDCO」MHZ;
BCSCTL3I=LFXT1SJ);
IFG1&
iOFIFG;
BCSCTL2|=SELM_1;
〃设置主时钟MCLK为DCO,且频率为1MHz,子时钟IMo)
/****定时器初始化函数****/voidTIMER_init()
(
//SMCLK,Contmode使计数模式为增计数
//CCROinterruptenabled
//50毫秒
〃为霍尔中断按键中断
〃第二功能
〃上拉电阻使能
〃设中断
〃下降沿中断
〃中断标志清零
TACTL=TASSEL_2+TACLR
CCTLO=CCIE;
CCRO=50000;
/****P1中断端口初始化****/voidPl_port_init()
P1DIR&
="
(BIT1+BIT5);
P1SEL&
P1REN|=BIT1+BIT5;
P1IE=BIT1+BIT5;
P1IES|=BIT1+BIT5;
P1IFG&
二〜(BIT1+BIT5);
/****74HC595显示函数****/
voiddisplay(ucharbit_flag,uintdisp_temp)〃bit_flag为1,先写高位。
为0,先写低位
unsignedinttemp;
unsignedchari;
P2DIR=LDATA+LCLK+LSTR+L0E;
P2OUT&
=、L_CLK;
L_STR;
P2OUTj=L_OE;
temp=disp_temp;
if(bit_flag)
{
16;
if(temp&
0x8000)P2OUT=L_DATA;
else
P20UT&
L_DATA;
P20UTI=L_CLK;
〃上升沿数据移位
L_CLK;
temp«
=l;
if(temp&
OxOOOl)P2OUT|=L_DATA;
P2OUTI=L_CLK;
-"
temp»
P2OUT|=L_STR;
〃上升沿数据锁存
二"
L_OE;
〃输出使能
/****写一个字符串****/
voiddisp_ascii(uchar*p)
unsignedchari,j;
for(j=O;
*p!
=,\0,;
j++)
8;
i++)//8列
temp=num_buff[2*i+(*p-0x30)*161;
=8;
temp=num_buff[2*i+l+(*p-0x30)*16];
display(0,temp);
delay_320us
(1);
〃间隔320us
p++;
/****开机自检函数****/voidTurn_on_test()(
uinti;
uinttemp=0x0001;
display(1,temp);
delay_ms(1000);
temp«
/****同心圆****/voiddraweeirele()
uinttemp;
temp=0x8000;
delay_ms(300);
temp»
temp=0x0001;
display(1,temp);
/杯程序****/voiddraw_TI_cup(uchar(
〃高电平点光
//间隔Is
〃从小到大
〃间隔
〃从大到小
const*p)
//32列
p=&
sort_buff2[0];
for(i=0;
〃将一竖的两个字节合成一个字
temp=*p++;
tempi=*p++;
display(0,temp);
〃间隔320us}
/*****秒针程序****/voiddraw_second_hand()(
uinttempi,temp2;
templ=0xfffc;
temp2=0x0000;
delay_320us(2*(60-ts));
〃延时,等待指向相应的位置display(1,tempi0x0001);
delay_320us⑴;
〃在该凫的位置显示320us
display(1,temp20x0001);
/****主函数****/
voidmain(void)(
mcu-init();
TIMER_init();
Pl_port_init();
Re_sort();
〃从新排序
Turn_on_test();
〃开机自检
_EINT();
〃开总中断
while
(1)(
};
ttpragmavector=PORT1_VECTOR
—interruptvoidPl_port(void)(
〃按键切换模式
if(P1IFG&
BIT5)
delay_ms(30);
P1IFG&
二~(BIT5);
count++;
if(count>
=5)count=l;
while(!
(P1IN&
BIT5));
if(P1IFG&
BIT1)
P1IFG及二、(BIT1);
if(count==l)
PHE&
iBIT1;
〃关中断
draw_circle();
piieT=biti;
〃同心圆显示完后开中断
elseif(count==2)〃每次霍尔中断就显示一次TI杯
P20UT|=L_OE;
draw_TI_cup(sort_buff2);
P20UTi=L_OE;
elseif(count==3)
TACTL|=MC^1;
〃开始定时
draw_second_hand();
elseif(count==4)
Clock_buff[0]=ts%10+0x30;
Clock_buff[l]=ts/10+0x30;
Clock_buff[3]=t