智能电梯控制器的设计

合集下载

智能电梯系统的设计与实现

智能电梯系统的设计与实现

智能电梯系统的设计与实现随着人们生活水平的不断提高,对于生活品质的要求也越来越高。

在现代的大都市中,许多高层建筑成为了人们生活和办公的首选,而电梯则成为了我们最常接触到的交通工具之一。

如果电梯的设计和使用不当,则不仅会影响人们的出行效率,还可能会危及乘客的安全。

为了追求更加安全、高效和方便的电梯出行体验,智能电梯系统应运而生。

本文将介绍智能电梯系统的设计和实现。

一、智能电梯系统的优势智能电梯系统可以帮助我们节省时间和提高电梯的效率,一些智能控制技术可以根据不同的时间、人流和需求进行更加智能的调度,降低了电梯等待和运行时间,提高了电梯的效率,节约了时间。

同时,智能电梯系统还可以根据乘客的需求来调节电梯的运行速度、停留点以及目的地。

这种自由的选择也可以提高电梯使用的舒适性和便利性让乘客可以更好地享受电梯出行的便利与快捷。

二、智能电梯系统的设计与实现1. 智能电梯系统架构设计智能电梯系统架构设计一般包括控制节点、数据节点和应用节点。

控制节点包括电梯控制器、控制器管理器和智能调度器等,数据节点主要包括各种传感器和检测器,以及相关的数据处理和传输设备。

应用节点则是电梯系统的最终使用者,包括电梯乘客和管理系统。

2. 智能电梯系统的工作原理智能电梯系统是通过各种传感器、检测器和控制技术来获取和处理电梯运行过程中的各种信息,这些信息包括电梯位置、乘客数量、运行速度、危险信息等。

智能电梯系统还可以利用这些信息来调整电梯的运行状态,如改变运行速度、调整消耗能源、优化停留点等,以提高电梯的效率和运行质量。

3. 智能电梯系统的功能要求智能电梯系统应该具备以下功能:(1) 优化电梯的调度和运行,降低等待和运行时间;(2) 提高电梯的效率和可靠性,降低运行故障的发生;(3) 提高电梯的舒适性和安全性,为乘客提供更好的出行环境;(4) 实现电梯数据的采集和处理,为电梯管理和运营提供数据支持;(5) 实现电梯的自我控制和自我保护,确保电梯的安全性和稳定性。

基于PLC的电梯控制系统设计及优化方案

基于PLC的电梯控制系统设计及优化方案

基于PLC的电梯控制系统设计及优化方案一、引言电梯作为现代城市生活中不可或缺的交通工具之一,其安全性和可靠性对于人们的生活质量起着重要的作用。

本文就基于可编程逻辑控制器(PLC)的电梯控制系统进行设计和优化,旨在提高电梯的运行效率和安全性。

二、电梯控制系统的设计1. 系统结构设计电梯控制系统主要由PLC、人机界面(HMI)、电机驱动器和传感器组成。

其中,PLC负责控制电梯的运行状态,HMI用于操作和显示电梯的运行信息,电机驱动器控制电梯的运行方向和速度,传感器用于感知电梯的位置和负载情况。

2. 控制逻辑设计基于PLC的电梯控制系统需要考虑多重因素,包括电梯的运行状态、外部乘客需求和电梯的安全性。

可以采用以下控制逻辑进行设计:- 根据外部信号确定电梯的运行方向:当电梯处于静止状态时,根据上下行按钮的信号确定电梯的运行方向。

- 响应楼层请求:当电梯处于运行状态时,监测电梯上下移动过程中每一层的请求,根据最近楼层请求和电梯当前所处楼层确定是否停靠。

- 控制电梯的加速度和减速度:根据电梯的负载情况和运行状态,控制电梯的加速度和减速度,以平稳地进行上下运动。

3. 安全保护设计为了保证电梯的安全性,需要在电梯控制系统中设计各种安全保护机制,包括速度保护、超载保护、门把手保护和故障诊断等。

- 速度保护:通过传感器监测电梯的速度,设置速度上下限,一旦检测到速度超出设定范围,立即停止电梯运行。

- 超载保护:通过传感器监测电梯的负载情况,设置负载上限,一旦检测到超载,禁止进入更多的乘客,确保电梯的正常运行。

- 门把手保护:在电梯门上设置安全传感器,一旦检测到门把手或其他物体卡住,立即停止电梯门的关闭过程。

- 故障诊断:通过PLC的自动故障诊断功能,可以及时发现电梯控制系统的故障,并进行报警或者自动处理。

三、电梯控制系统的优化方案1. 智能调度算法在电梯控制系统中,采用智能调度算法可以优化电梯的运行效率和乘客的等待时间。

电梯plc控制设计毕业论文

电梯plc控制设计毕业论文

电梯plc控制设计毕业论文本篇毕业论文是针对电梯PLC控制设计的研究。

主要包括PLC(可编程逻辑控制器)控制器、电梯运行原理、PLC控制电梯的实现过程等方面的内容。

1.可编程逻辑控制器(PLC)控制器可编程逻辑控制器(PLC)是一种用于控制生产线上机械设备的电子设备。

它是一个可编程的数字电脑,它按照内部程序代码的指令来控制其他设备。

PLC技术已被广泛应用于包括电力、能源、冶金、化工、轻工、交通、航空、军事等各个领域。

PLC控制的原理是通过输入模块将外部设备的信号输入到PLC内部,PLC通过内部程序的处理,对外部设备进行控制,以完成运行任务。

PLC的控制流程通常包括输入、处理和输出三个过程。

输入过程是指将外部设备的信号输入到PLC内部,可以采用电位器、传感器、按钮等方式;处理过程是指内部程序对输入信号进行逻辑处理以完成相应的控制任务,包括计算、判断、控制等;输出过程是指PLC控制器将处理后的信号输出到外部设备,完成控制任务。

2.电梯运行原理电梯是一种安装在建筑物中,用于垂直运输人和物的机械设备。

电梯的运行原理主要包括电力传动系统、控制系统和安全设备等三个方面。

电力传动系统是电梯的重要组成部分,主要包括电机、减速机和传动系统。

电机作为电梯的动力源,其转动通过减速机和传动系统作用于电梯的牵引系统,以实现电梯的升降和停靠等功能。

控制系统是电梯控制和管理的核心,主要包括PLC控制器、触摸屏、控制面板以及相关传感器和开关等。

控制系统通过PLC控制器的程序设计,对电梯进行运行控制、安全保护等任务。

安全设备是电梯的重要保护措施,主要包括限速器、安全钳、安全杆、防坠落制动器等。

这些安全设备在电梯运行中发挥着重要作用,可以有效保护电梯运行的安全。

3.PLC控制电梯的实现过程PLC控制电梯的实现过程主要包括以下几个步骤:3.1 PLC控制器的搭建PLC控制器是电梯控制系统的核心,需要根据电梯的不同需求进行程序编写。

首先需要对PLC控制器进行基本设置和参数配置,以满足电梯的操作要求。

智能电梯的安防联动控制系统设计

智能电梯的安防联动控制系统设计

智能电梯的安防联动控制系统设计摘要:随着社会的快速发展与进步,人们对生活的要求越来越高。

电梯作为必不可少的一种运输工具,其安防联动控制系统也被受关注。

智能电梯安防联动控制系统是由IC卡读写系统、安防控制系统、数字对讲系统共同组成的安防系统,系统间有着一定的联动控制性。

智能电梯安防联动控制系统不仅为电梯使用者和管理者带来了方便,同时也有效确保电梯系统运行安全。

基于此,本文主要分析了智能电梯的安防联动控制系统设计。

关键词:智能电梯;控制系统;安防引言:电梯使用的智能化和自动化是当今时代的发展要求,而其中,智能电梯安防联动控制系统的研制更是受到了越来越多人的广泛关注。

作为一种便捷的运输设备,其构造原理及运转机制十分复杂。

若稍有不慎都可能会出现事故,造成难以挽回的财产损失和人身安全问题。

我们应该深入分析智能电梯安防联动控制系统的具体要求和研制流程,对其功能性需求进行分析和设计,从而提升智能电梯的用户体验和安全性能,防止智能电梯在使用过程中发生人为风险和机械故障的可能性,提升智能电梯的总体安全系数。

1、智能电梯安防联动控制系统概述电梯作为人们日常生活中最重要的运输工具,其安全性能是其使用安全的重要保证。

当前,在电气设备智能化的号召之下,对于电梯的功能也提出了智能化、一体化以及自动化的多种要求,越来越多的智能化电梯被应用在办公楼和居民楼之中,其中,智能电梯的安防联动控制系统是智能电梯安全性的有效保证。

它是由电梯IC卡读写系统以及安防控制系统与数字对讲系统共同组成的安防系统,各个系统之间有着较高的联动性,因此被称之为安防联动控制系统。

系统中主要应用的技术为单片机控制技术、串行通信技术以及针对音频的传输和处理技术。

这种安防控制系统能够防止无关人员使用电梯,增加了电梯使用的安全性和稳定性,降低了建筑物使用者的使用电梯的风险,也对我国的安全城市建设和文明城市建设起到了一定的助推作用。

2、智能电梯的安防联动控制系统设计2.1系统设计的主要内容包含这四部分:2.1(1)对智能电梯安防联动控制系统的功能和相关设备的性能需要进行分析和研究,为之后的开发做铺垫。

基于stm32的电梯控制器 毕业设计

基于stm32的电梯控制器 毕业设计

基于stm32的电梯控制器毕业设计毕业设计题目基于STM32的多层电梯控制器的设计学院信息科学与工程学院专业电子信息科学与技术班级电信0902学生邹强学号20091221572指导教师孔祥玉二〇一三年六月七日摘要世界上第一台电梯是由美国的奥的斯公司制造的。

自从这第一台电梯于1987年问世以来,对生活在城市的楼宇中特别是高楼大厦中的人们的生活和工作带来了巨大的便利。

随着社会经济的飞速发展,电梯与人们的生活越来越密不可分。

本设计的电梯系统采用的是stm32微处理器。

STM32处理器是基于Cortex-M3架构的嵌入式微处理器MCU,其中Cortex-M3架构是ARM公司推出的。

STM32处理器具有高速、高集成度、低功耗、高可靠性等优点。

正是由于STM32处理器具有这些优点,它正适合运用于电梯控制。

本设计中的电梯控制系统主要运用了STM32处理器GPIO口操作和其精确地定时功能。

该电梯系统一共分6个部分,它们是STM32处理器、电源系统、数码管显示器、键盘、LED小灯、直流电机驱动模块。

这些部分是直接与STM32的GPIO口连接的,所以它们占用的GPIO口较多。

关键词:STM32处理器;Cortex-M3架构;直流电机驱动模块ABSTRACTThe world's first elevator is manufactured by the United States Otis. Since the first lift inception in 1987, the way of people who live in the buildings in the city especially in the high-rise buildings and work has brought great convenience. With the rapid socioeconomic development, the elevator becomes increasingly inseparable in people's lives.The designs of the elevator system use the STM32 microprocessor. The STM32 processor is based on Cortex-M3-based embedded microprocessor MCU, and Cortex-M3 architecture is ARM introduced. STM32 processor has the advantages of high-speed, high integration, low power consumption, high reliability and so on. Because of the STM32 processor has these advantages; it is suitable used in elevator control. The designs of the elevator control system mainly utilize the STM32 processor GPIO port operation and accurate timing functions. The elevator system is divided into six parts which are STM32 processors, power systems, digital display, keyboard, LED lights and DC motor driver module. These parts are connected directly with the STM32 GPIO ports that take more part of GPIO port.Keywords: STM32 processor; Cortex-M3 architecture; DC motor drive module目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1 课题背景 (1)1.1.1 选题背景 (1)1.1.2国内外现状 (1)1.1.3 本课题的意义及研究内容 (2)第2章系统设计方案 (3)2.1 系统硬件总体组成 (3)2.1.1总体框图 (3)2.2 系统硬件方案 (4)2.2.1 STM32选择方案 (4)(2)STM32的原理图及特性 (4)2.2.2 键盘设计方案 (6)2.2.3 LED指示灯设计方案 (6)2.2.4数码管显示器设计方案 (6)2.2.5电机驱动设计方案 (7)第3章系统硬件设计 (8)3.1 硬件系统的总体设计 (8)3.2 硬件系统的部分设计 (8)3.2.1 键盘硬件电路设计 (8)3.2.2 LED指示灯硬件电路设计 (9)3.2.3 八段数码管硬件电路设计 (10)3.2.4电机驱动模块硬件电路 (12)第4章系统软件设计 (14)4.1 主程序设计 (14)4.2 显示程序设计 (22)4.3 LED指示灯程序设计 (23)4.3 键盘查询程序设计 (24)4.3 门控制程序设计 (25)4.3 电机驱动程序设计 (30)结论 (35)参考文献 (36)致谢 (38)附录1 系统运行样式 (39)第1章绪论1.1 课题背景1.1.1 选题背景电梯是一种由电动机作为驱动力的竖直升降设备,装有立方体吊舱并设有电梯门,用于多层建筑乘人或载运货物。

智能电梯控制系统设计毕业设计

智能电梯控制系统设计毕业设计

智能电梯控制系统设计毕业设计智能电梯控制系统设计毕业设计?哎呀,听起来是不是有点高大上?说白了就是想让电梯更聪明,让它在咱们楼里跑来跑去的时候,不再是像个傻小子一样,等得人心焦,或者站错楼层,搞得自己也懵圈。

你看啊,现在的楼层越来越高,人口越来越密集,电梯作为咱们日常生活的得力小帮手,能否顺利地运行,直接关系到大家的心情,甚至工作效率。

所以呢,这个智能电梯的设计,其实不仅仅是技术上的挑战,还涉及到咱们日常生活的细节,关乎“等一会儿”、“还没到”这样的生活小烦恼。

咱们就来聊聊这个事儿,看看这个“智能电梯控制系统”怎么能让咱们的生活更美好!电梯嘛,大家都用过,不是吧?反正我用过好几回,电梯门一关,突然停住,居然在半路被卡住了,心里那个焦急,恨不得自己去推一推电梯。

再比如说那种,按了上去的按钮,电梯却停在了下面,简直是笑话!不过如果有了智能电梯控制系统,就可以大大减少这种烦人的“意外”。

像是一些聪明的控制系统可以通过智能算法预测楼层的需求,提前调配电梯,甚至根据楼层的流量来自动选择最佳路线。

这样一来,你再也不用站在那儿发呆了,电梯总能准时在你面前出现,给你一种“哇,真是太懂我了”的感觉。

再说说智能系统的“眼睛”——传感器。

你要知道,以前的电梯控制系统,都是靠按钮来操作的。

咱们按下一个按钮,它就开始工作,但往往一按错,电梯就开错门,搞得自己都尴尬得不行。

但是,智能电梯就不一样了,它可以通过传感器感知楼层的变化、人员的上下情况。

换句话说,咱们进入电梯时,传感器就会立马知道是哪个方向需要前往,甚至在你进电梯的一瞬间,系统就能预测到你是想去几楼,这种精准程度,简直让人拍手称赞!就像是你进了店里,老板就知道你想要什么,不用多问,直接拿出来,简直舒服得不要不要的。

不仅如此,智能电梯还可以根据每个楼层的繁忙程度,智能分配电梯的运行路径和时间,避免高峰时段出现拥挤的情况。

想象一下,如果有了这种智能系统,大家都可以迅速、安稳地进出电梯,不用担心被别人挤来挤去。

基于PLC的智能电梯控制系统设计

基于PLC的智能电梯控制系统设计

基于PLC的智能电梯控制系统设计智能电梯控制系统是现代城市中不可或缺的一部分。

本文将介绍基于可编程逻辑控制器(PLC)的智能电梯控制系统设计。

1. 系统概述及需求分析智能电梯控制系统的主要功能是根据用户的需求和楼层的情况,实现电梯的安全、高效地运行。

该系统应具备以下特点:- 自动调度:根据乘客分布和楼层需求,合理分配电梯资源,降低等待时间和能源消耗。

-故障检测与报警:及时监测电梯的故障情况,并通过声音或显示屏等方式向用户发出警报。

- 安全保护:通过检测电梯内外的重量和限制人数,确保电梯的安全运行。

- 软启动和软停止:通过控制电梯的加速度和减速度,实现舒适的乘坐体验。

2. 硬件设计基于PLC的智能电梯控制系统的硬件设计需要包括以下部分:- PLC:作为控制系统的核心,负责接收和处理传感器和按钮的输入信号,并控制电梯的运行。

- 传感器:包括电梯内外的按钮、楼层传感器、重量传感器等,用于获取电梯和乘客的状态信息。

- 电梯主机:电梯的驱动设备,包括电机和减速器等,负责实现电梯的移动。

- 显示屏和声音设备:用于向用户显示当前楼层、电梯状态和发出报警声音等。

- 通信设备:可选的设备,用于与外部系统进行通信,如远程监控和管理系统。

3. 软件设计基于PLC的智能电梯控制系统的软件设计包括以下方面:- 输入信号处理:PLC需要接收来自各个传感器和按钮的输入信号,并根据信号类型进行处理。

- 运行调度算法:根据乘客分布和楼层需求,采用合适的调度算法来实现电梯的自动调度功能。

- 运动控制:根据输入信号和调度算法,控制电梯主机的运动,实现电梯的平稳启动、停止和运行。

- 状态监测和故障检测:监测电梯的状态,包括位置、速度、载荷等,及时检测故障并发出警报。

- 用户接口设计:通过显示屏和声音设备,向用户显示当前楼层、电梯状态以及发出报警声音等。

4. 系统测试与调试设计完智能电梯控制系统后,需要进行系统的测试和调试。

包括以下步骤:- 验证输入信号的传输和处理是否正确,如按钮的响应、传感器的准确性等。

智能电梯语音识别控制系统设计

智能电梯语音识别控制系统设计

第14卷㊀第3期Vol.14No.3㊀㊀智㊀能㊀计㊀算㊀机㊀与㊀应㊀用IntelligentComputerandApplications㊀㊀2024年3月㊀Mar.2024㊀㊀㊀㊀㊀㊀文章编号:2095-2163(2024)03-0199-04中图分类号:TP391.4文献标志码:A智能电梯语音识别控制系统设计王金硕,张紫阳,郑昌威,宋㊀蕾(辽宁科技大学电子与信息工程学院,辽宁鞍山114051)摘㊀要:随着语音识别技术的不断发展,无接触语音控制模式在公共设施上的应用也不断普及㊂为实现无接触语音控制模式在电梯控制系统上的应用,本文设计智能电梯语音识别控制系统,通过语音识别模块配合单片机实现对电梯的基本控制,并添加部分辅助功能以实现电梯的智能化设计,提高对于多种电梯应用环境的功能性㊁简化结构㊁拓展应用范围㊁实现电梯的自动化㊁智能化发展㊂关键词:电梯;语音识别;无接触语音控制;单片机DesignofintelligentelevatorspeechrecognitioncontrolsystemWANGJinshuo,ZHANGZiyang,ZHENGChangwei,SONGLei(SchoolofElectronicandInformationEngineering,UniversityofScienceandTechnologyLiaoning,Anshan114051,Liaoning,China)Abstract:Withthecontinuousdevelopmentofvoicerecognitiontechnology,theapplicationofcontactlessvoicecontrolmodeinpublicfacilitiesisalsobecomingmoreandmorepopular.Inordertorealizetheapplicationofthecontactlessvoicecontrolmodeintheelevatorcontrolsystem,theintelligentelevatorvoicerecognitioncontrolsystemisproposed,whichmainlyrealizesthebasiccontroloftheelevatorthroughthevoicerecognitionmodulewiththesingle-chipmicrocomputer,andaddssomeauxiliaryfunctionstorealizetheintelligentdesignoftheelevator.Theresearchfruitsimprovethefunctionalityoftheelevatorapplicationenvironment,simplifythestructure,expandtheapplicationrange,andrealizetheautomationandintelligentdevelopmentoftheelevator.Keywords:elevator;speechrecognition;contact-freevoicecontrol;microcontroller基金项目:大学生创新创业训练计划项目(2023年立项)㊂作者简介:王金硕(2004-),男,本科生,主要研究方向:电子工程;张紫阳(2003-),男,本科生,主要研究方向:电子工程;郑昌威(2003-),男,本科生,主要研究方向:电子工程㊂通讯作者:宋㊀蕾(1976-),女,博士,副教授,主要研究方向:冶金工程㊂Email:2327603962@qq.com收稿日期:2023-03-300㊀引㊀言随着人工智能和边缘计算的不断普及与发展,人们的生活水平日渐提高,语音识别技术作为智能化发展的一个重要分支已经成为了社会发展的潮流方向[1]㊂从生产方面来说,通过语音智能控制电梯的模式能够克服传统电梯的局限性,进一步提高自动化和智能化水平[2];从生活方面来说,电梯具有使用频繁㊁使用人群复杂㊁空间狭小㊁空气难以流通等特点,使用者直接接触按键将可能造成病毒的传播,而无接触控制模式可以极大程度地减小病毒传播的风险[3]㊂另外,无接触式的电梯控制方式可以减少因频繁使用按键导致的按键损伤,减小维护成本[4]㊂智能电梯控制系统主要通过语音模块实现电梯的无接触控制,并结合面部识别进行人员认定,继而又添加了传感器模组结合单片机进行一般风险的处理㊂通过将语音识别和面部识别相结合的方式实现电梯的智能化控制,从而有效提高了电梯运行的安全性㊂1㊀设计思路为实现智能电梯语音识别控制系统的主要功能,在语音智能控制的基础上,通过加装人脸识别系统㊁语音识别功能㊁一般风险处理等辅助模块进一步实现电梯的智能化设计,其自动控制模式也极大地促进了电梯的智能化㊂首先,为了减小运营成本并保证人员安全,目前很多社区和办公场所通过门卡的方式限制外来人员使用电梯,但刷门卡通过有时候也会带来很多不便,比如忘带门卡等情况[5]㊂而通过人脸识别和语音识别的方式对外来人员进行区分,不仅可以使识别更精确,保证安全,还可以切实提升电梯使用的便捷性,防止因 丢卡 而无法使用电梯的情况发生[6]㊂同时,外来人员也可以语音申请㊁并在允准后使用电梯,避免了外来人员无法使用电梯的情况,从而提供了更好的使用体验㊂其次,通过添加对一般风险的预警㊁外界连接交流等功能实现对电梯突发状况的风险处理㊂当风险发生时电梯会自动向外部发送运行状态异常信号,同时电梯内人员也可选择与外界进行语音联络,有助于外部人员较快地了解电梯内部情况㊂智能无接触控制系统在语音唤醒后开始收集使用者的面部信息,在面部信息比对完成后开启对电梯的语音化控制,通过语音模组对声音进行收取并将相应的控制信号输出给单片机,由单片机处理并输出信号控制电梯㊂外来人员使用电梯时也可向系统发出请求,经允许后可以使用电梯㊂此外,当检测或者接收到紧急情况信息时,单片机也将开启应急处理模式,并将电梯内部情况实时传递到外部总控端,以利于外界了解电梯内部和人员情况,更加及时,便捷地应对和处理突发情况㊂2㊀语音模块设计2.1㊀语音模块硬件介绍电梯的无接触化控制由VC-02语音识别模组实现的㊂该模组使用了US516P6语音芯片,能够精确完成声音信号与数字信号的相互转换,从而实现语音识别的功能[7]㊂US516P6芯片支持数字信号处理(DSP)指令集以及浮点运算单元,可以定制语音算法算子,实现对音频信息的收集与处理,具有良好的稳定性[8]㊂该离线识别算法与芯片架构深度融合,在音频方面支持I2S总线输入输出及模拟和数字音频输入与双声道数字模拟输出,可以实现语音控制的个性化定制和精准识别功能㊂VC-02的应用电路如图1所示㊂D A C_RM I C-M I C+G P I O_B7/T X1G P I O_B6/R X1G P I O_A25N CS D A/G P I O_B3S C L/G P I O_B2T C K/G P I O_B O/T XS P K+S P K-G N DV C CG P I O_A27G P I O_B8D A C_LG P I O_A26N C T M S/G P I O_B1/R XM I C-M I C+S P K+ S P K-M I CS P KV C-02V C C图1㊀VC-02应用电路Fig.1㊀VC-02applicationcircuit2.2㊀语音识别模块设计系统的语音识别模块以VC-02语音识别模组为主控单元,在设置好命令词后通过识别声音与命令词比对输出相应的控制信号㊂命令词实现的功能主要分为电梯控制㊁用户注册和自动化转人工等多个方面㊂VC-02通过提前设置的声音命令词和声音播报,让使用者可以通过说出对应的命令词实现控制系统的启用㊁对电梯的控制以及进行相应的操作[9]㊂芯片对每一个命令词都有一个相应的控制信号,将信息发送至单片机以判断对电梯下一步的控制方案㊂如芯片在识别到使用者前往的楼层时,将通过串口向单片机发送控制信号,并由单片机发送对电梯的控制信息使电梯到达相应楼层㊂在使用过程中,语音模块将按照先后顺序依次读取命令词,以防止语音识别系统在复杂的使用环境下混淆命令词㊂在VC-02语音模组中还添加了特定识别词,以实现外来人员识别㊁人员信息注册㊁唤醒声音识别系统和应急通讯等功能㊂当语音识别模块接收到上述特殊命令词后,将相应的控制信息发送到单片机,在信息处理的单片机上预留了一个输入和输出端口,通过有线的方式将上述特殊信息传递给总控端对信息进行处理,处理后将控制信息发送到单片机中㊂当单片机接收到可以使用的信号时,语音识别的流程如图2所示㊂单片机收取信息执行对应操作特殊命令词V C-02收取声音选择操作方案退出录入完成申请录入信息是否为批准用户语音唤醒开始语音识别与人脸识别相结合是否图2㊀语音识别流程图Fig.2㊀Flowchartofspeechrecognition3㊀面部识别模块设计3.1㊀OpenMV的人脸识别OpenMV是一种可以通过编程语言实现其逻辑功能的可编程摄像头模块[10],其人脸识别的主要功能是通过局部二值模式(LocalBinaryPattern)特征描述的,LBP通过描述图像局部特征的算子,提取特征纹理,完成人脸识别[11]㊂人脸检测是通过002智㊀能㊀计㊀算㊀机㊀与㊀应㊀用㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第14卷㊀OpenMV的构造函数进行匹配并判断对象是否处于图像中㊂通过该函数可以更精准地对电梯内部人员进行面部识别,OpenMV通过对每一位电梯使用者进行拍照记录,将使用者的面部信息与数据库中的人脸模型进行相似度匹配,匹配成功后发送命令信号,进行语音控制电梯的操作[13]㊂3.2㊀面部识别设计面部识别功能主要是由OpenMV摄像头模块进行数据采集,实现人脸信息录入和电梯进入人员的识别两个功能㊂在对语音电梯控制系统进行语音唤醒后,要对进入电梯人员进行识别㊂OpenMV将采集到的人脸信息与数据库中的人脸数据加以比对,找出比对符合率最大的,并判断符合率是否达到人脸匹配成功的要求㊂如果识别失败则转入人脸信息的录入,摄像头将采集不同角度和不同表情的人脸数据进行储存,并将录用的人脸信息进行备份㊂人脸识别流程如图3所示㊂单片机收取信息执行对应操作选择操作方案申请录入信息语音唤醒开始录入完成退出人脸识别识别成功识别失败图3㊀人脸识别流程图Fig.3㊀Flowchartoffacerecognitiondesign4㊀一般风险处理电梯成为人们日常生活中重要的组成部分,保证电梯安全运行是公共设施建设的必要要求[14]㊂而在电梯内发生的风险一般都是突发的,没有太多的反应时间,同时电梯封闭的环境也易导致营救人员对内部突发状况和人员情况不了解,增加了救援难度[15]㊂在智能电梯控制系统设计的过程中主要围绕对风险的及时感知与预警以及对突发情况的辅助通讯等方面展开㊂通过预警㊁通讯与辅助救援等方面增强电梯使用的安全性,使智能电梯控制系统成为电梯安全运行的保障之一[16]㊂4.1㊀风险预警风险预警模块在电梯开始运行时开启,将传感器传输出的电梯运行状况信号传递给单片机进行检测㊂由于电梯内部为封闭空间,为保证数据传输的稳定性,单片机检测到的运行状况数据将通过有线的方式传输到数据库中[17]㊂当系统监测到电梯运行异常时,将通知外界的总控端进行预警㊂风险预警的预警状态分为4种:电梯运行速度异常㊁火警故障㊁断电故障和电梯门异常,电梯的运行状态结构如图4所示㊂运行速度异常火警故障断电故障电梯门异常单片机对传感器信号进行检测并进行逻辑分析红外感应电源检测温度检测光电传感器开关门信号电源维修信号火警信号电梯运行状态图4㊀电梯运行状态Fig.4㊀Runningstateoftheelevator㊀㊀目前市面上大多数种类的电梯是由轿厢中的控制系统控制电梯运行的,该系统主要以单片机或者可编程逻辑控制器(PLC)作为控制核心[18]㊂电梯在运行过程中由电机带动钢丝绳控制轿厢升降,轿厢中的控制系统接收到系统命令后,串行总线和电梯顶部的电机进行通讯[19],电梯的位置是由轿厢中的控制系统来进行检测的,一般都采用增量编码器计数的方式配合双稳态磁开关或光电开关来识别轿厢位置,从而将电梯的位置信号传递给电梯控制系统[20]㊂系统通过接收电梯的位置信号计算电梯的运行速度,判断电梯运行状态是否异常㊂电梯运行速度由电梯通过楼层的时间决定,电梯平均速度计算公式如下:V-=ðni=1dnti㊀㊀其中,d为楼层宽度;n为电梯从开始运行到停止状态时通过的楼层数量;ti为电梯从开始运行到停止状态通过每一个楼层所用的时间㊂另外,系统还添加了温度传感器,当温度值高于预警值时系统将发送火警故障预警㊂系统的电源检测电路能够判断电梯是否为带电状态,当检测到电梯为无电状态时发送断电预警,并添加了12V的锂电池外加电源以确保预警功能的正常运行㊂在电梯门处添加红外感应模块,当电梯在停止状态时开启,开启后如果单片机延时一定时间无法检测到红外感应,则发送电梯门异常故障预警等㊂4.2㊀辅助通讯当电梯被判断为异常运行时,电梯内的人员可102第3期王金硕,等:智能电梯语音识别控制系统设计以通过语音控制或外界强制与电梯内部进行语音连接㊂电梯内部与外界的信息采用有线的方式以防止电梯内部封闭信号弱等问题㊂通过与内部人员的沟通了解电梯内部状况,以便于救援人员对电梯内人员精准㊁有效地开展救援㊂5 结束语智能电梯语音识别控制系统通过无接触化语音控制模式实现对电梯的运行㊁人员识别㊁故障检测等功能㊂系统结构相对简单,对于电梯的多种应用环境都有良好的功能性,泛用性强㊂系统的设计包括语音与面部双识别㊁无接触控制电梯㊁突发状况的预警通讯,符合了当下智能化发展的设计需求㊂智能电梯语音识别控制系统设计对基础设施智能化建设提供了新的解决方案,系统的具体设计细节也有待进一步完善㊂参考文献[1]吴哲顺.基于协同边缘计算的声纹识别系统的研究与实现[D].广州:广东工业大学,2020.[2]汪鑫,于浩,张雨婷,等.基于单片机的智能电梯系统的设计与研究[J].物联网技术,2022,12(9):68-69.[3]陈伍昌,蒋政培.应对新冠肺炎疫情的电梯防疫包和无接触式呼梯选层技术[J].中国电梯,2021,32(24):63-65.[4]郝天玥.基于神经网络的无接触电梯控制系统的应用研究[D].大连:大连交通大学,2021.[5]骆凯.浅谈电梯IC卡刷卡系统[J].特种设备安全技术,2020(2):45-46.[6]赵慧,张伟,郝喆.基于OpenMV视觉模块的人脸识别监控系统研究[J].信息化研究,2022,48(1):55-58.[7]刘金凤.基于DSP的语音转换系统研究[D].长春:吉林大学,2006.[8]曾铮.基于DSP和USB的声音信号采集系统设计[D].北京:北方工业大学,2006.[9]郭罡,李锦宇,李小兵,等.嵌入式命令词语音识别系统[J].信号处理,2004(5):525-528,474.[10]王大伟,陈章玲.基于LBP与卷积神经网络的人脸识别[J].天津理工大学学报,2017,33(6):41-45.[11]姜煜杰.改进的LBP算法在人脸识别中的研究与应用[J].湖北师范大学学报(自然科学版),2023,43(2):51-59.[12]刘庆婷,陈梅.基于OpenMV的智能门卫系统[J].信息技术与信息化,2021(6):273-277.[13]胡徐胜,陶彬彬,曾胜.基于STM32的测温与身份识别系统设计[J].天津理工大学学报,2021,37(4):36-39.[14]王壹创,冯顺念,成龙,等.关于疫情期间免接触电梯的设计[J].电子制作,2022,30(12):6-8.[15]李宇杰,段二明.分析电梯检验中的控制系统常见问题及解决措施[J].中国设备工程,2023(24):173-175.[16]王恩亮,华驰,陈洁.基于STM32F103ZET6的自定义通信协议电梯监控系统设计[J].中国安全生产科学技术,2016,12(12):160-165.[17]陈军.基于ARM嵌入式的电梯信息采集及微投系统优化与研究[D].武汉:武汉纺织大学,2021.[18]闫妍.智能电梯控制中的PLC节能设计与实现[J].电子制作,2015(16):17.[19]申玉宏,刘丽.单片机在电梯自动控制中的应用分析[J].电子制作,2015(1):54.[20]孔庆鹏.电梯轿厢井道精密位置检测与变频驱动系统的研究[D].杭州:浙江工业大学,2002.202智㊀能㊀计㊀算㊀机㊀与㊀应㊀用㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第14卷㊀。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子技术课程设计报告智能电梯控制器的设计班级自动化1306学号姓名日期2016-6-20目录:一.课程设计题目 (3)二.问题分析 (4)1.方向优先的电梯调度 (4)2.电梯的状态 (4)3.状态编码方案 (4)三.状态机 (5)四.系统输入与输出 (6)五.系统框图与系统设计 (7)1.系统框图 (7)2.系统设计 (8)六.波形仿真 (9)1.请求处理 (9)2.状态转换 (10)3.楼层推进 (11)4.电梯运行的优先级 (12)5.复位信号reset (13)6.锁定禁止运行按键forbid (13)七.程序源代码及注释 (14)八.引脚分配 (26)六.心得与体会 (27)一.课程设计题目设计内容与要求:①楼层的高度大于等于6,根据降低运行成本的原则,设计并实现一个以方向优先电梯调度算法。

②要求能够使用按键模拟对电梯的控制,为了便于观察,将电梯所在的楼层(1~6)用数码管显示出来,将电梯的上下楼状态(上,下,开门,关门,静止)用发光管或数码管显示出来,并且能够实现对电梯实现锁定禁止运行。

③画出电梯控制器的状态机,写出状态编码方案。

④用Verilog语言对设计进行描述,并下载到实验板上调试成功,适当增加比较符合现实的控制限制。

⑤写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。

并谈谈此次实验的收获、感想及建议二.问题分析1.方向优先的电梯调度电梯有三种运行状态,分别是上升、下降和静止等待。

出于降低成本的考虑,电梯在某一方向运行时,要完成该方向上所有的请求后,才能变换运动方向去响应反方向的请求。

电梯上升时,优先响应电梯现在楼层以上楼层的上升、下降和楼层选择信号;电梯下降时,优先响应电梯现处楼层以下楼层的上升、下降和楼层选择信号;电梯处于等待状态时,响应收到的第一个请求信号。

因此,电梯运行方向的判断要综合考虑三种请求信号、电梯当前所处楼层和电梯当前的状态等多种因素。

2.电梯的状态电梯运动过程中,有五种基本状态:上升,下降,开门,关门,静止。

考虑到电梯停止在某一楼层等待请求信号的状态为静止状态;另外,电梯运动过程中暂时停靠在某一楼层,开门后需要等待一段时间,这段时间电梯也没有动作,这时电梯也是“静止”状态。

若只用一个状态表示两种不同的静止情况,需要增加一个电梯的“开/关门标志”来区分两个“静止”状态。

因此,为了简化逻辑,在5个基本状态的状态编码中增加一个状态,用一个新状态(OPENWAIT)来表示开门情况下的静止状态。

最终,电梯的状态机中共有6个状态。

3.状态编码方案从数字电路设计的理论课中,我们学到,在进行状态编码时,若系统中存在多个状态,为了增强系统的稳定性。

可用二进制位数与状态数相同的变量来表征系统状态。

因此,电梯的状态用一个6位的二进制数currentstate[5:0]来表示。

6个状态分别编码为:STATIC=6'b000001,UP=6'b000010,DOWN=6'b000100,OPEN=6'b001000,CLOSE=6'b010000,OPENWAIT=6'b100000;这样,每次状态发生变化时,只用检测状态变量中的的某一位二进制数即可知道电梯处于哪一状态。

如要检测电梯是否处于OPEN开门状态,只需检测currentstate[3]是否等于1即可。

三.状态机电梯的状态机如上图所示,由于电梯状态转换时的判断条件过于复杂,在此不予列出。

四.系统输入与输出五.系统框图与系统设计1.系统框图2.系统设计六.波形仿真1.请求处理(1)楼层请求处理此时floorsel=6,request_button有一个脉冲信号,表示电梯有人要去6楼,因此request_out[5]保持置位,电梯到达5楼时,请求完成,request_out[5]被清零。

(2)上升请求处理此时floorsel=5,up_button有一个脉冲信号,表示5楼有人要上去,因此up_out[4]保持置位,电梯到达5楼时,请求完成,up_out[4]被清零。

(3)下降请求处理此时floorsel=6,down_button有一个脉冲信号,表示6楼有人要下去,因此down_out[5]保持置位,电梯到达6楼时,请求完成,down_out[5]被清零。

2.状态转换(1) 上升过程图中floorsel=3时,up_button有脉冲信号,表示3楼有上升请求。

电梯开始时静止在1楼,接收请求信号后,状态由1(静止)变为2(上升),到达目标层的3楼,状态变成4(开门),开门后状态变成6(开门静止),经过3个时钟周期,状态变为5(关门),因为没有新的请求,电梯状态保持为1(静止)。

(2)下降过程图中电梯在6楼的时候,接收到1楼的上升请求信号,电梯执行下降动作。

电梯开始时在6楼,接收请求信号后,状态由5(关门)变为3(下降),到达目标层的1楼时,状态变成4(开门),开门后状态变成6(开门静止),经过3个时钟周期,状态变为5(关门),因为没有新的请求,电梯状态保持为1(静止)。

3.楼层推进电梯首先接收到2楼的上升请求信号,然后电梯上升到2楼,停止在2楼的过程中又接收到6楼的下降请求,因此电梯又上升到6楼。

停止在6楼的过程中又接收到4楼的上升请求,电梯又接着下降到4楼。

4.电梯运行的优先级(1)上升过程中的下降请求电梯开始静止在1楼,首先接收到3楼的上升请求信号,还在1楼的时候又收到4楼的下降请求,停止在3楼的时候又收到6楼的下降请求,因此电梯延续方向优先的原则,一直升到6楼,中途并不响应4楼的下降信号,6楼的请求信号响应完成后才去响应4楼的请求信号。

(2)下降过程中的上升请求电梯上升到6楼之前就已经接收到1楼和3楼的上升请求信号,升到6楼后,电梯开始下降,基于方向优先的原则,电梯一直下降到1楼,中途并不响应3楼的上升请求。

5.复位信号reset电梯首先收到6楼的下降请求信号,电梯上升的过程中,差不多到4楼的时候,reset=1复位,电梯恢复到初始状态,楼层变为1,状态变为1,请求信号均被清零。

6.锁定禁止运行按键forbid电梯上升到6楼的过程中,forbid突然被置1,电梯停止运行,楼层和状态都保持不变。

Forbid清零后,电梯才恢复正常运行。

七.程序源代码及注释1.主模块moduleelevator(SYSCLKOUT,forbid,reset,floorsel,up_button,down_button,request_button,p os_out,state,up_request,down_request,st_request);output [6:0] state; //状态显示输出output [6:0] pos_out; //楼层显示输出output [5:0] up_request,down_request,st_request;//请求信号input [2:0] floorsel; //楼层选择开关input SYSCLKOUT,forbid,reset,up_button,down_button,request_button;//系统时钟、禁止运行、复位按键、上升请求按钮、下降请求按钮,楼层请求按钮wire CLKOUT; //0.5HZ的时钟wire [5:0] up_request,down_request,st_request,position,posout;wire [1:0] updnflag; //运行方向标志wire [5:0] currentstate,nextstate; //现态,次态wire [2:0] count; //OPENWAIT的计数值divider d1(SYSCLKOUT,forbid,CLKOUT);//分频器//上升请求处理up_manageru1(reset,floorsel,up_button,position,currentstate,up_request,updnflag);//下降请求处理down_managerd2(reset,floorsel,down_button,position,currentstate,down_request,updnflag);//楼层请求处理st_managers1(reset,floorsel,request_button,position,currentstate,st_request);//次态生成器nextgenn1(up_request,down_request,st_request,currentstate,position,count,updnflag,next state);//状态转换控制器statemachine s2(CLKOUT,reset,nextstate,count,position,posout,updnflag)pos_decoder p1(posout,pos_out); //楼层译码器state_decoder s3(currentstate,state); //状态译码器endmodule2.分频器module divider(SYSCLKOUT,forbid,CLKOUT);//将50MHZ的系统时钟分频为周期为2S的时钟信号input SYSCLKOUT,forbid; //forbid=1时,该模块输出的时钟强制为低,即时钟失效 output CLKOUT; //输出时钟信号reg CLK = 1'b0; //CLK为中间信号,为恒定的0.5HZ的时钟reg [25:0] Q;always @(posedge SYSCLKOUT)beginif(Q[25:0] == 49999999) //计数到半周期则反转beginQ <= 0;CLK <= ~CLK;endelseQ[25:0] <= Q[25:0] + 1'b1; //计数器增1计数endassign CLKOUT=CLK&(~forbid); //CLK和forbid相与得到CLKOUT最终输出时钟 endmodule3.上升请求处理模块moduleup_manager(reset,floorsel,up_button,position,currentstate,up_request,updnflag); //接收1-5的上升请求信号,完成请求后清除请求信号input up_button,reset;input [2:0] floorsel; //楼层选择开关input [5:0] position; //电梯所处的楼层input [1:0] updnflag; //电梯运行的方向input [5:0] currentstate;//电梯的状态output[5:0] up_request; //锁存起来的请求信号parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;//电梯运动方向标志parameter WAIT=6'b000001, UP=6'b000010, DOWN=6'b000100,OPENDOOR=6'b001000,CLOSEDOOR=6'b010000,OPENWAIT=6'b100000;parameter FLOOR1=6'b000001, FLOOR2=6'b000010, FLOOR3=6'b000100,FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000;always@(posedge up_button,posedge reset,posedge currentstate[3])beginif(reset==1) up_request=6'd0;//复位时所有上升请求都清零else if(up_button==1) //up_button被按下时,说明有上升请求begincase(floorsel[2:0]) //根据floorsel判断是哪一层楼的上升请求3'b001:begin up_request[0]<=1'b1;end3'b010:begin up_request[1]<=1'b1;end3'b011:begin up_request[2]<=1'b1;end3'b100:begin up_request[3]<=1'b1;end3'b101:begin up_request[4]<=1'b1;enddefault:up_request<=up_request;//floorsel=0或6或7时均无效endcaseendelse //检测到电梯开门,说明有请求被完成,需要消除相应的请求if(updnflag==UPFLAG||updnflag==STATIC)//电梯方向为上升或静止时,沿途的上升请求和楼层请求可直接消除up_request<=(~position)&up_request;else if(updnflag==DNFLAG)//电梯的运动方向为下降时,只有在电梯当前楼层以下没有下降请求和楼层请求时,才能消除上升请求信号if(pos==FLOOR1) up_request[0]<=1'b0;else if(pos==FLOOR2)//1楼没有楼层请求,1-2楼没有下降请求 if((st_request&6'b000001==6'd0)&&(down_request&6'b000011==6'd0))up_request[1]<=1'b0;else if(pos==FLOOR3)if((st_request&6'b000011==6'd0)&&(down_request&6'b000111==6'd0))up_request[2]<=1'b0;else if(pos==FLOOR4)if((st_request&6'b000111==6'd0)&&(down_request&6'b001111==6'd0))up_request[3]<=1'b0;else if(pos==FLOOR5)if((st_request&6'b001111==6'd0)&&(down_request&6'b011111==6'd0))up_request[4]<=1'b0;else up_request[5]<=1'b0;else ;endendmodule4.下降请求处理模块moduledown_manager(reset,floorsel,down_button,position,currentstate,down_request,updn flag);//接收2-6楼的下降请求信号,完成请求后清除请求信号input down_button,reset;input [2:0] floorsel;input [5:0] position;input [1:0] updnflag;input [5:0] currentstate;output[5:0] down_request;parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;//电梯运动方向标志parameter WAIT=6'b000001, UP=6'b000010, DOWN=6'b000100,OPENDOOR=6'b001000,CLOSEDOOR=6'b010000,OPENWAIT=6'b100000;parameter FLOOR1=6'b000001, FLOOR2=6'b000010, FLOOR3=6'b000100,FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000;always@(posedge down_button,posedge reset,posedge currentstate[3])beginif(reset==1) down_request=6'd0; //复位时所有下降请求都清零else if(down_button==1) //down_button被按下时,说明有下降请求begincase(Floorsel[2:0])//根据floorsel判断是哪一层楼的下降请求3'b001:begin down_request[0]<=1'b0;end3'b010:begin down_request[1]<=1'b1;end3'b011:begin down_request[2]<=1'b1;end3'b100:begin down_request[3]<=1'b1;end3'b101:begin down_request[4]<=1'b1;end3'b110:begin down_request[5]<=1'b1;enddefault:down_request<=down_request;//floorsel等于0,1,7时无效endcaseendelse //检测到电梯开门,说明有请求被完成,需要消除相应的请求if(updnflag==UPFLAG) //电梯的运动方向为上升时,只有在电梯当前楼层以上没有上升请求和楼层请求时,才能消除上升请求信号 if(pos==FLOOR1) down_request[0]<=1'b0;else if(pos==FLOOR2)//3-6楼没有楼层请求,2-5楼没有上升请求if((st_request&6'b111100==6'd0)&&(up_request&6'b111110==6'd0))down_request[1]<=1'b0;else if(pos==FLOOR3)if((st_request&6'b111000==6'd0)&&(up_request&6'b111100==6'd0))down_request[2]<=1'b0;else if(pos==FLOOR4)if((st_request&6'b110000==6'd0)&&(up_request&6'b111000==6'd0))down_request[3]<=1'b0;else if(pos==FLOOR5)if((st_request&6'b100000==6'd0)&&(up_request&6'b110000==6'd0))down_request[4]<=1'b0;else down_request[5]<=1'b0;else //电梯方向为下降或静止时,沿途的下降请求和楼层请求可直接消除down_request<=(~position)&down_request;endendmodule5.楼层请求处理模块modulest_manager(reset,floorsel,request_button,position,currentstate,st_request);//接收1-6楼的楼层请求信号,完成请求后清除请求信号input request_button,reset;input [2:0] floorsel;input [5:0] position;input [5:0] currentstate;output[5:0] st_request;always@(posedge request_button,posedge reset,posedge currentstate[3])beginif(reset==1) st_request=6'd0;//复位时所有楼层请求都清零else if(request_button==1) //request_button被按下时,说明有楼层请求begincase(Floorsel[2:0])//根据floorsel判断是哪一层楼的楼层请求3'b001:begin st_request[0]<=1'b1;end3'b010:begin st_request[1]<=1'b1;end3'b011:begin st_request[2]<=1'b1;end3'b100:begin st_request[3]<=1'b1;end3'b101:begin st_request[4]<=1'b1;end3'b110:begin st_request[5]<=1'b1;enddefault:st_request<=st_request;endcaseend//检测到电梯开门,说明有请求被完成,需要消除相应的请求else //不论电梯在向哪个方向运动,沿途的楼层请求限号都可以清零st_request<=(~position)&st_request;endendmodule6.电梯次态生成器modulenextgen(up_request,down_request,st_request,currentstate,position,count,updnflag ,nextstate);input [5:0] up_request,down_request,st_request; //三种请求信号input [5:0] currentstate,position; //电梯的现态和所处楼层input [2:0] count; //OPENWAIT的计数值input [1:0] updnflag; //运动方向标志output reg [5:0] nextstate; //输出电梯次态parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;//电梯运动方向标志 parameter WAIT=6'b000001, UP=6'b000010, DOWN=6'b000100,OPENDOOR=6'b001000,CLOSEDOOR=6'b010000,OPENWAIT=6'b100000;parameter FLOOR1=6'b000001, FLOOR2=6'b000010, FLOOR3=6'b000100,FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000;always @(currentstate or up_request or down_request or st_request or position or count)case(currentstate)WAIT: //电梯静止状态下beginif(st_request>0) //电梯内有楼层请求信号beginif((st_request&position)>0)nextstate=OPENDOOR; //当前楼层有请求信号,开门 else if(st_request>position)nextstate=UP;//当前楼层以上有请求,上升elsenextstate=DOWN; //只有当前楼层以下有请求,下降end//没有楼层请求信号时,当前楼层有上升请求或下降请求,开门else if((up_request&position)||(down_request&position))beginnextstate=OPENDOOR;endelse if((up_request>position)||(down_request>position))nextstate=UP;//当前楼层以上有上升或下降请求信号,上升else if(up_request||down_request)nextstate=DOWN;//只有当前楼层以下有上升或下降请求信号else //没有请求信号,电梯则等待nextstate=WAIT;endUP: //电梯正处于上升状态时beginif((st_request&position)||(up_request&position))//当前楼层有楼层请求信号或上升请求信号时,需要开门nextstate=OPENDOOR;else if((st_request>position)||(up_request>position))nextstate=UP;//当前楼层以上有上升或楼层请求信号时,上升else if(down_request>0)beginif((down_request>position)&&((down_request^position)>position))nextstate=UP;//当前楼层以上有下降请求,继续上升else if((down_request&position)||(position<FLOOR6))//当前楼层以上没有任何请求信号,当前楼层有下降请求,下一状态转开门nextstate=OPENDOOR;else if((down_request&position)&&(position==FLOOR6))nextstate=OPENDOOR;//6楼有下降请求,直接开门else //只在当前楼层以下有下降请求信号,电梯下降nextstate=DOWN;endelse if(st_request||up_request)//只在当前楼层以下有上升或楼层请求信号nextstate=DOWN;else //没有请求信号时,电梯下一状态转为静止nextstate=WAIT;endDOWN: //电梯正下降中Begin //当前楼层有下降或楼层请求信号,需要开门if((st_request&position)||(down_request&position))nextstate=OPENDOOR;elseif(((st_request&FLOOR1)<position&&(st_request&FLOOR1))||((st_request&FLOOR2)<po sition&&(st_request&FLOOR2))||((st_request&FLOOR3)<position&&(st_request&FLOOR3 ))||((st_request&FLOOR4)<position&&(st_request&FLOOR4))||((st_request&FLOOR5)<p osition&&(st_request&FLOOR5))||((st_request&FLOOR6)<position&&(st_request&FLOOR 6))) //当前楼层以下有楼层请求信号,电梯继续下降nextstate=DOWN;elseif(((down_request&FLOOR1)<position&&(down_request&FLOOR1))||((down_request&FLOOR2)<position&&(down_request&FLOOR2))||((down_request&FLOOR3)<position&&(down_re quest&FLOOR3))||((down_request&FLOOR4)<position&&(down_request&FLOOR4))||((down _request&FLOOR5)<position&&(down_request&FLOOR5))||((down_request&FLOOR6)<posit ion&&(down_request&FLOOR6))) //当前楼层以下有下降请求信号,电梯继续下降nextstate=DOWN;//当前楼层以及当前楼层以下没有楼层请求信号和下降请求信号时,有上升请求信号的情况 else if(up_request>0)beginif(((up_request&FLOOR1)<position&&(up_request&FLOOR1))||((up_request&FLOOR2)<po sition&&(up_request&FLOOR2))||((up_request&FLOOR3)<position&&(up_request&FLOOR3 ))||((up_request&FLOOR4)<position&&(up_request&FLOOR4))||((up_request&FLOOR5)<p osition&&(up_request&FLOOR5))||((up_request&FLOOR6)<position&&(up_request&FLOOR 6))) //当前楼层以下有上升请求信号,继续下降nextstate=DOWN;//当前楼层以下没有任何请求信号,当前楼层没有下降请求,当前楼层有上升请求 else if((up_request&position)&&(position>FLOOR1)) nextstate=OPENDOOR; //开门else if((up_request&position)&&(position==FLOOR1)) nextstate=OPENDOOR; //1楼有上升请求信号else //当前楼层以上有上升请求信号,电梯上升nextstate=UP;//当前楼层以上有下降、楼层请求信号,电梯转上升else if(st_request||down_request)nextstate=UP;elsenextstate=WAIT; //没有任何请求信号,电梯静止endOPENDOOR: //开门后的下一状态就是OPENWAIT开门静止beginnextstate=OPENWAIT;endOPENWAIT: //OPENWAIT持续三个时钟周期后转关门beginif(count<3) nextstate=OPENWAIT;else nextstate=CLOSEDOOR;endCLOSEDOOR: //电梯关门后beginif(updnflag==UPFLAG) //电梯运动方向向上begin//关门后马上有人在当前楼层按楼层请求按钮或上升请求按钮,开门if((st_request&position)||(up_request&position))nextstate=OPENDOOR;elseif((st_request>position)||(up_request>position))//当前楼层以上有楼层请求信号或上升请求信号,电梯继续上升nextstate=UP;else if(down_request>0)//有下降请求begin//当前楼层以上有下降请求信号 if((down_request>position)&&((down_request^position)>position))nextstate=UP;else if((down_request&position)>0)//只有当前楼层有下降请求信号nextstate=OPENDOOR;else //当前楼层以下才有下降请求信号nextstate=DOWN;end//当前楼层以下有上升请求信号或楼层请求信号else if(st_request||up_request)nextstate=DOWN;else //没有请求信号时nextstate=WAIT;else if(updnflag==DNFLAG)beginif((st_request&position)||(down_request&position)) nextstate=OPENDOOR;elseif(((st_request&FLOOR1)<position&&(st_request&FLOOR1))||((st_request&FLOOR2)<po sition&&(st_request&FLOOR2))||((st_request&FLOOR3)<position&&(st_request&FLOOR3 ))||((st_request&FLOOR4)<position&&(st_request&FLOOR4))||((st_request&FLOOR5)<p osition&&(st_request&FLOOR5))||((st_request&FLOOR6)<position&&(st_request&FLOOR 6)))nextstate=DOWN;elseif(((down_request&FLOOR1)<position&&(down_request&FLOOR1))||((down_request&FLOO R2)<position&&(down_request&FLOOR2))||((down_request&FLOOR3)<position&&(down_re quest&FLOOR3))||((down_request&FLOOR4)<position&&(down_request&FLOOR4))||((down _request&FLOOR5)<position&&(down_request&FLOOR5))||((down_request&FLOOR6)<posit ion&&(down_request&FLOOR6)))nextstate=DOWN;else if(up_request>0)beginif(((up_request&FLOOR1)<position&&(up_request&FLOOR1))||((up_request&FLOOR2)<po sition&&(up_request&FLOOR2))||((up_request&FLOOR3)<position&&(up_request&FLOOR3 ))||((up_request&FLOOR4)<position&&(up_request&FLOOR4))||((up_request&FLOOR5)<p osition&&(up_request&FLOOR5))||((up_request&FLOOR6)<position&&(up_request&FLOOR 6)))nextstate=DOWN;else if((up_request&position)>0)nextstate=OPENDOOR;elsenextstate=UP;//endelse if(st_request||down_request)nextstate=UP;elsenextstate=WAIT;//endelsebeginif(st_request>0)beginif((st_request&position)>0)nextstate=OPENDOOR;else if(st_request>position)nextstate=UP;elsenextstate=DOWN;endelseif((up_request&position)||(down_request&position))beginnextstate=OPENDOOR;endelseif((up_request>position)||(down_request>position))nextstate=UP;else if(up_request||down_request)nextstate=DOWN;elsebeginnextstate=WAIT;endendenddefault://nextstate=WAIT;endcaseendmodule7.电梯状态控制器+楼层计数器module statemachine(CLKOUT,reset,nextstate,count,position,posout,updnflag)input CLKOUT,reset;input [5:0] nextstate;output reg [2:0] count;output reg [5:0] position,posout;output reg [1:0] updnflag;parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;//电梯运动方向标志parameter WAIT=6'b000001, UP=6'b000010, DOWN=6'b000100,OPENDOOR=6'b001000,CLOSEDOOR=6'b010000,OPENWAIT=6'b100000;parameter FLOOR1=6'b000001, FLOOR2=6'b000010, FLOOR3=6'b000100,FLOOR4=6'b001000, FLOOR5=6'b010000, FLOOR6=6'b100000;//六个状态中,唯独OPENWAIT需要持续3个时钟周期,因此增加一个计数值count来控制 always @(posedge CLKOUT or posedge reset)if(reset) //复位,count清零count<=0;else if((nextstate==OPENWAIT)&&(count<3))count<=count+1; //电梯仍然在开门静止状态时 ,count增1计数 elsecount<=0;always @(posedge CLKOUT or posedge reset)//outputif(reset) //复位时,电梯静止在1楼position<=FLOOR1; updnflag<=STATIC;elsebeginposout<=position; //posout的值比position滞后一个周期case(nextstate)WAIT: //电梯转为静止时begin position<=position; updnflag<=STATIC; endUP: //电梯转为上升时,position马上增1,运行方向变成上升begin position<=position<<1; updnflag<=UPFLAG; endDOWN: //电梯转为下降时,position马上减1,运行方向变成下降begin position<=position>>1; updnflag<=DNFLAG; endOPENDOOR,OPENWAIT,CLOSEDOOR://其他状态下,position和updnflag不变begin position<=position; updnflag<=updnflag; enddefault:begin position<=FLOOR1; updnflag<=STATIC; endendcaseendendmodule8.楼层译码器module pos_decoder(in,out); //显示电梯现在所处的楼层input [5:0] in; //输入为FLOOR1~FLOOR6output reg [6:0] out; //输出是在七段数码管上显示的1-6always@(in)begincase(in)6'b000000:out<=7'b100_0000;//06'b000001:out<=7'b111_1001;//16'b000010:out<=7'b010_0100;//26'b000100:out<=7'b011_0000;//36'b001000:out<=7'b001_1001;//46'b010000:out<=7'b001_0010;//56'b100000:out<=7'b000_0010;//6default:;endcaseendendmodule9.状态译码器module state_decoder(currentstate,state); //显示电梯的状态input [5:0] currentstate;output reg [6:0] State; //输出状态在数码管上显示,输出是字母 parameter WAIT=6'b000001, UP=6'b000010, DOWN=6'b000100,OPENDOOR=6'b001000,CLOSEDOOR=6'b010000,OPENWAIT=6'b100000; always@(currentState)begincase(currentState)WAIT,OPENWAIT: State[6:0]=~7'b1101101;//S,静止OPENDOOR: State[6:0]=~7'b1110011;//P,开门CLOSEDOOR: State[6:0]=~7'b0111001;//C,关门UP: State[6:0]=~7'b0111110;//U,上升DOWN: State[6:0]=~7'b0111111;//O,下降endcaseendendmodule八.引脚分配九.心得与体会刚开始拿到这个题目时,确实是一头雾水,因为电梯里的判断条件过于繁琐,很难清晰地把逻辑完全理清楚。

相关文档
最新文档