Coastal Profiling Float — Software User Manual

The Coastal Profiling Float (CPF) is an autonomous underwater single degree-of-freedom vehicle developed at MBARI for coastal ocean profiling, designed as a deployment platform for chemical sensors and oceanographic instruments. This manual covers the embedded firmware that runs on the CPF's onboard microcontroller.

CPF Project 901206, software managed by Gene Massion & Eric Martin.


Hardware Overview

The CPFp3 (3rd generation design) is built around a GHI G400-S System on Module (SOM) running the .NET Micro Framework. The hardware stack consists of:

  • MBARI Motherboard — the core carrier board with integral pump power switching, onboard power electronics with energy monitors, and daughtercard slots
  • Power Switch Boards (ISB) — MBARI-designed daughtercards that expand UART count via Exar I²C UART bridges and provide switched power outputs with energy monitors
  • Digital I/O Cards — for valve control and other discrete outputs

Firmware Architecture

The firmware is organized into four projects:

Project Description
CPF Main application — entry point, mission state machine, and state implementations
libSWModules Platform-independent software modules: mission configuration, engineering logging, message queuing, watchdog
libHWModules Hardware abstraction layer: motherboard, LHE board, energy monitors, storage, UART drivers
libSensorModules Instrument drivers: SBE41 CTD, Iridium modem, GPS, Aanderaa optode, Wetlabs FLBB, OCR504, buoyancy engine, factory console

Mission State Machine

The CPF operates as a state machine. On every power-up, SystemConfigManager checks whether the float woke from a scheduled sleep (by inspecting LastState in the config file) and either resumes the mission or begins fresh.

The full set of states is:

State Description
SMNotRunning Default power-on state — no mission active
preMissionDelay Waits a configurable delay before beginning the first profile
initMission Initializes mission-wide variables and data directories
initProfile Prepares for a new profile: increments profile counter, opens data files
ABDecBuoyFast Rapidly retracts the air bladder to begin descent
ABDecBuoySlow Slows retraction as the float approaches negative buoyancy
descend Float descends to park depth
anchor Float sits at bottom; waits for deanchor criteria
deAnchor Float detects departure from bottom and begins ascent
startCP Initializes CTD continuous profile (CP) mode before ascending
ascend Float ascends to the surface, sampling with the CTD
dumpCPData Uploads CP data collected during ascent
surfaceOpsSetBellows Adjusts bellows to surface ops target position
surfaceOps Surface operations: communicates via Iridium, receives commands, acquires GPS
recovery Emergency recovery mode: drives bellows to recovery position and transmits
exit Halts the state machine

Key Instruments

Instrument Interface Description
SBE41 CTD COM1, 9600 baud Seabird SBE41 conductivity/temperature/depth sensor
Elmo motor controller COM2, 115200 baud Controls the hydraulic pump for buoyancy adjustment
Iridium modem COM3, 19200 baud Satellite two-way data and command link
Bluetooth console COM4, 115200 baud Factory mode serial interface
MBARI MSC COM5, 9600 baud Multi-sensor controller (pH, NO₃, etc.)
Aanderaa 4330 Optode COM6, 9600 baud Dissolved oxygen sensor
OCR504 Radiometer COM8, 9600 baud Hyperspectral radiometer (I²C-bridged UART)
Wetlabs FLBB2K COM9, 19200 baud Fluorescence/backscatter sensor (I²C-bridged UART)
u-blox GPS I²C, addr 0x42 Surface GPS fix for position and time sync

Further Reading