VAC.h

Committer:
mcm
Date:
2017-09-25
Revision:
0:511cdcc65d9d

File content as of revision 0:511cdcc65d9d:

/**
 * @brief       VAC.h
 * @details     For the electronic measurement of currents: DC, AC, pulsed,
 *              mixed ..., with a galvanic Isolation between the primary circuit
 *              (high power) and the secondary circuit (electronic circuit).
 *              Header file.
 *
 *
 * @return      NA
 *
 * @author      Manuel Caballero
 * @date        25/September/2017
 * @version     25/September/2017    The ORIGIN
 * @pre         VAC ( VACUUMSCHMELZE ) current sensor-modules.
 * @warning     NaN
 * @pre         This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
 */
#ifndef VAC_H
#define VAC_H

#include "mbed.h"


/**
    Example:

#include "mbed.h"
#include "VAC.h"

VAC    myCurrentTransducer   ( p20 );
Serial pc                    ( USBTX, USBRX );

Ticker newReading;
DigitalOut myled1            ( LED1 );
DigitalOut myled2            ( LED2 );


VAC::Vector_VAC_voltage_t      myVoltages;
float                          myVoltageOffset =   0;


void readDATA ( void )
{
    VAC::Vector_VAC_current_t      myCurrent;

    myled2    =  1;

    myVoltages          =    myCurrentTransducer.VAC_GetVoltage       ( 1.0, 3.3 );                            // NO Voltage divider that is why the numer 1, ADC Vref = 3.3 V
    myCurrent           =    myCurrentTransducer.VAC_CalculateCurrent ( myVoltages, 2000, 100 );               // KN = 2000, RM = 100 Ohms

    pc.printf( "Vout: %0.5f V IP: %0.5f A\r\n", myVoltages.INPUT_Voltage, myCurrent.Current );

    myled2    =  0;
}


int main()
{
    pc.baud ( 115200 );

    // [ OPTIONAL ] CALIBRATION. It calculates the offset to calibrate the future measurements.
    myled1    =  1;

    // It reads PIN3 from the device. NOTE: This MUST be done at 0A current!!!
    myVoltageOffset  =   myCurrentTransducer.VAC_SetAutoOffset ( 1.0, 3.3 );    // NO Voltage divider that is why the numer 1, ADC Vref = 3.3 V
    myled1    =  0;

    pc.printf( "Voff: %0.5f V\r\n", myVoltageOffset );
    // CALIBRATION ends here


    newReading.attach( &readDATA, 0.5 );                                        // the address of the function to be attached ( readDATA ) and the interval ( 0.5s )


    // Let the callbacks take care of everything
    while(1)
    {
        sleep();
    }
}

*/


/*!
 Library for the VAC Current transducer.
*/
class VAC
{
public:
#define CALIBRATION_AVERAGE  10             // Change it if you wish to calculate the offset with less measurements



#ifndef VECTOR_STRUCT_H
#define VECTOR_STRUCT_H
    typedef struct {
        float Current;
    } Vector_VAC_current_t;

    typedef struct {
        float INPUT_Voltage;
    } Vector_VAC_voltage_t;
#endif


    /** Create an VAC object connected to the specified pins.
      *
      * @param INPUT   Vout from the device
      */
    VAC ( PinName INPUT  );

    /** Delete VAC object.
     */
    ~VAC();

    /** It gets the voltage.
     */
    Vector_VAC_voltage_t  VAC_GetVoltage          ( float VoltageDivider = 1.0, float ADC_Vref = 3.3 );

    /** It calculates the offset automatically ( at 0A current ).
     */
    float                 VAC_SetAutoOffset       ( float VoltageDivider = 1.0, float ADC_Vref = 3.3 );

    /** It calculates the current.
     */
    Vector_VAC_current_t  VAC_CalculateCurrent    ( Vector_VAC_voltage_t myVoltages, uint32_t myKN, float myRM );



private:
    AnalogIn     _INPUT;
    float        _VAC_V_OFFSET;
};

#endif