嵌入式系统设计专题实践嵌入式交通信号灯_第1页
嵌入式系统设计专题实践嵌入式交通信号灯_第2页
嵌入式系统设计专题实践嵌入式交通信号灯_第3页
嵌入式系统设计专题实践嵌入式交通信号灯_第4页
嵌入式系统设计专题实践嵌入式交通信号灯_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 嵌入式系统设计专题实践交通灯控制系统 专 业: 电子信息工程 班 级: 学 生 姓 名: 学 号: 指 导 教 师: 目录一、方案设计与论证31.1系统任务描述31.2系统方案设计41.3系统框图5二、硬件电路设计52.1 k60p144m100sf2rm最小系统设计52.2数码管显示模块设计72.3交通灯指示模块设计8三、系统软件设计83.1系统软件流程图83.2 500ms定时器子程序设计93.3 计数显示子程序设计10四、系统调试124.1硬件调试114.2软件调试114.3 综合调试12五、总结12六、心得体会12七、附录137.1系统实物图137.2程序代码147.3参考文献19

2、摘要当前伴随着信息化社会的快速发展,国家不断走向繁荣昌盛。与此同时,快节奏也成为当代人们在各大城市的主要特征。当今社会上汽车越来越多,为了减少城市交通阻塞和维持良好稳定的交通次序、加强对道路的管理力度。因此合理设计交通灯控制系统对维护道路安全和社会交通次序有着不可替代的作用。本文主要阐述交通灯控制系统的设计原理和过程,采用飞思卡尔k60作为系统的控制芯片,对系统的软件和硬件进行模块化设计,最终实现了基于飞思卡尔k60芯片的交通灯控制系统。该系统用红、黄、绿三种颜色的发光二极管来代替三种实际中的交通灯,在控制器的驱动下来形象化的演示实际中交通灯的运行模式和工作过程。最终该系统实现了对车辆直行、左

3、转、停止等待等基本功能。能够有效地对城市中的车辆产生明确的指导和控制。关键词:交通灯 k60p144m100sf2rm 数码管 定时显示 一、方案设计与论证1.1 系统任务描述本次设计中根据实际需要,结合嵌入式系统的特点,完成对交通灯的控制系统设计。系统功能包括实现对车辆的直行,左拐、停止等待等功能。基于飞思卡尔k60p144m100sf2rm控制器,实现对车辆进行指导控制。本系统中主要由控制器最小系统、数码管显示模块、交通灯模块等相关模块构成。系统任务包括三个环节。 假设十字路口南北方向为主干车道,东西方向为支干道。 状态一:南北方向、东西方向均设有红、黄、绿三个指示灯。首先南北方向绿灯亮一

4、分钟、东西方向红灯亮一分钟。此时处于向北方向的车辆处于绿灯状态,可以直行通过十字路口,而处于向东方向的车辆由于是红灯等待则不能前行,需在线外等待向东方向的绿灯来临才能前行。 状态二:一分钟之后,北方向的绿灯变为黄灯亮,且亮十秒钟。而在向东方向的红灯还没转变状态,红灯此时会连续闪烁10秒钟,作为东西方向将变成绿灯通行状态的提示。与此同时,向西方向的左转指示灯会变亮,也是亮10秒钟,车辆可以左转。 状态三:10秒钟过后,北方向的黄灯灭,红灯亮60秒,处于主干道上的车辆不能直行通过。与此同时东方向的红灯会灭,绿灯亮60秒,处于干道上的车辆可以直行。向北方向的车辆不能左转。左转指示灯会熄灭。状态三执行

5、完毕重新进入状态一开始执行,整过过程在k60控制器上电以后就进入工作状态,无需人工干预。图11为系统的工作状态图: 状态二10秒状态三60秒状态一60秒k60上电:图11 系统的工作状态图图12 系统的工作方式图1.2系统方案设计本系统基于k60p144m100sf2rm控制器设计的交通灯控制系统。设计过程主要采用自上向下的设计思路和模块化设计的设计思想,对软件和各个硬件模块进行独立设计,综合调试。软件包括显示、定时器、gpio、时钟等设置。硬件电路包括由三极管驱动的数码管显示电路以及交通灯显示电路。1.3系统框图电源交通灯指示模块数码管显示计时模块k60p144m100sf2rm 控制器最小

6、系统图13 系统框图二、硬件电路设计本系统中硬件系统包括k60p144m100sf2rm最小系统设计、数码管显示模块、交通灯显示模块。采用模块化设计的思想对以上模块进行设计。2.1 k60p144m100sf2rm最小系统设计kinetis是低功耗可扩展和在工业上使用混合信号arm cortex-m4系列mcu的最好的组合。kinetis系列mcu结合了最新的低功耗革新技术和高性能,高精密混合信号功能与连通,人机界面,安全及外设广泛。kinetis mcus使用了飞思卡尔和arm第三方合作伙伴的市场领先的捆绑模式。所有kinetis系列都包涵强大的逻辑、通信和时序阵列和带有伴随着闪存

7、大小和i/o数量的集成度等级的控制外围部件。kinetis 产品组合内核具有以下特点:arm cortex-m4 内核带dsp 指令,性能可达 1.25 dmips/mhz ( 部分kinetis 系列提供浮点单元);32 通道的dma 可用于外设和存储器数据传输并减少cpu 干预;提供不同级别的cpu 频率50 mhz、72 mhz 和100 mhz (部分kinetis 系列提供120 mhz 和150 mhz );10 种低功耗操作模式用于优化外设活动和唤醒时间以延长电池的寿命;行业领先的快速唤醒时间。正是由于k60控制器在性能上有较多的优点和较低的功耗,因而适合用来开发交通灯控制系统。

8、以下为本控制器的最小系统原理图:(1)(2)(3)图21 最小系统原理图2.2数码管显示模块设计 数码管分为七段和八段两种。根据极性也可分为共阴和共阳两种类别。其原理是根据发光二极管的组合成显示09,还包括字母a,b,c,d,e,f等。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(com)的数码管,共阴数码管在应用时应将公共极com接到地线gnd上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。图22 数码管工作原理图 分别对三个状态进行计时,个位和十位分别用一个数码管显示,每次计时加一的时间是1s。以下是本模块的原理图:图23

9、数码管显示模块原理图 其中由数码管的位选端和段选端进行控制数码管的显示程序。根据pnp三极管的导通原理,当位选端为低电平时,三极管导通,根据共阳极编码进行合理设置即可。此外用三极管驱动数码管的原因是三极管显示更明亮一些。用数码管显示效果比较直观。2.3交通灯指示模块设计 本模块用红、黄、绿三种颜色的发光二极管来代替实际中的交通指示灯。红灯亮则表示车辆停止等待,黄灯亮则表示绿灯在向红灯的跳变过程中允许已经越过规定线的车辆继续前行。绿灯则表示车辆可以直行通过。在此系统中,一共有7个指示灯。图24 交通灯指示模块原理图三、系统软件设计 3.1系统软件流程图 在系统的软件设计时,需要对系统时钟进行设计

10、,以满足对本次系统的功能需求。还需对gpio端口进行初始化设置,500ms定时延迟设置。然后需要考虑交通灯的三个工作状态,合理安排显示与计数的时序关系。 开始 系统初始化程序 交通指示灯交替亮灭时钟设置500ms定时器设置计数结束?n 计数程序 数码管显示y结束图31 系统软件流程图3.2 500ms定时器子程序设计开始 本模块是将产生500ms定时器,让在计数器计数时提供计时间隔,同时也可作为数码管个位和十位的刷新时间,即每次数码管显示更新递增一个数字经过的时间是1s。以下是本模块的子程序软件流程图: 设置lptmr定时器设置count_val比较值 触发输出1khz lpo时钟计数清除标志

11、位reach count_v值?结束yn图32 定时器子程序软件流程图 3.3 计数显示子程序设计 计数显示是在定时器运行前提下进行工作的。数码管每刷新一个数时,时间是1s。这样的好处是显示与指示灯状态同步起来。同时也能做到效果比较直观。以下是此部分模块的流程图:开始 dis_0=0 dis_1=0dis_2=0初始化 1000ms定时器数码管译码指示灯亮dis_0+dis_0<60y1000ms定时器数码管译码指示灯亮1000ms定时器数码管译码指示灯亮ndis_2+dis_2<60?dis_1+dis_1<10? yyn结束 n图33 计数显示模块流程图四、系统调试4.1

12、硬件调试 在硬件调试时,k60最小系统的调试就是用集成mini核心板进行调试,当系统上电后,将系统示例程序下载到开发板中,用一个示例led等进行测试能否正常运行。在gpio端口进行初始化后,应对端口进行合理设置。在对核心板程序下载成功后,在程序能正确运行时,可以根据共阳数码管的特点进行测试,对显示电路能否正常工作进行测试。验看数码管计数时是否与预想的一样,若不一样营及时修正程序。最终使结果出现与预期一样。4.2软件调试 在软件调试时,在iar for arm 6.30版本平台上进行编程下载,通过jlinkji进行下载到k60核心板中。在调试时可以用单步调试,全速运行,设置断点等方式。与此同时观

13、看寄存器和变量的值在调试中常常发挥着重要作用。在修改和完善程序后,最终下载到核心板中运行。以下是iar 开发界面:图41 iar 开发界面图4.3 综合调试 在综合调试时,首先应确保硬件和软件都调试完毕,将程序下载到硬件系统中后,首先应注意以下事项; 在上电之前应用数字万用表检测硬件电路的电源vcc和地是否导通,若导通,应及时检查后确保不能让电源和地短路;同时检测电路是否有虚焊现象,应及时解决这些可能对结果造成不良影响的问题,然后才能上电。 上电之后,观看实验效果,看数码管刷新时间和交通指示灯亮灭是否和预期相同,若时序不符合要求,应及时调整硬件或者软件。 在与核心板连接线时,应避免与io口短接

14、,造成数码管显示乱码或者显示效果不佳。五、总结本次基于飞思卡尔k60p144m100sf2rm控制器设计的交通灯控制系统,通过合理的软件设计和硬件设计,实现了交通灯绿灯亮60秒,黄灯亮10秒,红灯亮60秒,对南北主干道方向和东西支干道车辆进行直行和左转控制。用红、绿、黄led发光二极管代替实际中的交通指示灯,用数码管对亮灭时间进行计时,使结果直观。六、心得体会本次关于嵌入式系统设计专题实践,通过用基于cortex-m4内核的k60p144m100sf2rm控制器,我对嵌入式系统设计有了进一步的认识。在本次系统设计过程中,主要采用的是模块化设计的思想和自顶向下的设计原则,将功能细化,每一功能对应

15、一个功能子程序。在软件设计时我进一步体会到了画流程图的重要性。面对一个系统设计时,我们首先应该将功能划分和细化,每一部分可以画一些单个的子程序流程图,这样在软件设计时可以会在思绪上要清晰一些。调试步骤则采用硬件和软件分开调试,最后再综合调试的方案。在软件调试时,我们首先将程序编译通过后,经过j-link下载到核心板中,然后可以在线仿真和调试。在调试时,除了首先全速运行程序外,如果运行结果不太理想,这时我们可以采用单步调试,设置断点等方式进行调试。还有需要注意的是,在烧写程序时,不能直接从核心板上拔下j-link,应断电后小心取下。关于软件调试和软件编写在本次实践中我的感悟还是挺多的。在硬件调试

16、时,一开始在程序正常运行时数码管始终效果不明显,后来分析得知是驱动电流不大造成数码管显示比较暗的。最后的解决办法是在数码管的位选端加了三极管进行放大,最终数码管显示的效果才会直观,明亮。在测试led灯的好坏时,我由于没有考虑到发光二极管的导通电压,以为这个直径较大的发光二极管应该在3.3v电压时是不会击穿的。因而也为了简易就没有加上限流电阻。最后在测试时,在接上3.3v电压时,红色和黄色的led发光二极管都在瞬间被击穿,只有绿灯能够正常导通发光。所幸的是核心板有短路保护模式,不然结果是比较严重的。最终我还是都接上了330欧姆的限流电阻,才解决这个问题。这些都是我在不了解元器件的前提下所犯的错误

17、。通过此次实践,也让我吸取了这一点教训。在实验之前,应对元器件有了基本的了解才能去利用它们进行设计。通过这次交通灯的实验,我学会并了解了一些嵌入式与单片机的相同和不同之处,更 让我感到了嵌入式的强大。以往在单片机的学习和课程设计中,一些知识点并不会显的十分复杂,而现在的嵌入式系涉及到了更多的知识和复杂的理论。因为嵌入式不仅仅是一个高级的一些的单片机,而是涉及到了系统的概念,从功能上还是应用、实时、稳定上都要优于单片机。 另外,从做交通灯的实验中,学习和巩固了以前的编程知识,还有对天一些电路的分 析,数电模电的知识等。更重要的是在这次实验中,得到了动手能力和思维方式的锻炼。做为一名自动化专业的学

18、生,动手能力和思维方式的锻炼是成为得要的,特别在以后遇到问题时要有解决问题的能力。 七、附录 7.1系统实物图 ·(1)(2)(3)图71 系统实物图7.2程序代码:void main (void) /int m=0; /printf("twr-k60n512 gpio example!n"); / uint i=0; /* turn on all port clocks */ sim_scgc5 = sim_scgc5_porta_mask | sim_scgc5_portb_mask | sim_scgc5_portc_mask | sim_scgc5_por

19、td_mask | sim_scgc5_porte_mask; /* enable gpioa and gpioe interrupts in nvic */ /enable_irq(87); /gpioa vector is 103. irq# is 103-16=87 /enable_irq(91); /gpioe vector is 107. irq# is 107-16=91 /* initialize gpio on twr-k60n512 */ init_gpio(); gpio_set (portb, 21, 1); gpio_set (portb, 20, 1); gpio_s

20、et (porta, 17, 0); gpio_set (porta, 16, 0); gpio_set (porta, 15, 0); gpio_set (porta, 14, 0); gpio_set (porta, 13, 0); gpio_set (porta, 12, 0); data7(); while(1) for(dis_0 =0;dis_0<62;dis_0+) if(dis_0<=60) gpio_set (porta, 17, 1); gpio_set (porta, 16, 1); data7(); /time_delay_ms(1000); gpio_se

21、t (portb, 20,0); /time_delay_ms(1000); gpio_set_pin(port_d,dis_codedis_0%10); /gpio_set (portb, 20,1); time_delay_ms(500); /data7(); /delay(); gpio_set (portb, 20, 1); data7(); gpio_set (portb, 21, 0); gpio_set_pin(port_d,dis_codedis_0/10); /time_delay_ms(100); /data7(); / delay(); time_delay_ms(500

22、); data7(); gpio_set (portb, 21,1); /time_delay_ms(1000); if(dis_0>60) gpio_set (portb, 21, 1); gpio_set (portb, 20, 1); gpio_set (porta, 17, 0); /gpio_set (porta, 13, 1); for(dis_1 =0;dis_1<12;dis_1+) if(dis_1<=10) gpio_set (porta, 15, 1); gpio_set (porta, 13, 1); data7(); /time_delay_ms(1

23、000); gpio_set (portb, 20,0); /time_delay_ms(1000); gpio_set_pin(port_d,dis_codedis_1); /gpio_set (portb, 20,1); time_delay_ms(500); gpio_set (porta, 16, 1); /delay(); time_delay_ms(500); gpio_set (porta, 16, 0); /data7(); /delay(); /io_set (portb, 20, 1); /data7(); /gpio_set (portb, 21, 0); /gpio_s

24、et_pin(port_d,dis_codedis_1/10); /time_delay_ms(100); /data7(); / delay(); /time_delay_ms(500); /data7(); /gpio_set (portb, 21,1); /time_delay_ms(1000); if(dis_1>10) gpio_set (portb, 20,1); gpio_set (portb, 21,1); gpio_set (porta, 16, 0); gpio_set (porta, 15, 0); gpio_set (porta, 13, 0); for(dis_

25、2=0;dis_2<61;dis_2+) if(dis_2<60) gpio_set (porta, 14, 1); gpio_set (porta, 12, 1); data7(); /time_delay_ms(1000); gpio_set (portb, 20,0); /time_delay_ms(1000); gpio_set_pin(port_d,dis_codedis_2%10); /gpio_set (portb, 20,1); time_delay_ms(500); /data7(); /delay(); gpio_set (portb, 20, 1); data

26、7(); gpio_set (portb, 21, 0); gpio_set_pin(port_d,dis_codedis_2/10); /time_delay_ms(100); /data7(); / delay(); time_delay_ms(500); data7(); gpio_set (portb, 21,1); if(dis_2>=60) gpio_set (portb, 20,1); gpio_set (portb, 21,1); gpio_set (porta, 14, 0); gpio_set (porta, 12, 0); /gpio_set (porta, 13,

27、 0); /time_delay_ms(1000); void init_gpio() /set pta19 and pte26 (connected to sw1 and sw2) for gpio functionality, falling irq, / and to use internal pull-ups. (pin defaults to input state) /porta_pcr19=port_pcr_mux(1)|port_pcr_irqc(0xa)|port_pcr_pe_mask|port_pcr_ps_mask; /porte_pcr26=port_pcr_mux(

28、1)|port_pcr_irqc(0xa)|port_pcr_pe_mask|port_pcr_ps_mask; /set ptb10, ptb21, ptb21, and ptb23 (connected to led's) for gpio functionality/修改适合本电路板 portb_pcr20=(0|port_pcr_mux(1); portb_pcr21=(0|port_pcr_mux(1); /portb_pcr22=(0|port_pcr_mux(1); /portb_pcr23=(0|port_pcr_mux(1); portd_pcr0=(0|port_pcr_mux(1); portd_pcr1=(0|port_pcr_mux(1); portd_pcr2=(0|port_pcr_mux(1); portd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论