Committer:
mcm
Date:
Mon Sep 25 11:57:30 2017 +0000
Revision:
0:511cdcc65d9d
The library was completed and tested, it works as expected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 0:511cdcc65d9d 1 /**
mcm 0:511cdcc65d9d 2 * @brief VAC.cpp
mcm 0:511cdcc65d9d 3 * @details For the electronic measurement of currents: DC, AC, pulsed,
mcm 0:511cdcc65d9d 4 * mixed ..., with a galvanic Isolation between the primary circuit
mcm 0:511cdcc65d9d 5 * (high power) and the secondary circuit (electronic circuit).
mcm 0:511cdcc65d9d 6 * Function file.
mcm 0:511cdcc65d9d 7 *
mcm 0:511cdcc65d9d 8 *
mcm 0:511cdcc65d9d 9 * @return NA
mcm 0:511cdcc65d9d 10 *
mcm 0:511cdcc65d9d 11 * @author Manuel Caballero
mcm 0:511cdcc65d9d 12 * @date 25/September/2017
mcm 0:511cdcc65d9d 13 * @version 25/September/2017 The ORIGIN
mcm 0:511cdcc65d9d 14 * @pre VAC ( VACUUMSCHMELZE ) current sensor-modules.
mcm 0:511cdcc65d9d 15 * @warning NaN
mcm 0:511cdcc65d9d 16 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
mcm 0:511cdcc65d9d 17 */
mcm 0:511cdcc65d9d 18
mcm 0:511cdcc65d9d 19 #include "VAC.h"
mcm 0:511cdcc65d9d 20
mcm 0:511cdcc65d9d 21
mcm 0:511cdcc65d9d 22 VAC::VAC ( PinName INPUT )
mcm 0:511cdcc65d9d 23 : _INPUT ( INPUT )
mcm 0:511cdcc65d9d 24 {
mcm 0:511cdcc65d9d 25 _VAC_V_OFFSET = 0.0;
mcm 0:511cdcc65d9d 26 }
mcm 0:511cdcc65d9d 27
mcm 0:511cdcc65d9d 28
mcm 0:511cdcc65d9d 29 VAC::~VAC()
mcm 0:511cdcc65d9d 30 {
mcm 0:511cdcc65d9d 31 }
mcm 0:511cdcc65d9d 32
mcm 0:511cdcc65d9d 33
mcm 0:511cdcc65d9d 34
mcm 0:511cdcc65d9d 35 /**
mcm 0:511cdcc65d9d 36 * @brief VAC_GetVoltage ( float, float )
mcm 0:511cdcc65d9d 37 *
mcm 0:511cdcc65d9d 38 * @details It performs a new voltage measurement.
mcm 0:511cdcc65d9d 39 *
mcm 0:511cdcc65d9d 40 * @param[in] VoltageDivider: If there is a voltage divider before the ADC pin ( if not VoltageDivider = 1 ).
mcm 0:511cdcc65d9d 41 * @param[in] ADC_Vref: Voltage reference for the ADC.
mcm 0:511cdcc65d9d 42 *
mcm 0:511cdcc65d9d 43 * @param[out] NaN.
mcm 0:511cdcc65d9d 44 *
mcm 0:511cdcc65d9d 45 *
mcm 0:511cdcc65d9d 46 * @return The actual voltage.
mcm 0:511cdcc65d9d 47 *
mcm 0:511cdcc65d9d 48 *
mcm 0:511cdcc65d9d 49 * @author Manuel Caballero
mcm 0:511cdcc65d9d 50 * @date 25/September/2017
mcm 0:511cdcc65d9d 51 * @version 25/September/2017 The ORIGIN
mcm 0:511cdcc65d9d 52 * @pre NaN.
mcm 0:511cdcc65d9d 53 * @warning NaN.
mcm 0:511cdcc65d9d 54 */
mcm 0:511cdcc65d9d 55 VAC::Vector_VAC_voltage_t VAC::VAC_GetVoltage ( float VoltageDivider, float ADC_Vref )
mcm 0:511cdcc65d9d 56 {
mcm 0:511cdcc65d9d 57 Vector_VAC_voltage_t myAuxVoltage;
mcm 0:511cdcc65d9d 58
mcm 0:511cdcc65d9d 59
mcm 0:511cdcc65d9d 60 myAuxVoltage.INPUT_Voltage = VoltageDivider * _INPUT.read() * ADC_Vref;
mcm 0:511cdcc65d9d 61
mcm 0:511cdcc65d9d 62
mcm 0:511cdcc65d9d 63 return myAuxVoltage;
mcm 0:511cdcc65d9d 64 }
mcm 0:511cdcc65d9d 65
mcm 0:511cdcc65d9d 66
mcm 0:511cdcc65d9d 67
mcm 0:511cdcc65d9d 68 /**
mcm 0:511cdcc65d9d 69 * @brief VAC_CalculateCurrent ( Vector_VAC_voltage_t ,uint32_t, float )
mcm 0:511cdcc65d9d 70 *
mcm 0:511cdcc65d9d 71 * @details It calculates the actual current.
mcm 0:511cdcc65d9d 72 *
mcm 0:511cdcc65d9d 73 * @param[in] myVoltages: Both voltages, INPUT and Vref voltages.
mcm 0:511cdcc65d9d 74 * @param[in] myKN: Turns ratio.
mcm 0:511cdcc65d9d 75 * @param[in] myRM: Measuring resistance.
mcm 0:511cdcc65d9d 76 *
mcm 0:511cdcc65d9d 77 * @param[out] NaN.
mcm 0:511cdcc65d9d 78 *
mcm 0:511cdcc65d9d 79 *
mcm 0:511cdcc65d9d 80 * @return The calculated current.
mcm 0:511cdcc65d9d 81 *
mcm 0:511cdcc65d9d 82 *
mcm 0:511cdcc65d9d 83 * @author Manuel Caballero
mcm 0:511cdcc65d9d 84 * @date 25/September/2017
mcm 0:511cdcc65d9d 85 * @version 25/September/2017 The ORIGIN
mcm 0:511cdcc65d9d 86 * @pre VAC_GetVoltage function MUST be called first.
mcm 0:511cdcc65d9d 87 * @warning NaN.
mcm 0:511cdcc65d9d 88 */
mcm 0:511cdcc65d9d 89 VAC::Vector_VAC_current_t VAC::VAC_CalculateCurrent ( Vector_VAC_voltage_t myVoltages, uint32_t myIPN, float myRM )
mcm 0:511cdcc65d9d 90 {
mcm 0:511cdcc65d9d 91 Vector_VAC_current_t myAuxCurrent;
mcm 0:511cdcc65d9d 92
mcm 0:511cdcc65d9d 93
mcm 0:511cdcc65d9d 94 myAuxCurrent.Current = ( ( myVoltages.INPUT_Voltage + _VAC_V_OFFSET ) * myIPN ) / myRM;
mcm 0:511cdcc65d9d 95
mcm 0:511cdcc65d9d 96
mcm 0:511cdcc65d9d 97
mcm 0:511cdcc65d9d 98 return myAuxCurrent;
mcm 0:511cdcc65d9d 99 }
mcm 0:511cdcc65d9d 100
mcm 0:511cdcc65d9d 101
mcm 0:511cdcc65d9d 102
mcm 0:511cdcc65d9d 103 /**
mcm 0:511cdcc65d9d 104 * @brief VAC_SetAutoOffset ( float , float )
mcm 0:511cdcc65d9d 105 *
mcm 0:511cdcc65d9d 106 * @details It calculates the offset automatically ( at 0A current ).
mcm 0:511cdcc65d9d 107 *
mcm 0:511cdcc65d9d 108 * @param[in] VoltageDivider: If there is a voltage divider before the ADC pin ( if not VoltageDivider = 1 ).
mcm 0:511cdcc65d9d 109 * @param[in] ADC_Vref: Voltage reference for the ADC.
mcm 0:511cdcc65d9d 110 *
mcm 0:511cdcc65d9d 111 * @param[out] NaN.
mcm 0:511cdcc65d9d 112 *
mcm 0:511cdcc65d9d 113 *
mcm 0:511cdcc65d9d 114 * @return The actual offset volatge.
mcm 0:511cdcc65d9d 115 *
mcm 0:511cdcc65d9d 116 *
mcm 0:511cdcc65d9d 117 * @author Manuel Caballero
mcm 0:511cdcc65d9d 118 * @date 25/September/2017
mcm 0:511cdcc65d9d 119 * @version 25/September/2017 The ORIGIN
mcm 0:511cdcc65d9d 120 * @pre NaN.
mcm 0:511cdcc65d9d 121 * @warning This test has to be perfomed at 0A ( no current through
mcm 0:511cdcc65d9d 122 * the sensor at all ).
mcm 0:511cdcc65d9d 123 */
mcm 0:511cdcc65d9d 124 float VAC::VAC_SetAutoOffset ( float VoltageDivider, float ADC_Vref )
mcm 0:511cdcc65d9d 125 {
mcm 0:511cdcc65d9d 126 uint32_t i = 0;
mcm 0:511cdcc65d9d 127 float myVoltage = 0;
mcm 0:511cdcc65d9d 128
mcm 0:511cdcc65d9d 129
mcm 0:511cdcc65d9d 130 // Calculate the average, get a new measurement every 0.25s
mcm 0:511cdcc65d9d 131 for ( i = 0; i < CALIBRATION_AVERAGE; i++ ){
mcm 0:511cdcc65d9d 132 myVoltage += _INPUT.read();
mcm 0:511cdcc65d9d 133 wait ( 0.25 );
mcm 0:511cdcc65d9d 134 }
mcm 0:511cdcc65d9d 135
mcm 0:511cdcc65d9d 136 myVoltage /= ( float )CALIBRATION_AVERAGE;
mcm 0:511cdcc65d9d 137
mcm 0:511cdcc65d9d 138
mcm 0:511cdcc65d9d 139 // Store the offset
mcm 0:511cdcc65d9d 140 _VAC_V_OFFSET = 0.0 - ( VoltageDivider * myVoltage * ADC_Vref ); // Offset is calculated at 0A
mcm 0:511cdcc65d9d 141
mcm 0:511cdcc65d9d 142
mcm 0:511cdcc65d9d 143
mcm 0:511cdcc65d9d 144 return _VAC_V_OFFSET;
mcm 0:511cdcc65d9d 145 }