汽车尾灯控制电路设计Word文档下载推荐.docx
《汽车尾灯控制电路设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汽车尾灯控制电路设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
反过来EDA工具的进步又推动设计技术的发展。
可以说EDA工具是IC设计产业的背后推手。
系统芯片(SOC)正在迅速地进入主流产品的行列。
由此引发的“芯片就等于整机”的现象,将对整个电子产业形成重大的冲击。
种种迹象表明,整个电子产业正在酝酿着一场深刻的产业重组,这将为许多新兴的企业提供进入这一行业的最佳。
2、总体方案设计
2.1设计内容
要求设计一个汽车尾灯控制电路,汽车尾部左右两侧各有3个指示灯(用发光二极管模拟),当在汽车正常运行时指示灯全灭;
在右转弯时,右侧3个指示灯按右循环顺序点亮(R1→R2→R3→全灭→R1)时间间隔0.5S(采用一个2HZ的方波源);
在左转弯时,左侧3个指示灯按左循环顺序点亮(L1→L2→L3→全灭→L1);
汽车倒车或临时刹车时,所有指示灯按时钟信号同步闪烁。
2.2设计方案比较
方案一:
由单片机AT89S52来实现汽车尾灯控制电路的设计,外围电源采用+5V电源供电,时钟由12MHZ的晶振产生,通过按键的状态来检测汽车的行使状态,中央处理器由AT89S52单片机来完成,汽车行使状态由左右两侧的各三个LED发光二极管来模拟。
这种方案,结构简单容易掌握,各部分电路实现起来都非常容易,在传统的汽车尾灯设计中也应用得较为广泛,技术成熟。
其原理框图如图2-1:
图2-1单片原理实现框图
方案二:
基于现场可编程逻辑门阵列FPGA,通过EDA技术,
采用VerilogHDL硬件描述语言实现汽车尾灯控制电路设计。
程序设计思想为:
对输入信号采用四种状态进行优先编码实现A1、A0的组合,由时钟触发环形技术器进行环形计数,输出中间状态Q2、Q1、Q0,再通过组合逻辑电路输出结果状态。
其框图如图2-2:
图2-2汽车尾灯电路控制框图
2.3方案论证
通过方案一二的比较,可以看出方案一的设计使用分立元件电路较为多,因此会增加电路调试难度,且电路的不稳定性也会随之增加,而采用FPGA芯片实现的电路,由于在整体性上较好,在信号的处理和整个系统的控制中,FPGA的方案能大大缩减电路的体积,提高电路的稳定性。
此外其先进的开发工具使整个系统的设计调试周期大大缩短,一般来讲,同样的逻辑,基于FPGA要比基于单片机要快很多,因为它们工作的原理是完全不同的。
单片机是基于指令工作的,同样的激励到达单片机后,单片机首先要判断,然后读取相应的指令,最后作出相应,这每一步都是需要在单片机的时钟驱动下一步步的进行。
而基于FPGA则是把相应的逻辑“暂时”固化为硬件电路了,它对激励作出的响应速度就是电信号从FPGA的一个管脚传播另一个管脚的传播速度,当然这指的是异步逻辑,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的。
2.4方案选择
结合现代汽车的整体性能的提升,也对其各个部件的性能提出了更高的要求,尤其在现代SOC技术的引领下,人们对低故障、高实时、高可靠、高稳定的性能更加青睐,结合本设计的要求及综合以上比较的情况,我们选择了基于FPGA的汽车尾灯控制电路方案。
3、单元模块设计
本设计由现场可编程门矩阵(FPGA)作为控制芯片,通过VreilogHDL硬件描述语言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化的设计。
总体设计方案为由按键(I3、I2、I1)状态模拟汽车的行驶状态输入,通过优先级编码器编码为具有优先级的A1、A0状态量;
而尾灯的循环点亮状态由环形计数器来实现,与时钟频率同步闪烁状态按时钟状态取反来实现。
下面介绍主要模块的功能及作用。
3.1有源晶振电路
图3-1有源晶振电路
采用有源晶振作为时钟信号源,它是一个完整的振荡器,其内部除了石英晶体外还有阻容软件和晶体管,有源晶振信号质量好,比较稳定,而且连接方式比较简单。
主要是作为电源滤波,通常使用的为一个电容和电感组成的PI型滤波网络,输出端使用一个小阻值电阻过滤信号。
串电阻可减小反射波,避免反射波叠加引起过冲,减少谐波以及阻抗匹配,减小回波干扰及导致的信号过冲。
由于本设计所用的为20MHZ的晶振,而20MHz以下的晶体晶振基本上都是基频的器件,稳定度好,20MHz以上的大多是谐波的(如3次谐波、5次谐波等等),稳定度差,因此我们使选用频的器件,毕竟倍频用的PLL电路需要的周边配置主要是电容、电阻、电感,其稳定度和价格方面远远好于晶体晶振器件。
3.2供电电路
图3-2供电电路
本设计中使用到了三个电源,第一是+5V的电源,用于为上拉电阻提供电压;
第二是+3.3V电源,用于为FPGA芯片提供工作电压;
第三是+2.5V电源,用于为FPGA芯片内核工作提供电压。
在FPGA芯片管脚上,+2.5V电源必须接在内核电源输入端(VCCINT)上,而VCCIO是芯片输入输出引脚工作电源,根据输入输出的设备不同,可以接2.5V、3.3V或5.0V。
特别注意的是EPC1PC8的工作电压必须为3.3V,且该配置芯片属于FlashMemory闪存)器件,具有可擦写的功能。
3.3PS配置电路
图3-3配置电路
配置电路采用被动串行(PS)模式,为了利用ByteBlasterMV下载电缆配置EP1K30TC144器件,3.3V的电源应该接上拉电阻,电缆的VCC脚连到3.3V电源,而器件的VCCINT的引脚连接到相应的2.5V,对于PS配置电路,器件的VCCIO引脚必须连接到2.5V。
上拉电阻接到配置器件的电源端,这里接到了+5V电源端。
nCS接到nCONFIG端,OE接到nSTATUS端,DCLK与DCLK相连接,DATA与DATA0相连接。
nCEO引脚端悬空。
3.4按键输入电路
图3-4按键输入电路
在设计中利用四个独立键盘来模拟汽车行驶时的四种状态,当对键被按下时,对应输入状态为低电平,通过取非后转换为输入信号为高,进而控制汽车尾灯的点亮状态。
当四个键都未被按下时表示汽车处于正常行驶状态,汽车尾灯没有任何指示。
当汽车处于刹车状态时,即I3对应的键被按下,汽车尾部的灯全部按照时钟频率同步闪烁。
3.5LED灯输出电路
图3-5LED灯输出电路
6个LED灯模拟汽车尾灯的左转、右转、刹车及正常行驶时的状态。
4、特殊器件的介绍
4.1CPLD器件介绍
CPLD是ComplexProgrammableLogicDevice的缩写,它是有最早的PLD器件发展形成的高密度可编程逻辑器件,它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点。
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
许多公司都开发出了CPLD可编程逻辑器件。
比较典型的就是Altera、Lattice、Xilinx世界三大权威公司的产品。
如Altera公司的MAXII器件,就是其极具代表性的一类CPLD器件,是有史以来功耗最低、成本最低的CPLD。
MAXIICPLD基于突破性的体系结构,在所有CPLD系列中,其单位I/O引脚的功耗和成本都是最低的。
Altera公司的MAX7000A系列器件是高密度、高性能的EPLD,它是基于第二代MAX结构,采用CMOSEPROM工艺制造的。
该系列的器件具有一定得典型性,其他结构都与此结构非常的类似。
它包括逻辑阵列块、宏单元、扩展乘积项、可编程连线阵列和IO控制部分。
由于大多数CPLD是基于乘积项的“与或”结构,故适合设计组合逻辑电路。
4.2FPGA器件介绍
FPGA(Field-ProgrammableGateArray)可以达到比PLD更高的集成度,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展起来的,具有更复杂的布线结构和逻辑实现。
PLD器件和FPGA的主要区别在于PLD是通过修改具有固定内连电路得逻辑功能来进行编程,而FPGA是通过修改一根或多根分割宏单元的基本功能块的内连线的布线来进行编程。
它一般由可嵌入式阵列块(EAB)、逻辑阵列块(LAB)、快速互联通道(FastTrack)、IO单元(IOE)组成。
AlteraCycloneII采用全铜层、低K值、1.2伏SRAM工艺设计,裸片尺寸被尽可能最小的优化。
采用300毫米晶圆,以TSMC成功的90nm工艺技术为基础,CycloneII器件提供了4,608到68,416个逻辑单元(LE),并具有一整套最佳的功能,包括嵌入式18比特x18比特乘法器、专用外部存储器接口电路、4kbit嵌入式存储器块、锁相环(PLL)和高速差分I/O能力。
CycloneII器件扩展了FPGA在成本敏感性、大批量应用领域的影响力,延续了第一代Cyclone器件系列的成功。
由于FPGA是基于查找表(LUT)结构的器件,且每个LAB由10个LE组成,一个LE由LUT和寄存器组成,适合于时序逻辑电路的设计。
4.3EP1K30TC144器件介绍
ACEX1K器件是Altera公司在2000推出的2.5V低价格SRAM工艺FPGA结构与10KE类似,带嵌入式存储块(EAB),部分型号带PLL,主要有1K10、1K30、1K50、1K100等型号。
EP1K30TC144器件中,EP1K表示器件类型,30表示器件内有30K个逻辑门,T代表封装类型,C表示用途为商用,144表示管脚数为144。
其引脚图如图4-3所示
图4-3EP1K30TC
5、最小系统原理
图5-1电路原理图
本设计的电路实现是基于FPGA最小系统原理图,再配以所需的外设。
最小系统设计包含了时钟产生电路模块、程序下载配置电路模块、电源电路模块,通过连线将各个模块进行连接成最小系统。
由于本设计电路比较简单,外设比较少,使用到的四个独立键盘,模拟实现信号输入,六个LED灯模拟实现信号状态指示。
我们队外设也作了扩展准备,将FPGA芯片的IO引脚进行了插针引出,以方便后续电路的扩展。
将外设与最小系统进行合理正确连接,即可实现本设计的电路原理要求。
6、软件实现
通过至顶向下(TOP--DOWN)的设计方法,我们对电路的设计要求作了分析,从电路要实现的功能着手,逐层分析电路设计的步骤,再具体到各个模块的设计实现以及各模块实现方案的选择。
从本设计的电路要求,我们分析了需要实现一个输入状态的编码,以及对循环点亮灯的方式的选择,综合这两种状态控制输出信号的状态变化。
其电路功能表如图6-1。
功能
R2R1R0
L2L1L0
正常行驶
000
000
右拐
100
010
001
左拐
000
001
010
100
急刹车
CLKCLKCLK
图6-1汽车尾灯控制电路功能表
软件设计流程图:
图6-2软件设计流程图
6.1软件设计
设计程序如下:
modulemyedadesign_(R2,R1,R0,L2,L1,L0,CLK,I3,I2,I1,CLK_2HZ);
outputR2,R1,R0,L2,L1,L0;
outputCLK_2HZ;
inputI3,I2,I1;
inputCLK;
regR2,R1,R0,L2,L1,L0;
reg[1:
0]A;
always@(I3orI2orI1)
begin
if(I3)
A[1:
0]=2'
b00;
elseif(I2)
b10;
elseif(I1)
b01;
else
b11;
end
//------------------------------------------优先级编码实现对输入信号的编码
reg[2:
0]Q;
0]STATE,NEXT_STATE;
reg[22:
0]count;
//分频计数器
regCLK_2HZ;
//----------------------------------------------2HZ时钟
parameterSTATE0=3'
b000,STATE1=3'
b001,
STATE2=3'
b010,STATE3=3'
b011,
STATE4=3'
b100,STATE5=3'
b101,
STATE6=3'
b110,STATE7=3'
b111;
//-----------定义状态常量
parameterf_clk_in=20_000_000,//晶振频率
f_clk_out=2,//分频后频率
count_full=f_clk_in/f_clk_out/2-1;
//-----计数次数4C4B3F
always@(posedgeCLK)
begin
if(count==0)
count=count_full;
else
count=count-23'
b1;
end
//------------------------------------------分频实现20MHZ到2HZ的转换
always@(negedgeCLK)
CLK_2HZ<
=!
CLK_2HZ;
//------------------------------------------------------------产生2HZ的时钟
always@(posedgeCLK_2HZ)
STATE<
=NEXT_STATE;
case(STATE)
STATE0:
beginNEXT_STATE<
=STATE1;
end
STATE1:
=STATE2;
STATE2:
=STATE4;
STATE3:
=STATE6;
STATE4:
STATE5:
STATE6:
STATE7:
endcase
//---------------------------------------------------------状态机实现环形计数器
Q<
=3'
b000;
b001;
b010;
b011;
b100;
b101;
b110;
end
//--------------------------------------------------------设置状态转移量状态
always@(STATE)
if(A==2'
b00)
beginR2=0;
R1=0;
R0=0;
L2=0;
L1=0;
L0=0;
elseif(A==2'
b01)
beginR2=Q[2];
R1=Q[1];
R0=Q[0];
b10)
L2=Q[2];
L1=Q[1];
L0=Q[0];
b11)
beginR2=~CLK_2HZ;
R1=~CLK_2HZ;
R0=~CLK_2HZ;
L2=~CLK_2HZ;
L1=~CLK_2HZ;
L0=~CLK_2HZ;
end//-------------------------------------------------输出信号状态实现
endmodule
6.2环形计数器状态转移图
图6-3环形计数器状态转移图
环形计数器是由移位寄存器加上一定的反馈电路构成的,用移位寄存器构成环形计数器是由一个移位寄存器和一个组合反馈逻辑电路闭环构成,反馈电路的输出接向移位寄存器的串行输入端,反馈电路的输入端根据移位寄存器计数器类型的不同,可接向移位寄存器的串行输出端或某些触发器的输出端。
环形计数器,是把移位寄存器最低一位的串行输出端Q1反馈到最高位的串行输入端(即D触发器的数据端)而构成的。
在此设计中我们用到得为三位环形计数器,在移位脉冲(时钟)的作用下,反复在三位移位寄存器中不断循环。
该环形计数的计数长度为N=n。
和二进制计数器相比,它有2n-n个状态没有利用,它利用的有效状态是少的。
要想使环形计器在选定的时序中工作,就必须防止异常时序和死态的出现,因此我们必须对其余无效的状态全部回到有效状态中去。
7、系统仿真及调试
7.1仿真
通过QuartusII软件,我们进行了仿真,其仿真波形如下图:
图7-1波形仿真图
由设计要求可知,本设计输入为四种状态,分别由I3、I2、I1、I0控制,其中I0为无用状态。
当I3、I2、I1都为低电平时,汽车处于正常行驶状态,汽车尾部的灯全部处于熄灭状态;
当I1为高电平
(1)时,汽车处于右转状态,对应输出为汽车尾部右侧三个灯循环点亮,实现了指示右转的状态的功能;
当I2为高电平
(1)时,汽车处于左转状态,对应输出为汽车尾部左侧三个灯循环点亮,实现了指示左转的状态的功能;
当I3为高电平
(1)时,汽车为刹车状态,对应输出转态为时钟状态取反,实现了左右6个灯闪烁(R2、R1、R0、L2、L1、L0)。
通过分析可知汽车刹车的状态为为优先级最高,汽车无论行驶在什么状态,只要输入状态为刹车信号(I3为高电平),汽车立即显示闪烁状态指示刹车。
当没有刹车信号输入时,输入左转信号(I2)时,汽车尾部左侧三个等循环点亮,其优先级次之;
由于左转、右转信号不可能同时发生,故可将与I2无优先级的I1信号设置为第三优先级,当没有刹车信号及左转信号时,汽车响应右转状态;
当然汽车正常行驶时(I3、I2、I1都为0)优先级最低。
在QuartusII软件中利用硬件描述语言描述电路后,用RTLViewers生成的对应的电路图如下:
7.2调试
在QuartusII软件中,通过对所设计的硬件描述语言代码进行波形仿真后,达到了预期效果,于是,我们在该软件上进行下载配置设置。
在Assignments菜单下选中Devices,在Family栏选择ACEX1K,选中EP1K30TC144-2器件。
再在Assignments菜单下选中Pins按照相应要求对管脚进行锁定。
最后在Tools菜单下,选中Programmer,对配置方式进行设置,这里选择PassiveSeril(PS)被动串行模式。
选择好要下载的硬件设备后点击Start即可开始编程下载了。
调试过程为在线调试。
在通过调试中,我们发现了很多问题,现归纳如下:
(1)在软件上能实现仿真的程序不一定在硬件电路上就能运行,原因有很多,这里是由于电路中的时钟频率太快,若不增加一个分频电路,灯闪烁时间太快,肉眼无法观察,故设计了一个20MHZ到2HZ的