基于fpga的16x16led点阵1本科毕设论文Word格式.docx
《基于fpga的16x16led点阵1本科毕设论文Word格式.docx》由会员分享,可在线阅读,更多相关《基于fpga的16x16led点阵1本科毕设论文Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
1.2.2研究LED点阵的目的及意义2
1.3LED点阵的发展趋势3
1.4论文结构4
第二章系统方案设计5
2.1设计任务与要求5
2.1.1设计任务5
2.1.2设计要求5
2.2方案设计与比较5
2.2.1方案设计5
2.2.2方案比较5
2.3扫描控制模块6
2.3.1LED的显示原理6
2.3.2LED点阵的显示方式7
2.4LED点阵汉字的存储7
2.5本章小结8
第三章硬件设计9
3.1功能要求9
3.2硬件说明9
3.3硬件设计9
3.3.1串行通信模块9
3.32LED点阵屏及驱动电路10
3.33LED时钟芯片10
3.34FPGA控制模块10
3.35串行通信电路11
3.4本章小结12
第四章软件设计13
4.1十六进制计数器设计13
4.2列驱动设计14
4.3字符样式设计15
4.4本章小结18
第五章基于FPGA的LED点阵19
5.1FPGA设计的特点19
5.2开发环境介绍19
5.3调试与仿真20
5.3.1创建工程20
5.3.2编译前设置20
5.3.3全程编译23
5.3.4时序仿真24
5.4本章小结26
第六章总结与展望27
6.1总结27
6.2展望27
致谢29
参考文献31
第一章绪论
1.1课题背景
受到体育场馆用LED显示屏需求快速增长的带动,近年来,中国LED显示屏应用逐步增多。
目前,LED已经广泛应用在银行、火车站、广告、体育场馆之中。
而随着世博会的临近,LED显示屏将广泛的应用在体育场馆以及道路交通指示中,LED显示屏在体育广场中的应用将出现快速增长。
因此研究LED汉字滚动显示屏的设计方法具有重要的理论和现实意义。
随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用LED点阵滚动显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。
采用传统方法设计的汉字滚动显示器,通常需要使用单片机、存储器和制约逻辑电路来进行PCB板级的系统集成。
尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多研发经费和较长投放市场周期的代价。
随着电子设计自动化(EDA)技术的进展,基于可编程FPGA器件进行系统芯片集成的新设计方法,也正在快速地到代基于PCB板的传统设计方式。
因此,本设计的研究是很有必要的,之所以基于FPGA设计是因为现场可编程门阵列(FPGA)设计周期小,灵活度高,适合用于小批量系统,提高系统的可靠性和集成度。
并且采用编写灵活的VHDL语言编写主程序。
如图1-1所示:
图1-1LED点阵的应用
1.2LED点阵的发展现状
1.2.1国内外LED点阵的发展现状
LED照明发展非常迅速,年增长率超过60%,随着LED发光效率的不断提升,封装技术不断改进,驱动陆能和寿命的增加,LED照明技术在未来5年内会逐渐进入千家万户。
在世界各国环保议题日渐重视的趋势下,LED照明产业将扮演极重要的角色,其主要应用在于室内、室外照明以及街灯等高功率产品。
据悉,2009年全球照明市场约1219亿美元,LED仅占0.5%,显见其未来潜力之可观。
其中,以亚太地区的市场规模为最大、约占全球33.7%之比例,居次为北美的30.1%和欧洲之27.4%。
以应用产品来讨论,户外照明约占12%,则具有相当大的成长空间,尤其以占有全球38%户外照明的中国市场为最。
此外,值得关注的部分是受政府政策及推广影响较为直接且快速的街灯应用可望成为照明产业中快速成长的第一棒。
预估在欧美优先领起的趋势中,2010年全球可达到450万盏LED街灯的水平,并且承于国际加紧节能减碳的脚步,一但路灯标准规格普及,中国市场可望占有世界50%以上的规模。
LED驱动器技术的发展体现在两个方面:
第一,离线式高功率因数校正可调光LED驱动器可替代卤素灯、白炽灯和荧光灯;
第二,LED驱动器能高效替代低压卤素灯。
以上两种应用需要为LED提供电能及热能保护,以增加其耐用性。
其他发展趋势还包括优化驱动器以提供最佳功效,并非将电流最大化。
基于FPGA芯片控制全彩LED大屏幕图像显示系统系统设计随着数字技术的飞速发展,各种数字显示屏也随即涌现出来有LED、LCD、DLP等,各种数字大屏幕的控制系统多种多样,有用ARM+FPGA脱机控制系统,也有用PC+DVI接口解码芯片+FPGA芯片联机LED显示板控制系统。
尽管大尺寸液晶显示在未来的几年还有相当大的市场份额,但针对大尺寸直下式背光源的驱动和控制芯片的开发才刚刚有几年的历史。
针对LED背光源的特点,可以将复杂的控制技术和信号处理技术融合到背光源技术中,目前的做法是采用FPGA,各家均有不同的算法和控制方法。
随着背光技术和数字电视技术的发展,背光的控制算法及驱动方法的规范化,为了降低成本,将背光控制单元、屏显控制和电视的机芯微处理器由一个微处理器统一实现将是一种技术趋势。
1.2.2研究LED点阵的目的及意义
并且采用编写灵活的VerilogHDL语言编写主程序。
1.3LED点阵的发展趋势
高亮度LED为未来趋势:
高亮度LED的三大市场为:
汽车车灯市场、交通市场及全彩LED显示屏。
(1)汽车车灯市场方面,红色高亮度LED应用于汽车第三煞车灯,而左右尾灯、方向灯及车边标识灯,可使用红色或黄色高亮度LED,而汽车仪表板上则需要各种颜色的高亮度LED,故汽车市场商机庞大。
(2)交通号志方面,使用高亮度LED主要为节省能源,且在阳光照射下可仍清楚辨识。
依据资料显示,目前全球约有2000万座交通号志,而每一个红、黄、绿灯估计需要使用200颗高亮度LED,故一座交通号志约需600颗高亮度LED,如果考虑每年新设的交通号志加上更换旧交通号志,估计每年大约有200万座,以每座更新成本约1.5万台币计算,未来每年全球交通号志估计约有300亿的市场价值。
(3)全彩LED显示屏方面,目前高亮度LED已可以产生红、绿、蓝三原色的光,组成大型全彩LED显示屏,目前大型LED看板的使用以日本、中国、香港、韩国、台湾、新加坡等亚洲地区为主,欧洲及美国其次。
中国大陆运用大型户外LED看板宣达政令,故有其一定之需求;
欧洲方面,常见的应用是文字显示及气象预报图像,另也盛行使用LED显示屏做为广告招牌。
目前目前高亮度LED厂商持续costdown,市场接受度已逐渐提高,且高亮度LED价格高于传统LED,厂商投入意愿较大,未来可望逐渐取代传统亮度LED市场。
目前,基于FPGA(现场可编程门阵列)的LED显示屏的设计应用广泛,美国和中国台湾地区逻辑电路设计和制造厂家大都以VerilogHDL为主,中国大陆地区目前学习使用VerilogHDL已经超过VHDL。
从使用的角度看,对于集成电路(ASIC)设计人员来说,多是掌握verilog,因为在IC设计领域,90%以上的公司都是采用verilog进行IC设计。
而对于PLD/FPGA设计者而言,两种语言没有太大差别。
1.4论文结构
论文主要从方案论证及选择、硬件电路设计、系统软件设计、制作与调试等几大方面来介绍基于FPGA的LED显示屏的设计和制作过程。
其中方案论证及选择主要从两种可以实现基于FPGA的LED显示屏的设计方案中选择一个成本低、易操作、系统性能较高的方案。
其中主要设计包括:
系统软件设计、ROM存储、点阵汉字字模的提取。
系统软件设计主要是设计FPGA芯片进行控制所需要的相关程序,这部分程序采用Verilog语言进行编写。
最后的制作与调试主要是进行ROM和点阵汉字的显示并对点阵个点扫描显示进行相关测试,检测是否能达到设计原理实现的功能。
最后总结完善设计思路与程序,正确完成汉字的现实与滚动。
第二章系统方案设计
2.1设计任务与要求
2.1.1设计任务
(1)设计一个16×
16的LED点阵显示器;
(2)在设计过程中,EDA试验箱进行仿真调试。
2.1.2设计要求
(1)输出预定义“淮、安、信、息”四个汉字;
(2)输出汉字循环显示;
(3)操作方便、可维护性高;
(4)程序简捷,便于修改;
2.2方案设计与比较
2.2.1方案设计
方案一:
本设计所使用的16×
16的点阵,EDA实验箱上有其接口电路,列选信号为SEL0,SEL1,SEL2,SEL3,经4线16线译码器输出16列,从左起为第一列,列选信号是由一个4位向量SEL[3..0]控制;
行选信号为H0~H15,是由16个行信号组成的,每一行由一个单独的位来控制,高电平有效。
例如“0000”表示第0列,“0000000000000001”表示第一行的点亮。
由于列是由一个向量决定,而每一时刻的值只能有一个固定的值,因而只能使某一列的若干个点亮,因此就决定了只能用逐列扫描的方法。
例如要使第一列的2,4,6,8,行亮,则列为“0001”、行为“0000000010101010”就可以实现了。
方案二:
VHDL程序设计的是硬件,他和编程语言的最大区别是它可以“并发执行”。
本设计可以将LED显示屏要的显示内容抽象成一个二维数组(数组中的‘1’对映点阵显示屏上面的亮点),用VHDL语言设计一个进程将这个数组动态显示在LED显示屏上,再利用另一个进程对这个数组按一定频率进行数据更新,更新的方式可以有多种。
因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动显示。
如图2-1为该方案原理图。
图2-1方案原理图
2.2.2方案比较
方案一很容易实现,而且占用FPGA的资源较少。
但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。
方案二中将LED点阵抽象成了一个二维数组。
可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的显示效果。
但是方案二中对数组的处理部分对FPGA芯片的资源消耗太大学校实验室里的EPF10K10LC84-4芯片只有576个逻辑单元远远不够设计要求。
所以最终选择方案一。
2.3扫描控制模块
2.3.1LED的显示原理
16×
16扫描LED点阵的工作原理同8位扫描数码管类似。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位段地址(0-15)输入。
通过时钟的每列扫描显示完整汉字。
图2-2LED灯信号
图2-3LED等效电路
2.3.2LED点阵的显示方式
点阵LED一般采用扫描式显示,实际运用分为三种方式:
(1)点扫描
(2)行扫描
(3)列扫描
若使用第一种方式,其扫描频率必须大于16×
64=1024Hz,周期小于1ms即可。
若使用第二和第三种方式,则频率必须大于16×
8=128Hz,周期小于7.8ms即可符合视觉暂留要求。
此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
2.4LED点阵汉字的存储
用动态分时扫描技术使LED点阵模块显示图像,需要进行两步工作。
第一步是获得数据并保存,即在存贮器中建立汉字数据库。
第二步是在扫描模块的控制下,配合行扫描的次序正确地输出这些数据。
获得图像数据的步骤是,先将要显示的每一幅图像画在一个如图2-4所示的被分成16×
16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布,再将此分布关系以32×
16的数据结构组成64个字节的数据,并保存在只读存贮器ROM中。
以这种方式将若干个汉字的数据贮存在存贮器内,就完成了图像数据库的建立工作。
图2-416×
16LED点阵模块
2.5本章小结
本章主要讲述设计任务与要求,方案的设计与比较。
并对扫描控制模块和LED点阵汉字的存储做了进一步介绍,分析了LED点阵的工作原理。
第三章硬件设计
3.1功能要求
设计一个室内用16×
16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
3.2硬件说明
FPGA芯片采用ALTERA公司的CYCLONE系列EPlC3T144C8。
EPlC3T144C8内部包含2910个逻辑单元,104个I/O引脚,13块128*36bit的RAM共52K,适合设计双DRAM、ROM和FIFO等器件,还有一个可编程触发器和一个给进位和层叠功能专用的信号通道。
为了提高FPGA的工作速度,ALTERA的FPGA芯片普遍采用了锁相环技术。
时钟可以通过FPGA内建的锁相环进行倍频,使得较慢的外部时钟在FPGAI为部驱动高速电路工作。
单片机采用深圳宏晶科技的STC89C52RC。
STC89LE52RC是一款低功耗、高速且抗干扰能力强的单片机。
指令代码完全兼容传统的8051单片机,它不但具有普通51核单片机的特点,而且增加了新的功能。
在5V电压工作下,提供最高80MHz的时钟频率。
内部RAM加大到了512字节,FLASH存储器为8K,EEPROM为2K,增加了P4口,可进行双倍速设定,增加了看门狗,防止死机功能。
抗干扰与防解密方面都比普通的51单片机强。
在程序下载方面,无需使用专门的编程器和下载线,只要一根9针的串口线就可以实现程序的在线烧写。
数模转换器采用转换速率为10M的双通道并行电流输出型DA转换器TLC7528。
双路的DA输出都已经用运放TL082进行电流到电压的转换,并且双路输出都可以用跳线帽设置成单极性输出,双极性输出。
也可以将两个通道结合起来,实现幅度程控输出。
数据采集同样使用德州仪器的TLC5510,最高采样率为20M。
用于数据采集,任意信号的输入。
存储器使用64K的,2C总线控制的FLASH存储器,和512K'
8的高速IS61LV5128的静态存储器,它拥有64MB的存储空间,满足数据的存储要求。
另外设计有丰富的人机界面。
4*4的行列式键盘输入,有AS配置模式和JTAG配置模式的接口,另有液晶显示器的接口,便于数据的获取。
3.3硬件设计
3.3.1串行通信模块
输入接口模块提供PC上位机到FPGA核心板传输数据的接口。
输入接口是通过串口即RS232以及JTAG下载线来实现从PC上位机传输数据至下位机。
上位机使用字模提取工具将待显示的数据发送至下位机,
JTAG下载线实现PCNiosⅡ系统间的通信。
FPGA核心板与LED显示模块之间的通信也是通过RS232
串口实现的。
3.32LED点阵屏及驱动电路
本设计采用16×
16LED点阵屏由4块8×
8LED点阵拼接而成,每一块点阵都有8行8列,因此总共有16根行控制线和16根列控制线。
3.33LED时钟芯片
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM。
同时,可以提供秒分时、日期、年月信息,每月的天数和闰年的天数可自动调整。
时钟操作可通过AM/PM指示决定采用24或12小时格式。
3.34FPGA控制模块
该部分电路是系统控制和数据处理的核心,主要由电源接口及开关及相应的时钟振荡电路和复位电路组成。
a.电源接口及开关电路
如图3-1所示,其中F1为限流1.1A的F110保险管,在电源的保护上起到了很大的作用。
图3-1电源接口及开关电路
b.复位电路
如图3.2所示,该复位电路可以实现对系统的初始化作用。
当没有按下时,KEY读取到高电平。
按下键时,KEY拉低。
一次复位后产生一脉冲信号,下降沿时触发芯片复位。
如图3-3所示,X1为20MHz的有源晶振。
图3-2复位电路
c.时钟振荡电路
如图3-3所示,时钟振荡电路。
图3-3时钟振荡电路
3.35串行通信电路
串行通信电路由RS232串口电路和JTAG接口电路组成。
RS232串口用于上位机与下位机的数据传输,JTAG接口用于程序下载与调试
a.RS232串口电路
FPGA的电平为TTL电平(即:
高电平—+3.3V,低电平—0V),而计算机串口电平为RS232电平(即:
高电平—-12V,低电平—+12V),所以,计算机与单片机之间进行通讯时需要加电平转换芯片。
RS232串口电路如图3-4所示:
图3-4RS232串口电路
图3-4中,RS232串口电路使用MAX232CPE作为电平转换芯片,通过串口线连接到计算机的COM口(9针D形口),用于FPGA与上位机通信以及和其他串口设备的数据交互。
b.JTAG下载接口
JTAG下载接口电路如图3-5所示,用于调试FPGA。
JTAG下载不仅下载速度快,而且支持SignalTAP,但是,不能编程EPCS芯片,掉电后数据丢失。
使用JTAG时需要配合USBBlaster进行下载调试。
图3-5JTAG下载接口电路
3.4本章小结
本章主要讲述硬件电路的功能要求,对硬件结构做了详细的说明。
并逐一介绍了串行通信模块、LED时钟芯片、FPGA控制模块、串行通信电路的设计及使用等,分析了主要器件的作用,介绍了各部件在电路中的连接情况。
第四章软件设计
4.1十六进制计数器设计
COUNT16.vhd是十六进制的计数器,其输出端控制行和列驱动控制器的输出数据;
其描述如下:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYlpm;
USElpm.all;
ENTITYcnt16IS
PORT
(clock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDcnt16;
ARCHITECTURESYNOFcnt16IS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(7DOWNTO0);
COMPONENTlpm_counter
GENERIC(
lpm_direction:
STRING;
lpm_port_updown:
lpm_type:
lpm_width:
NATURAL);
PORT(clock:
q:
ENDCOMPONENT;
BEGIN
q<
=sub_wire0(7DOWNTO0);
lpm_counter_component:
lpm_counter
GENERICMAP(
lpm_direction=>
"
UP"
lpm_port_updown=>
PORT_UNUSED"
lpm_type=>
LPM_COUNTER"
lpm_width=>
8
)
PORTMAP
(
clock=>
clock,
q=>
sub_wire0
);
ENDSYN;
如图3-2所示:
图3-2COUNT16.vhd仿真波形图
从上图可以看出,该模块为十六进制的计数器,当CLK给予脉冲时输出为前一个数值加1,例如:
在104.86ms前输出为0AH,在这个时刻CLK给予触发脉冲,104.86ms后输出值为0BH。
可以看出该模块满足设计要求。
4.2列驱动设计
通过对每一列的扫描来完成对字母的现实,只要扫描的频率足够快,就能给人以连续的感觉。
因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,本设计的扫描频率不得低于50Hz,扫描程序如下:
Libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
Entitydz_xsis
Port(enable,clk