ok

Dependencies:   mbed AnalogIn_Diff_ok MovingAverage_ok

Committer:
fblanc
Date:
Wed Dec 10 12:53:53 2014 +0000
Revision:
0:e08a063f61c3
ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:e08a063f61c3 1 /*
fblanc 0:e08a063f61c3 2 * Copyright (c) 2014 LAAS-CNRS
fblanc 0:e08a063f61c3 3 *
fblanc 0:e08a063f61c3 4 * Licensed under the Apache License, Version 2.0 (the "License");
fblanc 0:e08a063f61c3 5 * you may not use this file except in compliance with the License.
fblanc 0:e08a063f61c3 6 * You may obtain a copy of the License at
fblanc 0:e08a063f61c3 7 *
fblanc 0:e08a063f61c3 8 * http://www.apache.org/licenses/LICENSE-2.0
fblanc 0:e08a063f61c3 9 *
fblanc 0:e08a063f61c3 10 * Unless required by applicable law or agreed to in writing, software
fblanc 0:e08a063f61c3 11 * distributed under the License is distributed on an "AS IS" BASIS,
fblanc 0:e08a063f61c3 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
fblanc 0:e08a063f61c3 13 * See the License for the specific language governing permissions and
fblanc 0:e08a063f61c3 14 * limitations under the License.
fblanc 0:e08a063f61c3 15 */
fblanc 0:e08a063f61c3 16
fblanc 0:e08a063f61c3 17 #ifndef TRMS_H
fblanc 0:e08a063f61c3 18 #define TRMS_H
fblanc 0:e08a063f61c3 19
fblanc 0:e08a063f61c3 20 #include "mbed.h"
fblanc 0:e08a063f61c3 21 #include "AnalogIn_Diff.h"
fblanc 0:e08a063f61c3 22 #include "math.h"
fblanc 0:e08a063f61c3 23 #include "MovingAverage.h"
fblanc 0:e08a063f61c3 24
fblanc 0:e08a063f61c3 25
fblanc 0:e08a063f61c3 26 #define FREQ 50//en HZ
fblanc 0:e08a063f61c3 27 #define TSAMPLE 500 //en µS
fblanc 0:e08a063f61c3 28 #define R1 1.0E6
fblanc 0:e08a063f61c3 29 #define R2 510.0
fblanc 0:e08a063f61c3 30 #define ADCVREF 3.3
fblanc 0:e08a063f61c3 31 #define GAIN_ACPL_C78 0.125
fblanc 0:e08a063f61c3 32 #define GAIN ((double)((R1+R2)*2.0*GAIN_ACPL_C78*ADCVREF/R2)/65535.0)
fblanc 0:e08a063f61c3 33 #define UAC_NON 230.0
fblanc 0:e08a063f61c3 34 #define UAC_MAX ((int32_t)((double)UAC_NON*1.1/(double)GAIN))
fblanc 0:e08a063f61c3 35 #define UAC_MIN ((int32_t)((double)UAC_NON*0.9/(double)GAIN))
fblanc 0:e08a063f61c3 36 #define UAC_NON2 ((int32_t)((double)UAC_NON/(double)GAIN*(double)UAC_NON/(double)GAIN))
fblanc 0:e08a063f61c3 37 #define UAC_MAX2 ((int32_t)((double)UAC_MAX*(double)UAC_MAX))
fblanc 0:e08a063f61c3 38 #define UAC_MIN2 ((int32_t)((double)UAC_MIN*(double)UAC_MIN))
fblanc 0:e08a063f61c3 39 #define UAC_MAX2STOP ((int32_t)((double)UAC_MAX*(double)UAC_MAX)*0.95)
fblanc 0:e08a063f61c3 40 #define UAC_MIN2STOP ((int32_t)((double)UAC_MIN*(double)UAC_MIN)*1.05)
fblanc 0:e08a063f61c3 41 #define NSAMPLE ((int32_t)(1/(double)FREQ *1.0E6/(double)TSAMPLE))
fblanc 0:e08a063f61c3 42 //#define max(a,b) ((a)>=(b)?(a):(b))
fblanc 0:e08a063f61c3 43 //#define min(a,b) ((a)<=(b)?(a):(b))
fblanc 0:e08a063f61c3 44
fblanc 0:e08a063f61c3 45 #define MAX(a,b) ({ typeof(a) aa = (a); typeof(b) bb = (b); aa>=bb? aa: bb; })
fblanc 0:e08a063f61c3 46 #define MIN(a,b) ({ typeof(a) aa = (a); typeof(b) bb = (b); aa<=bb? aa: bb; })
fblanc 0:e08a063f61c3 47
fblanc 0:e08a063f61c3 48 #define VERSION_TRMS "2014_12_10"
fblanc 0:e08a063f61c3 49
fblanc 0:e08a063f61c3 50
fblanc 0:e08a063f61c3 51 class trms : public AnalogIn_Diff
fblanc 0:e08a063f61c3 52 {
fblanc 0:e08a063f61c3 53
fblanc 0:e08a063f61c3 54 public:
fblanc 0:e08a063f61c3 55 /**
fblanc 0:e08a063f61c3 56 * Constructor
fblanc 0:e08a063f61c3 57 *
fblanc 0:e08a063f61c3 58 * @param a2d_number_chan is ADC_DIFF(#adc, #ch)
fblanc 0:e08a063f61c3 59 * @return true if successful
fblanc 0:e08a063f61c3 60 */
fblanc 0:e08a063f61c3 61
fblanc 0:e08a063f61c3 62 trms(int adc_Diff_number_chan) ;
fblanc 0:e08a063f61c3 63
fblanc 0:e08a063f61c3 64 /**
fblanc 0:e08a063f61c3 65 * destructor
fblanc 0:e08a063f61c3 66 */
fblanc 0:e08a063f61c3 67 ~trms();
fblanc 0:e08a063f61c3 68
fblanc 0:e08a063f61c3 69 void start();
fblanc 0:e08a063f61c3 70 float read_rms();
fblanc 0:e08a063f61c3 71 float read_average();
fblanc 0:e08a063f61c3 72 float get_gain();
fblanc 0:e08a063f61c3 73 void set_gain(float gain);
fblanc 0:e08a063f61c3 74 float get_offset();
fblanc 0:e08a063f61c3 75 void set_offset(float offset);
fblanc 0:e08a063f61c3 76 bool flag(float *rms, uint32_t *time);
fblanc 0:e08a063f61c3 77 private:
fblanc 0:e08a063f61c3 78 void flipadc_Diff();
fblanc 0:e08a063f61c3 79 bool _flag;
fblanc 0:e08a063f61c3 80
fblanc 0:e08a063f61c3 81 MovingAverage <uint32_t>vtrms;
fblanc 0:e08a063f61c3 82 MovingAverage <int32_t>vmoy;
fblanc 0:e08a063f61c3 83
fblanc 0:e08a063f61c3 84 Ticker flipperadc_Diff;
fblanc 0:e08a063f61c3 85
fblanc 0:e08a063f61c3 86
fblanc 0:e08a063f61c3 87 int32_t _min;
fblanc 0:e08a063f61c3 88 int32_t _max;
fblanc 0:e08a063f61c3 89 float gain;
fblanc 0:e08a063f61c3 90 float offset;
fblanc 0:e08a063f61c3 91 Timer timer_min;
fblanc 0:e08a063f61c3 92 bool F_timer_min;
fblanc 0:e08a063f61c3 93 Timer timer_max;
fblanc 0:e08a063f61c3 94 bool F_timer_max;
fblanc 0:e08a063f61c3 95 uint32_t _time_min;
fblanc 0:e08a063f61c3 96 uint32_t _time_max;
fblanc 0:e08a063f61c3 97
fblanc 0:e08a063f61c3 98 bool _flag_min;
fblanc 0:e08a063f61c3 99 bool _flag_max;
fblanc 0:e08a063f61c3 100
fblanc 0:e08a063f61c3 101
fblanc 0:e08a063f61c3 102 };
fblanc 0:e08a063f61c3 103
fblanc 0:e08a063f61c3 104 #endif //TRMS_H