test AnalogIn_Diff.lib for board K64F
Dependencies: AnalogIn_Diff_ok mbed
Diff: main.cpp
- Revision:
- 5:f994e394a7ec
- Parent:
- 4:bcd2a4b5feaf
- Child:
- 6:4bdadb8765ba
--- a/main.cpp Tue Jul 22 15:02:09 2014 +0000 +++ b/main.cpp Wed Jul 30 13:09:49 2014 +0000 @@ -3,20 +3,29 @@ #include "math.h" #include "MovingAverage.h" -#define VERSION "21_07_2014" +#define VERSION "30_07_2014" #define CIBLE "K64F" #define max(a,b) (a>=b?a:b) #define min(a,b) (a<=b?a:b) + +#define R1 1.0E6 +#define R2 510.0 +#define ADCVREF 3.3 +#define GAIN ((double)((R1+R2)*2.0*ADCVREF/R2)/65535.0) #define UAC_NON 230.0 -#define UAC_MAX UAC_NON*1.1 -#define UAC_MIN UAC_NON*0.9 -#define UAC_NON2 UAC_NON*UAC_NON -#define UAC_MAX2 UAC_MAX*UAC_MAX -#define UAC_MIN2 UAC_MIN*UAC_MIN -#define R1 1E6 -#define R2 -AnalogIn_Diff a2d(0); +#define UAC_MAX ((int32_t)((double)UAC_NON*1.1/(double)GAIN)) +#define UAC_MIN ((int32_t)((double)UAC_NON*0.9/(double)GAIN)) +#define UAC_NON2 ((int32_t)((double)UAC_NON/(double)GAIN*(double)UAC_NON/(double)GAIN)) +#define UAC_MAX2 ((int32_t)((double)UAC_MAX*(double)UAC_MAX)) +#define UAC_MIN2 ((int32_t)((double)UAC_MIN*(double)UAC_MIN)) + +#define FREQ 50//en HZ +#define TSAMPLE 500 //en µS +#define NSAMPLE ((int32_t)(1/(double)FREQ *1.0E6/(double)TSAMPLE)) +#define NADC 0 +#define NCHANNEL 1 +AnalogIn_Diff a2d(NADC); struct { float gain; float offset; @@ -34,76 +43,106 @@ DigitalOut led1(LED_RED); DigitalOut led2(LED_GREEN); DigitalOut led3(LED_BLUE); -MovingAverage<float> Trms(20,UAC_NON); -MovingAverage<float> moy(20,0); -float min=250000; -float max=0; +MovingAverage<int32_t> Trms(NSAMPLE,0); +MovingAverage<float> moy(NSAMPLE,0.0); +int32_t min=UAC_NON2; +int32_t max=UAC_NON2; +int32_t time_min=0; +int32_t time_max=0; bool min_OK=false; void flipADC() { - + float val; led1=1; - int val_i32=a2d.read_16(1); + int32_t val_i32=a2d.read_16(NCHANNEL); val=(float)val_i32*adc_volt.gain-adc_volt.offset; moy.Insert(val); - Trms.Insert(val*val); - val=Trms.GetAverage(); - max=max(val,max); - if(min_OK==true) - min=min(val,min); - if(val<UAC_MIN2 && F_timer_min ==false) { + Trms.Insert(val_i32*val_i32); + + val_i32=Trms.GetAverage(); + + //START + if(val_i32<UAC_MIN2 && F_timer_min ==false) { timer_min.reset(); timer_min.start(); F_timer_min = true; } - if(val>UAC_MIN2 && F_timer_min ==true) { - timer_min.stop(); - F_timer_min = false; - } - if(val>UAC_MAX2 && F_timer_max ==false) { + if(val_i32>UAC_MAX2 && F_timer_max ==false) { timer_max.reset(); timer_max.start(); F_timer_max = true; } - if(val<UAC_MAX2 && F_timer_max ==true) { + //STOP + if(val_i32>UAC_MIN2 && F_timer_min ==true) { + timer_min.stop(); + F_timer_min = false; + } + + if(val_i32<UAC_MAX2 && F_timer_max ==true) { timer_max.stop(); - F_timer_max = false; } - + if(timer_min.read_ms()>20) { + time_min=timer_min.read_ms(); + min=min(val_i32,min); + } + if(timer_max.read_ms()>20) { + time_max=timer_max.read_ms(); + max=max(val_i32,max); + } led1=0; } +int k64f_vref(int v) +{ +// v min 0x0 //-16mV + +// V mon 0x20 //0mV +// V max 0x3F //+16mV + + BW_VREF_SC_VREFEN(1); //The module is enabled + BW_VREF_SC_REGEN(1); //Internal 1.75 V regulator is enabled + BW_VREF_SC_MODE_LV(0); //Bandgap on only, for stabilization and startup + BW_VREF_TRM_TRIM(v); + while(BR_VREF_SC_VREFST);// Internal Voltage Reference stable + BW_VREF_SC_MODE_LV(1); //High power buffer mode enabled + return 0; +} int main() { - - + + led1=1; led2=0; led3=1; pc.baud(115200); - pc.printf("LAAS-CNRS ,TRMS ,%s ,%s\r",CIBLE,VERSION); - adc_volt.gain=(3920.0*3.3)/65535.0; - adc_volt.offset=-17.0; + pc.printf("LAAS-CNRS ,TRMS ,%s ,%s\r\n",CIBLE,VERSION); + pc.printf("Tsample:%d ,Nsample:%d\r\n",TSAMPLE,NSAMPLE); + pc.printf("Umin:%d ,Umax:%d\r\n",UAC_MIN,UAC_MAX); + pc.printf("Umin2:%d ,Umax2:%d\r\n",min,max); + pc.printf("gain:%f ,Umon:%0.0f\r\n",GAIN,UAC_NON); + //k64f_vref(0x20); - flipperADC.attach_us(&flipADC, 1000); //200µs + adc_volt.gain=GAIN; + adc_volt.offset=0.0; + + flipperADC.attach_us(&flipADC, TSAMPLE); wait (5); - min_OK=true; - + while (true) { led3=1; - pc.printf("RMS=%f \r\n",sqrt(Trms.GetAverage())); - pc.printf("min=%0.0f t=%f max=%0.0f t=%f\r\n",sqrt(min),timer_min.read(),sqrt(max),timer_max.read()); - pc.printf("moy=%f \r\n",moy.GetAverage()); - + pc.printf("RMS= %f ",sqrt((float)Trms.GetAverage())*adc_volt.gain); + 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); + pc.printf("moy= %f \r\n",moy.GetAverage()); + led3=0; - + wait (1); } } \ No newline at end of file