ok
Dependencies: mbed AnalogIn_Diff_ok MovingAverage_ok
trms/trms.h@0:e08a063f61c3, 2014-12-10 (annotated)
- Committer:
- fblanc
- Date:
- Wed Dec 10 12:53:53 2014 +0000
- Revision:
- 0:e08a063f61c3
ok
Who changed what in which revision?
User | Revision | Line number | New 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 |