baseline build

Dependencies:   FastPWM mbed-os mbed

Committer:
jrhodes5150
Date:
Mon Jun 19 16:04:47 2017 +0000
Revision:
1:909f2393bc01
Parent:
0:8a420ac6394e
added fastPWM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jrhodes5150 0:8a420ac6394e 1
jrhodes5150 0:8a420ac6394e 2 #include "IOControl.h"
jrhodes5150 0:8a420ac6394e 3 #include "SPIDAC.h"
jrhodes5150 0:8a420ac6394e 4 #include "math.h"
jrhodes5150 0:8a420ac6394e 5
jrhodes5150 0:8a420ac6394e 6 IOControl::IOControl(void) :
jrhodes5150 0:8a420ac6394e 7 hvEn(p26, 0),
jrhodes5150 0:8a420ac6394e 8 shutdown(p17, 0),
jrhodes5150 0:8a420ac6394e 9 activate(p25),
jrhodes5150 0:8a420ac6394e 10 hvFault(p29, PullUp),
jrhodes5150 0:8a420ac6394e 11 hvControl(p18)
jrhodes5150 0:8a420ac6394e 12 {
jrhodes5150 0:8a420ac6394e 13 PWM.Enable(false);
jrhodes5150 0:8a420ac6394e 14 requestedOutputVoltage = 0;
jrhodes5150 0:8a420ac6394e 15
jrhodes5150 0:8a420ac6394e 16 }
jrhodes5150 0:8a420ac6394e 17
jrhodes5150 0:8a420ac6394e 18 void IOControl::Activate(void)
jrhodes5150 0:8a420ac6394e 19 {
jrhodes5150 0:8a420ac6394e 20 hvControl = (((HV_MAX) * (requestedOutputVoltage)) / ( MAX_OUTPUT_VOLTAGE));
jrhodes5150 0:8a420ac6394e 21
jrhodes5150 0:8a420ac6394e 22 PWM.Enable(true);
jrhodes5150 0:8a420ac6394e 23 hvEn = false;
jrhodes5150 0:8a420ac6394e 24 shutdown = false;
jrhodes5150 0:8a420ac6394e 25 }
jrhodes5150 0:8a420ac6394e 26
jrhodes5150 0:8a420ac6394e 27 void IOControl::Deactivate(void)
jrhodes5150 0:8a420ac6394e 28 {
jrhodes5150 0:8a420ac6394e 29 hvControl = 0;
jrhodes5150 0:8a420ac6394e 30 PWM.Enable(false);
jrhodes5150 0:8a420ac6394e 31 hvEn = true;
jrhodes5150 0:8a420ac6394e 32 shutdown = true;
jrhodes5150 0:8a420ac6394e 33 activate.reset();
jrhodes5150 0:8a420ac6394e 34 }
jrhodes5150 0:8a420ac6394e 35
jrhodes5150 0:8a420ac6394e 36 bool IOControl::isActivateSwitchOn(void)
jrhodes5150 0:8a420ac6394e 37 {
jrhodes5150 0:8a420ac6394e 38 if( activate.read() == 0)
jrhodes5150 0:8a420ac6394e 39 return true ;
jrhodes5150 0:8a420ac6394e 40 return false;
jrhodes5150 0:8a420ac6394e 41 }
jrhodes5150 0:8a420ac6394e 42 bool IOControl::hasFalling(void)
jrhodes5150 0:8a420ac6394e 43 {
jrhodes5150 0:8a420ac6394e 44 if (activate.falling() > 0)
jrhodes5150 0:8a420ac6394e 45 return true;
jrhodes5150 0:8a420ac6394e 46 return false;
jrhodes5150 0:8a420ac6394e 47 }
jrhodes5150 0:8a420ac6394e 48
jrhodes5150 0:8a420ac6394e 49 double IOControl::GetOutputVoltage(void)
jrhodes5150 0:8a420ac6394e 50 {
jrhodes5150 0:8a420ac6394e 51 return ((((hvControl) * (MAX_OUTPUT_VOLTAGE)) / (HV_MAX)));
jrhodes5150 0:8a420ac6394e 52 }
jrhodes5150 0:8a420ac6394e 53
jrhodes5150 0:8a420ac6394e 54 void IOControl::SetOutputVoltage(double outputVoltage)
jrhodes5150 0:8a420ac6394e 55 {
jrhodes5150 0:8a420ac6394e 56 mutex.lock();
jrhodes5150 0:8a420ac6394e 57 requestedOutputVoltage = outputVoltage;
jrhodes5150 0:8a420ac6394e 58 mutex.unlock();
jrhodes5150 0:8a420ac6394e 59 }
jrhodes5150 0:8a420ac6394e 60 void IOControl::ChangeOutputVoltage(double outputVoltage)
jrhodes5150 0:8a420ac6394e 61 {
jrhodes5150 0:8a420ac6394e 62 mutex.lock();
jrhodes5150 0:8a420ac6394e 63 hvControl = (((HV_MAX) * (outputVoltage)) / ( MAX_OUTPUT_VOLTAGE));
jrhodes5150 0:8a420ac6394e 64 mutex.unlock();
jrhodes5150 0:8a420ac6394e 65 }
jrhodes5150 0:8a420ac6394e 66 double IOControl::GetActualPWMFrequency(void)
jrhodes5150 0:8a420ac6394e 67 {
jrhodes5150 0:8a420ac6394e 68 mutex.lock();
jrhodes5150 0:8a420ac6394e 69 double result = PWM.GetActualFrequency();
jrhodes5150 0:8a420ac6394e 70 mutex.unlock();
jrhodes5150 0:8a420ac6394e 71 return result;
jrhodes5150 0:8a420ac6394e 72 }
jrhodes5150 0:8a420ac6394e 73
jrhodes5150 0:8a420ac6394e 74 void IOControl::SetPWMFrequency(double freq)
jrhodes5150 0:8a420ac6394e 75 {
jrhodes5150 0:8a420ac6394e 76 PWM.SetState(freq);
jrhodes5150 0:8a420ac6394e 77 }
jrhodes5150 0:8a420ac6394e 78
jrhodes5150 0:8a420ac6394e 79 void IOControl::SetLimits( double voltageLim, double currentLim )
jrhodes5150 0:8a420ac6394e 80 {
jrhodes5150 0:8a420ac6394e 81 double vLim, iLim;
jrhodes5150 0:8a420ac6394e 82 iLim = (((DAC_LIM_MAX ) * (currentLim )) / ( DAC_VOLTAGE_MAX));
jrhodes5150 0:8a420ac6394e 83 // Map the voltage from 0 to 3.3V into 0 to 2048
jrhodes5150 0:8a420ac6394e 84 vLim = (((DAC_LIM_MAX) * (voltageLim )) / ( DAC_VOLTAGE_MAX));
jrhodes5150 0:8a420ac6394e 85 SPIDACSend((uint16_t)vLim, (uint16_t)iLim);
jrhodes5150 0:8a420ac6394e 86 }
jrhodes5150 0:8a420ac6394e 87
jrhodes5150 0:8a420ac6394e 88 double IOControl::GetHVControl(void)
jrhodes5150 0:8a420ac6394e 89 {
jrhodes5150 0:8a420ac6394e 90 double result = hvControl * 3.3;
jrhodes5150 0:8a420ac6394e 91 return result;
jrhodes5150 0:8a420ac6394e 92 }
jrhodes5150 0:8a420ac6394e 93 void IOControl::SetHVControl(double control)
jrhodes5150 0:8a420ac6394e 94 {
jrhodes5150 0:8a420ac6394e 95 hvControl = (control/3.3) * HV_MAX;
jrhodes5150 0:8a420ac6394e 96 }
jrhodes5150 0:8a420ac6394e 97 void IOControl::HVcalControl(double control)
jrhodes5150 0:8a420ac6394e 98 {
jrhodes5150 0:8a420ac6394e 99 hvControl = control;
jrhodes5150 0:8a420ac6394e 100 }