test AnalogIn_Diff.lib for board K64F
Dependencies: AnalogIn_Diff_ok mbed
main.cpp
- Committer:
- fblanc
- Date:
- 2014-07-31
- Revision:
- 6:4bdadb8765ba
- Parent:
- 5:f994e394a7ec
- Child:
- 7:e1a6763c6da2
File content as of revision 6:4bdadb8765ba:
#include "mbed.h" #include "AnalogIn_Diff.h" #include "math.h" #include "MovingAverage.h" #define VERSION "31_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 ((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; //AnalogIn adc; } adc_volt,adc_curr; Timer timer_min; bool F_timer_min=false; Timer timer_max; bool F_timer_max=false; Serial pc(USBTX, USBRX); //AnalogIn adc_1(PTB2); //AnalogIn adc_2(PTB3); Ticker flipperADC; DigitalOut led1(LED_RED); DigitalOut led2(LED_GREEN); DigitalOut led3(LED_BLUE); 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; int32_t val_i32; led1=1; val_i32=a2d.read_16(NCHANNEL); val=(float)val_i32*adc_volt.gain-adc_volt.offset; moy.Insert(val); 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; min=UAC_NON2; } if(val_i32>UAC_MAX2 && F_timer_max ==false) { timer_max.reset(); timer_max.start(); F_timer_max = true; max=UAC_NON2; } //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 && F_timer_min ==true) { time_min=timer_min.read_ms(); min=min(val_i32,min); } if(timer_max.read_ms()>20 && F_timer_max ==true) { 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\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); adc_volt.gain=GAIN; adc_volt.offset=0.0; flipperADC.attach_us(&flipADC, TSAMPLE); wait (5); while (true) { led3=1; 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); } }