baseline build

Dependencies:   FastPWM mbed-os mbed

IOControl.cpp

Committer:
jrhodes5150
Date:
2017-06-19
Revision:
1:909f2393bc01
Parent:
0:8a420ac6394e

File content as of revision 1:909f2393bc01:


#include "IOControl.h"
#include "SPIDAC.h"
#include "math.h"

IOControl::IOControl(void) :
    hvEn(p26, 0),
    shutdown(p17, 0),
    activate(p25),
    hvFault(p29, PullUp),
    hvControl(p18)
{
    PWM.Enable(false);
    requestedOutputVoltage = 0;

}

void IOControl::Activate(void)
{
    hvControl = (((HV_MAX) * (requestedOutputVoltage)) / ( MAX_OUTPUT_VOLTAGE));

    PWM.Enable(true);
    hvEn = false;
    shutdown = false;
}

void IOControl::Deactivate(void)
{
    hvControl = 0;
    PWM.Enable(false);
    hvEn = true;
    shutdown = true;
    activate.reset();
}

bool IOControl::isActivateSwitchOn(void)
{
    if( activate.read() == 0)
        return true ;
    return false;
}
bool IOControl::hasFalling(void)
{
    if (activate.falling() > 0)
        return true;
    return false;
}

double IOControl::GetOutputVoltage(void)
{
    return ((((hvControl) * (MAX_OUTPUT_VOLTAGE)) / (HV_MAX)));
}

void IOControl::SetOutputVoltage(double outputVoltage)
{
    mutex.lock();
    requestedOutputVoltage = outputVoltage;
    mutex.unlock();
}
void IOControl::ChangeOutputVoltage(double outputVoltage)
{
    mutex.lock();
    hvControl = (((HV_MAX) * (outputVoltage)) / ( MAX_OUTPUT_VOLTAGE));
    mutex.unlock();
}
double IOControl::GetActualPWMFrequency(void)
{
    mutex.lock();
    double result = PWM.GetActualFrequency();
    mutex.unlock();
    return result;
}

void IOControl::SetPWMFrequency(double freq)
{
    PWM.SetState(freq);
}

void IOControl::SetLimits( double voltageLim, double currentLim )
{
    double vLim, iLim;
    iLim = (((DAC_LIM_MAX ) * (currentLim )) / ( DAC_VOLTAGE_MAX));
    // Map the voltage from 0 to 3.3V into 0 to 2048
    vLim = (((DAC_LIM_MAX) * (voltageLim )) / ( DAC_VOLTAGE_MAX));
    SPIDACSend((uint16_t)vLim, (uint16_t)iLim);
}

double IOControl::GetHVControl(void)
{
    double result = hvControl * 3.3;
    return result;
}
void IOControl::SetHVControl(double control)
{
    hvControl = (control/3.3) * HV_MAX;
}
void IOControl::HVcalControl(double control)
{
    hvControl = control;
}