Jared Baxter / Mbed 2 deprecated Impedance_Fast_Circuitry_print_V_I

Dependencies:   mbed-dsp mbed

Fork of Impedance_Fast_Circuitry by Jared Baxter

Committer:
baxterja
Date:
Sun Jun 04 02:41:14 2017 +0000
Revision:
76:704fc58ffcd0
Parent:
75:8bb94685c80b
Child:
77:1ee17a9e9f8b
Everything working well including printing.  I'm about to change it so we only have one voltage and one current measurment.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
timmey9 22:523e316cbe70 2
timmey9 52:5a40cc58c4c2 3 // Sampling
bmazzeo 53:83a90a47c1fd 4 #include "DMA_sampling/adc.h"
bmazzeo 54:1697dc574b96 5 #include "DMA_sampling/dac.h"
bmazzeo 55:2526b3317bc8 6 #include "DMA_sampling/pdb.h"
baxterja 73:b059b5bdc664 7 #include "Jareds_DSP/filters_jared.h"
baxterja 75:8bb94685c80b 8 #include "Jareds_DSP/demodulate.h"
bmazzeo 67:ec0c58490ce6 9 // DSP
bmazzeo 67:ec0c58490ce6 10 #include "dsp.h"
baxterja 76:704fc58ffcd0 11 #include "print_data.h"
bmazzeo 67:ec0c58490ce6 12
baxterja 72:0b554f5026b9 13 #define PRINT_BUFFER_LENGTH 10000
baxterja 73:b059b5bdc664 14 #define GATHER_STATISTICS 1
bmazzeo 67:ec0c58490ce6 15
baxterja 74:ebc9f09fda11 16
timmey9 22:523e316cbe70 17 // for debug purposes
timmey9 18:b17ddeeb1c09 18 Serial pc(USBTX, USBRX);
timmey9 18:b17ddeeb1c09 19 DigitalOut led_red(LED_RED);
timmey9 18:b17ddeeb1c09 20 DigitalOut led_green(LED_GREEN);
timmey9 18:b17ddeeb1c09 21 DigitalOut led_blue(LED_BLUE);
bmazzeo 58:4bee89daccff 22 DigitalOut status_0(D0);
bmazzeo 58:4bee89daccff 23 DigitalOut status_1(D1);
baxterja 73:b059b5bdc664 24 DigitalIn sw2(SW2);//Button 2
baxterja 73:b059b5bdc664 25 DigitalIn sw3(SW3);//Button 3
timmey9 51:43143a3fc2d7 26
timmey9 52:5a40cc58c4c2 27 // defined in dma.cpp
timmey9 45:d591d138cdeb 28 extern int len;
baxterja 73:b059b5bdc664 29 extern uint16_t static_input_array0[];//ADC 0(swaps between a0 and a1. Used to measure current)
baxterja 73:b059b5bdc664 30 extern uint16_t static_input_array1[];//ADC 1(measures the voltage between the probe and ground)
baxterja 73:b059b5bdc664 31 extern uint16_t static_output_array0[];//DAC outputs whatever wave form we want.
baxterja 73:b059b5bdc664 32 extern uint16_t sampling_status;//used to determine when adc's are done reading.
bmazzeo 57:7b8c49e1c1f6 33
baxterja 73:b059b5bdc664 34 #define INPUT_ARRAY_SIZE 32
baxterja 73:b059b5bdc664 35 #define DECIMATION_FACTOR 8
baxterja 73:b059b5bdc664 36 #define DEMODULATED_SIGNAL_LENGTH 64
baxterja 73:b059b5bdc664 37
baxterja 73:b059b5bdc664 38 float *input_50k[8];
baxterja 73:b059b5bdc664 39
baxterja 73:b059b5bdc664 40
baxterja 73:b059b5bdc664 41
baxterja 73:b059b5bdc664 42
baxterja 69:014d4bbd4e03 43 #define pre_compute_length 500
baxterja 73:b059b5bdc664 44 #define demodulation_length 125
baxterja 69:014d4bbd4e03 45 #define CarrierFrequency 200
baxterja 69:014d4bbd4e03 46 #define SAMPLEFREQUENCY 100000
baxterja 73:b059b5bdc664 47 //float i_mod_pre[demodulation_length+(INPUT_ARRAY_SIZE/DECIMATION_FACTOR)];
baxterja 73:b059b5bdc664 48 //float q_mod_pre[demodulation_length+(INPUT_ARRAY_SIZE/DECIMATION_FACTOR)];
baxterja 73:b059b5bdc664 49 uint16_t out_val_pre[pre_compute_length]; //used to write values to the dac
baxterja 69:014d4bbd4e03 50 float twopi = 3.14159265359 * 2;
baxterja 69:014d4bbd4e03 51
baxterja 69:014d4bbd4e03 52
baxterja 69:014d4bbd4e03 53 void pre_compute_tables() {
baxterja 69:014d4bbd4e03 54 // This function will precompute the cos and sin tables used in the rest of the program
baxterja 69:014d4bbd4e03 55 for(int precompute_counter = 0; precompute_counter < pre_compute_length; precompute_counter++){
baxterja 73:b059b5bdc664 56 out_val_pre[precompute_counter] = (int) (cos(twopi * CarrierFrequency /SAMPLEFREQUENCY * precompute_counter) * 2046.0 + 2048.0);//12 bit cos wave
baxterja 69:014d4bbd4e03 57 }
baxterja 73:b059b5bdc664 58
baxterja 73:b059b5bdc664 59 //float decimated_frequency = 6250;
baxterja 73:b059b5bdc664 60 //for(int precompute_counter = 0; precompute_counter < demodulation_length+(INPUT_ARRAY_SIZE/DECIMATION_FACTOR); precompute_counter++){
baxterja 73:b059b5bdc664 61 // i_mod_pre[precompute_counter] = (cos(twopi * CarrierFrequency / decimated_frequency * precompute_counter));
baxterja 73:b059b5bdc664 62 // q_mod_pre[precompute_counter] = (-sin(twopi * CarrierFrequency / decimated_frequency * precompute_counter));
baxterja 73:b059b5bdc664 63
baxterja 69:014d4bbd4e03 64 }
baxterja 69:014d4bbd4e03 65
baxterja 69:014d4bbd4e03 66
emilmont 7:65188f4a8c25 67 int main() {
baxterja 73:b059b5bdc664 68 pre_compute_tables();
baxterja 75:8bb94685c80b 69 precompute_tables();
baxterja 73:b059b5bdc664 70 //turn off all LEDs
timmey9 22:523e316cbe70 71 led_blue = 1;
timmey9 35:df40c4566826 72 led_green = 1;
timmey9 18:b17ddeeb1c09 73 led_red = 1;
timmey9 34:44cc9b76a507 74
baxterja 73:b059b5bdc664 75
baxterja 69:014d4bbd4e03 76 int DAC_COUNTER = 0;
baxterja 73:b059b5bdc664 77
baxterja 73:b059b5bdc664 78 pc.baud(230400);
baxterja 73:b059b5bdc664 79 pc.printf("Starting\r\n");
baxterja 76:704fc58ffcd0 80 float Coeffs_50k[64] = {-0.00580977186764374, -0.00233724597509602, -0.00268496034893966, -0.00296892106107616, -0.00316332842506790, -0.00323734224087795, -0.00316066924650306, -0.00289929624029755, -0.00242701604537671, -0.00171828775863439, -0.000756395728753172, 0.000477926265449492, 0.00199540689821131, 0.00380158746045340, 0.00588165900929199, 0.00823408890481248, 0.0108348019613589, 0.0136476376350624, 0.0166466423869460, 0.0197784366663972, 0.0229973536627058, 0.0262449065159363, 0.0294642414819848, 0.0325921536969478, 0.0355683455017601, 0.0383295801638416, 0.0408195908282943, 0.0429841210797836, 0.0447761053872137, 0.0461555992329706, 0.0470945515138455, 0.0475679104762209, 0.0475679104762209, 0.0470945515138455, 0.0461555992329706, 0.0447761053872137, 0.0429841210797836, 0.0408195908282943, 0.0383295801638416, 0.0355683455017601, 0.0325921536969478, 0.0294642414819848, 0.0262449065159363, 0.0229973536627058, 0.0197784366663972, 0.0166466423869460, 0.0136476376350624, 0.0108348019613589, 0.00823408890481248, 0.00588165900929199, 0.00380158746045340, 0.00199540689821131, 0.000477926265449492, -0.000756395728753172, -0.00171828775863439, -0.00242701604537671, -0.00289929624029755, -0.00316066924650306, -0.00323734224087795, -0.00316332842506790, -0.00296892106107616, -0.00268496034893966, -0.00233724597509602, -0.00580977186764374};
baxterja 76:704fc58ffcd0 81 float Coeffs_6250[64] = {0.00127484193009558, 0.000864570357881826, 0.00102534214649288, 0.00108510384382452, 0.000993133224929705, 0.000703051795928013, 0.000176984381104620, -0.000604044101219087, -0.00163463261391366, -0.00287921914505944, -0.00427024372870053, -0.00570053545539321, -0.00703321069757274, -0.00810283335889244, -0.00872356764128486, -0.00870634354462360, -0.00786670117946960, -0.00604576027868247, -0.00312333623326739, 0.000966301735603311, 0.00622373889666060, 0.0125751900868018, 0.0198716618758688, 0.0278909988243224, 0.0363459953874327, 0.0449001710734076, 0.0531846513791541, 0.0608209828946068, 0.0674455509096558, 0.0727320474263388, 0.0764143241129908, 0.0783043078535981, 0.0783043078535981, 0.0764143241129908, 0.0727320474263388, 0.0674455509096558, 0.0608209828946068, 0.0531846513791541, 0.0449001710734076, 0.0363459953874327, 0.0278909988243224, 0.0198716618758688, 0.0125751900868018, 0.00622373889666060, 0.000966301735603311, -0.00312333623326739, -0.00604576027868247, -0.00786670117946960, -0.00870634354462360, -0.00872356764128486, -0.00810283335889244, -0.00703321069757274, -0.00570053545539321, -0.00427024372870053, -0.00287921914505944, -0.00163463261391366, -0.000604044101219087, 0.000176984381104620, 0.000703051795928013, 0.000993133224929705, 0.00108510384382452, 0.00102534214649288, 0.000864570357881826, 0.00127484193009558};
baxterja 76:704fc58ffcd0 82 float Coeffs_781[32] = {-0.00137496047241108, -0.00189912303426691, -0.00110565158528889, 0.00208160047524475, 0.00686479755292052, 0.0101590507660848, 0.00771645862767646, -0.00299753239510026, -0.0195878466903650, -0.0334711291636072, -0.0323084479325981, -0.00584063791909296, 0.0475547954053657, 0.117412154826256, 0.183528429426864, 0.223771458379020, 0.223771458379020, 0.183528429426864, 0.117412154826256, 0.0475547954053657, -0.00584063791909296, -0.0323084479325981, -0.0334711291636072, -0.0195878466903650, -0.00299753239510026, 0.00771645862767646, 0.0101590507660848, 0.00686479755292052, 0.00208160047524475, -0.00110565158528889, -0.00189912303426691, -0.00137496047241108};
baxterja 76:704fc58ffcd0 83
baxterja 73:b059b5bdc664 84 float Coeffs[20] = {0.0328368433284673, 0.0237706090075265, 0.0309894695180997, 0.0385253568846695, 0.0459996974310349, 0.0530165318016261, 0.0591943866845610, 0.0641755708098907, 0.0676960677594849, 0.0694621149975389, 0.0694621149975389, 0.0676960677594849, 0.0641755708098907, 0.0591943866845610, 0.0530165318016261, 0.0459996974310349, 0.0385253568846695, 0.0309894695180997, 0.0237706090075265, 0.0328368433284673};
baxterja 73:b059b5bdc664 85 float Coeffs2[20] = {-0.00506451294187997, -0.00824932319607346, -0.00986370066237912, -0.00518913235010027, 0.00950858650162284, 0.0357083149022659, 0.0711557142019980, 0.109659494661247, 0.142586101123340, 0.161603335553589, 0.161603335553589, 0.142586101123340, 0.109659494661247, 0.0711557142019980, 0.0357083149022659, 0.00950858650162284, -0.00518913235010027, -0.00986370066237912, -0.00824932319607346, -0.00506451294187997};
baxterja 73:b059b5bdc664 86
baxterja 73:b059b5bdc664 87
baxterja 73:b059b5bdc664 88 for(int i = 0; i < 8; i++)
baxterja 73:b059b5bdc664 89 input_50k[i] = new float[32];//each array represents the input of the adcs
baxterja 73:b059b5bdc664 90
baxterja 76:704fc58ffcd0 91 filters f3 = filters(8, 8, NULL, 8, 32, Coeffs_781,false);
baxterja 73:b059b5bdc664 92
baxterja 73:b059b5bdc664 93 //6250->781
baxterja 76:704fc58ffcd0 94 filters f2 = filters(8, 8, &f3, 8, 64, Coeffs_6250,false);
baxterja 73:b059b5bdc664 95
baxterja 73:b059b5bdc664 96 //50,000->6250
baxterja 76:704fc58ffcd0 97 filters f1 = filters(4, 8, &f2, 32, 64, Coeffs_50k,true);
baxterja 69:014d4bbd4e03 98
baxterja 69:014d4bbd4e03 99
baxterja 73:b059b5bdc664 100 //float output_print_buffer[PRINT_BUFFER_LENGTH];//used to store the adc0 values(current measurment)
baxterja 73:b059b5bdc664 101 //float output_print_buffer2[PRINT_BUFFER_LENGTH];//used to store the adc0 values(voltage measurment)
baxterja 70:8cd7a8a2c153 102 int print_buffer_count = 0;
baxterja 70:8cd7a8a2c153 103
bmazzeo 66:72c5c24e532c 104 pdb_init(); // Initalize PDB
bmazzeo 66:72c5c24e532c 105 dac_init(); // initializes DAC
timmey9 45:d591d138cdeb 106 adc_init(); // always initialize adc before dma
bmazzeo 53:83a90a47c1fd 107 pc.printf("ADC Initialized\r\n");
baxterja 74:ebc9f09fda11 108 dma_init2(); // initializes DMAs
bmazzeo 55:2526b3317bc8 109 dma_reset(); // This clears any DMA triggers that may have gotten things into a different state
bmazzeo 67:ec0c58490ce6 110 pc.printf("Buffer Size: %i\r\n", len);
bmazzeo 54:1697dc574b96 111
timmey9 46:a015ebf4663b 112 led_green = 1;
timmey9 38:ec3b16c130d7 113
timmey9 40:bd6d8c35e822 114 pc.printf("\r\n\r\n\r\n");
timmey9 37:8bdc71f3e874 115
bmazzeo 64:bb4a4bd57681 116 pdb_start();
baxterja 70:8cd7a8a2c153 117 //while(print_buffer_count<PRINT_BUFFER_LENGTH)
baxterja 73:b059b5bdc664 118 while(!GATHER_STATISTICS||print_buffer_count<PRINT_BUFFER_LENGTH)
baxterja 73:b059b5bdc664 119 {
baxterja 73:b059b5bdc664 120 while(sampling_status == 0)//wait until the ADCs read a new value
baxterja 73:b059b5bdc664 121 {
baxterja 73:b059b5bdc664 122 status_0 = 1;
baxterja 76:704fc58ffcd0 123 print_filter_data();
baxterja 75:8bb94685c80b 124 //Thread::wait(.0001);
baxterja 73:b059b5bdc664 125 }
baxterja 73:b059b5bdc664 126 sampling_status = 0;//sets sampling status to 0. DMA sets it to one once ADCs sample
baxterja 73:b059b5bdc664 127 status_0 = 0;//Tied to D0. use an O-scope to measure how much free time there is to play with.
baxterja 73:b059b5bdc664 128 status_1 = 1;//Tied to D1. use an O-scope to measure how much time the processing takes
baxterja 73:b059b5bdc664 129
baxterja 73:b059b5bdc664 130 for(int i = 0; i < len; i+=2)
bmazzeo 61:a56cca07d4a6 131 {
baxterja 73:b059b5bdc664 132 static_output_array0[i] = out_val_pre[DAC_COUNTER];//DAC output
baxterja 73:b059b5bdc664 133 DAC_COUNTER++;//Counter to kepp track of where we are in our precomputed table
baxterja 73:b059b5bdc664 134 if (DAC_COUNTER>=pre_compute_length) {DAC_COUNTER = 0;}//wrap around the counter
baxterja 73:b059b5bdc664 135 static_output_array0[i+1] = out_val_pre[DAC_COUNTER];//DAC output
baxterja 73:b059b5bdc664 136 DAC_COUNTER++;//Counter to kepp track of where we are in our precomputed table
baxterja 73:b059b5bdc664 137 if (DAC_COUNTER>=pre_compute_length) {DAC_COUNTER = 0;}//wrap around the counter
baxterja 73:b059b5bdc664 138
baxterja 73:b059b5bdc664 139 input_50k[1][i/2]=static_input_array1[i];
baxterja 73:b059b5bdc664 140 input_50k[3][i/2]=static_input_array1[i+1];
baxterja 73:b059b5bdc664 141 input_50k[0][i/2]=static_input_array0[i];
baxterja 73:b059b5bdc664 142 input_50k[2][i/2]=static_input_array0[i+1];
baxterja 73:b059b5bdc664 143
baxterja 73:b059b5bdc664 144
baxterja 73:b059b5bdc664 145
baxterja 73:b059b5bdc664 146 }//End of for loop going throught the buffer of adc samples
baxterja 73:b059b5bdc664 147 f1.input(input_50k,32);
baxterja 70:8cd7a8a2c153 148
baxterja 73:b059b5bdc664 149
baxterja 73:b059b5bdc664 150
baxterja 70:8cd7a8a2c153 151
baxterja 73:b059b5bdc664 152 status_1 = 0;//turn off D1 used in deterimining how long processing is taking
baxterja 73:b059b5bdc664 153 //filter_input_array[i] = (float) (((int)static_input_array0[i]) - 0x8000);
baxterja 73:b059b5bdc664 154 //arm_fir_f32(&S, filter_input_array, filter_output_array, len);
baxterja 73:b059b5bdc664 155
baxterja 73:b059b5bdc664 156 }//end of while loop
baxterja 73:b059b5bdc664 157
baxterja 73:b059b5bdc664 158 //for(int i = 0; i<PRINT_BUFFER_LENGTH; i++)//print all the adc values measured
baxterja 73:b059b5bdc664 159 //{
baxterja 73:b059b5bdc664 160 // printf("%.1f %.1f\n\r",output_print_buffer[i],output_print_buffer2[i]);
baxterja 73:b059b5bdc664 161 //}
baxterja 73:b059b5bdc664 162
baxterja 70:8cd7a8a2c153 163
bmazzeo 61:a56cca07d4a6 164 }
bmazzeo 63:7903a33e2fd4 165