针对在软体机器人控制时,多电机协同控制过程中难度大、通用性差、协同性差等缺点,设计了基于 ARM和 FPGA的软体机器人的控制器局域网络 ( controller area network,CAN) 总线运动控制器,采用 ARMCortex-M4 为内核的 STM32F407 开发板和 AX7102 FPGA 开发板设计一种基于 CAN 总线的软体机器人运动控制器,主要包括该系统的体系架构、硬件设计和软件设计等。该控制器利用 STM32作为控制核心和 FPGA 的高速处理能力来实现控制算法的运算,并用 CAN 总线技术来实现与上位机通信。经过试验操作,该控制器可以满足预定要求。
软体机器人有别于传统刚体机器人,其具有众多优点,具有生物柔性,能够通过蠕动、爬行、扭动 穿过狭小的空间实现灵活避障或者实现柔顺抓取等操作,在非结构化环境中应用前景广泛[ 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 所示。
控制器主要由上位机、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 接口,则通过 STLink 实现 JTAG 与 SWD 的转换,这里 SWD 接口的 频率使用 4 MHz。在进行代码调试时,通过 ST-Link 将上位机与 STM32 微控制器开发板相连,进而烧写 程序。 2. 1. 2 CAN 通信模块 CAN 是一种异步通信,只有 CAN_High 和 CAN _Low 两条信号线,共同构成一组差分信号线,以差 分信号的形式进行通信。由于上位机与 STM32 通 过 CAN 进行通信需要 USB 转 CAN 模块[ 7],这里选 用若比特公司的 USB2CAN 适配器 V2,其工作原理 如图 3 所示。 STM32 开 发 板 具 有 内 置 的 CAN 控 制 器,即bxCAN,它支持 CAN 协议 2. 0A 和 CAN 协议 2. 0B,具有 3 个发送邮箱,2 个 3 级深度的接收 FIFO( firstinput first output,先进先出) ,14 个可变位宽的过滤器组,波特率最高为 1 Mbit / s[8]。CAN 通信模块如图 4 所示。 2. 2 STM32 与 FPGA 接口模块 STM32 开发板与 FPGA 开发板的接口电路的作 用是实现二者之间的通信以及数据传输。在控制 器设计过程中,控制信号、地址信号和伺服电机运 行参数是 STM32 开发板与 FPGA 开发板之间相互 传输的主要数据。在输入/输出端口中有 4 组引脚 被使用到,分别是 PD、PE、PF、PG 中的部分引脚,接口模块的具体设计如图 5 所示。 在该设计中,FSMC 总线用来实现 STM32 开发板和 FPGA 开发板之间数据的传输,所以 PE0、PE1、
PD4、PD5、PG10 作为 FSMC 总线端口。除此以外, STM32 还将部分端口配置为步进电机驱动器方向信号的输出端口,FPGA 的脉冲输出信号输入至步进电机驱动器。 2. 3 伺服驱动器 作为自动调速系统中的一部分,伺服驱动器是用来调节电动机的转速的[9]。采用的是 COPLEY 公司的 Accelnet 型伺服驱动器。该驱动器的组成部 分有电源电路、继电器板、主控板、驱动板及功率器 件。伺服驱动器的工作原理如图 6 所示 电源电路通过把外部输入的 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* / 4 实验验证 为验证该运动控制器的控制效果和控制精度, 现对其控制进行实验验证。实验验证是在自行设 计制作的运动平台上进行的,该运动实验平台运动 执行部分采用的是弹性比较好的弹簧,中间则是支 撑弹簧,其中 3 个电机与 3 根缆绳相连,缆绳的另一 端则连接在软体机器人的单个关节上,通过控制器 控制不同电机的启停运转,来实现该节弹簧的弯 曲,并可以实现弹簧在不同方向的运动。控制器以 基于 Cortex-M4 处理器为核心的 STM32F407 芯片和 Xilinx 公司的 AX7102 的 FPGA 开发板,进行通信、 数据处理、位置确定和算法实现等操作。软体机器 人运动平台如图 10 所示。 通过控制算法和对应的数据计算,在运动平台 按照预先设定的运动方式进行运动。通过同时控 制多个电机进行协同运动,其中电机转速为 2 r / min,以中间支撑轴为原点,可以得到在最终运动状 态下机器人弯曲了约 45°,缆绳缩短约 5 cm。具体 运动实验过程如图 11 所示。 图 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) 根据自行设计加工的运动对软体机器人的 运动控制进行了实验验证,实验结果表明,该控制 器整体协同控制性能较好,能比较理想地实现预期 的运动。 由于控制算法部分并没有介绍,在实际控制过 程中与控制算法中的仿真存在误差,所以下一步会 对控制算法和机械结构进行优化,以期望实现更理 想的运动。 信迈提供STM32+FPGA运动控制器定制化解决方案。