ok

Dependencies:   mbed AnalogIn_Diff_ok MovingAverage_ok

Committer:
fblanc
Date:
Fri Jan 08 08:11:52 2016 +0000
Revision:
3:735c712ffaee
Parent:
2:f82c6978c589
average remove

Who changed what in which revision?

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