钱 城,陈家新
(东华大学 机械工程学院,上海 201620)
目前,在伺服驱动领域中,PLC变频器控制逐渐被运动控制器驱动器所取代,因此传统的用来调试PLC和变频器的方法已然无法适用。在现今的运动控制系统调试中,往往是通过控制器、驱动器、伺服电机三者联调实现的[1]。然而,各厂家为了自身利益,主推自家一体化产品,使得不同厂家的控制器和驱动器难以直接互换使用,直接增加了研发的难度,拖慢了研发的时间。对此,各厂家通过PC模拟控制主机,通过CAN分析仪发送相关数据给驱动器,从而调试伺服电机。尽管该方法无需专门配备主机调试,降低了一部分成本,但是性能强大的CAN分析仪同样价格不菲,而且使用CAN分析仪进行调试必须保证驱动器的CANopen协议通讯正常。
针对上述调试问题,在此,利用驱动器上闲置的串口资源进行系统开发,驱动器直接通过串口与上位机相连接,将调试命令与调试数据直接通过串口发送。这样不仅无需控制主机的支持,绕开CAN通讯限制,同时不必经常为修改参数而擦除程序重新下载,因此也在一定程度上延长单片机寿命[2]。
文中首先在STM32F4芯片上实现了CANopen DS402协议从站的运行,进而在从站程序中嵌入了一套基于串口的调试电机的系统。其中,DS402协议从站运行的程序框架如图1所示。
图1 CANopen运动控制协议程序框架Fig.1 Program framework of CANopen motion control protoco
从机程序首先对波特率、中断以及CAN控制器等进行相关初始化,再将设定好的对象字典写入STM32的内存中去,最后初始化CANopen协议栈。根据协议要求,通讯系统首先进入未准备启动状态和预操作状态,完成系统自检之后自动进入取消启动状态。此时,通讯系统可以接收主机的指令,进入准备启动状态、启动状态、允许运行状态和快速停止状态,并能够在这些状态与取消准备状态之间切换。在任何运行状态中,一旦出现故障,就会进入到故障响应状态,并且通过故障状态进入到取消准备状态[3]。
由于在CANopen DS402协议中从机的运行状态复杂,为便于调试,在此利用闲置的串口资源设计了一套调试电机状态的系统,其原理框架如图2所示。
图2 串口调试系统原理框架Fig.2 Principle frame of serial port debugging system
PC端可以通过串口调试工具直接发送命令消息,串口接收到预设的命令之后,会触发定时器中断,导致CANopen主程序暂停,转而执行中断程序。理论上在任何状态下,都可以利用中断程序实现修改CANopen设备的对象字典、切换设备的运行状态等功能,但是为了保证运动控制的安全性,当设备处于允许运行状态的时候,调试功能会被限制在一定的范围内。除了设备的运行状态信息之外,串口也会将从站设备的初始化信息,故障错误信息等发送给上位机,从而使相关人员能更方便地监控设备运行情况、排查错误原因。
STM32F407ZGT6是意法半导体公司开发的一款32位微处理器。这款芯片拥有非常多的片上外设,在此使用了SRAM,Flash,16位定时器、串口、CAN口等资源[4]。
CAN口的外围硬件电路如图3(a)所示。STM内部具有CAN控制器,因此外接1个CAN收发器就完成了CAN物理层连接。在此,选用TJA1050收发器;在VCC与GND之间增加1个104电容,可以起到滤波,消除高频噪声的作用;在CAN_H和CAN_L之间加上1个终端120 Ω电阻来匹配总线阻抗,以提高数据通信的抗干扰性及可靠行[5]。
由于PC的USB口不遵循TTL电平,因此需要CH340G芯片将USB转换成TTL电平。串口外围电路设计如图3(b)所示。其中,RXD和TXD口分别与STM32的PA9和PA10引脚连接,D+和D-口通过标准的接口与USB相连即可。
图3 硬件相关电路Fig.3 Hardware correlation circuit
调试平台使用串口进行通信,串口波特率设为115200,停止位设为1 b,数据位设为8 b,奇偶校验选择无。上位机可以使用任意的串口调试软件。
系统启动后会显示调试的帮助信息,帮助信息中包含2个指令:help和list指令。help指令可以随时获得调试的帮助信息;list指令可以显示当前可用的函数名和列表。
函数中存在常量UART_USE_HELP,其值默认设置为1,这样一旦系统开始运行,帮助信息界面就会显示;如果对帮助系统比较熟悉,可以将其改为0。另外,list中的函数并不是要进入list界面之中才能使用。在系统启动之后,随时可以输入list中的函数进行调用。
由于CANopen中运行状态复杂,显示当前的运行状态是非常必要的。系统内部显示流程如图4所示。
图4 显示流程Fig.4 Display flow chart
一旦STM32外设初始化之后,会显示CANopen系统的基本信息。随着CANopen协议栈初始化的完成,节点号、CAN控制器、对象字典以及CANopen各项服务的初始化信息也会在界面上进行显示。在STM32和协议栈初始化时,如果程序发生错误,界面上会显示错误信息,程序也会停止运行。当设备开始运行之后,运行状态只有改变之后才会才上位机上显示。运行状态出现错误会使得设备进入故障响应状态,并不会使程序停止运行,上位机也会及时显示当前的错误信息以及运行状态。
CANopen DS402协议的运动控制相关参数均保存在对象字典里,因此利用串口对相关的对象字典进行写操作即可修改CANopen运行中的参数。为了方便调试,可用的修改指令都添加在list指令之下,调试人员可以按照list所显示的函数清单通过编写好的函数进行相关参数的修改。文中针对运动控制中一些常用的参数进行了修改程序的编写,可修改的相关参见表1。
表1 常用参数Tab.1 Common parameter
上位机通过串口调试软件与STM32进行串口通讯,实现了初始化显示、人机交互以及修改参数的功能。完成串口程序设置后打开串口,就会进入初始化显示。
初始化显示信息如图5所示。首先显示项目名称,使用人信息以及系统版本号。其次显示初始化节点信息和CANopen各项服务的初始化信息,至此就开始等待主机通讯。在等待主机通讯的同时进行自检,直至设置完成PDO,SDO的通道,从机可对主机命令进行执行与应答操作,状态机也将从未准备启动状态切换到准备启动状态。
人机交互界面中help指令和list指令显示的信息如图6所示。在初始化完成之后的任何时间都可以直接使用这2个指令。help指令会呼出帮助界面,方便调试者了解系统的帮助指令;list指令会呼出系统所有可用的函数命令以及调用命令的格式,无需调试人员记住所有调用的函数及其格式。帮助系统并非仅支持这2个指令,使用者还可以按照自己的想法,在程序里定义的结构体变量sys_cmd_tab中,添加帮助指令及其功能。
修改参数功能是利用STM32的中断,对CANopen程序中对象字典的相关参数进行读写操作,从而达到上位机直接修改进行调试的目的。因此可以通过读取对象字典中相应的参数来对此功能进行验证。
图5 初始化显示信息Fig.5 Initialize display information
图6 人机交互显示信息Fig.6 Human-computer interaction display information
在系统启动之后,利用传统的CAN分析仪通过SDO服务来读取相关对象字典,读取的各参数初始值如图 7(a)所示。
在CANopen协议中,数据位第1个字节为功能码,第2和第3字节为对象字典主索引,第4字节为子索引,之后的4个字节为传输的数据位[6]。因此,由图可见,程序初始化后初值除电机状态、实际转矩、轨迹速度之外全部为0。
在获得初值之后,上位机通过串口调试软件,利用调试系统对相关参数进行修改,修改界面及相关参数值如图7(b)所示。由于CANopen通讯中所有参数为16进制数,因此在输入参数时程序中会将输入的参数值转换为16进制。
修改结束后,通过SDO服务读取电机参数的对象字典,可以发现参数值已经改变成重新设定的值,如图 7(c)所示。
图7 电机控制参数相关值Fig.7 Motor control parameter correlation values
针对传统CANopen设备调试繁琐的问题,利用闲置的串口资源,设计了一个小型的调试系统,实现了上位机绕过CANopen服务主机,直接控制从机对电机进行调试,免去以往调试、修改、下载、再次调试的复杂操作。目前,该调试系统已在企业机械臂运动调试中投入应用,缩短了设备调试的时间,提高了工作效率。