123
Fork of LG by
Diff: DeviceISACS.c
- Revision:
- 183:c7a9c309086c
- Parent:
- 177:672ef279c8e0
--- a/DeviceISACS.c Sun Jul 10 05:35:08 2016 +0000 +++ b/DeviceISACS.c Sun Jul 31 06:19:02 2016 +0000 @@ -50,6 +50,8 @@ device.isacs.output.settings.transfer.code[1] = 2048; device.isacs.output.settings.start.voltage = 0x000c7fff; //+12.5V start device.isacs.output.settings.reset.voltage = 0x00077fff; //+7.5V if regulator disabled at reset time + device.isacs.output.state.min = 0x00077fff; //+7.5V + device.isacs.output.state.max = 0x000c7fff; //+12.5V } void InitISACSOutputState(void){ @@ -160,7 +162,7 @@ return device.isacs.input.settings.transfer.V[device.isacs.input.settings.transfer.points - 1]; } -uint32_t isacsCorrection(int32_t error) { +int32_t isacsCorrection(int32_t error) { int32_t e1, e2; for (uint8_t i = 1; i < device.isacs.regulator.settings.transfer.points; i++) { e1 = device.isacs.regulator.settings.transfer.error[i - 1]; @@ -178,7 +180,7 @@ return device.isacs.regulator.settings.transfer.correction[device.isacs.regulator.settings.transfer.points - 1]; } -int32_t isacsOutput(uint32_t voltage) { +uint32_t isacsOutput(int32_t voltage) { int32_t v1, v2; for (uint8_t i = 1; i < device.isacs.output.settings.transfer.points; i++) { v1 = device.isacs.output.settings.transfer.voltage[i - 1]; @@ -210,4 +212,98 @@ device.controller.SSP.out[0] = isacsOutput(device.isacs.output.state.voltage); } } +} + +int16_t var_HF_reg(void) { + //Value: HFO voltage - V - -13.2V...10.7V + //Internal format: device.isacs.output.state.voltage - device.isacs.output.state.min...device.isacs.output.state.max [V] in 16.16 format + //Output format: -8192 * (V + 1.3) / 3 - dimensionless units in 16.0 format + + //Voltage: V + 1.3 = (device.isacs.output.state.voltage + 0x00014ccd) / 65536 + //Output: -8192 * (V + 1.3) / 3 = -(device.isacs.output.state.voltage + 0x00014ccd) / 24 + + int32_t V = -(device.isacs.output.state.voltage + 0x00014ccd) / 24; + if (V > 32767) V = 32767; + if (V < -32768) V = -32768; + + return (int16_t)V; +} + +int16_t var_HF_dif(void) { + //Value: HFO regulator input signal error - [V] + //Internal format: device.isacs.regulator.state.error - [V] in 16.16 format + //Output format: (V / 2.0) * 15000 - dimensionless units in 16.0 format + + //Voltage: V = device.isacs.regulator.state.error / 65536 + //Output: (V / 2.0) * 15000 = device.isacs.regulator.state.error * 1875 / 16384 + + int32_t V = device.isacs.regulator.state.error * 1875 / 16384; + if (V > 32767) V = 32767; + if (V < 0) V = 0; + + return (int16_t)V; +} + +uint16_t param_HF_ref(void) { + //Value: HFO regulator input signal reference voltage - V - 2V + //Internal format: device.isacs.regulator.state.reference - [V] in 16.16 format + //Output format: (V / 2.0) * 15000 - dimensionless units in 16.0 format + + //Voltage: V = device.isacs.regulator.state.reference / 65536 + //Output: V = device.isacs.regulator.state.reference * 1875 / 16384 + + //TODO: state/settings + + int32_t V = device.isacs.regulator.state.reference * 1875 / 16384; + if (V > 32767) V = 32767; + if (V < 0) V = 0; + + return (uint16_t)V; +} + +//HF_scl s16 HFO gain factor +uint16_t param_HF_scl(void) { + //Value: ISACS output regulator scale - S - -13.2V...10.7V + //Internal format: device.isacs.regulator.state.scale - dimensionless units in 16.16 format + //Output format: S / 65536 - dimensionless units in 16.0 format + + int32_t scl = device.isacs.regulator.state.scale / 65536; + if (scl > 32767) scl = 32767; + if (scl < 0) scl = 0; + + return (uint16_t)scl; +} + +uint16_t param_HF_min(void) { + //Value: HFO maximum voltage - V - -13.2V...10.7V + //Internal format: device.isacs.output.state.max - [V] in 16.16 format + //Output format: -8192 * (V + 1.3) / 3 - dimensionless units in 16.0 format + + //Voltage: V + 1.3 = (device.isacs.output.state.max + 0x00014ccd) / 65536 + //Output: -8192 * (V + 1.3) / 3 = -(device.isacs.output.state.max + 0x00014ccd) / 24 + + //TODO: state/settings + + int32_t V = -(device.isacs.output.state.max + 0x00014ccd) / 24; + if (V > 32767) V = 32767; + if (V < -32768) V = -32768; + + return (uint16_t)V; +} + +uint16_t param_HF_max(void) { + //Value: HFO minimum voltage - V - -13.2V...10.7V + //Internal format: device.isacs.output.state.min - [V] in 16.16 format + //Output format: -8192 * (V + 1.3) / 3 - dimensionless units in 16.0 format + + //Voltage: V + 1.3 = (device.isacs.output.state.min + 0x00014ccd) / 65536 + //Output: -8192 * (V + 1.3) / 3 = -(device.isacs.output.state.min + 0x00014ccd) / 24 + + //TODO: state/settings + + int32_t V = -(device.isacs.output.state.min + 0x00014ccd) / 24; + if (V > 32767) V = 32767; + if (V < -32768) V = -32768; + + return (uint16_t)V; } \ No newline at end of file