【《全自动提花圆纬机电控系统设计》7600字】_第1页
【《全自动提花圆纬机电控系统设计》7600字】_第2页
【《全自动提花圆纬机电控系统设计》7600字】_第3页
【《全自动提花圆纬机电控系统设计》7600字】_第4页
【《全自动提花圆纬机电控系统设计》7600字】_第5页
已阅读5页,还剩19页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

全自动提花圆纬机电控系统设计摘要随着嵌入式技术的快速发展,嵌入式技术应用于工业领域的功能体现得尤其突出,特别是在江南地区,轻工业代表的针织行业发展繁荣。在针织行业,有一种全自动提花圆纬机,它通过电控的方式,在产能和产品种类方面都超越传统圆纬机不少。本课题在围绕着全自动提花圆纬机电控系统的选针器控制这一部分,考虑以Zynq芯片作为主控单元,在Zynq芯片的PL部分设计出一个能够实现接口功能的IP核。并且在Linux操作系统下在Zynq的PS部分设计接口的驱动,通过PS向PL发送编织数据,最终可以实现主控单元对于选针器动作的控制。关键字:圆纬机IP核接口驱动选针器目录TOC\o"1-2"\h\u70181绪论 6273631.1课题研究背景 6139171.2本次设计的意义及现状 7212361.3课题研究的主要内容 8148612Zynq平台的展示与介绍 8246612.1Zynq7000开发平台的优点 861872.2AX7021开发板介绍 947362.3AX7021核心板简介 986933设计的总体框架 10298643.1设计方案 11174153.2设计思路分析 12244354LinuxOS的配置 1342884.1配置LinuxOS的准备工作 13208874.2使用petalinux定制Linux系统 14129425选针器接口驱动IP核设计 18425.1为什么要自定义IP核 18299515.2设计与调试自定义IP核的流程 18122745.3SDK调试 21234096接口Linux驱动 2225236.1驱动设计框图 22230676.2驱动核心代码编写以及功能描述 23195357测试应用程序编写与结果调试 2511398总结 262136参考文献 271绪论课题研究背景自1589年第一台袜机问世以来,针织生产从手工转向机械化已经有400多年的历史。尽管我国改革开放以来,我国的针织圆纬机的水平通过向外国学习和借鉴不断提高,而且在某些环节的技术已经非常成熟了,常规的针织圆纬机制造已经可以实现自给自足,完全可以替代进口机器,但是还是存在部分机型还是由国外进口或者是通过仿制进行制造,关键的核心技术还是掌握在像日本、意大利等国家。近几年通过努力,差距已经越来越小了。想要实现技术超越,就得顺应时代发展的潮流。在如今这个时代,由于人机交互平台的方便性,快速性、友好性和未来发展的可能性,该类平台也收到越来越多的关注。1.2本次设计的意义及现状我国在现阶段拥有不少的纺织厂,但是纺织企业的效益除了经营环境以外,受制于用工成本、设备状态等因素久久不能够提高。由于自动化制造的程度低对于纺织这种拥有众多相对独立工序的行业,用时和用工量都是十分大。进入科技时代,不论哪个行业,能否拥有智能制造是提高产能和生产效率的重要突破口。以智能生产线为代表的生产过程智能化是智能制造的核心,生产过程控制的信息化程度直接决定了工厂的智能化程度。目前使用的全自动提花圆纬机编织范围大,更换速度快,缩短产品设计周期,并且编织速度快,生产效率高,并保证系统生产的可靠性。但是关于如何减轻劳动强度、提高生产效率等这类日益增长的需求,现阶段的圆纬机还无法满足。因此我考虑从电控系统的接口这部分出发,因为传统圆纬机主控单元采用的是ARM和FPGA两部分片外连接,这样的设计在布线上可能会因为由于线路之间的干扰影响传输的可靠性,降低了处理器的性能,影响开发进程。Zynq作为首款能够把高性能的ARM处理器与高性能FPGA在单个芯片内牢牢结合的产品,如果可以使用Zynq芯片作为主控单元,在根本上就解决了问题。只要合理设计在ARM与FPGA之间的互联通路,就能够实现ARM处理器和FPGA之间的高速通信和数据交互,发挥ARM处理器和FPGA的性能优势[1]。事实上,在具体的设计工作中我们不太需要在连接这个地方下太多功夫,当我们加入设计好的IP核以后,由于设计好的IP核带有AXI4接口,这样开发系统使用AXI总线实现通信传输协议将ARM和FPGA连接起来[3],进一步提高了传输速度,我们只需要再做一点补充和修改就可以了。1.3课题研究的主要内容1)构建系统框架使用Zynq7000作为圆纬机电控系统的主控单元,在Zynq的PL设计可以实现接口功能的IP核,在Zynq的PS部分设计接口驱动,通过驱动能够使PS部分对PL上的寄存器写数据从而对选针器动作进行控制。器件选型与工艺设计硬件上选用黑金AX7021开发板,软件开发使用Vivado组件以及Petalinux配置工具。3)软件设计IP核设计的编写、SDK文件的编写、接口驱动的编写、测试应用程序的编写。4)功能调试连接开发板和选针器,打开开发板的电源,通过测试应用程序可以控制选针器的动作。2Zynq平台的展示与介绍本课题有关于硬件方面的使用采用的是Zynq芯片的开发板,主要通过它来开发展现实现功能。下面介绍它的优点和核心板的主要特征:2.1Zynq7000开发平台的优点为了方便用户能够自我地对核心板进行二次的开发、处理和利用,塞林思针对于Zynq7000平台采用核心板加扩展板的方式。由于使用ARM和FPGA都要用两块开发板,很不便捷。赛灵思公司提出了一个看似天马行空的解决方案。如果能够在核心板上面使用SOC技术,这样核心板就能集ARM与FPGA于一块芯片上了,极大程度减少了传统片外连接造成的线路干扰和性能降低等问题的发生。设计的的底板为用户提供了包括5路千兆以太网接口,4个通路的USB2.0HOST接口等接口。用户能够在以太网的环境下通过较高的速度进行数据交换、数据处理等各种功能化要求。内部集成了ARM公司的双核CortexA9处理器系统(ProcessingSystem)和Xilinx的可编程逻辑单元(ProgrammableLogic),在真正意义上完成实现了软件和硬件的协同开发设计,同时也大大缩短了系统的开发时间,节省了人力物力财力。现阶段看来Zynq作为一块集ARM与FPGA于一体的开发平台,在产品定制化等满足客户需求的方面有很大的潜力[12],并且网上对于驱动IP核自定义方面的文章叙述也比较稀少,让我觉得做这方面的毕业课题更加有了兴趣。2.2AX7021开发板介绍本开发板使用AX7021核心板主要由Zynq7020+2个DDR3+eMMC+QSPIFLASH的最小系统构成,具有承担Zynq系统的高速数据处理、传输和存储的功能,Zynq7020和两片DDR3之间的数据位宽为32位,两片DDR3容量高达1GB。32GB的eMMCFLASH存储芯片和256Mb的QSPIFLASH用来静态存储Zynq的操作系统、文件系统及用户数据,用户可以通过核心板上的拨码开关来控制选择QSPI,SD卡等不同的启动方式。其次除了核心板,在底板上还设置了一个Micro型的SD卡槽口,SD卡可以用来存储操作Zynq芯片产生的相关的BOOT程序、系统镜像、用户数据文件等[8]。并且支持用户直接访问。整个开发系统结构图如图2-2-1所示:图2-2-1开发系统结构图2.3AX7021核心板简介该核心板的芯片是Zynq7000系列中的XC7Z020-2CLG484I。继承了两个Cortex™-A9最小系统处理器,其中的AMBA互相连接,内部存储和外部存储与外设相连。Zynq芯片的FPGA内部同时包含着可编程逻辑阵列,DSP和内部ARM这三个部分。该款核心板还使用了2片型号H5TQ4G63AFR-PBIDDR3芯片,该芯片的内存容量为4Gbit,2片DDR芯片组合成了32bit的数据总线位宽度,正因为这两个DDR3芯片的使用,可以满足系统的高带宽的数据处理的需求,让Zynq和DDR3之间的读写数据时钟频率高达533Mhz。这款核心板的4个板对板连接器扩展出了PS端的USB接口,千兆以太网接口,SD卡接口及其它剩余的MIO口使与底板的连接更加方便。并且关于IO连接部分的问题,设计上从Zynq芯片到接口之间的走线特意做了等长的差分处理。而且核心板的尺寸很小,特别适合于二次开发。核心板正面图如图2-3-1所示:图2-3-1核心板正面图我采用Zynq7000系列AX7021开发板首先是看中了它降低了软件开发的难度,黑金社区专门也为这块开发板撰写了中文教程,在开发初期对基础理论不懂时可以进行参考。并且这块开发板在实验室就是现有的素材,不需要再花大把时间和金钱去寻找。其次是这块AX7021核心板其中对于IP核驱动和Linux的内核都做好了对应软件的支持,更加方便融入ARM的软件生态系统。而且该板具有很高的集成度,所以我选择他作为我的调试板。3设计的总体框架3.1设计方案全自动提花圆纬机的电控系统主要由五部分构成:LCD触摸屏[11]、零位传感器、编码器、选针器以及Zynq开发板[5],具体框图如图3-1-1所示:图3-1-1全自动提花圆纬机电控系统的组成框图传统的电控系统是采用ARM和FPGA两个平台,利用总线将两块板子连接在一起,缺点很明显,两块开发板占用的面积太大,且通信麻烦。而Zynq环境的开发最大的亮点就是在于FPGA里包含了完整的ARM处理子系统(PS),换句话Zynq包含了ARM的SOC部分(PS)以及FPGA部分(PL)。通过减少一块ARM的面积从而降低了关于通讯总线的相关资源消耗,方便通讯。并且减少了CPU与FPGA之间的通讯总线,通讯速度会更快,信息传递结构也会更简单[4]。我此次的课题框架就是从选针器这个部分出发,设计具有接口功能的IP核,通过在LinuxOS系统下设计接口驱动,实现现Zynq开发板芯片对于选针器部分的动作控制。具体设计框架如图3-1-2所示:图3-1-2电控系统接口功能实现框架3.2设计思路分析Zynq的基本开发流程是先硬件设计开发,再导出硬件信息进行软件设计开发,本次课题的开发思路流程大致如图3-2-1所示:图3-2-1设计思路流程图1)创建打包一个新的带有AXI4接口的IP核,这样才能满足PS和PL通过AXI通信传输连接。通过对IP核例化,代入函数,调用寄存器为其添加功能。2)在Vivado应用程序中将Zynq处理器和设计好的IP核放入Block工程并自动连线后,生成顶层文件,并添加约束文件和时序文件。再编译生成比特流文件。3)导出硬件信息到SDK软件开发环境,在SDK环境里可以编写一些调试应用程序验证硬件和软件设计的合理性,还可以单独调试Zynq系统。4)将SDK文件复制到LinuxOS,在虚拟机里生成u-boot.elf,bootloader镜像。通过petaliunx配置工具将这些文件以及硬件信息打包后生成BOOT.BIN文件。5)编写接口驱动和测试应用程序代码,将它们通过配置工具和Ubuntu的内核镜像文件、根文件系统等一同打包生成Image文件[10]。6)把BOOT,Image文件复制到SD卡中,启动开发板电源,通过测试应用程序实现选针器的动作控制。4LinuxOS的配置因为Zynq芯片PS部分的驱动编写、测试应用程序的交叉编译都必须在LinuxOS下完成,所以我们需要对LinuxOS进行环境配置。4.1配置LinuxOS的准备工作4.1.1安装petalinux1)安装必需库在虚拟机终端输入以下代码下载安装所需要的库[6]sudoapt-getinstalltofrodosgawkxvfbgitlibncurses5-devtftpdzlib1g-devzlib1g-dev:i386\libssl-devflexbisonchrpathsocatautoconflibtooltexinfogcc-multilib\libsdl1.2-devlibglib2.0-devscreenpax配置tftp服务器使用tftp命令可以将文件下载到内存中,但是使用前需要先配置好服务器:sudo-sapt-getinstalltftpd-hpachmoda+w/var/lib/tftpboot/reboot3)添加运行权限运行以下命令做安装准备,alinx为我虚拟机设置的用户名,为安装文件夹添加运行权限,如图4-1-1所示:图4-1-1安装文件权限添加图4)安装配置工具进行安装,点击ENTER查看安装协议内容,在安装过程中会不断跳出License按Y同意协议,按Q退出协议,重复大概4次。4.1.2NFS网络服务器安装1)安装NFS服务组件通过命令sudoapt-getinstallnfs-kernel-server进行安装2)建立专属工作目录新建一个名为work文件夹来做为NFS服务的工作目录,方便我们挂载开发板后能够共享到该目录里的文件。3)配置工作目录通过输入以下代码sudogedit/etc/exports打开文本exports,在文本内容的末尾添加内容命令,目的是将/home/alinx/work配置为为NFS的工作目录。配置结束后重启rpcbind服务以及NFS服务。因为NFS是一个RPC程序,在使用它之前,需要命令sudo/etc/init.d/rpcbindrestart在rpcbind工具帮助下提前映射端口。4)测试NFS通过命令将本机将NFS工作路径挂载在/mnt目录。进入/mnt,新建一个test目录测试一下,可以在/home/alinx/work目录同步看到test文件夹。4.2使用petalinux定制Linux系统使用Petalinux配置工具能够非常方便地定制LinuxOS,只需要通过Vivado软件把使用的硬件信息全部导出,然后Petalinux根据这些信息来配置uboot,内核、文件系统等,前提是必须保证Linux连接上了互联网[9]。4.2.1使用petalinux建立工程我们在自定义IP核的时候已经生成了Vivado工程,通过导出硬件信息会在工程目录下创建一个.sdk目录,该目录下会存在一个“*.hdf”文件,该文件包含了petalinux配置时使用的所有文件。基础开发环境变量配置将项目文件exam.sdk复制到主机通过输入source命令可以完成对于petalinux环境变量和vivado环境变量的配置。2)新建工程目录最后通过命令petalinux-create--typeproject--templatezynq--nameax_peta自动创建一个名为ax_peata的工程目录。3)SDK文件环境配置进入目录后输入命令petalinux-config--get-hw-description../exam.sdk调用配置页面如图4-2-1所示:图4-2-1环境配置页面因为本课题都保持默认设置,所以不需要修改。选择Save退出配置,并且等待一段较长的时间。4.2.2配置Linux内核1)进入配置界面输入命令petalinux-config-ckernel来进行配置Linux内核,又需要等待一段时间进入配置界面[11]。如图4-2-2所示:图4-2-2Linux内核配置页面2)开启PHY芯片驱动由于以太网的phy芯片驱动默认没有打开,需要手动打开,选择DeviceDrivers>Networkdevicesupport>PHYDevicesupportandinfrastructure选中MicrelPHYs,如图4-2-3所示,修改后保存退出。图4-2-3PHY芯片配置页面4.2.3配置根文件系统输入命令petalinux-config-crootfs进行配置根文件系统,保持默认设置后保存退出,如图4-2-4所示:图4-2-4根文件系统配置页面4.2.4编译生成BOOT文件并测试1)编译使用命令petalinux-build进行编译,编译完成界面如图4-2-5所示:图4-2-5编译界面打包文件到SD卡输入命令petalinux-package--boot--fsbl./images/linux/zynq_fsbl.elf--fpga--u-boot--force生成BOOT文件。进入在images->linux目录,找到刚刚生成的BOOT.BIN及包含接口驱动和测试应用程序的image.ub文件,将其复制到准备好的SD卡上,将SD卡插入开发板的卡槽中,默认设置开发板为到SD卡启动。3)启动开发板打开串口终端,启动开发板,默认用户密码都为root输入后会出现界面。如图4-2-6所示:图4-2-6开发板终端界面5选针器接口驱动IP核设计Vivado设计套件是一个基于AMBAAXI4互联规范、IP-XACTIP封装元数据、工具命令语言、Synopsys系统约束以及其它有助于根据客户需求量身定制设计流程的开放式环境。简单来说,它拥有能够创建打包封装IP核的工具,能够使实验流程缩短,节省人力物力财力这也是选择该软件的几个原因。此外,它对于Zynq系列的芯片兼容性高,能够更好地发挥芯片性能。5.1为什么要自定义IP核IP核属于硬件规范,可以用来配置FPGA的逻辑资源。而能够自定义的IP核我们叫做软IP核[2]。不同IP核具有不同功能,能够自定义IP核也是产品定制化的体现。本课题也是需要围绕着接口驱动进行试验,需要设计出一个能实现接口功能的自定义IP核。5.2设计与调试自定义IP核的流程IP核的设计流程图5-2-1所示:图5-2-1IP核设计流程图我的设计目标是从PS端能够通过在PL端上写寄存器的数据来控制选针器的动作,因此能够满足实现选针器接口功能的IP核不可缺少。选针器的结构图如5-2-2所示:图5-2-2选针器的结构图选针器的工作原理是通过高低电平来控制电磁螺线管,进而控制选针刀片的动作。选针器的工作原理图如图5-2-3所示:图5-2-3选针器的工作原理图5.2.1驱动IP核设计1)创建IP核点击Tools->createandpackagenewip,创建一个名为axi_led的带有AXI4接口的新IP核。2)创建IP核工程保持基本默认设置将新建的IP核存入IPCatalog中,右键点击Editinpackage进入对于IP核的设计工程中。修改IP核源文件对led_v1_0和led_v1_0_S00_AXI这两个文件内容进行例化,对函数进行调用等[14]。在led_v1_0这个文件中需要对选针器端口进行例化:.LED(LED),在led_v1_0_S00_AXI这个文件中对控制选针器需要的寄存器进行调用:.clk(S_AXI_ACLK),.rst(~S_AXI_ARESETN),.period(slv_reg0),.duty(slv_reg1),.led(led),assignLED[1:0]=slv_reg0[1:0];在两个文件内容都添加选针器输出端口代码:outputwire[1:0]LED,4)封装打包完成后点击封装库下IP-Xact中的compoenent.xml->MergechangersWizard对IP核进行打包封装。5.2.2导出硬件信息1)配置Zynq处理器在Vivado中需要创建一个Block设计,将设计好的IP核以及Zynq处理器通过自动连线连接在一起,在连接前也需要双击对于Zynq处理器进行相关的设置,DDR芯片部分选择MT41J256M16RE-125,时钟部分也需要做相应修改。2)生成连线图将外设Zynq处理器和设计好的IP核都放入工程中自动连线,如图5-2-4所示:图5-2-4Block设计连线图3)生成顶层文件和约束文件右键点击Block设计图->CreateHDLWrapper生成HDL顶层文件,通过addsource添加约束文件.xdc,具体的引脚号需要通过AX7021开发用户手册查找。再点击GnearateBitstream生成比特流文件。导出包括比特流文件的所有硬件信息,此过程会花费一定的时间。引脚约束文件内容如下:set_propertyIOSTANDARDLVCMOS33[get_ports{LED[1]}]set_propertyIOSTANDARDLVCMOS33[get_ports{LED[0]}]set_propertyPACKAGE_PINR7[get_ports{LED[0]}]set_propertyPACKAGE_PINA16[get_ports{LED[1]}]5.3SDK调试SDK是Xilinx软件开发套件,在SDK也为所有支持的XilinxIP硬核提供了驱动程序。SDK支持IP硬核(FPGA上)和处理器软件协同调试,我们可以使用高级C或C++语言来开发和调试ARM和FPGA系统,测试硬件系统是否工作正常。1)文件解读通过LauchSDK进入SDK软件,创建一个Helloword为模板的APP工程。我们可以通过“xparameters.h”这个文件查找到自定义IP的基地址,以及寄存器的基地址。通过基地址我们能够编写代码。如图5-3-1所示:图5-3-1自定义IP核的基地址2)测试IP功能之前已经配置调用了寄存器,我们也能从文件内容找到自定义IP的基地址,我们开始围绕调用的两个寄存器Reg0,Reg1进行编写代码,下载到开发板来测试自定义IP。测试代码如图5-3-2所示:图5-3-2测试代码6Linux驱动6.1驱动设计框图当我们完成对于IP核的功能自定义后,需要在LinuxOS环境下编写驱动来调用接口功能,完成PS对PL的写值。具体的驱动设计流程框图如图6-1-1所示:图6-1-1驱动设计框图6.2驱动核心代码编写以及功能描述1)回调函数指针和设备信息的描述当我们定义完函数后,由于函数名过长,会使用struct这个命令代码将函数名称替换成较为简便的表达方式,也更加利于观察设备文件的各种信息。具体代码如下://描述与设备文件触发的事件对应的回调函数指针staticstructfile_operationsdev_fops={ .owner=THIS_MODULE, .open=Regs_drv_open, .write=Regs_drv_write,};//描述设备文件的信息staticstructmiscdevicemisc={ .minor=MISC_DYNAMIC_MINOR, .name=DEVICE_NAME, .fops=&dev_fops};2)驱动的初始化和卸载驱动的使用需要初始化,而当你不需要当前驱动时,考虑到占内存可以卸载当前内存,因为是伴随着SD卡启动的驱动[15],所以我设计当开启时初始化驱动,停止使用时可选择卸载驱动。代码如下://初始化Linux驱动staticint__initRegs_drv_init(void){ intret; Regs=ioremap(REGS_BASE_ADDR,sizeof(Regs_T)); //建立设备文件 ret=misc_register(&misc);//卸载Linux驱动staticvoid__exitRegs_drv_exit(void){ iounmap(Regs); //删除设备文件 misc_deregister(&misc);3)注册函数当然在我们使用初始化驱动或者卸载驱动的函数时,需要用module命令代码进行注册。代码如下://注册初始化Linux驱动的函数module_init(Regs_drv_init);//注册卸载Linux驱动的函数module_exit(Regs_drv_exit);4)驱动的赋值功能PS要能够将编织数据传输到PL,通过该驱动能够完成对PL上的寄存器进行赋值[7],从而能够实现对于选针器的动作进行控制。具体的代码如下://寄存器的数值赋值staticssize_tRegs_drv_write(structfile*file,constchar__user*buf,size_tcount,loff_t*ppos){ unsignedintret=0; unsignedinttmp_val; ret=copy_from_user(&tmp_val,buf,4); switch(count){ case1: Regs->Reg0=tmp_val; break; case2: Regs->Reg1=tmp_val; break;通过copy_from_user这个代码可以把buf里面的数值复制到&tmp_val从而完成对PL寄存器的赋值。因为我在IP核设置的时候调用了两个寄存器,所以代码编写时也分为两个工作模式,case1是测试模式,case2是运行模式。7程序的移植与调试7.1测试开发板1)连接开发板首先我们需要将开发板连接好并且与终端进行连接挂载,插入SD卡,打开开发板电源。连接实物图如图7-1-1所示:图7-1-1开发板连接实物图2)编写应用程序并执行驱动编写成功后需要再变现一个简单的应用程序对自定义IP核的功能进行再次测试,因为前面设计的时候为duty这个参数调用了寄存器,所以应用程序的代码主要围绕着duty来写。因为还没有连接选针器,我选择先使用开发板上的LED灯来测试功能。当给定duty一个值后,可以控制LED灯的亮灭。 ret=write(fd,&buf,1); printf("write1:%d\n",ret); ret=write(fd,&duty,2); printf("val=:%d\n",duty); printf("write2:%d\n",ret);/*for(duty=0x8fffffff;duty<0xffffffff;duty=duty+100000) {ret=write(fd,&du

温馨提示

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

评论

0/150

提交评论