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