123

Dependencies:   mbed

Fork of LG by igor Apu

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