ok

Dependencies:   mbed AnalogIn_Diff_ok MovingAverage_ok

Committer:
fblanc
Date:
Fri Jan 08 08:09:34 2016 +0000
Revision:
2:f82c6978c589
ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 2:f82c6978c589 1 #include "trms.h"
fblanc 2:f82c6978c589 2
fblanc 2:f82c6978c589 3 #define DEBUG 1
fblanc 2:f82c6978c589 4 //Debug is disabled by default
fblanc 2:f82c6978c589 5 #if (defined(DEBUG))
fblanc 2:f82c6978c589 6
fblanc 2:f82c6978c589 7 #define DBG(x, ...) std::printf("[trms : DBG]"x"\r\n", ##__VA_ARGS__);
fblanc 2:f82c6978c589 8 #define WARN(x, ...) std::printf("[trms : WARN]"x"\r\n", ##__VA_ARGS__);
fblanc 2:f82c6978c589 9 #define ERR(x, ...) std::printf("[trms : ERR]"x"\r\n", ##__VA_ARGS__);
fblanc 2:f82c6978c589 10 #define INFO(x, ...) std::printf("[trms : INFO]"x"\r\n", ##__VA_ARGS__);
fblanc 2:f82c6978c589 11
fblanc 2:f82c6978c589 12 #else
fblanc 2:f82c6978c589 13
fblanc 2:f82c6978c589 14 #define DBG(x, ...)
fblanc 2:f82c6978c589 15 #define WARN(x, ...)
fblanc 2:f82c6978c589 16 #define ERR(x, ...)
fblanc 2:f82c6978c589 17 #define INFO(x, ...)
fblanc 2:f82c6978c589 18 #endif
fblanc 2:f82c6978c589 19
fblanc 2:f82c6978c589 20 trms::trms(int adc_Diff_number_chan) : AnalogIn_Diff(adc_Diff_number_chan), vtrms(NSAMPLE,UAC_NON2)
fblanc 2:f82c6978c589 21 {
fblanc 2:f82c6978c589 22
fblanc 2:f82c6978c589 23 timer_min.stop();
fblanc 2:f82c6978c589 24 timer_max.stop();
fblanc 2:f82c6978c589 25 timer_min.reset();
fblanc 2:f82c6978c589 26 timer_max.reset();
fblanc 2:f82c6978c589 27 _time_min=0;
fblanc 2:f82c6978c589 28 F_timer_min=false;
fblanc 2:f82c6978c589 29 _time_max=0;
fblanc 2:f82c6978c589 30 F_timer_max=false;
fblanc 2:f82c6978c589 31 _min=UAC_NON2;
fblanc 2:f82c6978c589 32 _max=UAC_NON2;
fblanc 2:f82c6978c589 33 gain=GAIN;
fblanc 2:f82c6978c589 34 offset=0.0;
fblanc 2:f82c6978c589 35 _flag_trms=false;
fblanc 2:f82c6978c589 36 DBG("Unon =%0.0fV",UAC_NON);
fblanc 2:f82c6978c589 37 DBG("RAW Umax2 =%d",UAC_MAX2);
fblanc 2:f82c6978c589 38 DBG("RAW Umin2 =%d",UAC_MIN2);
fblanc 2:f82c6978c589 39 DBG("Gain =%f",gain);
fblanc 2:f82c6978c589 40
fblanc 2:f82c6978c589 41
fblanc 2:f82c6978c589 42 DBG("Freq UAC=%dHz",FREQ);
fblanc 2:f82c6978c589 43 DBG("Sample =%d",NSAMPLE);
fblanc 2:f82c6978c589 44 DBG("Sample =%dus",TSAMPLE);
fblanc 2:f82c6978c589 45
fblanc 2:f82c6978c589 46
fblanc 2:f82c6978c589 47
fblanc 2:f82c6978c589 48 }
fblanc 2:f82c6978c589 49
fblanc 2:f82c6978c589 50
fblanc 2:f82c6978c589 51
fblanc 2:f82c6978c589 52 float trms::read_rms()
fblanc 2:f82c6978c589 53 {
fblanc 2:f82c6978c589 54 return (sqrt((float)vtrms.GetAverage())*gain-offset);
fblanc 2:f82c6978c589 55
fblanc 2:f82c6978c589 56 }
fblanc 2:f82c6978c589 57
fblanc 2:f82c6978c589 58 /**
fblanc 2:f82c6978c589 59 * @brief Destructor.
fblanc 2:f82c6978c589 60 */
fblanc 2:f82c6978c589 61 trms::~trms()
fblanc 2:f82c6978c589 62 {
fblanc 2:f82c6978c589 63
fblanc 2:f82c6978c589 64 flipperadc_Diff.detach();
fblanc 2:f82c6978c589 65 }
fblanc 2:f82c6978c589 66
fblanc 2:f82c6978c589 67 void trms::start()
fblanc 2:f82c6978c589 68 {
fblanc 2:f82c6978c589 69 flipperadc_Diff.attach_us<trms>(this,&trms::flipadc_Diff, TSAMPLE);
fblanc 2:f82c6978c589 70 }
fblanc 2:f82c6978c589 71
fblanc 2:f82c6978c589 72
fblanc 2:f82c6978c589 73
fblanc 2:f82c6978c589 74 void trms::flipadc_Diff()
fblanc 2:f82c6978c589 75 {
fblanc 2:f82c6978c589 76 int16_t val_i16;
fblanc 2:f82c6978c589 77 uint32_t val2_ui32;
fblanc 2:f82c6978c589 78
fblanc 2:f82c6978c589 79 val_i16=read_raws16();
fblanc 2:f82c6978c589 80
fblanc 2:f82c6978c589 81 vtrms.Insert(val_i16*val_i16);
fblanc 2:f82c6978c589 82
fblanc 2:f82c6978c589 83 val2_ui32=vtrms.GetAverage();
fblanc 2:f82c6978c589 84
fblanc 2:f82c6978c589 85 //MIN
fblanc 2:f82c6978c589 86 if(val2_ui32<UAC_MIN2 && F_timer_min ==false) {
fblanc 2:f82c6978c589 87
fblanc 2:f82c6978c589 88 timer_min.start();
fblanc 2:f82c6978c589 89 F_timer_min = true;
fblanc 2:f82c6978c589 90
fblanc 2:f82c6978c589 91 }
fblanc 2:f82c6978c589 92
fblanc 2:f82c6978c589 93 if(F_timer_min ==true) {
fblanc 2:f82c6978c589 94 if(val2_ui32>UAC_MIN2STOP ) {
fblanc 2:f82c6978c589 95
fblanc 2:f82c6978c589 96 timer_min.stop();
fblanc 2:f82c6978c589 97 F_timer_min = false;
fblanc 2:f82c6978c589 98 _flag_trms=true; //?????????????????
fblanc 2:f82c6978c589 99 _flag_min=true;
fblanc 2:f82c6978c589 100 }
fblanc 2:f82c6978c589 101
fblanc 2:f82c6978c589 102
fblanc 2:f82c6978c589 103 else if(timer_min.read_ms()>20) {
fblanc 2:f82c6978c589 104
fblanc 2:f82c6978c589 105 _time_min=timer_min.read_ms();
fblanc 2:f82c6978c589 106 _min=MIN(val2_ui32,_min);
fblanc 2:f82c6978c589 107
fblanc 2:f82c6978c589 108 }
fblanc 2:f82c6978c589 109 //max
fblanc 2:f82c6978c589 110 if(val2_ui32<UAC_MAX2STOP && F_timer_max ==true) {
fblanc 2:f82c6978c589 111 timer_max.stop();
fblanc 2:f82c6978c589 112 F_timer_max = false;
fblanc 2:f82c6978c589 113 _flag_trms=true;
fblanc 2:f82c6978c589 114 _flag_max=true;
fblanc 2:f82c6978c589 115 }
fblanc 2:f82c6978c589 116 if(val2_ui32>UAC_MAX2 && F_timer_max ==false) {
fblanc 2:f82c6978c589 117
fblanc 2:f82c6978c589 118 timer_max.start();
fblanc 2:f82c6978c589 119 F_timer_max = true;
fblanc 2:f82c6978c589 120
fblanc 2:f82c6978c589 121 }
fblanc 2:f82c6978c589 122 if(timer_max.read_ms()>20 && F_timer_max ==true) {
fblanc 2:f82c6978c589 123
fblanc 2:f82c6978c589 124 _time_max=timer_max.read_ms();
fblanc 2:f82c6978c589 125 _max=MAX(val2_ui32,_max);
fblanc 2:f82c6978c589 126
fblanc 2:f82c6978c589 127 }
fblanc 2:f82c6978c589 128 }
fblanc 2:f82c6978c589 129
fblanc 2:f82c6978c589 130 }
fblanc 2:f82c6978c589 131
fblanc 2:f82c6978c589 132 bool trms::flag (float *rms, uint32_t *time)
fblanc 2:f82c6978c589 133 {
fblanc 2:f82c6978c589 134 bool old_flag =_flag_trms;
fblanc 2:f82c6978c589 135
fblanc 2:f82c6978c589 136 if(_flag_trms==true) {
fblanc 2:f82c6978c589 137 _flag_trms=false;
fblanc 2:f82c6978c589 138 if(_flag_min==true) {
fblanc 2:f82c6978c589 139
fblanc 2:f82c6978c589 140 *time=_time_min;
fblanc 2:f82c6978c589 141 timer_min.reset();
fblanc 2:f82c6978c589 142 *rms=(sqrt((float)_min)*gain-offset);
fblanc 2:f82c6978c589 143 _min=UAC_NON2;
fblanc 2:f82c6978c589 144 _flag_min=false;
fblanc 2:f82c6978c589 145
fblanc 2:f82c6978c589 146 }
fblanc 2:f82c6978c589 147
fblanc 2:f82c6978c589 148 else if(_flag_max==true) {
fblanc 2:f82c6978c589 149
fblanc 2:f82c6978c589 150 *time=_time_max;
fblanc 2:f82c6978c589 151 timer_max.reset();
fblanc 2:f82c6978c589 152 *rms=(sqrt((float)_max)*gain-offset);
fblanc 2:f82c6978c589 153 _max=UAC_NON2;
fblanc 2:f82c6978c589 154 _flag_max=false;
fblanc 2:f82c6978c589 155
fblanc 2:f82c6978c589 156 }
fblanc 2:f82c6978c589 157
fblanc 2:f82c6978c589 158 } else {
fblanc 2:f82c6978c589 159
fblanc 2:f82c6978c589 160 *rms=read_rms();
fblanc 2:f82c6978c589 161 *time=0;
fblanc 2:f82c6978c589 162 }
fblanc 2:f82c6978c589 163
fblanc 2:f82c6978c589 164 return old_flag;
fblanc 2:f82c6978c589 165
fblanc 2:f82c6978c589 166 }
fblanc 2:f82c6978c589 167
fblanc 2:f82c6978c589 168
fblanc 2:f82c6978c589 169 void trms::set_gain(float _gain)
fblanc 2:f82c6978c589 170 {
fblanc 2:f82c6978c589 171 gain=_gain;
fblanc 2:f82c6978c589 172 }
fblanc 2:f82c6978c589 173
fblanc 2:f82c6978c589 174 void trms::set_offset(float _offset)
fblanc 2:f82c6978c589 175 {
fblanc 2:f82c6978c589 176 offset=_offset;
fblanc 2:f82c6978c589 177 }
fblanc 2:f82c6978c589 178 float trms::get_gain()
fblanc 2:f82c6978c589 179 {
fblanc 2:f82c6978c589 180 return gain;
fblanc 2:f82c6978c589 181 }
fblanc 2:f82c6978c589 182
fblanc 2:f82c6978c589 183 float trms::get_offset()
fblanc 2:f82c6978c589 184 {
fblanc 2:f82c6978c589 185 return offset;
fblanc 2:f82c6978c589 186 }