ok

Dependencies:   mbed AnalogIn_Diff_ok MovingAverage_ok

trms/trms.h

Committer:
fblanc
Date:
2016-01-08
Revision:
2:f82c6978c589

File content as of revision 2:f82c6978c589:

/*
 * Copyright (c) 2014 LAAS-CNRS
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef TRMS_H
#define TRMS_H

#include "mbed.h"
#include "AnalogIn_Diff.h"
#include "math.h"
#include "MovingAverage.h"


#define FREQ 50//en HZ
#define TSAMPLE 125 //en µS
#define R1 1.0E6
#define R2 510.0
#define ADCVREF 3.3
#define GAIN_ACPL_C78 0.125
#define GAIN ((double)((R1+R2)*2.0*GAIN_ACPL_C78*ADCVREF/R2)/65535.0)
#define UAC_NON 230.0
#define UAC_MON_i32 ((int32_t)((double)UAC_NON/(double)GAIN))
#define UAC_MAX ((int32_t)((double)UAC_NON*1.1/(double)GAIN))
#define UAC_MIN ((int32_t)((double)UAC_NON*0.9/(double)GAIN))
#define UAC_NON2 ((int32_t)((double)UAC_NON/(double)GAIN*(double)UAC_NON/(double)GAIN))
#define UAC_MAX2 ((int32_t)((double)UAC_MAX*(double)UAC_MAX))
#define UAC_MIN2 ((int32_t)((double)UAC_MIN*(double)UAC_MIN))
#define UAC_MAX2STOP ((int32_t)((double)UAC_MAX*(double)UAC_MAX)*0.95)
#define UAC_MIN2STOP ((int32_t)((double)UAC_MIN*(double)UAC_MIN)*1.05)
#define NSAMPLE ((int32_t)(1/(double)FREQ *1.0E6/(double)TSAMPLE))
//#define max(a,b) ((a)>=(b)?(a):(b))
//#define min(a,b) ((a)<=(b)?(a):(b))

#define MAX(a,b) ({ typeof(a) aa = (a); typeof(b) bb = (b); aa>=bb? aa: bb; })
#define MIN(a,b) ({ typeof(a) aa = (a); typeof(b) bb = (b); aa<=bb? aa: bb; })

#define VERSION_TRMS "2014_12_10"


class trms : public AnalogIn_Diff
{

public:
    /**
    * Constructor
    *
    * @param a2d_number_chan is ADC_DIFF(#adc, #ch)
    * @return true if successful
    */

    trms(int adc_Diff_number_chan) ;

    /**
    *  destructor
    */
    ~trms();

    void start();
    float read_rms();
    float get_gain();
    void set_gain(float gain);
    float get_offset();
    void set_offset(float offset);
    bool flag(float *rms, uint32_t *time);
    
private:
   volatile bool _flag_trms;
    volatile bool _flag_max;
    volatile bool _flag_min;
   
    volatile int32_t _min;
    volatile int32_t _max;
    volatile float gain;
    volatile float offset;
    volatile bool F_timer_min;
    volatile bool F_timer_max;
    volatile uint32_t _time_min;
    volatile uint32_t _time_max;
 
    Timer timer_min;
    Timer timer_max;
    void flipadc_Diff();
    MovingAverage <uint32_t>vtrms;
    Ticker flipperadc_Diff;
    

};

#endif //TRMS_H