Teensy based ADS1298 EMG acquisition board
Hey all,
I recently finished a university project where I had to design a Bluetooth Low Energy connected EMG acquisition system. It is based on a nRF8001 breakout by Olimex and the Teensy 3.1.
For the analog front-end I chose the ADS1298. I adapted Conor's library for the ADS129X family and added an interrupt driven data retrieval mode. In interrupt mode I can now reach 8 kSPS while transferring the data for all 8 channels via USB to a PC. The next bottleneck I have to tackle is the Teensy's slow SPI speed when using the standard Arduino library. I'll probably add DMA support at some point in the future, that should unlock the full 32 kSPS of the ADS1298.
You can find my code at https://github.com/ferdinandkeil/ADS129X. The included sample sketches assume you're using a Teensy 3.1. I'm still working on the Python script that the receives the data on the PC side. Right now it writes the data to a multi-channel wav file, however I'll add HDF5 and CSV output options soon. I'll let you know when I've uploaded the code to Github.
-Ferdinand
I recently finished a university project where I had to design a Bluetooth Low Energy connected EMG acquisition system. It is based on a nRF8001 breakout by Olimex and the Teensy 3.1.
For the analog front-end I chose the ADS1298. I adapted Conor's library for the ADS129X family and added an interrupt driven data retrieval mode. In interrupt mode I can now reach 8 kSPS while transferring the data for all 8 channels via USB to a PC. The next bottleneck I have to tackle is the Teensy's slow SPI speed when using the standard Arduino library. I'll probably add DMA support at some point in the future, that should unlock the full 32 kSPS of the ADS1298.
You can find my code at https://github.com/ferdinandkeil/ADS129X. The included sample sketches assume you're using a Teensy 3.1. I'm still working on the Python script that the receives the data on the PC side. Right now it writes the data to a multi-channel wav file, however I'll add HDF5 and CSV output options soon. I'll let you know when I've uploaded the code to Github.
-Ferdinand
Comments
Feel free to post a photo link, or you can put photos right in line here. Folks might also want to see a link to your university project report, maybe that's all on one site.
Regards,
Wiliam
The circuit board for the BTLE based EMG acquisition system.
You can see a picture of my circuit right above. As for the report you can either read it online here or download it in PDF format from here. I don't know a lot about biopotential measurements so I focused on the hard- and software part. However the tests I've done so far with the circuit look promising.
The whole thing runs of a single cell LiPo battery. I'm using a battery with integrated protection circuitry, however there also is some protection on the board as well as a charger. The ADS1298 gets fed a bipolar +-2.5 V supply. The negative voltage is generated by a charge-pump inverter. The board used is 4-layers.
Best,
Ferdinand
Yes you can do EEG, EMG and ECG all at once, see Conor's tutorial,
http://docs.openbci.com/tutorials/01-GettingStarted#getting-started-w-openbci-v-connect-yourself-to-openbci
When setting up simultaneous EEG, ECG, etc. -- the non EEG signals are removed from the common reference. See the tutorial. Each channel on the ADS has a plus and minus pin. So can operate as an independent differential amplifier, not connected to the common reference SRB2. You have to configure this with the Chan Set tab, see the tutorial.
I'm not sure about the 1298 RLD chip connections, they apparently differ from the 1299, whose pins have various BIAS_* labels. 1299 is more geared for EEG + ECG + EMG. 1298 is not EEG. You can try messaging @ferdinand by clicking on his name and using the Message button there. TI also has an excellent E2E forum for questions.
differential amplifier so it stays within range. On OpenBCI that pin is
labeled 'Bias'. RLD/Bias also injects a small amount of out of phase /
common mode 'noise' cancellation. On OpenBCI, the default channel setup
uses IN1N through IN8N as the 8 channels and SRB2 as the reference.