Skip to the content
4 layers30.5 × 82.6 mmCircuit board design, the printed circuit board in 3D

This is the code and hardware designs for the high powered rocketry project at the Imperial College Space Society

Size
30.5 × 82.6 mm
Copper layers
4
Thickness
1.6 mm
Parts
89
Nets
101
Pads
364
Tracks, vias
1,008, 152
Pours
5
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
8 Jul 2019
Updated
4 Jun 2022

Overview

Circuit board design is an open-source printed circuit board by ImperialSpaceSociety, from the ImperialSpaceSociety/Project-Mach-1 repository on GitHub. It is a 4-layer board of 30.5 × 82.6 mm with 89 parts on 101 nets, routed with 1,008 tracks and 152 vias.

It is built around the ATSAMD21J18A-AU, MAX-M8C-0 and IIS2MDC, with the W25Q64JVSSIM, SI7232DN and 0433BM41A0019E among its other parts. Its parts include 34 capacitors, 20 resistors, 13 ICs, 7 connectors and 4 inductors. It belongs with the SAM D and SAM boards of this library.

Main components

10

README

README.md

Project-Mach-1

This repository contains information to support the high powered rocketry project at the Imperial College Space Society. It documents the electronic Command and Control Modules which are used within the project.

Repository Structure

The repository structure is based on the high level electronics modules:

Each Module description has the following structure:

  • ICSS Specifications
  • External specifications, references and documentation
  • Electronic Hardware (schematics and PCB)
  • Firmware
  • Physical Hardware (CAD)

Quick Reference

The following is intended to provide a view for the casual browser of the project content.

  • The Flight Computer has these key role:
    • Unambiguously capture flight data for subsequent analysis
    • Verify and prove performance record data ( Mach)
    • Support it's own successful recovery

Rocket flight computer requirements:

  • flexible for two stage or one stage rocket
  • must have buzzer
  • must have flashing LEDs to help with recovery on the ground
  • must have usb programmer and possibly for accessing stored data
  • 3 mosfets for rocket trigger, parachute triggering, spare
  • rocket to ground telemetry link
  • GPS for tracking and recovery
  • runs at 3.3V logic levels(CMOS)
  • 9 dof acclermoeter, gyroscope, compass. Max accleration would be 20g
  • pressure(and temperature) sensor to measure altitude
  • current sensing to see the amount of current going into fuses
  • Mosfet must be able to supply 1.2 amps for at least 10milliseconds. Bridge wire resistance is 1.2-1.8 Ohms
  • Must be able to run for at least 1 hour continueously
  • must be hand solderable. Perferably
  • 100Hz sample rate from sensors(except GPS)
  • must record data continueously for at least 3min
  • 14 parameters to record: 4 characters:{accl_x, accl_y, accl_z, gyro_x, gyro_y, gyro_z, compass_x, compass_y, compass_z} + 6 characters:{pressure}+ 3 characters:{temperature}+ 7 characters{Longitude, latitude}+4 characters:{altitude} Assuming ascii encoding, 504 bits per string for raw data. Including commas and carriage return, each reading is ~600 bits.
  • Total data storage required: 600bits * 60s * 100hz * 3min = 10.8 Mbits = 10800000 bits

Major components of V1.1 flight computer

  • ST Microelectronics H3LIS100DL: 100g 3-axis accelerometer
  • ST Microelectronics LSM9DS1: 9 degree-of-freedom Accelerometer, Gyroscope and Magnetometer in 3 axis
  • TE Connectivity MS5607: Temperature and pressure sensor
  • Sillicon Labs SI4463: 433 Mhz ISM band Telemetry radio transceiver
  • Ublox MAX M8Q: GPS module
  • Atmel SAMD21J18: Microcontroller 64 pin TQFP package
  • Vishay Si7232DN: Dual N-Channel 20 V (D-S) MOSFET for 2 channel pyros
  • Molex 2066400001: GNSS Active Patch Antenna with Low-Noise Amplifier
  • Winbond w25q64JV: Flash chip 64 Mbytes

Flight history

This flight computer was launched in July 2021 but was not recovered. Its now very easy to program using platform.io. No need to mess with board files.

However, the flight computer has 4 major issues.

  1. The telemetry radio is terrible. The max range is only around 80 meters, as we discovered at the launch site.
  2. The flash chip is quite small. It can only record for around 40 minutes at 3-4 readings a second.
  3. The flash write speed is slow. It could be a software issue. I could only write 3-4 readings a second.
  4. The position of the power connector for battery is in an awkward position, making it difficult to attach the battery

It may be best to start from scratch using a well known processor, such as an ESP32, and a well designed radio module. From the flight, we discovered that the radio has to work flawlessly. Or else, we will loose the rocket. So maximising range and reliablity of the telemetery is vital. An off the shelf radio module as they will likely have all the RF systems optimised. Its quite hard to do it on a custom PCB.

Software architecture

We use the Arduino development environment to program the rocket flight computer. We use the arduino board files based off the Adafruit ItsyBitsy M0 Express, which uses the G variant of the SAMD21. The flight computer uses the J variant.

The main buses are as follows:

wire is the main I2C bus for the sensors including the:

  • ST Microelectronics H3LIS100DL: 100g 3-axis accelerometer
  • ST Microelectronics LSM9DS1: 9 degree-of-freedom Accelerometer, Gyroscope and Magnetometer in 3 axis
  • TE Connectivity MS5607: Temperature and pressure sensor
  • Ublox MAX M8Q: GPS module

wire1 is connected to a grove connector on the PCB, but not currently connected to anything.

Serial is used for printing out debug info via USB to a serial monitor(running on a computer)

Serial1 is used for a secondary connection to the Ublox MAX M8Q: GPS module

SPI1 is used to connect the Winbond w25q64JV: Flash chip 64 Mbytes

SPI is used to connect to the Sillicon Labs SI4463: 433 Mhz ISM band Telemetry radio transceiver

How to setup

Burning the bootloader

  1. Install Atmel studio. It can be downloaded from the atmel site. Ensure that you download the SMART ARM MCU option like so: image
  2. Connect up the flight computer to the J-Link EDU like so. Note the positions and colours of wires. Getting them the wrong way around could cause reverse polarity issues. The usb connector on the flight computer must be connected to the Computer.smaller
  3. Open up Atmel Studio and navigate to Tools > Device Programming like so: image
  4. Ensure that the device selected is the ATSAMD21J18A. The default name may be a very similar looking name so make sure you don't mix it up. Click apply.: image
  5. Now navigate to the Memories tab. You will now burn the custom Arduino boot loader into SAMD21 on the flight computer with Atmel Studio. The bootloader is found in the latest releases by adafruit: https://github.com/adafruit/uf2-samdx1/releases/. Look for the bootloader for the itsybitsy_m0. We can use the same bootloader as the Itsybitsy M0 from adafruit. Download the bootloader to your computer and select that file.

image

Click the Program button once selected the right bootloader: image

Ideally, once the Arduino bootloader is uploaded, the Segger debugger will not be necessary anymore; All future programming can be done with the Arduino IDE.

Using Platform.io to program the flight computer.

We use Platform.io to program the flight computer as its much more conventient than using the Arduino environment. The platform.ini file captures all the dependencies(libraries, board files) and automatically downloads them. It even downloads the complilers all in the background, so its a simple matter of a single click on theupload button to compile and upload to the flight computer.

Project code

There are 4 pieces of code that are required.

  1. main_code. This is the code that flies on the rocket flight computer. It polls all the sensors(GPS, Accelrometers, barometer) and logs them to the SPI flash chip 3-4 times a second. It runs FreeRTOS for scheduling.
  2. ground_station_receiver. This is the code that runs on the ground station. It will receive packets from the rocket flight computer, and print out the location of the flight computer(longitude, latitude, altitude) and the received signal strength.
  3. spi_flash_dumper. The flash dumper must be run on the flight computer after the launch. It will dump all the contents of the flash chip, which has stored all the flight data. The format will be in a csv format. The fields in each line will be in the following format:
text
gps_unix_time, gps_millisecond, timestamp, longitude, latitude, altitude, temperature, pressure, h3lis_gyro[0], h3lis_gyro[1], h3lis_gyro[2], h3lis_accelerometer[0], h3lis_accelerometer[1], h3lis_accelerometer[2], lsm9d_gyro[0], lsm9d_gyro[1], lsm9d_gyro[2], lsm9d_accel[0], lsm9d_accel[1], lsm9d_accel[2], lsm9d_mag[0], lsm9d_mag[1], lsm9d_mag[2]
  1. spi_flash_deleter. This program must be run to delete all the contents of the spi flash chip. After a flight, there is a good chance that the flash chip will be full, so delete all contents by running this code on there. Note, the user will have to type in OK into the serial terminal inorder for the erase to happen.

How to upload to flight computer.

To get platform.io, install Visual Studio code. Then get the platform.io plugin. Then open the flight computer project you want to use. It should look like in the picture below. Hit the upload button as shown in the picture below to compile and upload to the flight computer. Also, ensure your computer in connected to the device via a USB cable. If all fails, try uploading the boot loader again as described in the Burning the bootloader section.

image

Using Arduino to program(depreciated)

This was the old way of programming the flight computer, but its no longer used. Use the method described in the Using Platform.io to program the flight computer section.

  1. Install the Arduino IDE
  2. Install Arduino support for the SAMD series of microcontrollers. To do so, go to file > preferences and add https://adafruit.github.io/arduino-board-index/package_adafruit_index.json to Additional Board Manager Urls like so: image
  3. Then go to Tools > Boards > Boards Manager like so:image
  4. Then install the SAMD core by searching for Arduino SAMD Boards (32-bits Arm Cortex-M0+) like so: image
  5. Then install the Boards support for Adafruit SAMD boards, which our Flight computer is based off. Install version 1.5.9. Put in Adafruit SAMD Boards into the search bar.image
  6. Find out where your newly downloaded board files are found by going here to the file > preferences. In this case the board files are in C:\Users\Medad\Documents\ArduinoData. image.
  7. Now you will have to replace these board files with our own custom board files. Go to the directory found in the previous step and navigate toArduinoData\packages\adafruit\hardware\samd where you will find a folder like 1.5.9. Now you need to delete this folder, and replace it with our custom folder of board files that can be found in this repo: Project-Mach-1\Flight computer\Software\Custom board files for flight computer\1.5.9.
  8. Now restart Arduino IDE so that it can update the board file location.
  9. Now select the rocket flight computer as the board to use, like so in the picture: image
  10. Now select the upload and serial port by going to Tools > Port:image
  11. Now run the i2c scanner program in Project-Mach-1\Flight computer\Software\Arduino code\i2c_scanner on the arduino editor. You will see data on the serial port like this: image

How to run the main program.

Assuming you have completed the previous steps, navigate to Project-Mach-1\Flight computer\Software\Arduino code\main_flight_computer_code and run main_flight_computer_code.ino on the Arduino editor. This is where we will be doing further updates to the main project. Note how we directly add the library files into this project. These can be seen in the tabs at the top of the editor: image

The reason why we do this is the stock libraries downloaded directly from Arduino often have minor bugs which we have to fix. Therefore, we make a copy of the library files and load them directly into this project.

libraries directory

All our libraries are kept here: Project-Mach-1/tree/master/Flight%20computer/Software/Arduino%20code/libraries

IC information

Diagnositics from the SI4463 chip we use

text
Get Device Info:

Revision: 11
Part: Si4463
Part Build: 0
Id: F
Customer: 0
ROM_ID: 3  (3 = revB1B, 6 = revC2A)
Rev External: 3
Rev Branch: 0
Rev Internal: F
Patch: 0
Func: 1
Radio Temperature: 27.88 deg C
Radio Voltage: 3.29 Volts

Diagnostics of Flash chip

text
Initialising..........
Chip Diagnostics initiated.

No Chip size defined by user. Checking library support.
Chip identified. This chip is fully supported by the library.

SPIMemory Library version: 3.3.0

JEDEC ID: 0xEF7017
Man ID: 0xEF
Memory ID: 0x70
Capacity: 8388608
Max Pages: 32768
Unique ID: 114518745233664, 0x688C52A779213900
-----------------------------------------------------------------------------------------------------------------------------
							Testing library code
-----------------------------------------------------------------------------------------------------------------------------
			Function		Test result			     Runtime
-----------------------------------------------------------------------------------------------------------------------------
			Power Down		   PASS				      53 us
			Power Up		   PASS				      45 us

			Erase Chip		   PASS				      13.618 s
			Erase 72KB		   PASS				      214.66 ms

Radio working

Image shows the view on SDR sharp when transmitting, and the RX data on a second flight computer. Transmissions done on the first one. image

Current progress

  • 25/9/19: The circuit board design files have been sent for manufacturing. Renders are as shown below. alt text alt text

TODO

  • build a base station
  • build the rocket
  • write all driver code for rocket flight computer(consider using FreeRTOS)
  • assemble all flight computer PCBs by soldering
  • Test all functions
  • Launch!

License

Hardware is Licensed under CERN OHL v.1.2 or later https://www.ohwr.org/documents/294 No warranty is provided for this documentation implied or otherwise.

Software is licensed under MIT License.

MIT License

Copyright (c) 2018 Imperial College Space Society

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Parts

89
QtyValueFootprintReferences
13100nFCapacitor_SMD:C_0603_1608MetricC3, C4, C6, C7, C11, C23, C28, C29, C31, C33, C89, C91, C93
6100KResistor_SMD:R_0603_1608MetricR5, R15, R21, R22, R28, R29
610uFCapacitor_SMD:C_0603_1608MetricC1, C2, C5, C12, C32, C92
41KResistor_SMD:R_0603_1608MetricR1, R12, R25, R26
41uFCapacitor_SMD:C_0603_1608MetricC22, C35, C36, C90
427KResistor_SMD:R_0603_1608MetricR6, R16, R23, R24
43.3KResistor_SMD:R_0603_1608MetricR3, R13, R17, R18
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_PadH1, H2, H3, H4
310nFCapacitor_SMD:C_0402_1005MetricC8, C20, C34
215pFCapacitor_SMD:C_0402_1005MetricC86, C88
2220nFCapacitor_SMD:C_0603_1608MetricC30, C77
2Conn_CoaxialConnector_Coaxial:U.FL_Hirose_U.FL-R-SMT-1_VerticalJ6, J7
2Screw_Terminal_01x04flight-computer:TerminalBlock_TE_282834-4_1x04_P2.54mm_HorizontalJ3, J5
2Si7232DNPackage_SO:Vishay_PowerPAK_1212-8_DualU5, U6
10433BM41A0019EJohanson_frontend:BALUN_0433BM41A0019EU2
10RInductor_SMD:L_0402_1005MetricL3
110 OhmResistor_SMD:R_0402_1005MetricR2
116MHzflight-computer:Crystal_SMD_2520-4Pin_2.5x2.0mmY3
1220nHInductor_SMD:L_0603_1608MetricL8
1270pFCapacitor_SMD:C_0402_1005MetricC9
1270pfCapacitor_SMD:C_0402_1005MetricC19
127nHResistor_SMD:R_0402_1005MetricL2
133nFCapacitor_SMD:C_0402_1005MetricC21
1ATSAMD21J18A-AUPackage_QFP:TQFP-64_10x10mm_P0.5mmU7
1BLUE_LEDLED_SMD:LED_0603_1608MetricD2
1BMI088BMI088:PQFN50P450X300X100-16NU10
1BuzzerBuzzer_Beeper:Buzzer_12x9.5RM7.6BZ1
1Conn_01x02Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ4
1Conn_01x05Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ1
1DFLS130LDiode_SMD:D_PowerDI-123D3
1IIS2MDCPackage_LGA:LGA-12_2x2mm_P0.5mmU1
1LD3985G33R_TSOT23Package_TO_SOT_SMD:TSOT-23-5U15
1L_Core_FerriteInductor_SMD:L_0603_1608MetricL1
1MAX-M8CRF_GPS:ublox_MAXU4
1MAX40200AUKPackage_TO_SOT_SMD:SOT-23-5U14
1MS5607-02BAPackage_LGA:LGA-8_3x5mm_P1.25mmU8
1NFCapacitor_SMD:C_0402_1005MetricC10
1NFResistor_SMD:R_0402_1005MetricR7
1RED_LEDLED_SMD:LED_0603_1608MetricD1
1STF202-22T1GPackage_SO:TSOP-6_1.65x3.05mm_P0.95mmU9
1Si4463Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.6x2.6mm_ThermalViasU3
1TM-32.000-AF3-33-S-OscillatorCrystal:Crystal_SMD_2520-4Pin_2.5x2.0mmX1
1USB_B_Microflight-computer:USB_Micro-B_Molex-105017-0001J2
1W25Q64JVSSIMPackage_SO:SOIC-8_5.23x5.23mm_P1.27mmU11
1Yageo434flight-computer:Yageo434ANT1

More from ImperialSpaceSociety/Project-Mach-1

1
  • 4 layers30.5 × 82.6 mmCircuit board design, the printed circuit board in 3D

    Circuit board design

    ImperialSpaceSociety/Project-Mach-1

    This is the code and hardware designs for the high powered rocketry project at the Imperial College Space Society

    87 parts12

Similar boards

  • 4 layers45 × 24 mmAltimeter, the printed circuit board in 3D

    Altimeter

    rckTom/alturia-pcb

    altimeter for rocket recovery and flight status recording

    100 parts7
  • 4 layers48.4 × 61.4 mmFlight computer, the printed circuit board in 3D

    Flight computer

    Terrapin-Rocket-Team/SRAD-Avionics

    Code and PCBs for the avionics subteam for the SRAD flight computer and side projects

    101 parts17
  • 6 layers90 × 45 mmHw tele stern, the printed circuit board in 3D

    Hw tele stern

    shorlee/TeleSTERN

    The TeleSTERN Project is an Open Source Rocketry Flight Computer based on the TeleMega by Altus Metrum.

    303 parts3GPL-3.0
  • 4 layers30 × 80 mmOshTelemega, the printed circuit board in 3D

    OshTelemega

    Kev1n8088/OshTelemega

    The Mega3080 FCU is an evolved clone of the Altus Metrum Telemega. Using the same firmware (meaning the same sensor suite), the primary developments are: - USB-C - Wago style spring terminals - Better GPS RF routing…

    166 parts
  • 4 layers30 × 74 mmCircuit board design v1.0, the printed circuit board in 3D

    Circuit board design v1.0

    ImperialSpaceSociety/Flight-Computer

    HPR project by undergraduate students from Imperial College Space Society.

    56 parts11
  • 2 layers45.1 × 20.1 mmCircuit board design, the printed circuit board in 3D

    Circuit board design

    ImperialSpaceSociety/picotracker-Lora

    This is the code base and hardware design files for the Lora pico tracker to be flown around the world

    55 parts14
  • 4 layers42 × 65 mmIcarus Flight Computer, the printed circuit board in 3D

    Icarus Flight Computer

    daedalus-ind/icarus-hardware

    Hardware of the onboard flight computer for the Icarus rocket.

    106 parts2MIT
  • 2 layers80 × 50 mmMiniQ, the printed circuit board in 3D

    MiniQ

    bobtheguymk2/miniQ

    A PCB for model rocket datalogging and control

    111 parts1

Questions

How big is the Circuit board design PCB?

It measures 30.5 × 82.6 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Circuit board design use?

89 parts, built around the ATSAMD21J18A-AU, MAX-M8C-0, IIS2MDC and W25Q64JVSSIM. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Circuit board design KiCad files?

From the ImperialSpaceSociety/Project-Mach-1 repository on GitHub, at the commit this page was made from: the board is Hardware/circuit board design/circuit board design.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Circuit board design design in my own project?

Its repository states no licence, so its author keeps all rights: ask ImperialSpaceSociety before reusing the design.