ok
Dependencies: mbed AnalogIn_Diff_ok MovingAverage_ok
trms/trms.h@3:735c712ffaee, 2016-01-08 (annotated)
- 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?
User | Revision | Line number | New 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 |