test AnalogIn_Diff.lib for board K64F

Dependencies:   AnalogIn_Diff_ok mbed

Committer:
fblanc
Date:
Tue Aug 26 13:42:58 2014 +0000
Revision:
7:e1a6763c6da2
Parent:
6:4bdadb8765ba
Child:
8:1aae5c9ae98f
ACPL C784

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:9eeda5b17b5b 1 #include "mbed.h"
fblanc 4:bcd2a4b5feaf 2 #include "AnalogIn_Diff.h"
fblanc 0:9eeda5b17b5b 3 #include "math.h"
fblanc 0:9eeda5b17b5b 4 #include "MovingAverage.h"
fblanc 4:bcd2a4b5feaf 5
fblanc 7:e1a6763c6da2 6 #define VERSION "26_08_2014"
fblanc 2:bf4f474ff746 7 #define CIBLE "K64F"
fblanc 4:bcd2a4b5feaf 8
fblanc 1:c340607e4661 9 #define max(a,b) (a>=b?a:b)
fblanc 1:c340607e4661 10 #define min(a,b) (a<=b?a:b)
fblanc 5:f994e394a7ec 11
fblanc 5:f994e394a7ec 12 #define R1 1.0E6
fblanc 5:f994e394a7ec 13 #define R2 510.0
fblanc 5:f994e394a7ec 14 #define ADCVREF 3.3
fblanc 7:e1a6763c6da2 15 #define GAIN_ACPL_C78 0.125
fblanc 7:e1a6763c6da2 16 #define GAIN ((double)((R1+R2)*2.0*GAIN_ACPL_C78*ADCVREF/R2)/65535.0)
fblanc 3:f1ab02bc87f3 17 #define UAC_NON 230.0
fblanc 5:f994e394a7ec 18 #define UAC_MAX ((int32_t)((double)UAC_NON*1.1/(double)GAIN))
fblanc 5:f994e394a7ec 19 #define UAC_MIN ((int32_t)((double)UAC_NON*0.9/(double)GAIN))
fblanc 5:f994e394a7ec 20 #define UAC_NON2 ((int32_t)((double)UAC_NON/(double)GAIN*(double)UAC_NON/(double)GAIN))
fblanc 5:f994e394a7ec 21 #define UAC_MAX2 ((int32_t)((double)UAC_MAX*(double)UAC_MAX))
fblanc 5:f994e394a7ec 22 #define UAC_MIN2 ((int32_t)((double)UAC_MIN*(double)UAC_MIN))
fblanc 5:f994e394a7ec 23
fblanc 5:f994e394a7ec 24 #define FREQ 50//en HZ
fblanc 5:f994e394a7ec 25 #define TSAMPLE 500 //en µS
fblanc 5:f994e394a7ec 26 #define NSAMPLE ((int32_t)(1/(double)FREQ *1.0E6/(double)TSAMPLE))
fblanc 5:f994e394a7ec 27 #define NADC 0
fblanc 5:f994e394a7ec 28 #define NCHANNEL 1
fblanc 5:f994e394a7ec 29 AnalogIn_Diff a2d(NADC);
fblanc 1:c340607e4661 30 struct {
fblanc 4:bcd2a4b5feaf 31 float gain;
fblanc 2:bf4f474ff746 32 float offset;
fblanc 0:9eeda5b17b5b 33 //AnalogIn adc;
fblanc 1:c340607e4661 34 } adc_volt,adc_curr;
fblanc 3:f1ab02bc87f3 35 Timer timer_min;
fblanc 3:f1ab02bc87f3 36 bool F_timer_min=false;
fblanc 3:f1ab02bc87f3 37 Timer timer_max;
fblanc 3:f1ab02bc87f3 38 bool F_timer_max=false;
fblanc 0:9eeda5b17b5b 39 Serial pc(USBTX, USBRX);
fblanc 4:bcd2a4b5feaf 40 //AnalogIn adc_1(PTB2);
fblanc 4:bcd2a4b5feaf 41 //AnalogIn adc_2(PTB3);
fblanc 4:bcd2a4b5feaf 42
fblanc 0:9eeda5b17b5b 43 Ticker flipperADC;
fblanc 0:9eeda5b17b5b 44 DigitalOut led1(LED_RED);
fblanc 0:9eeda5b17b5b 45 DigitalOut led2(LED_GREEN);
fblanc 0:9eeda5b17b5b 46 DigitalOut led3(LED_BLUE);
fblanc 5:f994e394a7ec 47 MovingAverage<int32_t> Trms(NSAMPLE,0);
fblanc 5:f994e394a7ec 48 MovingAverage<float> moy(NSAMPLE,0.0);
fblanc 5:f994e394a7ec 49 int32_t min=UAC_NON2;
fblanc 5:f994e394a7ec 50 int32_t max=UAC_NON2;
fblanc 5:f994e394a7ec 51 int32_t time_min=0;
fblanc 5:f994e394a7ec 52 int32_t time_max=0;
fblanc 1:c340607e4661 53 bool min_OK=false;
fblanc 1:c340607e4661 54 void flipADC()
fblanc 1:c340607e4661 55 {
fblanc 5:f994e394a7ec 56
fblanc 1:c340607e4661 57 float val;
fblanc 6:4bdadb8765ba 58 int32_t val_i32;
fblanc 0:9eeda5b17b5b 59 led1=1;
fblanc 0:9eeda5b17b5b 60
fblanc 6:4bdadb8765ba 61 val_i32=a2d.read_16(NCHANNEL);
fblanc 2:bf4f474ff746 62 val=(float)val_i32*adc_volt.gain-adc_volt.offset;
fblanc 4:bcd2a4b5feaf 63
fblanc 4:bcd2a4b5feaf 64 moy.Insert(val);
fblanc 5:f994e394a7ec 65 Trms.Insert(val_i32*val_i32);
fblanc 5:f994e394a7ec 66
fblanc 5:f994e394a7ec 67 val_i32=Trms.GetAverage();
fblanc 5:f994e394a7ec 68
fblanc 5:f994e394a7ec 69 //START
fblanc 5:f994e394a7ec 70 if(val_i32<UAC_MIN2 && F_timer_min ==false) {
fblanc 3:f1ab02bc87f3 71 timer_min.reset();
fblanc 3:f1ab02bc87f3 72 timer_min.start();
fblanc 4:bcd2a4b5feaf 73 F_timer_min = true;
fblanc 6:4bdadb8765ba 74 min=UAC_NON2;
fblanc 3:f1ab02bc87f3 75 }
fblanc 5:f994e394a7ec 76 if(val_i32>UAC_MAX2 && F_timer_max ==false) {
fblanc 3:f1ab02bc87f3 77 timer_max.reset();
fblanc 3:f1ab02bc87f3 78 timer_max.start();
fblanc 4:bcd2a4b5feaf 79 F_timer_max = true;
fblanc 6:4bdadb8765ba 80 max=UAC_NON2;
fblanc 3:f1ab02bc87f3 81 }
fblanc 5:f994e394a7ec 82 //STOP
fblanc 5:f994e394a7ec 83 if(val_i32>UAC_MIN2 && F_timer_min ==true) {
fblanc 5:f994e394a7ec 84 timer_min.stop();
fblanc 5:f994e394a7ec 85 F_timer_min = false;
fblanc 5:f994e394a7ec 86 }
fblanc 5:f994e394a7ec 87
fblanc 5:f994e394a7ec 88 if(val_i32<UAC_MAX2 && F_timer_max ==true) {
fblanc 3:f1ab02bc87f3 89 timer_max.stop();
fblanc 4:bcd2a4b5feaf 90 F_timer_max = false;
fblanc 3:f1ab02bc87f3 91 }
fblanc 6:4bdadb8765ba 92 if(timer_min.read_ms()>20 && F_timer_min ==true) {
fblanc 5:f994e394a7ec 93 time_min=timer_min.read_ms();
fblanc 5:f994e394a7ec 94 min=min(val_i32,min);
fblanc 5:f994e394a7ec 95 }
fblanc 6:4bdadb8765ba 96 if(timer_max.read_ms()>20 && F_timer_max ==true) {
fblanc 5:f994e394a7ec 97 time_max=timer_max.read_ms();
fblanc 5:f994e394a7ec 98 max=max(val_i32,max);
fblanc 5:f994e394a7ec 99 }
fblanc 1:c340607e4661 100 led1=0;
fblanc 1:c340607e4661 101 }
fblanc 0:9eeda5b17b5b 102
fblanc 5:f994e394a7ec 103 int k64f_vref(int v)
fblanc 5:f994e394a7ec 104 {
fblanc 5:f994e394a7ec 105 // v min 0x0 //-16mV
fblanc 5:f994e394a7ec 106
fblanc 5:f994e394a7ec 107 // V mon 0x20 //0mV
fblanc 5:f994e394a7ec 108 // V max 0x3F //+16mV
fblanc 5:f994e394a7ec 109
fblanc 5:f994e394a7ec 110 BW_VREF_SC_VREFEN(1); //The module is enabled
fblanc 5:f994e394a7ec 111 BW_VREF_SC_REGEN(1); //Internal 1.75 V regulator is enabled
fblanc 5:f994e394a7ec 112 BW_VREF_SC_MODE_LV(0); //Bandgap on only, for stabilization and startup
fblanc 5:f994e394a7ec 113 BW_VREF_TRM_TRIM(v);
fblanc 5:f994e394a7ec 114 while(BR_VREF_SC_VREFST);// Internal Voltage Reference stable
fblanc 5:f994e394a7ec 115 BW_VREF_SC_MODE_LV(1); //High power buffer mode enabled
fblanc 5:f994e394a7ec 116 return 0;
fblanc 5:f994e394a7ec 117 }
fblanc 1:c340607e4661 118 int main()
fblanc 1:c340607e4661 119 {
fblanc 5:f994e394a7ec 120
fblanc 5:f994e394a7ec 121
fblanc 0:9eeda5b17b5b 122 led1=1;
fblanc 0:9eeda5b17b5b 123 led2=0;
fblanc 0:9eeda5b17b5b 124 led3=1;
fblanc 1:c340607e4661 125 pc.baud(115200);
fblanc 5:f994e394a7ec 126 pc.printf("LAAS-CNRS ,TRMS ,%s ,%s\r\n",CIBLE,VERSION);
fblanc 5:f994e394a7ec 127 pc.printf("Tsample:%d ,Nsample:%d\r\n",TSAMPLE,NSAMPLE);
fblanc 5:f994e394a7ec 128 pc.printf("Umin:%d ,Umax:%d\r\n",UAC_MIN,UAC_MAX);
fblanc 5:f994e394a7ec 129 pc.printf("Umin2:%d ,Umax2:%d\r\n",min,max);
fblanc 5:f994e394a7ec 130 pc.printf("gain:%f ,Umon:%0.0f\r\n",GAIN,UAC_NON);
fblanc 5:f994e394a7ec 131 //k64f_vref(0x20);
fblanc 1:c340607e4661 132
fblanc 5:f994e394a7ec 133 adc_volt.gain=GAIN;
fblanc 5:f994e394a7ec 134 adc_volt.offset=0.0;
fblanc 5:f994e394a7ec 135
fblanc 5:f994e394a7ec 136 flipperADC.attach_us(&flipADC, TSAMPLE);
fblanc 2:bf4f474ff746 137 wait (5);
fblanc 5:f994e394a7ec 138
fblanc 0:9eeda5b17b5b 139 while (true) {
fblanc 1:c340607e4661 140
fblanc 4:bcd2a4b5feaf 141
fblanc 0:9eeda5b17b5b 142 led3=1;
fblanc 0:9eeda5b17b5b 143
fblanc 5:f994e394a7ec 144 pc.printf("RMS= %f ",sqrt((float)Trms.GetAverage())*adc_volt.gain);
fblanc 5:f994e394a7ec 145 pc.printf("min=%0.0f t=%d max=%0.0f t=%d ",sqrt((float)min)*adc_volt.gain,time_min,sqrt((float)max)*adc_volt.gain,time_max);
fblanc 5:f994e394a7ec 146 pc.printf("moy= %f \r\n",moy.GetAverage());
fblanc 5:f994e394a7ec 147
fblanc 0:9eeda5b17b5b 148 led3=0;
fblanc 5:f994e394a7ec 149
fblanc 1:c340607e4661 150 wait (1);
fblanc 0:9eeda5b17b5b 151 }
fblanc 0:9eeda5b17b5b 152 }