Signal Acquisition
Bipolar dry electrodes were attached to five muscle groups along the shoulder: biceps, triceps, trapezius, pectoralis major, and infraspinatus. Each electromyographic signal was pre-amplified 50x with an instrumentation amplifier (INA118), high pass filtered with a cutoff frequency of 20 Hz, then amplified again with an operational amplifier (TL072).
The gains of the second stage amplifier were adjusted based on the strength of each muscle group. The total gain of the amplifier circuits ranged from 500-2500x. The high pass filtering is used to prevent signal clipping by eliminating low frequency baseline drifting.
The circuit was built on an NI ELVIS II board and the signals were acquired through the built-in analog-to-digital converter (ADC) at a sampling rate of 1 kHz.
The gains of the second stage amplifier were adjusted based on the strength of each muscle group. The total gain of the amplifier circuits ranged from 500-2500x. The high pass filtering is used to prevent signal clipping by eliminating low frequency baseline drifting.
The circuit was built on an NI ELVIS II board and the signals were acquired through the built-in analog-to-digital converter (ADC) at a sampling rate of 1 kHz.
Matlab Code:
To acquire data from the NI ELVIS II board, the Matlab code first establishes a new NI session in 'StartProgram.m':
ch = 5; % set number of channels
s = daq.createSession('ni');
s.addAnalogInputChannel('Dev1',0:ch-1,'Voltage');
s.DurationInSeconds = 1; % set acquisition chunk (1 for continuous collection, 0.5 for real-time robot control)
s.Rate = 1000; % set sampling rate
Within the 'Loop.m' and 'recLoop.m' scripts, each window of data is collected with the following function:
data = s.startForeground;
ch = 5; % set number of channels
s = daq.createSession('ni');
s.addAnalogInputChannel('Dev1',0:ch-1,'Voltage');
s.DurationInSeconds = 1; % set acquisition chunk (1 for continuous collection, 0.5 for real-time robot control)
s.Rate = 1000; % set sampling rate
Within the 'Loop.m' and 'recLoop.m' scripts, each window of data is collected with the following function:
data = s.startForeground;