Hi all,

I am designing a small 6-DOF IMU with digital outputs that uses the newest MEMs devices on the market (some of which haven't been released yet) to keep the footprint small and the cost low. I'm hoping to make a bunch of them and sell them at low margins so that DIY'ers like us can afford to tinker without breaking the bank. If they sell well enough, I'll be able to keep the cost on the order of $100 for the full 6-DOF with digital outputs. :-)

If you had the choice, what do you all think the "best" pinout would be?

My current design has two .1" headers mounted on opposite ends of the board, so that prototyping and mounting is easy.

Alternatively, I could add mounting holes, and then put little shrouded headers that you'd plug into; then, you wouldn't have to mount the IMU on a PCB - you could put it anywhere on the airframe.

Another option would be to use low-profile board-to-board connectors, but they wouldn't be easy to use (have really fine pitch).

What do you think?

Views: 874

Reply to This

Replies to This Discussion

I could do that. I want to keep it as small as possible, though; this Silicon Labs MCU has a 5 mm by 5 mm footprint. I've had a hard time finding MCUs with good A/D converters, and that also happen to have that small of a footprint...
Caleb,

Personally, I would like to see a 6DOF board that has outputs for the raw sensor volatages. That way the MCU, sampling, digital filtering, etc. would be left up to the user. This could also reduce the price somewhat.

As far as free texts on A/D conversion, I don't know of any that are better than this:

http://www.analog.com/library/analogDialogue/archives/39-06/data_co...

I used it so much I bought the the book.

Mike
Can you make something like this ?
http://vectornav.com/products/74-vn-100
It looks really impressive. If you can make the price around 100$ I will by two :)
(Their BOM is definitely less)
... or just copycat :))


"The VN-100 combines a 3-axis accelerometer, 3-axis gyro, 3-axis magnetometer, and a 32-bit processor onto a single surface mountable chip-sized module to create a high performance orientation sensor. Fully calibrated for bias, gain, and misalignment, the VN-100 accurately calculates orientation over the entire 360° range at 200 Hz. Filtered orientation data and inertial measurements are assessible via either a SPI or serial interface."
I am finally finishing up the firmware for my final hardware revision! Thanks to some really useful feedback on this thread, I decided to use the STM32 processor and oversample and decimate to obtain 16-bits of resolution on all six sensing axes. After that, I apply a Parks-McClellan windowed FIR low-pass filter on each channel.

I attached a picture, if anyone cares to see what it looks like...
Attachments:
That cool man. Exactly as I imagined.

To oversample and get extra 4 bits you would need to sample at the rate of 256 times the original rate.
You wrote that you plan to sample gyros at the rate of 250 Hz. So you have 64 KHz sampling per channel.
Although data-sheet says that STM32 ADC conversion takes 1 microsecond (1 MHz) but I'm still curious
if STM32 can handle this? :)

When do you plan to release your hardware?
Are you planning to release the source code of the firmware?
If you need some help I can jump in. At this moment I'm playing with STM32 myself.
Don't you think of including magnetometer into your IMU?
HMC5843 is not that expensive (~20$) but it adds 3DOF and it already has I2C :)
Yes, the STM32 handles it quite easily. I configured ADC1 and ADC2 to sample simultaneously, bringing the effective maximum sample rate to 2 MSPS. Then, I set up the DMA controller to pipe the ADC data into a ping-pong buffer. When one buffer is full, the processor start working on it while the other buffer is filled with data. I am actually sampling at over 512 times the Nyquist rate for the sensors. Decimating takes so little processor time that the STM32 can still run a 256 tap FIR filter without falling behind (and that is using my own unoptimized convolution function). This is with a clock rate of 64 Mhz.

I am releasing the hardware as soon as I finish testing the firmware. It could be a week or two, since I am doing this on the side.

Yes, I am releasing the source code.

In the near future, I plan to release a version that uses the HMC5843 in addition to the other sensors.
Congrats Caleb! Looks great. Out of curiosity, why did you go with FIR filtering? Doesn't IIR take less processing? How do you plan to communicate the IMU data to the main processor? Any thoughts of making this an all-in-one control solution, instead of just an IMU (add r/c decoder inouts and servo/ESC PWM output pins)?

- Roy
Hi Roy,

I went with an FIR filter because it is easier to implement than an IIR filter, and it has guaranteed stability properties (no feedback). It is also super-easy to come up with an optimal FIR filter using Parks-McClellan. I don't think an IIR filter takes less processing, but I am not a signals guy, so I'm not sure.

I'm actually thinking of using a minimum phase FIR filter instead of a Parks-McClellan filter... less phase delay = higher allowable feedback gains = better performance.

The IMU communicates over a TTL UART. i2c pins are also routed out, but I haven't added code to use them.

I won't be releasing code that turns this board into an all-in-one control solution, but I routed four extra GPIO pins out in case anyone wanted to do that. The timers on the STM32 are very, very flexible, and it would be easy to implement a hobby PWM signal on one or all of the four extra GPIO pins (you could do it using one timer and no bit-banging). I am toying with the idea of making a miniature quadrotor with this as the control board.
So, actually what sensors are you using ?

regards

-doni-
LPR510al dual axis rate gyro
Ly510alh yaw axis rate gyro
ADXL335 three axis accelerometer
STM32F103 MCU
Hi, I think its not neccesary to oversample gyro and acc to achiecve 16bit ADC data, in my opinion , gyro and acc themseft have certain floor noise already according to datasheet and we can not completply eliminate that kind of noise , due to this factor gyro and acc themself can not provide 16bit data accuracy. Moreover, what you will get benefit if you have 16bit instead of 12 bit? I think 12 bit is enough for your presise control loop. Using ADC12 module of STM32F103 is a good choice
Just some thoughts
However its very awesome if you intergrate a pressure sensor MPXHZ6115A and then oversample it to achieve 16 bit to 18bit data without using external ADC module. One minor disavantage of using MPXHZ6115A is you will have another 5V system and need OPAMP to scale it down to 3.3V system

RSS

© 2014   Created by Chris Anderson.

Badges  |  Report an Issue  |  Terms of Service