周 球,周 悦,郭 威,孙洪鸣,高 森
(1.上海海洋大学工程学院,上海 201306;2.中国科学院深海科学与工程研究所,海南 三亚 572000;3.中国科学院大学,北京 100049)
设计低功耗的控制系统对于实现深海着陆车长周期作业能力起到重要作用[1,2]。针对海洋装备降低控制系统功耗,刘崇杰等人[3]基于LPC2294处理器设计了水下滑翔机控制系统,通过设置休眠模式和控制电源供电状态的方法降低了控制系统功耗。孟宪法等人[4]基于MSP430 单片机对海洋浮标控制系统进行了低功耗设计,通过控制继电器的通断来改变传感器的供电情况,降低了控制系统的功耗。但上述方法无法实时响应上位机指令,且只能用于处理周期性任务,因此不适用于有大量基于事件触发的非周期性、不同优先级任务的深海着陆车控制系统的设计。
针对深海着陆车长周期作业需求,本文从控制器的低功耗设计和所搭载外围作业设备的低功耗控制策略上综合考虑,以延长深海着陆车水下作业的时间。
控制系统采用模块化设计思想,将不同的功能设计为不同的模块,便于后续系统的维护和升级,并通过软硬件低功耗设计的结合,充分降低控制系统功耗[5]。控制系统包含上位机和下位机2个部分,总体结构框图如图1所示。
图1 控制系统结构框图
该控制系统具备海底温度、盐度、深度(CTD)信息采集,电机控制、水下照明、图像采集、着陆车姿态检测、水面定位、与上位机通信以及在完成任务或出现故障时进行抛载等功能。处理器选择高性能、低功耗的嵌入式应用场景设计的单片机,主频可达80 MHz,支持7 种低功耗模式,且自带低功耗定时器(low-power timer,LPTIM),同时具备丰富的外设资源,满足着陆车对控制器的要求。电机选用定制的济南预立直驱电机有限公司的WR 型电机,CTD 选用温盐深仪,照明装置使用深海照明灯,摄像头采用济南思明科技有限公司的SUP_HDS型水下摄像机,姿态检测模块采用电子罗盘,定位模块选用具备GPS/BD 双模定位能力的ATK-S1216模块。
下位机采用STM32CubeMX和Keil uVision5集成开发环境进行开发,采用C语言进行驱动代码的编写。为提高开发效率、进一步优化CPU功耗,利用实时操作系统(RTOS)对单片机的资源进行管理,相较于裸机开发,该操作系统可以提高系统的可靠性和实时性[6,7],具备低功耗Tickless模式,可以更好地对控制系统的低功耗设计进行支持,同时可以根据需要对操作系统进行裁剪,且允许多个任务同时运行[8]。
根据着陆车作业需求,按照功能的不同,设计了4 个任务,分别为初始化任务Initialize_task、信息采集任务Collection_task、通信任务Communication_task和控制任务Control_task。其中,初始化任务用于初始化系统配置,创建信息采集、通信、控制任务;信息采集任务用于采集电子罗盘、GPS/BD、CTD等信息;通信任务负责与电机、传感器以及上位机进行通信;控制任务用于控制图像采集频率、照明以及电机运行等。操作系统的任务分配如图2所示。
图2 下位机任务分配
设计时,设置Initialize_task 的优先级最高,IDLE 为空闲任务,优先级最低,由系统自动创建,其他任务优先级根据任务需要进行分配。同时根据任务所需内存的大小进行堆栈分配,任务优先级和堆栈分配情况如表1所示。
表1 任务优先级和堆栈分配
考虑到单片机在睡眠模式下,没有唤醒延时,同时该模式下唤醒源最多,可以及时响应上位机发送的命令,为了兼顾控制系统的低功耗、功能实现的完整性和实时性,本文选择的低功耗模式为睡眠模式。
RTOS在其他任务未处于就绪态时就会运行空闲任务。本文在着陆车运行速度为0.5 m/s、传感器正常工作的情况下,用RTOS对控制系统各个任务的运行时间进行统计,统计结果如表2所示。
表2中,运行时间的采集周期为50 μs,即运行时间每增加1个计数值,实际CPU的运行时间增加50 μs。由表2可见,CPU绝大部分时间都是在执行空闲任务,达到95%,而空闲任务的执行也需要消耗电能。
控制器进入睡眠模式的时间对控制系统功能实现的完整性尤为重要。为了准确设置进入睡眠模式的时间,使控制器尽可能长的时间处于睡眠状态,在RTOS 执行空闲任务后通过WFI指令让处理器进入低功耗模式以减少控制器执行空闲任务消耗的能量,即在空闲任务中将处理器配置为睡眠模式。这样就可以实现控制器在无任务处理时进入睡眠模式,有任务时执行应用层任务,从而降低功耗。
在睡眠模式下任意的中断都可以将MCU 从睡眠模式唤醒,而RTOS 的系统时钟是由SysTick 定时器提供,SysTick定时器中断会周期性的将MCU从低功耗模式唤醒,为了解决单片机被SysTick定时器周期性唤醒的问题,采用RTOS的低功耗Tickless模式。在该模式下,SysTick定时器在处理器进入睡眠模式时停止运行,使用LPTIM定时下一个任务解锁的时间,当定时时间到,才会产生定时器中断,使SysTick 定时器恢复运行并将MCU 从睡眠模式下唤醒。这样就不会因为滴答定时器时钟节拍将MCU 从睡眠模式下周期性的唤醒,同时也可以及时响应其他中断事件。MCU被唤醒后,再将这段睡眠时间补偿给系统时钟节拍,大大减少了MCU被无意义唤醒的次数,从而节省能耗。
在进入低功耗模式前,通过对预分频寄存器进行配置以降低控制系统时钟频率,降低能源消耗,延长深海着陆车在海底作业的时间。同时考虑到如果处理器休眠时间太短,进出低功耗模式消耗的能量要高于休眠所节省的功耗,因此将最低睡眠时间设置为m个时钟节拍。控制器的低功耗设计流程如图3所示。
考虑到着陆车刚着陆、运行角度变化或场景变化将引起图像信息变化较大,需要高频采集图像;而着陆车静止或者直行时,图像信息变化不大,可降低采集图像频率以节省能耗。为此,控制系统在初始化时设置一个较低的图像采集频率和照明亮度,然后根据着陆车的姿态信息,即在着陆车刚着陆、运行角度变化时,提高图像采集频率和增强照明亮度。
控制器读取电子罗盘获取的深海着陆车的俯仰角θ、偏航角ψ和横滚角ϕ,记录当前3 个角度数据与上次采集数据的差值,并按照公式进行计算:w=λ1×|θt-θt-1|+λ2×|ψt-ψt-1|+λ3×|ϕt-ϕt-1|。其中,w为计算结果;θt,ψt,ϕt为当前时刻采集到的姿态角;θt-1,ψt-1,ϕt-1为上一时刻采集到的姿态角;λ1,λ2,λ3为权重系数,本文分别取值为0.8,0.8,1.4。当w大于设定的阈值时,认为着陆车处于爬坡、侧倾、转向、或三者的叠加状态。
当着陆车处于上述状态时,认为此时提取到的图像信息较为关键,重新设置图像采集频率和照明装置的亮度以使关键信息不丢失,从而降低系统功耗。低功耗策略流程如图4所示。
图4 低功耗控制策略流程示意
对于照明亮度调节和图像采集频率的控制策略采用有限状态机(finite state machine,FSM)结构进行设计。根据着陆车当前图像采集频率和照明亮度以及w的计算结果进行着陆车所处状态的转换,状态转换如图5所示。
图5 图像采集频率和照明亮度状态转换
图5 中,状态A 表示照明亮度为40 %,采集频率为20 Hz;状态B表示照明亮度为60%,采集频率为30 Hz;状态C表示照明亮度80%,采集频率为40 Hz;状态D表示照明亮度为100%,采集频率为50 Hz;Xi表示图像采集频率在不同状态之间的转换条件,具体含义:X1:w≤10,X2:10 <w≤20,X3:20 <w≤30,X4:w>30。根据w计算结果的不同,以10、20、30 为分界点将其分为4 个等级,并根据w值和着陆车当前的状态进行状态的转换。
单片机与电机驱动器之间的通信方式采用CANopen协议,CANopen网络设备中必须有唯一的节点ID,收发数据域都是8 个字节,如果发送错误命令,会返回错误帧。CANopen协议编码指令如表3所示。
表3 中,cc =1,2,表示电机通道;nn 为设置的值;ee =1,2,3,分别表示内部电压、电池电压和5 V输出电压。
在设计过程中,将采集到的速度、电池电压、航向、姿态和航迹等数据信息以图形化的方式直观显示出来。设定姿态和位置信息发送周期为5 s。由于上位机界面需要显示的信息较多,在Qt[9~11]主界面中突出主要信息的显示,其他信息只有点击相应的按钮后才会显示。为了进一步增加人机交互界面的友好性,增加了姿态信息的三维显示功能,将采集到的姿态信息以立体的方式呈现出来。
在搭建好的着陆车样机上分别对采用低功耗方案和未采用低功耗方案的系统功耗进行测量,其中功耗低于0.01 W的设备功耗不计入在内。设置单片机时钟频率为2 MHz,最低睡眠节拍数m为2,CTD采集周期为1 min,CTD在发送完数据后用三极管关掉CTD电源,在采样前20 s给CTD供电进行预热,设置电子罗盘采集周期为5 s,由于在水下GPS/BD模块无信号,因此当着陆车潜入水下后,关掉GPS电源,测得各模块60 min 内的平均功率如表4 所示。从电源端测得总功率变化情况如图6所示。
表4 耗电模块平均功率W
图6 两组功率数据对比
由图6 可见,使用低功耗方案后,系统功率有明显降低。未开启低功耗方案的平均值为88.46 W,开启低功耗方案的平均值为63.85 W,相较于未开启低功耗方案节省能耗27.82%,达到了控制系统低功耗的目标。
本文针对深海着陆车对控制系统的低能耗要求较高的情况,在选择低功耗的器件的基础上,使用RTOS从2 个方面降低系统功耗:1)结合MCU 的低功耗模式,使其在执行空闲任务后进入睡眠模式,在不影响系统功能的情况下,使MCU尽可能长的时间处于睡眠状态,降低了MCU 的功耗;2)在控制策略上,根据着陆车的姿态信息,自动调整照明装置的亮度和图像采集的频率,以降低能源消耗。