APP下载

基于ARM和FPGA的软体机器人的CAN总线运动控制器的设计

2020-08-03袁俊杰朱鹏程

科学技术与工程 2020年20期
关键词:开发板驱动器上位

袁俊杰, 朱鹏程

(北方工业大学机械与材料工程学院,北京 100043)

软体机器人有别于传统刚体机器人,其具有众多优点,具有生物柔性,能够通过蠕动、爬行、扭动穿过狭小的空间实现灵活避障或者实现柔顺抓取等操作,在非结构化环境中应用前景广泛[1],于是需要一种适用于软体机器人运动控制的运动控制器。

到目前为止,通用的运动控制器从结构上可分为以下3大类[2-3]。

(1)标准总线式运动控制器。这种运动控制器大多是基于计算机标准总线的,其相对于计算机是独立的、具有开放式体系结构。其大多使用数字信号处理器(digital signal processor,DSP)芯片或微机芯片作为处理器,可实现运动规划、高速插补、伺服滤波和电机驱动、I/O通用接口等功能,并且用户可以使用其丰富的函数库,根据自己的需求,在不同平台下自行开发相应软件来组成控制系统。

(2)开放式运动控制器。这种运动控制器灵活性好,将控制软件安装在计算机中,再加上伺服驱动器、通用I/O接口等硬件电路,就可以在操作系统支持下,利用开放式的运动控制器内核,开发所需要的各种类型的高性能运动控制系统,因此它可以提供给用户更多的选择。其优点是开发设计成本相对较低,可以给用户提供更加个性化的开发平台。

(3)嵌入式运动控制器。这种运动控制器能够独立运行,其特点是把计算机嵌入到运动控制器中。而它们之间的通信则是依靠计算机总线,该总线实质上是计算机标准总线一种变化。对于标准总线来说,其采用了更加通用的总线连接方式,在工业生产中有更广泛的应用。在实际使用中,采用如控制器局域网络 (controller area network,CAN)总线、以太网、串口等现场通信接口来连接计算机或控制面板以实现对该种运动控制器的上位机控制。

鉴于以上总结分析,对基于STM32和FPGA(field-programmable gate array)的嵌入式运动控制器进行了研究和设计,该嵌入式硬件架构能充分发挥它们的优点,可以同时控制多个电机,目前很少应用在软体机器人控制中。对于二者之间的通信则采用可变静态存储控制器(flexible static memory controller,FSMC)总线来实现数据信息的交换与传输,并采用CAN总线来实现与上位机通信,该总线具有实现连接方便、灵活度高、实时性强等特点。

1 总体方案设计

控制器以基于Cortex-M4处理器为核心的STM32F407芯片进行通信、数据处理等操作,它具有多种集成功能,满足系统的设计要求。FPGA作为该控制器的脉冲发生和数据采集机构,则利用其高速性和并行性进行速度控制、位置确定和算法实现。控制器的总体构造如图1所示。

图1 总体方案结构Fig.1 Overall schematic

控制器主要由上位机、STM32开发板控制模块、FPGA开发板脉冲发生模块、伺服驱动器等部分组成。其中每个部分的组成和相应的作用是:上位机具有信息传输和CAN通信的作用,CAN通信具有大量数据高速通信的优点,通过上位机可向STM32开发板发送指令,如实现电机的启动、停止、正反转等;STM32开发板控制模块与FPGA开发板脉冲发生模块,通过I/O接口来进行两者之间的数据发送和读取,STM32开发板根据上位机传输过来的的不同命令和相关数据进行对应的数据分析和处理,然后传输给FPGA开发板,与此同时也要从FPGA开发板上依次读取直流伺服电机在运动过程当中相应的速度和位置等参数;伺服驱动器通过脉冲宽度调制来实现直流伺服电机的精确控制,如正反转、加减速、启动、停止等。控制器采用直流有刷伺服电机,其具有成本较低、结构简单、控制方便、启动转矩大、调速范围宽等优点,因此适合作为控制器的运动执行部分[4-5]。

2 硬件设计

在对控制器进行硬件设计时,其核心器件有STM32开发板、FPGA开发板、伺服驱动器、CAN通信模块和外围电路等。考虑到在制作和使用过程中的成本和性能方面,现对各个模块进行选型,以达到合理与合适的效果。其中STM32开发板选择基于Cortex-M4内核的STM32F407IGT6,FPGA开发板则选用Xilinx公司的AX7102,直流伺服电机选择MAXON MOTOR RE30。

每个开发板的最小系统能够正常运行是硬件设计的基础,而每个最小系统都是由很多模块组成的,且都有对应的功能。电源模块为该系统提供电源,晶振模块为该系统提供基本的时钟信号,下载模块则负责将程序下载到该系统中,I/O接口模块是为了进行数据的输入和输出,复位模块的作用是使CPU恢复到原始状态,等等。不同的是,FPGA的最小系统中芯片外围滤波电路模块的功能是滤去电压中的纹波、配置电路模块以达到实现相应的功能、存储模块用以数据存储等。STM32的最小系统则还有通信模块以实现上位机与开发板之间的通信。下面就下载模块、接口模块、通信模块进行详细描述[6]。

2.1 STM32模块电路

2.1.1 仿真器接口模块

STM32有2种下载模式,分别是串行调试(SWD)模式和联合测试工作组(JTAG)模式。本文设计的系统采用JTAG模式,如图2所示。JTAG作为一种边界扫描技术,主要被用来做芯片内部测试。控制系统设计时选用的JTAG调试口针数为20针。由于开发板预留的是SWD接口,则通过ST-Link实现JTAG与SWD的转换,这里SWD接口的频率使用4 MHz。在进行代码调试时,通过ST-Link将上位机与STM32微控制器开发板相连,进而烧写程序。

图2 仿真器接口模块Fig.2 Simulator interface module

2.1.2 CAN通信模块

CAN是一种异步通信,只有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通信。由于上位机与STM32通过CAN进行通信需要USB转CAN模块[7],这里选用若比特公司的USB2CAN适配器V2,其工作原理如图3所示。

图3 CAN通信原理Fig.3 Principle of CAN communication

STM32开发板具有内置的CAN控制器,即bxCAN,它支持CAN协议2.0A和CAN协议2.0B,具有3个发送邮箱,2个3级深度的接收FIFO(first input first output,先进先出),14个可变位宽的过滤器组,波特率最高为1 Mbit/s[8]。CAN通信模块如图4所示。

图4 CAN通信模块Fig.4 CAN communication module

2.2 STM32与FPGA接口模块

STM32开发板与FPGA开发板的接口电路的作用是实现二者之间的通信以及数据传输。在控制器设计过程中,控制信号、地址信号和伺服电机运行参数是STM32开发板与FPGA开发板之间相互传输的主要数据。在输入/输出端口中有4组引脚被使用到,分别是PD、PE、PF、PG中的部分引脚,接口模块的具体设计如图5所示。

图5 STM32与FPGA接口模块Fig.5 Interface module between STM32 and FPGA

在该设计中,FSMC总线用来实现STM32开发板和FPGA开发板之间数据的传输,所以PE0、PE1、PD4、PD5、PG10作为FSMC总线端口。除此以外,STM32还将部分端口配置为步进电机驱动器方向信号的输出端口,FPGA的脉冲输出信号输入至步进电机驱动器。

2.3 伺服驱动器

作为自动调速系统中的一部分,伺服驱动器是用来调节电动机的转速的[9]。采用的是COPLEY公司的Accelnet型伺服驱动器。该驱动器的组成部分有电源电路、继电器板、主控板、驱动板及功率器件。伺服驱动器的工作原理如图6所示。

图6 伺服驱动器工作原理Fig.6 Working principle of servo driver

电源电路通过把外部输入的20~55 V直流电转换为相应的直流电,为继电器板、主控板、驱动板和功率器件提供直流电源。继电器板的作用包括两个方面,一方面是提供相应的直流电,另一方面是完成控制信号、转速检测信号和转子位置检测信号之间的传递。该伺服驱动器的核心部分是主控板,主控板则采用数字信号处理器作为控制核心[10]。功率器件采用智能功率模块(intelligent power module,IPM)为核心的驱动电路,即主电路,采用三相全控桥式逆变电路,在主回路中还加入软启动电路,以减小启动过程对驱动器的冲击。

3 软件设计

在软件设计部分主要涉及3个模块,分别是STM32与上位机通信模块、FPGA与STM32通信模块和直流电机运动中的加减速模块,如图7所示。

3.1 STM32与上位机通信模块

关于STM32与上位机的CAN通信在硬件设计部分已经介绍过了,这里只对软件设计进行详细介绍,软件部分是基于CAN总线来实现STM32与上位机的通信,主要任务是只要进行CAN初始化和数据发送即可。本设计初始化模块中只需要对 CAN 工作方式进行配置,而不需要对过滤器进行特殊的配置,部分初始化程序如下。

/* CAN register init(CAN寄存器初始化)*/

CAN_DeInit();

CAN_StructInit(&CAN_InitStructure);

/* CAN cell init(CAN单元初始化)*/

CAN_InitStructure.CAN_TTCM=DISABLE;

……

CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //工作模式选择

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;

CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;

CAN_InitStructure.CAN_BS2=CAN_BS2_1tq;

CAN_InitStructure.CAN_Prescaler=6;//波特率的设定

CAN_Init(&CAN_InitStructure);

/* CAN filter init(CAN过滤器初始化)*/

CAN_FilterInitStructure.CAN_FilterNumber=0;

……

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;

CAN_FilterInit(&CAN_FilterInitStructure);

其中波特率的配置在工作方式配置中是最主要的,设计中使用的开发板中CAN是挂APB1时钟上的,其频率为42 MHz。由波特率的计算公式,波特率=1/正常的位时间,正常的位时间=1tq+tBS1+tBS2。但是这样计算的为理论值,且难以计算和理解,在实际设置中有简单公式(1),现欲得到1 Mbit/s的波特率,计算如下:

式(1)中:CANclock为APB总线频率;prescler为APB总线时钟6分频;tq、tBS1、tBS2分别对应1个、5个和1个tcan时钟周期

3.2 FPGA与STM32通信模块

在硬件设计中已经介绍了STM32和FPGA使用I/O口连接,软件设计采用FSMC总线实现二者的数据信息的交换。

STM32和FPGA的通信既要完成STM32向FPGA 下传数据的工作,还要达到STM32从FPGA中回读数据的目的。所以两者的通信包含了接收数据和传送数据两个部分。在本文所设计的控制系统中,为了能够实现同步控制多台步进电机,使用了FSMC来实现STM32和FPGA两者之间的通信。

ST公司为用户开发提供了完整、高效的工具和固件库,STM32固件库中拥有FSMC的SRAM控制器相应的操作固件,其中含有1个数据结构和3个函数。

FSMC_NORSRAMInitStructure;//调用库函数;

RCC_Configuration();//时钟选择;

NVIC_Configuration();//中断优先级;

FSMC_GPIO_Configuration(); //连接IO口初始化;

FSMC_SRAM_Init(); //FSMC配置;

USART_Initial(); //UART1端口配置。

本设计初始化模块中只需要对FSMC工作方式进行配置,部分STM32初始化程序如下:

FSMC_NORSRAMInitTypeDefFSMC_NORSRAMIni-tStructure;//定义FSMC初始化的结构体变量

FSMC_NORSRAMTimingInitTypeDefreadWrite-Timing; //用来设置FSMC读时序和写时序的指针变量

GPIO_InitTypeDefGPIO_InitStructure; //初始化FSMC总线的IO口。

部分FPGA程序如下:

assign rd=!(csn & rdn); //获取读脉冲

assign wr=!(csn & wrn) ; //获取写脉冲

assign db=rd? indata:16′hzzzz; /*当不进行读写操作时db=indata;

当进行写操作时db=16′hzzzz;当进行读操作时db=indata*/

3.3 加减速模块

在伺服电机从稳定运行状态转换为停止状态时,如果直接停止,会因为惯性发生过冲的情况。电机运行要经过启动、加速、恒速、减速、停止的几个阶段,这其中加减速的要求是既能够在最短时间内达到稳定或者停止的要求,又不能产生失步或者过冲的情况。

在控制电机过程中,对电机进行加减速控制常用的方法主要有梯形曲线法、S型曲线法、指数曲线法、抛物曲线法等。S型曲线加减速法是一种冲击力小、柔性程度较好的控制方法,能让电机性能得到充分发挥,减小冲击振动[11]。S型曲线加减速法作用方法是通过改变运动过程中加速度的大小,使其在不同阶段拥有不同的加速度,来大幅度地减小冲击力[12],如图8所示。

根据加速度大小的变化,可以将加减速过程分为7段(即m1~m7)。由图8可知速度v、加速度a、加加速度j以及匀加速阶段的加速度值为A、匀减速阶段的加速度值为-D,Ti(i=1,2,3,…,7)表示每个阶段的运动时间,ti(i=0,1,2,…,7)为每个阶段过渡点的时刻,τi(i=1,2,3,…,7)为以每个阶段起始点作为零点的时间,其中τi=ti-ti-1(i=1,2,3,…,7)。加速度a、电机速度v与时间t的关系如式(2)和式(3)所示,vi(i=0,1,2,…,7)、ai(i=1,2,3,…,7)分别为m1~m7每个阶段结束时的速度、加速度值。

图8 S曲线加减速图Fig.8 S curve acceleration and deceleration diagram

对加减速模块进行程序设计并通过FPGA的编程软件Vivado编程后在仿真软件Modelsim上进行仿真,为了加快仿真速度,特意修改了部分参数,但不影响仿真结果,其仿真结果如图9所示。由仿真结果可以看出,该加减速模块构造满足速度和加速度曲线的构造,满足速度变化平稳、加速连续等条件,起始和终止速度与要求速度一致,在稳定运行阶段其加速度为0,加加速度可以根据实际需要随时调整,通用性很好。

图9 S加减速的仿真波形Fig.9 Simulated waveform of S acceleration and deceleration

4 实验验证

为验证该运动控制器的控制效果和控制精度,现对其控制进行实验验证。实验验证是在自行设计制作的运动平台上进行的,该运动实验平台运动执行部分采用的是弹性比较好的弹簧,中间则是支撑弹簧,其中3个电机与3根缆绳相连,缆绳的另一端则连接在软体机器人的单个关节上,通过控制器控制不同电机的启停运转,来实现该节弹簧的弯曲,并可以实现弹簧在不同方向的运动。控制器以基于Cortex-M4处理器为核心的STM32F407芯片和Xilinx公司的AX7102的FPGA开发板,进行通信、数据处理、位置确定和算法实现等操作。软体机器人运动平台如图10所示。

图10 软体机器人运动平台Fig.10 Software robot motion platform

通过控制算法和对应的数据计算,在运动平台按照预先设定的运动方式进行运动。通过同时控制多个电机进行协同运动,其中电机转速为2 r/min,以中间支撑轴为原点,可以得到在最终运动状态下机器人弯曲了约45°,缆绳缩短约5 cm。具体运动实验过程如图11所示。

图11 软体机器人运动实验Fig.11 Motion experiment of software robot

图11仅展示机器人首节运动,其中图11(a)记为机器人起始状态,图11(b)、图11(c)、图11(d)分别对应5、15、30 s时运动状态,其中图11(d)即为最终运动状态。由运动状态结果可以得到,开发板在控制电机运动过程中整体运行平稳,运动速度有变化,在按照设定的轨迹运动时运动精度较高,基本实现了设想的功能,使得该实验成功实现。

5 结论

对于目前软体机器人运动控制难度大、精度低、协同控制多电机难以实现同步性等问题,提出采用基于ARM和FPGA的软体机器人的CAN总线运动控制器,得到以下结论。

(1)实现STM32与FPGA接口通信,STM32开发板根据上位机传输过来的不同命令和相关数据进行对应的数据分析和处理,然后传输给FPGA开发板,与此同时也要从FPGA开发板上依次读取直流伺服电机在运动过程中相应的速度和位置等参数;伺服驱动器通过脉冲宽度调制来实现直流伺服电机的精确控制。

(2)实现STM32开发板与上位机之间的通信,这里采用CAN总线,因为CAN总线可以进行大量数据的高速通信,适合对多电机进行协同控制,并可大量传输下位机采集到的数据。

(3)在加减速模块中,采用S型曲线加减速法有利于减小电机的冲击,实现机器人整体平稳运行,作用方法是通过改变运动过程中加速度的大小,使其在不同阶段拥有不同的加速度,来大幅度减小冲击力。

(4)根据自行设计加工的运动对软体机器人的运动控制进行了实验验证,实验结果表明,该控制器整体协同控制性能较好,能比较理想地实现预期的运动。

由于控制算法部分并没有介绍,在实际控制过程中与控制算法中的仿真存在误差,所以下一步会对控制算法和机械结构进行优化,以期望实现更理想的运动。

猜你喜欢

开发板驱动器上位
气动网络多腔室弯曲软体驱动器结构优化
基于STM32H7的FDCAN通信系统设计与实现∗
藏起驱动器号确保数据安全
特斯拉 风云之老阿姨上位
空间大载荷石蜡驱动器研制
浅析单片机开发板的设计与制作
基于ZigBee和VC上位机的教室智能监测管理系统
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
MiniGUI在基于OMAP5912开发板上的移植
基于VC的PLC数据采集管理系统