test AnalogIn_Diff.lib for board K64F
Dependencies: AnalogIn_Diff_ok mbed
main.cpp@5:f994e394a7ec, 2014-07-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |