baseline build
Dependencies: FastPWM mbed-os mbed
IOControl.cpp@0:8a420ac6394e, 2017-06-19 (annotated)
- Committer:
- jrhodes5150
- Date:
- Mon Jun 19 15:55:51 2017 +0000
- Revision:
- 0:8a420ac6394e
initial build - baseline;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |