th Over current
td {{state['over_current'] ? 'True' : 'False'}}
th.separator
- th Measurement error
- td {{state['measurement_error'] ? 'True' : 'False'}}
+ th Sense error
+ td {{state['sense_error'] ? 'True' : 'False'}}
tr
th Shunt overload
td {{state['shunt_overload'] ? 'True' : 'False'}}
th Motor overload
td {{state['motor_overload'] ? 'True' : 'False'}}
tr
- th Load 1 over temp
- td {{state['load1_overtemp'] ? 'True' : 'False'}}
+ th Load 1 shutdown
+ td {{state['load1_shutdown'] ? 'True' : 'False'}}
th.separator
- th Load 2 over temp
- td {{state['load2_overtemp'] ? 'True' : 'False'}}
+ th Load 2 shutdown
+ td {{state['load2_shutdown'] ? 'True' : 'False'}}
table.measurements
tr
enum {
- UNDER_VOLTAGE_FLAG = 1 << 0,
- OVER_VOLTAGE_FLAG = 1 << 1,
- OVER_CURRENT_FLAG = 1 << 2,
- MEASUREMENT_ERROR_FLAG = 1 << 3,
- SHUNT_OVERLOAD_FLAG = 1 << 4,
- MOTOR_OVERLOAD_FLAG = 1 << 5,
+ UNDER_VOLTAGE_FLAG = 1 << 0,
+ OVER_VOLTAGE_FLAG = 1 << 1,
+ OVER_CURRENT_FLAG = 1 << 2,
+ SENSE_ERROR_FLAG = 1 << 3,
+ SHUNT_OVERLOAD_FLAG = 1 << 4,
+ MOTOR_OVERLOAD_FLAG = 1 << 5,
// Non fatal
- LOAD1_OVERTEMP_FLAG = 1 << 6,
- LOAD2_OVERTEMP_FLAG = 1 << 7,
+ LOAD1_SHUTDOWN_FLAG = 1 << 6,
+ LOAD2_SHUTDOWN_FLAG = 1 << 7,
};
max_current < regs[LOAD1_REG] ||
max_current < regs[LOAD2_REG] ||
max_current < regs[VDD_REG])
- shutdown(MEASUREMENT_ERROR_FLAG);
+ shutdown(SENSE_ERROR_FLAG);
}
if (CURRENT_MAX < get_total_current()) flags |= OVER_CURRENT_FLAG;
if (shunt_overload) flags |= SHUNT_OVERLOAD_FLAG;
if (MOTOR_SHUTDOWN_THRESH <= motor_overload) flags |= MOTOR_OVERLOAD_FLAG;
- if (loads[0].shutdown) flags |= LOAD1_OVERTEMP_FLAG;
- if (loads[1].shutdown) flags |= LOAD2_OVERTEMP_FLAG;
+ if (loads[0].shutdown) flags |= LOAD1_SHUTDOWN_FLAG;
+ if (loads[1].shutdown) flags |= LOAD2_SHUTDOWN_FLAG;
regs[FLAGS_REG] = flags;
if (flags & FATAL_FLAG_MASK) shutdown(flags);
FLAGS_REG = 7
# Must be kept in sync with pwr firmware
-UNDER_VOLTAGE_FLAG = 1 << 0
-OVER_VOLTAGE_FLAG = 1 << 1
-OVER_CURRENT_FLAG = 1 << 2
-MEASUREMENT_ERROR_FLAG = 1 << 3
-SHUNT_OVERLOAD_FLAG = 1 << 4
-MOTOR_OVERLOAD_FLAG = 1 << 5
-LOAD1_OVERTEMP_FLAG = 1 << 6
-LOAD2_OVERTEMP_FLAG = 1 << 7
+UNDER_VOLTAGE_FLAG = 1 << 0
+OVER_VOLTAGE_FLAG = 1 << 1
+OVER_CURRENT_FLAG = 1 << 2
+SENSE_ERROR_FLAG = 1 << 3
+SHUNT_OVERLOAD_FLAG = 1 << 4
+MOTOR_OVERLOAD_FLAG = 1 << 5
+LOAD1_SHUTDOWN_FLAG = 1 << 6
+LOAD2_SHUTDOWN_FLAG = 1 << 7
reg_names = 'temp vin vout motor load1 load2 vdd pwr_flags'.split()
def check_fault(self, var, status):
status = bool(status)
- if status != self.ctrl.state.get(var, False):
+ if not self.ctrl.state.has(var) or status != self.ctrl.state.get(var):
self.ctrl.state.set(var, status)
if status: return True
if self.check_fault('over_current', flags & OVER_CURRENT_FLAG):
log.error('Device total current limit exceeded')
- if self.check_fault('measurement_error',
- flags & MEASUREMENT_ERROR_FLAG):
- log.error('Power measurement error')
+ if self.check_fault('sense_error', flags & SENSE_ERROR_FLAG):
+ log.error('Power sense error')
if self.check_fault('shunt_overload', flags & SHUNT_OVERLOAD_FLAG):
log.error('Power shunt overload')
if self.check_fault('motor_overload', flags & MOTOR_OVERLOAD_FLAG):
log.error('Motor power overload')
- if self.check_fault('load1_overtemp', flags & LOAD1_OVERTEMP_FLAG):
+ if self.check_fault('load1_shutdown', flags & LOAD1_SHUTDOWN_FLAG):
log.error('Load 1 over temperature shutdown')
- if self.check_fault('load2_overtemp', flags & LOAD2_OVERTEMP_FLAG):
+ if self.check_fault('load2_shutdown', flags & LOAD2_SHUTDOWN_FLAG):
log.error('Load 2 over temperature shutdown')