基于Simulink的逻辑电路仿真交通灯设计Word文档下载推荐.docx
- 文档编号:17356127
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:19
- 大小:1.28MB
基于Simulink的逻辑电路仿真交通灯设计Word文档下载推荐.docx
《基于Simulink的逻辑电路仿真交通灯设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于Simulink的逻辑电路仿真交通灯设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
为了实现交通灯控制电路,首先设计并封装了4位计数器,在此基础上进一步搭建逻辑电路,实现交通灯的控制,并分别对这些模块进行了仿真。
设计思路
主要的设计思路是利用jk触发器串联的方式对输入的时钟进行分频,然后在相应的时刻产生控制脉冲信号,通过这个信号对信号灯的状态进行翻转。
Jk触发器是一种边沿敏感器件,有对上升沿和下降沿敏感的两类,他们的符号如下:
其真值表如下:
在这个设计中,将jk触发器的j和k端都置1,从而Q端在每个时钟沿到来时进行翻转,然后将上一级的Q作为下一级的clk,这样达到对clk进行分频的目的。
波形如下:
具体设计步骤
计数器的设计
打开matlab,这里使用的版本为R2014A.启动画面如下:
启动之后点击这里启动simulink
打开之后界面如下:
点击File>
New>
Model
打开界面如下:
下面的步骤为寻找仿真模型或原件,并摆放在上面的untiled文档中。
首先将窗口切换到SimulinkLibraryBrowser窗口,展开SimulinkExtras>
FlipFlops,左侧就会出现常用的触发器模型,其中就有jk触发器,用鼠标左键选中J-KFlip-Flop并拖到untiled文档中
一个jk触发器可以对时钟2分频,2个串联可以4分频,这里6个才能满足需求,但是为了便于扩展应用,这里将4个jk触发器作为一组串联起来。
untiled文档中已经有一个,鼠标右键拖动这个jk触发器即可复制。
调整四个jk触发器的位置,如图:
该窗口左上角标题右侧的*表示该文档有改动并且未保存。
该窗口中按下鼠标滚轮键鼠标会变成手状,这时可以拖动整个视图,滚动鼠标滚轮可以放大缩小视图,左键选中模型按del键可以删除模型。
模型中端口上的箭头表示信号流动方向,连线的时候必须按照箭头的方向进行,不能使信号流动方向和箭头方向相反,否则仿真时可能会报错。
连线时为了在一条线上引出分支,可以用鼠标右键点击分支处即可引出。
两个线相交的地方有黑点表示电气相连,没有黑点表示相交但不相连。
在前面的分析中提到这里要将jk出发器的jk端置1,这需要常量和数据类型转换模块,因为在matlab中大部分模型的输出是数值型的,比如为float或者double型的,这样如果输出了1,它可能是double或者int类型的,而逻辑电路中的1是一种逻辑电平,这两者的含义是不同的,因此如果要给触发器输入1,需要将一个常量1转换为逻辑1,这就是DataTypeConversion的作用,常量1的输出通过Constant实现,他们在CommonlyUsedBlocks中,如图,分别拖放两个模型到untiled文档中。
现在untitled文档中的模型如下:
双击DataTypeConversion1可以打开它的属性对话框,我们需要关心的是转换的类型,这个可以通过Outputdatatype后面的下拉框来设置,其中就有boolean这种类型。
默认为Inherit:
Inheritviabackpropagation方式输出,意思为从输出端反向继承数据类型,也就是说输出端连接的端口需要什么类型就转化为相应的类型。
这里需要改为boolean就可以实现给触发器输入高电平。
调整他们的位置并按下面的样子完成连线:
然后按ctrl+s保存文档,如下:
下面对这个模块进行封装,按下ctrl+A选中所有模型,再通过下面的方式进行封装(快捷键Ctrl+G)
封装之后变成这个样子:
双击进入该模块内部,可以看见自动为输入和输出添加了连接点并编号,如下:
上面这幅图片中出现了很多double,这是由于DataTypeConversion输出没有改成boolean而又进行了仿真造成的,如果不改也能仿真,但是数据类型不是逻辑电平,如果修改了就不会出现上面的那些字符。
这里面部分端口不使用,摆放位置也比较乱,可以选中之后进行修改,修改之后如下:
然后按下ctrl+s进行保存,点击下面的位置返回到顶层视图
此时封装的模块变成了下面的样子:
我们可以双击模块下面的名称来改变它,因为这个模块可以进行0~15的循环计数,这里将名称改成counter_16。
如下:
计数器的仿真
现在一个4位计数器已经实现了,下面做一个简单的仿真来检测这个计数器是否能工作。
切换到SimulinkLibraryBrowser窗口,在Simulink>
Sinks中获取示波器Scope,在SimulinkExtras>
FlipFlops中获取时钟模块Clock,并将它们拖放到my_counter文档中,如图
然后双击Scope打开示波器,然后点击菜单栏的齿轮图标打开示波器属性对话框,设置示波器的输入通道为5,勾选Legends,这样就能同时观测5个信号,并显示信号名称。
点击Apply,OK.
此时示波器有了5个通道,示波器的符号也发生了变化,如图:
但是此时示波器的符号有点小,以至于输入端口出现交叠,这样不便于连线,鼠标放在该图标上是图标四周会出现四个小方块,鼠标移到某一个方块上时可以调整图标大小,重新调整大小使其方便连线,如下:
然后双击Clock打开时钟属性对话框,将时钟的周期设置为1
然后按照下面的方式完成连线。
在下面的工具栏中设置仿真时间长度,前面设置了时钟周期为1,下面设置仿真时间长度为10,那么就会有10个完整的时钟。
点击下图左边第一个带齿轮的后退图标可以设置仿真时前进和后退的相关参数,点击之后我们可以看见有是否允许后退,前进按钮按下时前进幅度,暂停时刻等设置。
绿色的运行按钮按下时会进行指定时长的仿真。
前进按钮按下时会执行指定步长的仿真,此时前进按钮右边的停止按钮会被激活,只有按下该停止按钮才能推出单步仿真模式。
现在将仿真时长设置为40,然后按下绿色的运行按钮。
仿真40个时间长度后会自动停止,然后双击示波器,如下图:
打开时波形可能不是这样的,需要一些调整,首先鼠标放在任何一个通道上右键,选择Autoscale,这样波形将充满整个屏幕,并根据屏幕大小调整。
我们可以发现各个通道纵轴坐标范围都是-5到5,而我们这里是对逻辑电路进行仿真,电平值只有0和1两个,这里可以右键,选择Axesproperties…,设置纵轴的范围为0到2
然后可以拖拽右侧的信号名称到合适位置,调整好如下图:
由图我们可以看到四个输出端分别对时钟进行了2,4,8,16分频,增加输出端的状态就能够实现计数功能。
交通灯电路设计
交通灯设计的关键思路就是根据不同时刻对不同的灯进行开关操作。
这里为了简单没有为计数器设计清零端,由于一个计数器只能计时16个时间单位,这里我们将两个计数器串联起来,从而实现256个时间单位的计数,但是红绿灯的一次完整切换并不需要这么多时间,我们选择低6位作为计数端,6位能实现64个时间单位的计数,我们将时间进行一个划分,绿灯持续25s,黄灯持续5s,红灯持续35s,这样就需要在25,30,63这三个时刻输入控制信号。
这里我们输出一个脉冲信号,然后利用这个脉冲信号对红绿灯状态进行翻转。
25超过了一位计数器的计数范围,它可以拆分为16+9,,也就是低位计数器计数为9,高位计数器计数为1,这样用二进制表示就为0001_1001,而我们一共采用了低6位,所以对应的计数器输出状态为01_1001,这样我们将其中的3个1输入到三输入与门,3个0输入到三输入或非门,然后将它们的结果通过二输入与门输出。
对于30,63时刻做同样处理。
在simulink中直接能得到与门模型,上面我们用到了或非门,以及3输入与门等模型,这个需要对与门进行设置,双击一个与门模型,弹出属性对话框,在operator中可以选择改门的类型,比如与门,与非门,反相器,或门等,下面的Numberofinputports可以设置这个门的输入数目。
上面我们通过对计数器的输出进行逻辑组合得到3个脉冲信号,然后我们需要使用这3个脉冲信号对交通灯状态进行翻转,设计思路是使用jk触发器的取反功能,将脉冲信号作为时钟信号,并设置jk触发器的初始值,jk触发器的输出作为交通灯的状态控制信号。
其中为了实现交通灯的轮流亮灭,需要将相关的信号加入jk触发器的时钟信号中,使用或门进行复合,比如黄灯状态的翻转不仅仅由5s定时脉冲的到来控制,还要在红灯脉冲到来时翻转为0状态,也就是黄灯是在绿灯延时结束时打开,在黄灯延时结束时关闭,所以黄灯的控制信号有两个,其他两个灯的控制信号也是如此。
按照上述思路完成元件的设置,摆放,并按下图完成连线。
交通灯仿真
设置仿真时间为100s,点击仿真按钮
控制脉冲:
交通灯状态:
180s内的仿真结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Simulink 逻辑电路 仿真 交通灯 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)