test AnalogIn_Diff.lib for board K64F
Dependencies: AnalogIn_Diff_ok mbed
main.cpp@7:e1a6763c6da2, 2014-08-26 (annotated)
- 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?
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 | 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 | } |