FPGA智能小车设计.docx
- 文档编号:3457615
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:38
- 大小:1.22MB
FPGA智能小车设计.docx
《FPGA智能小车设计.docx》由会员分享,可在线阅读,更多相关《FPGA智能小车设计.docx(38页珍藏版)》请在冰豆网上搜索。
FPGA智能小车设计
天水师范学院
《基于EDA的小车控制器的设计》
实践报告
学院:
物理与信息科学学院
专业:
电子信息科学与技术
班级:
11级电信二班
姓名:
尹天林倪波波
学号:
**********************
2013年12月30日
摘要:
现场可编程逻辑阵列(FPGA)具有可在线反复编程,开发周期短,并行处理,运算速度快,集成度高,可靠性高等特点,广泛应用于数字信号处理,工业控制,通信等各个领域。
基于FPGA设计控制器,可以把一些外设和逻辑器件集成起来,从而缩小体积,减少电路的走线,降低功耗,提高可靠性,同时能够通过在线编程来修改和扩充控制器功能,缩短了开发周期,也使系统的使用变的灵活,扩展方便。
由于FPGA可以实现真正的并行处理,并且运算速度快,用它实现复杂的控制算法可以提高算法运算速度,满足实时控制要求。
本设计是典型的软件和硬件结合的设计产品,基于EPM570T100C5型FPGA芯片设计了一个较为通用的小车控制器。
通过数字量输入/输出通道连接了障碍检测模块无线接收模块;电机驱动模块;模式选择模块等。
采用硬件描述语言(VerilogHDL)实现了对各个功能模块的编程、仿真、编程下载、功能测试。
并在QuartusII开发环境下搭建了一个基于FPGA的小车控制器研究平台,用VerilogHDL语言实现了整个系统的设计和仿真,使小车控制器系统实现了周期运行、避障、循迹、遥控等功能。
通过此方法可在软件中嵌入不同的控制算法,扩展多种控制性能,实现各种硬件功能,这种基于FPGA的电子设计的开发方法可根据需要随时增加扩展用户需要的功能,具有很大的开发潜力,在工业控制中有一定的推广应用价值。
1引言
1.1选题背景
1.1.1智能小车简介
工业的发展对生产的自动化程度和产品精度要求越来越高,传统的人工很难适应产业升级带来的挑战;科技的进步使得人类的探索范围越来越大,亟需一种能够在恶劣的环境替代人类完成任务的智能装置。
智能机器人控制系统应运而生。
工业机器人和探测机器人的发展成为了当下机器人发展的主要方向,智能小车是机器人的一种,又称轮式机器人,在工业和探测两个领域均有广泛应用。
智能小车控制器的设计具有极强的可移植性和易扩展性,可应用于替代一些单调枯燥简单重复的岗位。
同时,配合传感器等数据采集装置,小车可以作为一个独立运动单元自主执行一些要求更高的任务。
在军事上,现代战争的复杂程度越来越高,需要在复杂恶劣的环境中完成各种侦察或作战任务,增加了作战人员的危险性;在工业、民用、社会公共设施等诸多领域上,比如在恶劣环境下进行的科学研究、在危险地段作业、危险品排除等诸多场合需要人们冒着巨大的风险;在影视剧拍摄、家庭服务、智能化家居、康复医疗等多种应用领域,为了确保工作人员的安全性,提高舒适性,都急需一种能够替代人完成这些任务的机器人。
智能小车控制系统为人类突破这些限制提供了条件。
这种智能小车可以适应不同环境,不受温度、大气、重力、强辐射等外界条件的影响,在人类不适宜的工作环境或者技术含量较低的高强度任务中有效地替代人类完成工作,提高效率。
从机器人诞生至今,随着科学技术的不断发展,机器人应用已经从制造领域向非制造领域发展,原先只是在航空军事领域中才使用的机器人也开始走进人们的日常生活。
机器人的发展经历了三代,第一代机器人属于示教再现型,第二代则具备了一定的环境感知能力,第三代机器人是智能型机器人,它除了具有感觉能力之外,还具备独立辨别和自主运动能力。
它上面装有多种环境感应设备,是人工智能技术发展到高级阶段的产物。
随着计算机、网络、微电子等领域迅速发展,人类活动领域的不断扩大,智能小车的应用领域也不断扩大,有了客观的发展理由:
a.智能小车系统可以把人从有毒有害、缺氧、高压、高温等危险的环境中解放出来。
比如,发电厂的高温环境的设备检修,煤气管道的修复,易燃易爆危险品排除装置等。
b.智能小车系统可以进入到人类无法生存或无法进入的区域代替人类工作,例如可以把智能小车送入太空,探测火星;或者潜入海底,勘探资源等。
c.随着经济的不断增长及互联网的迅速普及,人们的生活水平和质量不断提高,智能化家居生活开始推广开来,人们可以通过网络远程控制家中的智能小车完成特定的任务,比如整理房间、远程监控等。
1.1.2FPGA在控制方面的应用
FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上经过进一步发展的产物。
出现至今历经30年的发展,FPGA已由当初的1200门发展成为今天的百万门级。
FPGA一般是基于SRAM工艺,基本结构是基于查找表加寄存器结构。
FPGA采用了逻辑单元阵列LCA(LogicCellArray),内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(InterConnect)三个部分。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,在其工作时需要对片内的RAM进行编程。
用户可以根据不同的模式进行配置,并可以采用不同的方式进行编程。
FPGA芯片在控制方面可实现的优点:
a.采用FPGA芯片设计ASIC电路,不需要大量生产,就能得到适用的芯片;
b.FPGA芯片可做其它全定制或半定制ASIC电路的中试样片;
c.FPGA芯片内部有丰富的触发器和I/O引脚;
d.FPGA芯片设计周期最短、开发费用低、风险小;
e.FPGA芯片采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
基于以上特点,可以说FPGA芯片是小批量系统提高系统集成度、可靠性是实现小车控制的最佳选择之一。
1.2本课题研究目的及意义
1.2.1研究目的
为了适应工业和科技的快速发展产生的新要求,使生产达到较高的自动化水平和效率及实现产品精度的提高,基于FPGA的小车控制系统应运而生。
本设计意在设计一种设计具有较强可移植性的小车控制器,经改进可应用于替代一些单调枯燥简单重复的岗位,如流水线、仓储物流等。
设计功能包括周期运行、自动避障、循迹、遥控运行,这些功能具有很强的使用意义,正常状态下小车能够自主周期运行完成设定的任务,遇到障碍物能够自行躲避,在一些突发情况下能够人工干预小车的运行。
本次设计旨在用来检查这学期专业知识的学习情况,通过综合知识运用锻炼解决问题的能力,通过软硬件设计锻炼实践能力,通过对设计全局的把握培育系统观念。
1.2.2研究意义
本课题以FPGA芯片为控制器设计了智能小车控制系统,意义如下:
a.基于FPGA开发的控制器具有运算速度快,体积小,修改方便,集成度高,可靠性高,易扩展等优点。
b.用FPGA实现智能算法可以提高算法的运算速度,满足实时控制的要求。
本文在基于FPGA实现复杂的智能算法方面作了一些探索性的工作,为以后进一步嵌入其它复杂算法打下了基础。
c.搭建了智能小车控制系统的实验平台,为将来进一步研究和开发智能小车控制器做了基础性工作。
d.对这学期所学的专业知识进行系统梳理、综合运用。
2总体方案说明
2.1设计目标
本课题基于EDA技术,使用Altera公司的的EDA软件开发工具QuartusII进行设计准备、设计输入、功能仿真、设计处理、时序仿真和器件编程及测试,以可编辑逻辑器件FPGA为核心部件,基于FPGA核心开发板进行扩展做出硬件,主要包括以下各项:
a.掌握利用VerilogHDL设计智能小车控制器的原理、方法;
b.利用芯片内部时钟进行分段定时周期直线运动;
c.小车外接光电传感器检测障碍物并做出相应反应;
d.人工干预遥控运行;
e.在FPGA开发板上,针对FPGA芯片的特点进行系统配置并验证功能的实现,并做出扩展硬件;
2.2方案概述
本设计是基于FPGA芯片,采用VerilogHDL语言进行的EDA设计,是软硬件协同设计,分为软件和硬件设计两部分。
首先进行软件的设计输入、功能仿真、设计处理,然后下载到FPGA芯片内配合外围电路进行硬件测试。
图2.1小车控制器原理框图
其具体功能是实现自主的周期运行,通过光电传感器检测障碍物进行避障运动,除此之外又加入了遥控功能,其原理框图如图2.1所示。
光电传感器模块是芯片外接的三个光电传感器,当传感器检测到障碍时其输出电平信号发生变化,输入电平信号经程序处理后发送到FPGA芯片,向驱动模块发出相应的信号,使小车做出适当的规避动作。
遥控模块是实现遥控运行功能的模块,包括硬件的信号接收装置和软件处理模块。
遥控器以无线信号的形式从发射端发出不同的指令信号,经无线接收电路处理之后输出并行信号,FPGA芯片根据程序设定向驱动模块发出信号,小车做出相应的动作。
周期运行控制程序存储在FPGA芯片中,使用状态机进行状态循环,并在不同状态下向驱动模块发送不同的驱动信号,使小车实现周期运行。
驱动模块是接收FPGA芯片输出信号进行电机驱动的模块,由驱动程序和外围的驱动芯片两部分构成,在接收以上各模块的输出信号之后,进行处理之后输出控制信号驱动直流电机的运行。
以上各模块综合起来实现智能小车控制器的全部功能,其流程图如图2.2所示。
程序按照此流程设计完成之后下载进FPGA芯片中,完成外设电路之后再软硬件联合测试,以实现设计要求。
图2.2小车控制器流程图
3软件设计
小车控制器的软件程序设计采用VerilogHDL语言,利用Altera公司的EDA开发软件QuartusII进行设计。
软件部分由原理图和模块程序两部分组成,包括模式选择模块、分频器模块、电机驱动模块、周期控制模块、障碍检测模块遥控模块。
以及下文将详细介绍介绍各个功能块的功能及实现方法,并给出仿真波形。
3.1VHDL语言介绍
VHDL的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成电路硬件描述语言,被认为是标准的硬件描述语言,有专家认为,在新世纪中,VHDL与VerilogHDL语言将承担起几乎全部的数字系统设计任务。
VHDL主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦内部开发完成后,其他的设计可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。
VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。
另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。
VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以用多种不同的器件结构来实现其功能。
VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
基于以上种种优点,VHDL作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。
3.2QuartusII软件介绍
Max+plusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对Max+plusII的更新支持。
QuartusII是Altera公司继Max+plusII之后开发的一种针对其公司生产的系列CPLD/FPGA器件的综合性开发软件,它的版本不断升级,目前已经发布了13.0版本,该软件有如下几个显著的特点:
该软件界面友好,使用便捷,功能强大,是一个完全集成化的可编程逻辑设计环境,是先进的EDA工具软件。
该软件具有开放性、与结构无关、多平台、完全集成化、丰富的设计库、模块化工具等特点,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌有综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD、FPGA设计流程。
QuartusII可以在Windows、Linux以及Unix上使用,除了可以使用TCL脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusII支持Altera公司的MAX3000A系列、MAX7000系列、MAX9000系列、ACEX1K系列、APEX20K系列、APEXII系列、FLEX6000系列、FLEX10K系列,支持MAX7000/MAX3000等乘积项器件。
支持MAXIICPLD系列、Cyclone系列、CycloneII、StratixII系列、StratixGX系列等。
支持IP核,包含了LPM/MegaFunction宏功能模块库,用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
3.3分频器模块
3.3.1分频器的功能
在接口电路中,时钟信号的作用至关重要。
一般的FPGA开发板或最小系统板附带的晶振频率过高,达到20MHz甚至50MHz,但是这种时钟脉冲不适合直接接入程序工作,所以需要引入时钟分频电路,即分频器,将晶振输出的脉冲分频。
分频之后的时钟信号适合接入电路工作。
分频器模块就是用软件方法实现分频器的功能。
时钟信号一般有两种功能,计数和选通。
对于周期运行控制模块来说,每个状态都需要进行计时,所以需要接入较低频率的时钟脉冲,便于对计时器赋值。
驱动模块需要进行调速,而小直流电机需要通过调节驱动脉冲的占空比进行调速,在调节占空比时就需要进行计数运算,也就需要一个合适的时钟信号。
障碍检测模块和遥控模块输入的是并行电平信号,在电平突然改变时,由于电平跃变或信号传输的延迟产生竞争冒险现象,在输出端产生尖脉冲的毛刺,从而产生误操作。
为了解决这一问题,需要接入一个选通控制信号。
竞争冒险一般发生在输入信号变化瞬间,若选通信号在这期间将输出关闭,等到输入信号稳定后再将输出开启,就可以消除竞争险象。
选通信号也是由分频器输出的时钟信号。
3.3.2分频器的设计
分频器是将较高的频率进行分频,从而得到较低的频率。
需要用到计数器,高频率输入之后,触发计数器进行计数运算同时输出电平保持不变,当计数器到达一个限值时输出电平翻转。
分频系数是输入频率和输出频率之比,计数上限就等于分频系数除以2再减去1。
本设计输入晶振频率是50MHz,为了方便计数和选通,输出频率设定为100Hz,计数上限为249999。
分频器模块如图3.1所示,CLK是50MHz晶振频率输入,CLK100是100Hz时钟频率输出。
图3.1
模块设计完成之后,对程序进行功能仿真,设置CLK输入接口的频率为50MHz,得到如图3.2所示的仿真波形图。
由于QuartusII软件只不适合长时间的仿真,在此截止时间设置40ms,此图只截取了一个完整周期。
图3.2分频器仿真波形
因为50MHz的频率太高导致上升下降沿过密,所以在图中显示为一条黑色粗线,但是从时间上看波形还是正确的,在10ms时,输出端CLK_OUT100完成1个周期输出。
3.4周期运行控制模块
3.4.1周期运行控制模块实现的功能
周期运行控制模块用于实现小车的周期运行功能,通过计时器加状态机进行状态设置和状态转换。
在本设计中周期运行控制模块将完成如下周期运行的控制,功能块使能之后进行周期运动。
一个运动周期包括高速前进4S,停止2S,低速前进4S,停止2S,高速后退4S,停止2S,低速后退4S。
之后进入下一周期再次高速前进4S。
3.4.2状态机简介
本设计使用了状态机进行设计,在此先对状态机进行简要的介绍。
有限状态机简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
状态机及其设计技术是使用数字逻辑设计的重要组成部分,状态机是实现高效率、高可靠性的控制逻辑的重要途径。
利用状态机进行逻辑系统设计无论是与基于VHDL的其他设计方法相比还是与完成相似功能的CPU相比,都有其独到的优点。
状态机克服了纯硬件数字系统控制不灵活的缺点,能够按照输入信号的控制和预先设定的执行程序在各个状态之间顺序地执行切换,能够很好地执行顺序逻辑。
状态机实现方式简单,设计方案相对固定。
采用状态机设计易于构成良好的同步时序逻辑,有利于消除大规模逻辑电路中常见的竞争冒险现象。
状态机与VHDL其他描述方法相比,层次分明、结构清晰、易懂好读,在模块化修改、优化、移植方面有优势。
在VHDL语言中,状态机有多种实现方式。
从输出方式上分为Mealy(米里)型和Moore(莫尔)型状态机。
Mealy型状态机属于同步时钟状态机,他的输出是当前状态和所有输入信号的函数,其输出是在输入变化后立即发生的,不依赖时钟同步。
Moore型状态机属于异步输出状态机,他的输出仅为当前状态的函数,在输入发生变化后,还必须等待时钟上升沿的到来,才能导致输出的改变。
3.4.3周期运行控制模块的设计
为了实现周期运行控制的功能,在该模块使用状态机进行设计。
首先将周期中各个运行状态在状态机中进行定义,高速前进4S、停止2S、低速前进4S、停止2S、高速后退4S、停止2S、低速后退4S分别定义为s0、s5、s1、s2、s3、s6,S4。
由此可以得到状态转换图,如图3.3所示。
图3.3周期运行状态转换图
很明显,该状态机属于Moore型状态机,没有其他外部输入口,在使能之后进行顺序状态装换。
每个状态在计数的同时像驱动模块发出使能信号、方向和速度控制信号。
各状态对应的输出控制信号见表3.1。
表3.1运行状态信号输出对照
运行状态
电机使能
转动速度
转动方向
S0
高
高速
正向
S5
低
停止
停止
S1
中
低速
正向
S2
低
停止
停止
S3
高
高速
反向
s6
S4
低
中
停止
低速
停止
反向
程序编译完成之后创建如图3.4所示的模块文件。
图3.4周期运行控制模块图
在该模块中,ENB输入端是模块的使能信号,CLK输入端是从分频器接入的100Hz的时钟脉冲。
EN是电机驱动模块的使能控制信号输出端,ZF是电机正反转的控制信号输出端,SP是小车速度控制信号输出端。
当ENB为低电平时该模块使能,当ENB为高电平时模块不工作。
在模块使能之后,状态机直接进入s0状态,计数器在时钟脉冲上升沿时进行0到399的累加计数,同时EN端输出高电平使能信号,ZF端输出高电平正转信号,SP端输出高电平高速信号,此时小车前进。
当计数器计数到399时,4S计数器清零,状态机跳转到下一状态s5。
在状态s5中,计数器从0到199计数,计数周期为2S,在此期间EN端输出低电平非使能信号,ZF端输出低电平反转信号,SP端输出低电平低速运行信号,此时小车停止。
当计数器计数到199时,2S计数器清零,状态机跳转到下一状态s1.当s1状态时计数器在此进行和s0相同的计数,同时EN端继续输出高电平使能信号,ZF端继续输出高电平正转信号,SP端输出低电平低速运动信号,此时小车低速前进。
当计数器再次计数到399时,4S计数器再次清零,状态机跳转到下一状态s2。
在状态s2中,计数器从0到199计数,计数周期为2S,在此期间EN端输出低电平非使能信号,ZF端输出低电平反转信号,SP端输出低电平低速运行信号,此时小车停止。
当计数器计数到199时,2S计数器清零,状态机跳转到下一状态s3.在s3状态,除了ZF端输出低电平反方向运行信号之外其余输入输出量与s0相同。
此状态下,小车高速反方向运行4S。
当计数器再次计数至399时,又一次清零跳转到s6状态。
在s6状态下,停止2S,又一次清零转到S4,此时ZF输出低电平反方向运行信号,其余输出同s1,此时小车低速反向运动。
4S计数周期结束之后,计数器清零,状态机跳转到状态s0,开始下一周期的运行。
如图3.5所示,在使能信号输入低电平之后,EN、SP、ZF端输出相应值,并且计数周期正确。
在使能信号高电平时,全部输出端口复位到低电平,待到使能端低电平时继续周期循环。
图3.5周期运行控制模块仿真波形
3.5避障模块
3.5.1避障模块实现的的功能
避障模块接收外围电路4个光电传感器所发出的4位并行数字信号,经处理之后向驱动模块输出使能信号、正反方向信号,实现小车的障碍检测和规避障碍的功能。
3.5.2避障模块的设计
由于光电传感器在没有障碍物阻挡的情况下输入的是高电平1,当传感器前方检测到障碍物时输入的是低电平0。
由此可以列出小车规避障碍动作与传感器输入到FPGA芯片的电平状态对照表,见表3.2。
在表中列出了传感器输入状态的所有可能情况,并给出小车对应的规避动作。
表3.2传感器输入状态与小车规避动作对照表
传感器输入状态
小车动作
传感器输入状态
小车动作
0000
停止
0100
左转
0001
直行
0101
直行
0010
右转
0110
右转
0011
1000
1001
1010
1011
直行
后退
直行
右转
直行
0111
1100
1101
1110
1111
直行
左转
直行
右转
直行
根据以上分析设计出避障模块的程序,编译仿真之后创建模块文件。
如
图3.6避障模块图
图3.6所示。
DIN2[0],DIN2[1],DIN2[2],DIN2[3]分别为小车前方中、右、左,后四个光电传感器的输入信号,ENE端为模块使能信号输入。
Zuo1,zuo2为左轮的两路输入,you1,you2为右轮的两路输入,en1,en2分别为左轮和右轮的使能。
当ENE输入信号为低电平时,避障模块使能,此时输入的传感器信号经模块处理之后,输出端输出相应信号,实现对障碍的规避。
编译之后进行模块的功能仿真,得到如图3.7所示的波形。
从波形上可以看出,以上设计功能全部实现。
图3.7避障模块仿真波形
3.6遥控模块
3.6.1遥控模块的功能
遥控模块是实现遥控功能的一个功能模块,遥控器发出的指令信号经接收电路处理之后输入到FPGA芯片中,遥控模块接收到信号之后向驱动模块输出控制信号,实现与遥控信号对应的动作。
3.6.2遥控模块的设计
遥控器发射的信号经接收电路处理之后,输入到FPGA芯片中的是四位并行信号。
遥控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 智能 小车 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)