test AnalogIn_Diff.lib for board K64F

Dependencies:   AnalogIn_Diff_ok mbed

Committer:
fblanc
Date:
Thu Jul 31 11:49:04 2014 +0000
Revision:
6:4bdadb8765ba
Parent:
5:f994e394a7ec
Child:
7:e1a6763c6da2
reset min et max

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 6:4bdadb8765ba 6 #define VERSION "31_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 6:4bdadb8765ba 57 int32_t val_i32;
fblanc 0:9eeda5b17b5b 58 led1=1;
fblanc 0:9eeda5b17b5b 59
fblanc 6:4bdadb8765ba 60 val_i32=a2d.read_16(NCHANNEL);
fblanc 2:bf4f474ff746 61 val=(float)val_i32*adc_volt.gain-adc_volt.offset;
fblanc 4:bcd2a4b5feaf 62
fblanc 4:bcd2a4b5feaf 63 moy.Insert(val);
fblanc 5:f994e394a7ec 64 Trms.Insert(val_i32*val_i32);
fblanc 5:f994e394a7ec 65
fblanc 5:f994e394a7ec 66 val_i32=Trms.GetAverage();
fblanc 5:f994e394a7ec 67
fblanc 5:f994e394a7ec 68 //START
fblanc 5:f994e394a7ec 69 if(val_i32<UAC_MIN2 && F_timer_min ==false) {
fblanc 3:f1ab02bc87f3 70 timer_min.reset();
fblanc 3:f1ab02bc87f3 71 timer_min.start();
fblanc 4:bcd2a4b5feaf 72 F_timer_min = true;
fblanc 6:4bdadb8765ba 73 min=UAC_NON2;
fblanc 3:f1ab02bc87f3 74 }
fblanc 5:f994e394a7ec 75 if(val_i32>UAC_MAX2 && F_timer_max ==false) {
fblanc 3:f1ab02bc87f3 76 timer_max.reset();
fblanc 3:f1ab02bc87f3 77 timer_max.start();
fblanc 4:bcd2a4b5feaf 78 F_timer_max = true;
fblanc 6:4bdadb8765ba 79 max=UAC_NON2;
fblanc 3:f1ab02bc87f3 80 }
fblanc 5:f994e394a7ec 81 //STOP
fblanc 5:f994e394a7ec 82 if(val_i32>UAC_MIN2 && F_timer_min ==true) {
fblanc 5:f994e394a7ec 83 timer_min.stop();
fblanc 5:f994e394a7ec 84 F_timer_min = false;
fblanc 5:f994e394a7ec 85 }
fblanc 5:f994e394a7ec 86
fblanc 5:f994e394a7ec 87 if(val_i32<UAC_MAX2 && F_timer_max ==true) {
fblanc 3:f1ab02bc87f3 88 timer_max.stop();
fblanc 4:bcd2a4b5feaf 89 F_timer_max = false;
fblanc 3:f1ab02bc87f3 90 }
fblanc 6:4bdadb8765ba 91 if(timer_min.read_ms()>20 && F_timer_min ==true) {
fblanc 5:f994e394a7ec 92 time_min=timer_min.read_ms();
fblanc 5:f994e394a7ec 93 min=min(val_i32,min);
fblanc 5:f994e394a7ec 94 }
fblanc 6:4bdadb8765ba 95 if(timer_max.read_ms()>20 && F_timer_max ==true) {
fblanc 5:f994e394a7ec 96 time_max=timer_max.read_ms();
fblanc 5:f994e394a7ec 97 max=max(val_i32,max);
fblanc 5:f994e394a7ec 98 }
fblanc 1:c340607e4661 99 led1=0;
fblanc 1:c340607e4661 100 }
fblanc 0:9eeda5b17b5b 101
fblanc 5:f994e394a7ec 102 int k64f_vref(int v)
fblanc 5:f994e394a7ec 103 {
fblanc 5:f994e394a7ec 104 // v min 0x0 //-16mV
fblanc 5:f994e394a7ec 105
fblanc 5:f994e394a7ec 106 // V mon 0x20 //0mV
fblanc 5:f994e394a7ec 107 // V max 0x3F //+16mV
fblanc 5:f994e394a7ec 108
fblanc 5:f994e394a7ec 109 BW_VREF_SC_VREFEN(1); //The module is enabled
fblanc 5:f994e394a7ec 110 BW_VREF_SC_REGEN(1); //Internal 1.75 V regulator is enabled
fblanc 5:f994e394a7ec 111 BW_VREF_SC_MODE_LV(0); //Bandgap on only, for stabilization and startup
fblanc 5:f994e394a7ec 112 BW_VREF_TRM_TRIM(v);
fblanc 5:f994e394a7ec 113 while(BR_VREF_SC_VREFST);// Internal Voltage Reference stable
fblanc 5:f994e394a7ec 114 BW_VREF_SC_MODE_LV(1); //High power buffer mode enabled
fblanc 5:f994e394a7ec 115 return 0;
fblanc 5:f994e394a7ec 116 }
fblanc 1:c340607e4661 117 int main()
fblanc 1:c340607e4661 118 {
fblanc 5:f994e394a7ec 119
fblanc 5:f994e394a7ec 120
fblanc 0:9eeda5b17b5b 121 led1=1;
fblanc 0:9eeda5b17b5b 122 led2=0;
fblanc 0:9eeda5b17b5b 123 led3=1;
fblanc 1:c340607e4661 124 pc.baud(115200);
fblanc 5:f994e394a7ec 125 pc.printf("LAAS-CNRS ,TRMS ,%s ,%s\r\n",CIBLE,VERSION);
fblanc 5:f994e394a7ec 126 pc.printf("Tsample:%d ,Nsample:%d\r\n",TSAMPLE,NSAMPLE);
fblanc 5:f994e394a7ec 127 pc.printf("Umin:%d ,Umax:%d\r\n",UAC_MIN,UAC_MAX);
fblanc 5:f994e394a7ec 128 pc.printf("Umin2:%d ,Umax2:%d\r\n",min,max);
fblanc 5:f994e394a7ec 129 pc.printf("gain:%f ,Umon:%0.0f\r\n",GAIN,UAC_NON);
fblanc 5:f994e394a7ec 130 //k64f_vref(0x20);
fblanc 1:c340607e4661 131
fblanc 5:f994e394a7ec 132 adc_volt.gain=GAIN;
fblanc 5:f994e394a7ec 133 adc_volt.offset=0.0;
fblanc 5:f994e394a7ec 134
fblanc 5:f994e394a7ec 135 flipperADC.attach_us(&flipADC, TSAMPLE);
fblanc 2:bf4f474ff746 136 wait (5);
fblanc 5:f994e394a7ec 137
fblanc 0:9eeda5b17b5b 138 while (true) {
fblanc 1:c340607e4661 139
fblanc 4:bcd2a4b5feaf 140
fblanc 0:9eeda5b17b5b 141 led3=1;
fblanc 0:9eeda5b17b5b 142
fblanc 5:f994e394a7ec 143 pc.printf("RMS= %f ",sqrt((float)Trms.GetAverage())*adc_volt.gain);
fblanc 5:f994e394a7ec 144 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 145 pc.printf("moy= %f \r\n",moy.GetAverage());
fblanc 5:f994e394a7ec 146
fblanc 0:9eeda5b17b5b 147 led3=0;
fblanc 5:f994e394a7ec 148
fblanc 1:c340607e4661 149 wait (1);
fblanc 0:9eeda5b17b5b 150 }
fblanc 0:9eeda5b17b5b 151 }