文献标识码: A
DOI:10.16157/j.issn.0258-7998.181686
中文引用格式: 王心鹏,门雅彬,张东亮,等. XBT自动投放测量系统电机控制单元设计与故障分析[J].电子技术应用,2019,45(1):92-96.
英文引用格式: Wang Xinpeng,Men Yabin,Zhang Dongliang,et al. Design and fault analysis of motor control unit in XBT automatic launch and measurement system[J]. Application of Electronic Technique,2019,45(1):92-96.
0 引言
海水温度剖面数据是重要的海洋环境要素之一,该数据的获取对水下声波传播速度和路径变化研究具有重要意义,能够为海洋科学研究和军事应用提供重要帮助。投弃式温度剖面测量仪(Expendable bathythermograph,XBT)是一种是能够测量和感应海水温度剖面的投弃式设备,是调查海洋温度剖面时重要的测量手段[1-2]。
XBT自动投放测量系统可实现12枚探头自动投放,完成对海水温度剖面数据的快速获取。它能够在恶劣海况下完成投放测量任务,具有投放效率与自动化程度高、操作简便等特点,弥补了传统人工投放的不足之处。系统的投放过程主要靠步进电机、直流电机和伺服电机等多种装置的组合运动完成,电机控制单元是系统电子控制的核心,在自动投放过程中发挥了重要的作用。
1 电机控制单元总体设计
电机控制单元主要由主控芯片、电源模块、串口扩展芯片、伺服、步进、直流电机驱动器接口电路等部分组成,其硬件原理框图如图1所示。系统投放过程包含以下运动模式:投放桶旋转、释放装置运动、数据采集装置运动,通过对上述运动模式的合理设计完成探头投放与测量数据采集。
2 硬件设计
2.1 主控芯片选型
考虑到开发难度及研发周期,对比选型后选用Silicon Laboratories公司的C8051F020微控制器作为主控芯片。它是完整的混合信号片上系统SoC芯片,具有64 KB可在系统编程Flash和4 532 B SRAM,70%的指令执行时间为1-2个时钟周期,具有22个中断源等特点,以上性能满足电机控制单元的设计需求。
2.2 电源管理模块
控制单元的电源输入为12 V和24 V,选用National Semiconductor公司生产的LM2575和LM2937电源芯片,分别产生5 V和3.3 V电压。前者用于步进电机控制信号及直流电机驱动芯片供电,后者用于主控芯片及数字器件供电,24 V电源用于步进电机驱动器及伺服驱动器刹车装置供电。
2.3 通信接口模块
为实现对系统中各类电机的控制,电机控制单元需要与伺服驱动器[3]、上位机及手动控制终端进行数据通信,其通信接口均使用RS232方式。由于单片机只有两个UART串口,需要对其数量进行扩展。常用的扩展方法可通过软件设计实现[4],也可由硬件芯片[5]完成。由于软件虚拟串口的方法具有可靠性和稳定性方面的不足,因此采用专用硬件芯片的方式。选用EXAR公司生产的XR16L784专用串口扩展芯片,通过合理搭建外围电路并编写配置程序,实现多路串口扩展功能。
2.4 电机驱动接口
2.4.1 伺服电机驱动器接口
接口电路主要由RS232电平转换和投放筒位置反馈输入两部分组成。电机控制单元与伺服驱动器的通信方式为RS232通信,波特率为9 600 b/s。选用MAXIM公司生产的MAX3232芯片完成单片机TTL电平与RS232电平转换。伺服驱动器采用Modbus通信[6]协议,使用RTU模式进行数据传输。通信格式中每帧数据包含1个起始位,8个数据位,2个停止位。为与该格式匹配,将单片机UART0串口设置为模式2,每帧数据包含11 bit,其第9数据位可通过编程进行设定,设计时将其设定为与停止位相同的数值。每开始一轮投放任务前,投放桶都需要进行位置归零,以保证投放点位置的精确性。使用光电开关作为检测传感器,通过检测安装在投放桶固定位置处的遮光板实现归零操作。
2.4.2 步进电机驱动器接口
步进电机驱动器具有多种细分模式,根据系统需求将其设定为3 200。驱动器的控制信号包括电机使能、旋转方向及步数,其中旋转步数由输入脉冲个数决定,使用单片机可编程计数器阵列(PCA)功能实现脉冲的精确输出。单片机的控制信号经光电隔离器件与步进电机驱动器相连。为满足系统对步进电机数量的扩展需求,在硬件实现时采用了2个步进电机驱动器接口的设计方案。
2.4.3 直流电机驱动接口
对XBT探头数据的获取通过测量装置来完成,该装置通过直流电机实现与探头的连接和断开。选用ST公司的L298P芯片[7]作为驱动芯片,该芯片供电电压为5 V,引脚Vs为待驱动设备工作电压,根据选用的直流电机工作参数将其设定为24 V。控制信号为标准TTL电平,芯片最大驱动电流为2 A。使用单片机两个IO口输出控制信号,同时使用或逻辑门的输出作为L298P使能信号,当控制信号1为高电平、控制信号2为低电平时,芯片驱动直流电机正转。反之,则直流电机反转。其原理图见图2。
3 软件设计
在程序编写时采用模块化编程思想进行设计,选用Keil μVision4作为编程开发环境,编程语言以C语言为主,使用少量汇编语言完成MCU寄存器初始化。程序执行后首先对时钟、UART、PCA等相应寄存器进行初始化,串口通信采用中断方式[8]以提高效率。使用单片机片上外设PCA以一定频率向步进电机驱动器发送脉冲,由于步进电机行程固定,因此采用定时器控制其运动时间。软件流程图见图3。
系统初始化完毕后,通过位置传感器确认各电机是否处于原点,若不在则自动完成位置归零。在确认伺服驱动器工作状态正常后进入自动投放模式,过程如下:伺服电机带动投放桶旋转30°,直流电机前进至与探头相连,步进电机通过往复运动完成XBT释放过程,探头落入海水后对温度剖面数据进行测量,待数据采集完成后直流电机后退至原点,完成一次投放过程。当12枚探头均投放成功后,即可装入新探头以备下一轮次投放。为在电机出现异常时能对其人工调整,在程序设计时加入了手动控制模式,该功能不对用户开放,仅在调试时使用。
电机控制单元与上位机的通信采用问询、应答方式,问询由上位机发起,控制单元收到后将相应动作的命令和子函数标志位赋相应值,通过在主函数中查询标志位执行对应电机动作,执行完成后清除标志位,当查询到子函数标志位清零后向上位机回复。其命令交互流程见图4。
命令交互时采用的通信格式为:
上位机:$XX,AA*KK\r\n
电机控制单元:$XX,AA,BB*KK\r\n
其中,XX表示命令种类,AA表示控制字标号,BB表示电机控制单元执行结果,KK表示累加和校验。例如,需要投放筒逆时针旋转30°,则上位机发出指令$05,02*F3\r\n,电机控制单元通过串口收到该命令后,对命令进行分类,主函数中检测到该命令对应的标志位后将控制电机执行相应动作,完成后则返回$05,02,00*7F\r\n。
4 电机控制单元测试结果及故障分析
在海上投放过程中,由于每枚XBT探头的投放是由以上三种电机按照一定逻辑顺序运动完成的,如果某个电机动作出现异常将直接导致投放失败,因此对电机控制单元的功能、性能从多种角度进行测试十分必要。为保证其工作的可靠性,分别从功能、拷机和批量测试三方面进行测试。其中,前两项试验是对单一电路板的测试,批量测试则是对随机抽取的10块电路板进行验证。
4.1 功能性测试
为测试电机控制单元的功能,将其与工控计算机通过RS232方式相连,同时将电机控制单元与伺服驱动器的串口发送引脚与地线分别引出并连接到工控计算机的两个串口上,实时监测两者间通信状态。控制单元在自动投放模式下会按照设定的步骤依次完成投放12枚探头的动作。
4.1.1 伺服电机故障及分析
在监测电机控制单元与伺服驱动器间通信数据时,发现伺服驱动器存在数据丢帧、出错、寄存器值未更新等情况,直接导致投放桶不转动或转动次数少于设定值。其原因可能是驱动器内DSP对串行数据的处理响应速度及可靠性不足、外部电磁干扰等,这些异常情况会导致伺服电机无法对电机控制单元的指令及时做出响应。
为保证系统工作稳定可靠,单片机在每次发送控制指令后再发送一条读取指令,检查伺服驱动器内相关寄存器中的数据是否被成功写入,若未成功更新则重新发送控制指令。同时,建立误码识别机制并记录误码出现次数,当累计次数超过设定阈值时启动报警,人为排查故障。
4.1.2 步进电机故障及分析
在测试过程中,步进电机出现了行程不到位的情况,导致投放装置无法成功取下探头销,其原因是外部脉冲频率设置过高导致步进驱动器无法及时响应从而造成失步[9],在设计时将PCA产生的脉冲频率降低至2.4 kHz,该频率下步进电机无失步现象,运动行程稳定。
4.1.3 直流电机故障及分析
在测试直流电机工作时使用外部稳压源提供24 V直流电压,当电机连续工作一段时间后发现其会出现异常停止现象,同时驱动芯片L298P异常发热,稳压源过流保护。经分析可知,由于直流电机在启动和停止瞬间会产生较高的感应电动势,若该电压直接作用在OUT1和OUT2引脚将直接导致芯片烧毁。因此,在这两个引脚上加入截止电压为24 V的双向TVS管,将直流电机启停时产生的瞬间高电压以电流形式直接释放到电路的地平面,保证L298P芯片不会受到电机瞬时较高的感应电动势影响。
4.2 拷机测试
为验证电机控制单元对上位机命令响应的可靠性,使用串口调试助手周期性发送控制指令,通过观察电机运动执行情况来判断其响应结果。测试时间为24个小时,发送周期为4 s一次。测试中发现,直流电机在工作一段时间后停止运动,无法对外部命令做出响应,但每组试验中电机停止运动的时间却不相同。在确认驱动芯片L298P工作正常后,从程序设计角度对故障进行分析。
由于控制单元在输出电机动作的指令后,需保证该动作执行期间其他电机无运动,因此在主程序中使用了while循环方式进行等待。但控制单元需要实时响应来自上位机的串口命令,因此将查询串口缓存及命令状态判断等语句放在了每10 ms执行一次的定时器0中断函数中。UART波特率为9 600 b/s,当单片机串口通信数据帧格式设置为1位起始位、8位数据位、1位停止位时,每帧数据传输时间为1.04 ms。程序中使用了定时器0和UART0中断,前者中断优先级高于后者,由于并未对中断优先级(IP)寄存器进行设置,因此当定时器0和UART0中断同时到来时,单片机优先执行定时器0中断服务程序;而当UART0中断程序执行过程中定时器0中断到来时,不会发生中断嵌套。
电机控制单元的晶振频率是3.686 4 MHz,在1.04 ms的时间内包含3 837个时钟周期。C8051F系列单片机一条汇编指令的执行时间为1~2个时钟周期,而一条C语言语句对应多条汇编语句。上位机发送的控制命令包含11个字节,由于原设计中在定时器0中断函数中添加了大量查询串口缓存及状态判断语句,导致要执行的语句过多,在某些条件下执行时间超过了1.04 ms,造成保存在SBUF0中的串口接收数据还没被读入单片机内存就被下一个数据覆盖,导致控制字丢失。
将主程序中使用while的程序部分用switch-case结构改写,使程序不会停在某一位置持续等待,这样可以将查询串口缓存及状态判断的语句写入主函数中,使其对外部命令的响应不依赖于定时器。改写后的定时器中断函数中的语句数量大幅减少,其执行时间远小于1.04 ms,可保证SBUF0中的数据均能被及时读入内存。调整后的电机控制单元在拷机实验中对上位机命令均及时响应,无数据丢失。
4.3 批量测试
在该项测试中发现有2块电机控制单元出现了投放筒旋转次数明显多于设定值的情况。在程序设计时,为保证伺服电机能可靠执行转动指令,在每次运动前后由上位机分别读取伺服驱动器中字长为4字节的轴位置信息并比较,若其差值小于设定阈值则判定电机未转动,上位机会再次发送旋转指令。由于旋转30°对应的轴位置数据偏移量已知,经对返回数据核查得知,该故障是因轴位置数据出现异常所致。
在对程序设计核查确认无误后,将导致该故障的原因定位在程序的编译模式上。系统开发使用的Keil μVision4软件,其变量编译包括Small、Compact、Large三种模式[10]。在Small模式下,未指明存储类型的变量,均将分配在单片机的内部存储器上,其存储空间较小,如果变量数量超过其范围将会编译报错。由于电机控制单元需要使用变量较多,超过了内部存储器的范围,软件编译不能通过,因此不选择该模式。在Compact模式下,未强制使用_at_指定地址的变量被分配在分页寻址的片外内存中,每页大小为256 B,变量的高8位地址由P2口数据决定,如果使用的变量总数超过1页时,编译器不会自动更新P2数据进行页切换,也不会编译报错;在程序执行时,会造成变量的跨页错误,即访问变量跨页时,由于未对高8位地址进行切换,仍然访问以前的页,造成变量访问混乱。在Large模式下,未指明存储类型的变量和XDATA变量都分配到片外数据存储器中,最大可达64 KB,使用指针DPTR间接访问。
电机控制单元程序编译时使用了Compact模式,由于变量数量多,占用空间超过256 B,造成变量的访问混乱,所以造成轴位置变量异常。将编译模式改为Large后对程序重新编译,将执行代码写入单片机测试,轴位置数据和电机旋转次数均正常。此外,不修改变量编译模式,通过修改程序,将部分变量通过_at_指定地址,使开发工具软件自动分配的变量限定到256 B之内,也能解决该问题,同样印证了轴位置的异常是由在Compact编译模式下变量数量超过页范围引起的。
轴位置变量出错现象只在两个电机控制单元上出现,而其他单元并未出现。经分析其原因如下:每个单片机程序的执行与其时钟频率有关,同一函数的调用执行时刻在不同电机控制单元上有细微差别,导致了函数的内部变量临时分配的区域不同,轴位置数据异常的控制单元在执行该函数时,内部变量跨页,输出数据异常,而其他单元执行该函数时,内部变量不跨页,输出数据正常,因此导致了相同函数在同一外部条件下,在不同电机控制单元上出现了不同的结果。为验证该推断,在不改变变量编译模式的情况下,在函数定义前定义一定字节的空数组,该数组用于占用外部数据存储器空间,调整该数组的大小使函数内部变量跨页,在某些条件下,应该是所有电机控制单元都会出现故障,数据异常的位置也应不限定在电机轴位置上。通过逐步修改空数组的大小,在无故障的单元上也出现了电机异常转动现象,数据异常也不仅限于电机轴位置一处问题,该实验结果与推断一致。将编译模式设置为Large模式,不修改源程序,故障消失。该结果也验证了电机轴位置数据异常是由于在Compact模式下变量数量超过页范围引起的。
通过对以上异常情况的处理,电机控制单元能够实现对上述三类电机的可靠控制。在投放装置海上试验测试中系统工作正常,电机控制单元能够有效控制投放装置完成多枚XBT探头的自动连续投放,保证系统正常运行。
5 结论
本文提出了XBT自动投放测量系统电机控制单元的设计思想,详细给出了硬件和软件实现方案。设计了三种测试方法,查找出了控制单元在对上位机命令实时响应过程中出现的各类故障,通过全面的机理分析进行了故障定位并改进验证。实验室和海上试验的测试结果表明:电机控制单元能够通过对伺服电机、步进电机、直流电机的运动控制完成多枚XBT自动投放,保证系统顺利完成对海水温度剖面数据的可靠获取。本设计对使用单片机对多种电机进行实时组合控制的方法上具有一定借鉴作用。
参考文献
[1] 黄兴辉,宋海斌,PINHEIR L M等.利用反射地震数据和XBT数据联合反演海水的温盐分布[J].地球物理学报,2011,54(5):1293-1300.
[2] 任强,魏传杰.国产抛弃式温度剖面仪(XBT)资料质量分析[J].海洋技术学报,2016,35(1):102-105.
[3] 中达电通股份有限公司.台达高机能通讯型伺服驱动器ASDA-A2系列应用技术手册[Z].2014.
[4] 郑志雄,胡爱兰.LPC1768的全双工UART的软件模拟实现[J].单片机与嵌入式系统应用,2013,13(6):25-28.
[5] 李家宝,郑晓红,王团部.单片机外中断扩展及其多优先级软件实现方法[J].现代电子技术,2006(17):140-143.
[6] 孟庆浩,周清清,禹东川.基于GSM/GPRS的海上导航灯器远程监测系统[J].仪器仪表学报,2006(2):195-198.
[7] 孟英红,齐婉玉,段学锋.用L297,L298组成步进电机驱动电路[J].仪器仪表学报,2003,24(2):573-574.
[8] 周术诚,蒋萌辉,宁正元.微机与单片机串行通信中断方式的实现[J].福州大学学报(自然科学版),2001,29:79-82.
[9] 李茂军,刘鼎邦,张春光,等.步进电机细分驱动电磁转矩分析[J].控制工程,2013,30(2):243-245.
[10] Eefocus. Keil Cx51编译器编译模式[EB/OL].(2015-09-29)[2016-09-19].http://www.eeworld.com.cn/mcu/2015/0929/article_22621.html.
作者信息:
王心鹏,门雅彬,张东亮,董 涛,孔佑迪
(国家海洋技术中心,天津300112)