test AnalogIn_Diff.lib for board K64F

Dependencies:   AnalogIn_Diff_ok mbed

Committer:
fblanc
Date:
Wed Jul 30 13:09:49 2014 +0000
Revision:
5:f994e394a7ec
Parent:
4:bcd2a4b5feaf
Child:
6:4bdadb8765ba
dectect 20ms

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