有ARM和FPGA助阵,多路电机控制更完美
介绍了一种基于fpga的多轴控制器,控制器主要由arm7(LPC2214)和fpga(EP2C5T144C8)及其外围电路组成,用于同时控制多路电机的运动。利用Verilog HDL硬件描述语言在fpga中实现了电机控制逻辑,主要包括脉冲控制信号产生、加减速控制、编码器反馈信号的辨向和细分、绝对位移记录、限位信号保护逻辑等。论文中给出了fpga内部一些核心逻辑单元的实现,并利用QuartusⅡ、Modelsim SE软件对关键逻辑及时序进行了仿真。实际使用表明该控制器可以很好控制多轴电机的运动,并且能够实现高精度地位置控制。
随着电机广泛地应用于数字控制系统中,对电机控制的实时性和精度上的要求越来越高。如何灵活、有效地控制电机的运行成为研究的主要方向。文中采用现场可编程逻辑门阵列(Field Programmable Gate Array,fpga),通过Verilog语言编程来实现电机的控制。利用fpga设计具有硬件设计软件化、高度集成化、高工作频率等优点。fpga最大的特点就是灵活,实现你想实现的任何数字电路,可以定制各种电路,减少受制于专用芯片的束缚,真正为自己的产品量身定做。在设计的过程中可以灵活的更改设计,而且它强大的逻辑资源和寄存器资源可以让你轻松的去发挥设计理念。其并行执行,硬件实现的方式可以应对设计中大量的高速电子线路设计需求。
1 多轴控制器主要功能
多轴控制器与上位机、电机驱动器等配合使用,图1为采用多轴控制器组成的控制系统总体示意图。控制器接收上位机发送的控制指令,分析处理并产生相应的方向信号、脉冲信号给驱动器,从而达到控制电机运行的目的。为了提高系统的控制精度,将电机的编码器信号作为反馈信号输入给控制器(内部实现自动辨向及四细分)。在各轴运动过程中,专用控制器对电机运行的绝对位移进行记录,并且可以实时地将各轴的绝对位置信息上传给上位机。另外在电机运行的过程中,为了保证电机运行的安全性,控制器还采用了限位信号反馈实现全硬件保护措施。
2 多轴控制器组成
专用控制器由arm(LPC2214)、fpga(EP2C5T144C8)、驱动器接口电路、编码器接口电路、限位检测电路和电源电路等组成,如图2为一个八轴电机控制器的硬件组成图。arm通过串口实现与上位机之间的通信,解析从上位机获得的控制指令,并通过fpga产生相应输出信号给驱动器接口,驱动器接口外接驱动器。编码器信号作为位置反馈信号同编码器接口相连,形成位置环反馈。限位信号作为安全检测信号同限位检测接口相连,为整个系统添加一道安全保障。
3 fpga控制逻辑专用控制器在完成整个控制的过程中,arm只负责指令解析、控制指令发送、实时数据上传等任务,fpga才是多轴专用控制器的核心。通过Verilog HDL语言在fpga内部实现了加减速曲线、编码器信号辩向及四细分、绝对位移记录等功能。图3为电机控制的整体输入、输出信号图,通过片选信号CS、读有效信号rd_enable、写有效图信号wr_enable进行电机通道选择。图4给出了1#通道控制的fpga内部逻辑示意图,下面将逐一对各主要模块进行详细介绍。
1)加减速曲线模块
为了更有效、更理想地控制电机的运行,在fpga内部设计了加减速曲线模块。文中采用了一种近似指数加减速曲线的方法,如图5为近似指数加速曲线,减速曲线与之对称。速度等距分布,那么在该速度级上保持的时间不一样场。为了简化,用速度级数N与一个常数C的乘积去模拟并且保持的时间用不熟来代替。因此,速度每升一级,电机都要在该速度级上走NC步(其中N为该速度级数)。
建立两个名为rom_pos、rom_div的ROM模块,如图6所示,rom_pos为脉冲个数存储器,rom_div为分频值存储器。通过相同的地址线将两个存储器连接起来,使一个地址对应一组脉冲个数和分频值。
fpga获得方向信号、脉冲(距离)信号、目标分频值之后.如果电机运行过程中不需要加减速,直接以目标分频值控制脉冲信号的发送即可。如果需要执行加减速,则fpga内部要调用加减速模块。根据地址线获取一组数据,即脉冲个数pul_cnt和分频值div_num,以div_num大小的分频值发送pul_cnt个脉冲,然后再按照下一组数据值发送脉冲,直到分频值达到目标分频值为止,减速过程与加速过程对称。当电机按照脉冲(距离)信号运行到一半行程的时候,如果分频值还未达到目标分频值,此时就要进行强制减速。
编写仿真程序,使两个存储器地址线相同,对存储器地址address做加1运算,从而可一次性读取两个存储器所对应存储单元的数据。利用Modulesim仿真工具对加减速模块进行功能仿真,仿真结果如图7所示,访问一个存储器地址就对应着一组脉冲个数和分频值的输出。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)