OpenAlt

This is the design that started it all! Bdale got frustrated with existing commercial altimeters and decided to build his own. This project was presented in talks at LCA, SCALE, OLS, and Debconf in 2008.

Here are photos of the front and back sides of the version 0.1 prototype PCB, which was 100% auto-routed on 2 layers using the gEDA schematic and pcb tools.

Features

User View

  • Recording altimeter for model rocketry
  • Supports dual deployment (can fire 2 ejection charges)
  • Primary operations based on pressure sensor
  • 3-axis accelerometer
  • Temperature sensor
  • 2 serial ports for attachment of GPS and RF link modules
  • USB for data recovery and post-flight power source
  • Flexible battery choices
  • Designed to fit 24mm airframe tube

Developer View

  • NXP LPC-2148 Processor (ARM7TDMI-S)
    • 512k Flash memory, 32k RAM
    • USB plus lots of analog, digital, and serial I/O
  • Microchip 24FC1025 CMOS serial EEPROM
    • 128k x 8
    • I2C interface
  • Various Sensors
    • Freescale MP3H6115A pressure sensor
    • Freescale MMA7260QT 3-axis accelerometer
    • Microchip MCP9700A temperature sensor
    • (Honeywell 2-axis magnetic sensor left out of v0.1)
  • Software Features
    • Written mostly in C with some ARM assembler
    • Runs from on-chip flash, uses on-chip RAM, stores flight data to serial EEPROM chip
    • USB serial emulation for "console" interface
    • Uses GCC, newlib, FreeRTOS, LPCUSB
    • Based on a demo package written for the Olimex LPC-P2148 eval board by J C Wren
  • Licenses

Problems

In addition to the various "oopses" that were found and fixed during initial turn-on of this board, several issues contributed to the decision to shelve the design for now:

  • lots of work went in to trying to make the board fit in a 24mm airframe, but the resulting design with battery is really too heavy for such a small rocket.

  • the 3-axis accelerometer has a max scale of +/- 6g. This is insufficient for characterizing the kinds of motors that we're playing with now.

  • while using a gcc-based toolchain to cross-develop for the ARM7 core worked reasonably well, in 2008 it was a heavy toolchain to build and maintain, and the processor was serious overkill for the task at hand. Since then, ARM Cortex SOCs have become so cheap, and the required toolchain so well supported in Debian GNU/Linux and elsewhere to change this from a bug to a feature.

Artifacts

The best version of Bdale's Peace Love and Rockets presentation about this hardware generation was given at the Ohio LinuxFest 2008. Note that there are many photos included, so this is a HUGE file!

The version 0.1 design had enough issues that Bdale decided not to publish it. Work on an 0.2 revision was mostly completed at the schematic level, and some printed circuit board artwork updates were made, but a second run of boards was never attempted. This design is now entirely of historical interest.

Futures

If we decide to do further work on this design, a number of changes seem potentially appropriate for the next board revision, in addition to just fixing bugs found in the turn-on of the initial boards.

  • The LiPo battery support from TeleMetrum should be copied into this design, replacing the battery screw terminals with a standard LiPo 2-pin battery connector.

  • The SparkFun folks have produced a USB bootloader for the LPC2148. It requires an SD card for temporary storage of code to be flashed. Replacing the current external SPI memory chip with a microSD socket could make sense. The socket size is under a cm square, and ones that have a fold-up locking top are about $2, vs over $6 for the current memory chip. The cards themselves are getting very cheap, too, and can store much more data than the current 128k memory chip. This would require moving ADC_Vbat to a different ADC input so that pins 27, 29, 30, and 31 would be available for the microSD socket.

  • Consideration should be given to changing the accelerometer for a higher-G single axis unit as in TeleMetrum if we want to be able to use it for motor characterization.