近些年,我国加大了对海洋科考和探测的力度。探测发现,我国的大陆架浅海海底埋藏着非常丰富的石油、天然气以及煤、硫、磷等矿产资源,并且在多数海盆中广泛分布着深海锰结核,它们都是拥有巨大潜力的可利用金属矿产资源[1]。深海钻机是我国大洋探测地质的重要工具之一,它可以探取几千米深海海底数十米以下的地质样品,为地质学家、物理学家的研究工作提供样品。但是深海钻机的操作使用并不方便,传统的上位机常常用鼠标操作,海面上不确定的风浪导致船体摇晃、甲板不稳,并且上位机一般都在船舱内,这样往往造成操作人员不能直观地看到钻机平台的工作情况,这给钻机的操作带来不便,有时更可能产生操作失误;再加上钻机的操作进程较为繁琐,一次作业长达数十个小时,操作人员压力巨大。如果操作过程中有失误并且无法及时停止工作,会对钻机造成伤害。此外,一套手操器只针对一个应用场合会造成设备的重复和浪费。本文介绍的基于STM32的甲板手操器系统可以应用于多种场合的多种器械的手动控制,并且可以降低计算机操作产生的错误率。
1 系统工作原理
甲板手操器的工作模拟图如图1所示。甲板手操器系统包括操作控制模块和数据通信模块。甲板钻机操作人员参考监测到的数据来对钻机执行既定的操作,单片机判断执行的按键、摇杆发出相应的指令,指令将显示在液晶屏上并通过光端机经光缆发送至水下钻机执行作业。钻机操作将全部存入手操器的SD卡日志存档中。
2 系统硬件描述
2.1系统核心板
由于核心板需要实现4路A/D采样、90余个扫描按键输入、TFT显示屏输出和SD卡的存取,并且需要足够大的Flash来存放90余个按键输出的控制量及其延时,故手操器的核心板选择了ST公司生产的STM32F103VCT6微控制器(MCU)。该芯片有高达72 MHz的主频,并且内置256 KB的Flash,多路的A/D转换,USART通信来满足手操器与海底主控系统的通信,且满足多按键、大容量、高速度的需求。手操器核心板结构图如图2所示。
2.2 SD卡工作方式
STM32与SD卡之间的通信方式有SDIO和SPI两种。由于对速度要求不是特别高,因此相互对比下最终使用了SPI方式。STM32提供了3个SPI接口,所以经过简单的配置就可以直接使用SPI功能外设模块,如果没有SPI功能,则需要用软件模拟SPI协议。
SPI总线系统是一种高速同步的串行外设接口,它可以使MCU和各种外围设备以串行的方式进行通信交换信息。它可以节省I/O端口,以提高外设的数目和系统的性能。SPI接口是在CPU与外围低速器件之间进行同步、串行传输,在主器件的移位脉冲下,数据按位来传输,SPI接口不需要寻址操作,并且为全双工通信,显得十分简单高效,而且速度可达到几Mb/s[2]。
SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下4种信号:MOSI主器件数据输出,从器件数据输入;MISO主器件数据输入,从器件数据输出;SCLK时钟信号,由主器件产生;CS片选信号,由主器件控制。
STM32F103VCT6有3个SPI通道,本设计中选用了SPI1作为SD卡的通信接口,其引脚连接如图3所示。其中卡检测电路包括两部分:(1)卡是否完全插入到卡座中;(2)卡是否写保护。其检测信号由卡座的两个引脚以电平的方式输出。当卡插入到卡座并且插入到位时,图3中的第11脚由于卡座内部触点连接到接地,故输出低电平;当卡拔出时,该引脚由于上拉电阻R12的存在,输出高电平。卡是否写保护的检测同检测卡是否完全插入的原理基本相同。为了方便文件和数据的存取以及在PC上的修改与读取,本设计还在STM32中移植了FATFS文件系统[3]。
2.3 液晶显示屏
本设计中LCD屏选择TFT-LCD24TP,LCD控制芯片选择为ILI9325。因为硬件已经固化好,所以ILI9325必须采用SPI的接口。本设计中SD卡占用了STM32的SPI1接口,所以显示屏接口就选SPI2。
其中时钟信号的相位与极性是很重要的,它决定了输出信号捕捉到的数据是从第几个开始生效的。主要是时钟相位设置,当CPHA位被置“1”时,SCK在第二个边沿进行采样;如果已经设置了在第二个边沿采样,第一个有效数据很有可能会丢掉,故一定要确定是否是第一位数据有效。这样,数据会在第二个时钟的边沿被锁存[4]。如果CPHA被置位为“0”,那么SCK在第一个边沿被采样,数据会在第一个时钟被锁存。不同时钟相位下的总线数据传输时序如图4、图5所示。
显示屏的成品模块为34针插口,PB10为片选信号输入,PB13、PB14和PB15分别为SPI2对应的SCLK、MISO和MOSI。
2.4 按键扫描方式
考虑到按键较多,且要便于扩展使用,故按键的采集方式采用了矩阵扫描的方式,此方式能最大程度地利用I/O口。本设计采用的是13×8的矩阵,首先将I/O口PD0~PD12设为矩阵的13行,模式为推挽输出;将I/O口PE1~PE8设置为矩阵的8列,模式为下拉输入。
PD0~PD12端口输出寄存器ODR置“1”,各个端口逐行产生高电平,接着检测PE1~PE8的端口输入寄存器IDR。如果检测到非“0”位,经过延时排除按键抖动后继续检测;如果依然存在非“0”位,则进行按键值的判断;如果经过延时后没有检测到IDR寄存器中有非“0”存在,则返回。
2.5 摇杆输入
此手操器设计为两个摇杆输入,摇杆选择为二维双轴输入。主要原理为摇杆在纵轴与横轴上的位移导致两边的电位器变化,从而产生不同的输出电压。摇杆的工程图如图6所示。
使用时,将电位器接入电源(电源电压为0~3 V之间,否则可能烧毁MCU),电位器中间的输出引脚分别接至单片机的I/O口。上电控制摇杆时,两侧的两个电位器会产生不同的电压值,电压值由I/O口采集到STM32的A/D处理器计算出相应的电压值。根据两个电位器的电压值来判定。
STM32F103拥有3个12位A/D转换器,其既可以独立使用,也可以采用双重模式来使用,这样可以提高采样频率。它有18个通道来测量16个外部信号源和两个内部的信号源。在A/D时钟为14 MHz,采样周期为1.5个A/D时钟时,其最大的转换速率为1 MHz,当A/D时钟超过14 MHz时准确度将下降[5]。故配置RCC_ADCCLKConfig(RCC_PCLK2_Div4)。
时间设置:ADC_SampleTime_55Cycles5
根据公式:T=T采样+12.5个周期,则T=55.5+12.5个周期=68/14 ?滋s。
2.6 光纤通信系统
本设计的光纤通信系统由电端机、光发送机、光中继器、光接收机和光纤光缆组成,其框图如图7所示。
电端机是一般的电通信设备,用来处理如模数变换、多路复用等电源信号。光发送机由光源、驱动器和调制器组成。它的功能是把输入的电信号转换为光信号,并用耦合技术把光信号经光纤传输,其转换过程是由电信号对光的调制来完成的。光纤缆作为整条通信的线路,其功能为将光发送机的光信号传输到光接收机,并且产生尽可能小的失真衰减。
在应用中所用的是铠装光缆,由多根光纤合并而成并且外面由金属套管包裹。
由于甲板与海底钻机的通信距离非常长,信号经过长距离的传输,即便载体是光纤也会产生衰减,故在传输过程中要将信号进行整形、放大以生成一定强度的信号继续传输来保证通信质量,所以必须使用中继器。
光接收机由光检测器、放大器和相关电路组成,它把从光纤传输产生失真和衰减的光信号转换成电信号,经过一系列的处理(整形、放大等)后,恢复成甲板串口发送的电信号。
3 系统软件描述
3.1手操器核心板程序流程
系统上电之后,立即对系统进行初始化,MCU初始化时钟、定时器、GPIO、A/D转换以及各函数。初始化完成后,对LCD进行清屏并在SD卡中开辟工作区,判断SD卡剩余空间并在屏幕上显示,按规则读取SD卡指定指令文件夹中的内容,以设定的规则载到STM32的Flash中,关闭工作区。重新开辟一个工作区并新建一个文件,判断按键输入及摇杆的A/D采样结果,判断其对应的指令并通过串口输出,同时将指令显示于屏幕上,并将操作动作存入新建的文件中。系统的流程图如图8所示。
本设计的主要程序主要可以分为以下几个部分:程序开始与系统初始化,LCD屏的显示;SD卡的存储与读取;摇杆输入电压值的A/D转换以及按键的扫描与判断。
3.2 通信协议
甲板手操器向下位机发送指令的数据是以帧的格式发送的。帧的格式为@XX;nn,bb;\r\n。其中,“@”是帧头;“XX”代表操作类型,有“BC”、“BS”、“BT”、“RS”等,分别代表“关闭继电器”、“打开继电器”、“心跳信号”、“复位信号”;“nn”是下位机主板卡号,从01~02;“bb”是下位机主板的继电器序号,从01~24。操作类型与下位机主板卡号间用“;”分隔,下位机主板卡号与继电器序号用“,”分隔,继电器序号与回车换行符之间用“;”分隔。
通常情况下一条操作指令至少包含两帧数据,两帧之间软件完成一个时延。两个特殊的指令为:(1)心跳信号@BT;\r\n;(2)系统复位@RS;\r\n。
4 信号稳定性检测
将SD卡插入PC,在卡中新建一个TXT文件,文件名为“指令配置”,此文档中写入钻机指令,格式如表1所示。
一行代表一个按键按下时所要发送的指令,最前面的序号用于按键的判别,不在发送内容之中。每串指令都由两条以上组成,两条指令之间为延时的时间数值,每条指令以及两条指令之间的延时时间都以冒号结尾。当SD卡插入单片机并上电后,单片机软件自动识别。
将手操器板子通过串口线与PC连接,配置板子在PC上的串口为COM7,设置波特率为9 600 b/s,数据位为8 bit,停止位为1 bit,无奇偶校验位。
系统上电之后,用串口调试助手截获的信息进行稳定性检测,计算50个按键串口丢包次数与乱码帧数,其结果如表2所示。
第一次测试时可能由于SD卡与卡槽之间有氧化层导致接触不是十分良好,误码率较高。重新插拔去除氧化层重新测试后4组结果在接受范围内。
参考文献
[1] 金翔龙.二十一世纪海洋开发利用与海洋经济发展的展望[J].科学中国人,2006(11):13-17.
[2] 李世奇,董浩斌,李荣生.基于FatFs文件系统的SD卡存储器设计[J].测控技术,2011,30(12):79-81.
[3] 张涛,左谨平,马华玲.FatFs在32位微控制器STM32上的移植[J].电子技术,2010,47(3):25-27,29.
[4] 孙林军,贺锋涛.基于STM32控制液晶的接口实现[J].电视技术,2013,37(1):77-79.
[5] 宋敬卫,付广春,马献国.基于STM32的多路电压采集研究[J].电子世界,2013(12):55-56.
[6] ST. STM32F103xC, STM32F103XxD, STM32F103xE[Z]. 2008.