Working on an IMU


I decided to work on a new IMU, and I decided to design my own so I could get a higher update rate, higher processing power, some more noise immunity, and I like designing my own systems as opposed to buying them :)

 Here is what I have on board:

-500 MIPS XMOS L1 Processor

-12bit 1MSPS ADC

-3x ADIS16060 Gyros

-ADXL335 Accelerometer

-HMC5843 Magnetometer

-Ports for Power, GPS, and Comms

 I designed this and fabricated (via Advanced Circuits) much faster than usual, and I still managed to have zero mistakes (well, the footprint for the connectors are a tiny bit off). In the future, In the future I need to remember to make room for both large components, and a means to solder them. With the gyro's blocking my way, This consisted of a lot of injecting solder paste and poking at it with a fine tip soldering iron. I couldn't get the entire aux boards on one layer, so there is one jumper wire from each to ground.

In the next revision, I will actually be using the digital interface to the ADIS16060, and its aux ADC channels. The XMOS processor will be the same but in a smaller package, the board should get quite small (Right now it's 1.5"x1.55"). Eagle files are attached.


E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • Ravi, what application did you build this for? It it just for a UAV? Seems like you have a lot of horsepower there.

  • The dual core is actually a QFN, but yes, I see your point.

    With that kind of speed though, software defined hardware is fantastic! For a recent system, I was able to continually sample 64 channels and output 32 channels each at 125khz, all while bit banging SPI and driving multiple LVDS lines.

  • It's insane that someone actually produces a 500Mhz dual core processor in a package with exposed leads.  It doesn't have any of the peripheral functions of ARM microcontrollers.  It just does math.

  • Sam,

    Thanks! I don't know why I have been using such large landing pads for 0402 components for so long.


    To come as code progresses.


    There are ways to get around floating point via altering the code, scaling factors, etc.. If it is absolutely necessary, floats can still be used in a C file and called from XC, and the cost of a bit longer execution time. I'm being vauge because I myself don't do the code development.


    Thank you!

  • Ravi, this is amazing. Nice work.

  • But XC not support float type, It will be problem to develop algorithm via fix point.

  • Well done, btw any data that u have got on update rates and processing :)
  • Nice work on the layout :)

    Esden's pretty-eagle-libs project has some very nice footprints for 0402 parts:

    Eagle libraries pretty footprints... Contribute to esden/pretty-eagle-libs development by creating an account on GitHub.
This reply was deleted.