Load limit duty cycle
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Fri, 16 Feb 2018 04:17:31 +0000 (20:17 -0800)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Fri, 16 Feb 2018 04:17:31 +0000 (20:17 -0800)
src/pwr/config.h
src/pwr/main.c

index f7a90a7760db4d359068db1e89a1192ab2f77d98..237eb2996300c97065aa9346c258b928cfa324aa 100644 (file)
@@ -83,7 +83,6 @@ enum {
 #define LOAD_CURRENT_MAX 8
 #define CURRENT_OVERTEMP 16 // Should read ~21A but over 11.86A is faulty
 #define LOAD_LIMIT_TICKS 10
-#define LOAD_SHUTDOWN_THRESH 10
 #define MOTOR_SHUTDOWN_THRESH 10
 #define VOLTAGE_SETTLE_COUNT 5
 #define VOLTAGE_SETTLE_PERIOD 20 // ms
index 8c94efa5dcc0be8f7386ad9798b970fd1acadc8c..71dd1e42f3184268a76b97e0c9dd1a80f1a6e2e8 100644 (file)
@@ -42,7 +42,7 @@ typedef struct {
   const uint8_t pin;
   volatile uint8_t limit;
   volatile uint8_t count;
-  volatile uint8_t shutdown;
+  volatile uint8_t lockout;
 } load_t;
 
 
@@ -187,24 +187,18 @@ static void measure_nominal_voltage() {
 
 
 static void check_load(load_t *load) {
-  if (LOAD_SHUTDOWN_THRESH <= load->shutdown) return;
-
   // Check overtemp
   bool overtemp = CURRENT_OVERTEMP * 100 < regs[load->reg];
-  if (limited_counter(&load->shutdown, overtemp, LOAD_SHUTDOWN_THRESH)) {
-    IO_PORT_CLR(load->pin); // Lo
-    IO_DDR_SET(load->pin);  // Output
+  if (overtemp && !load->lockout) {
+    load->lockout = 64;
+    if (load->limit < LOAD_LIMIT_TICKS) load->limit++;
   }
 
-  // Check and adjust limit
-  bool overcurrent = LOAD_CURRENT_MAX * 100 < regs[load->reg];
-  limited_counter(&load->limit, overcurrent, LOAD_LIMIT_TICKS);
+  if (load->lockout) load->lockout--;
 }
 
 
 void limit_load(load_t *load) {
-  if (LOAD_SHUTDOWN_THRESH <= load->shutdown) return;
-
   // Limit
   if (load->count < load->limit) {
     IO_PORT_CLR(load->pin); // Lo
@@ -441,8 +435,8 @@ int main() {
     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 (LOAD_SHUTDOWN_THRESH <= loads[0].shutdown) flags |= LOAD1_OVERTEMP_FLAG;
-    if (LOAD_SHUTDOWN_THRESH <= loads[1].shutdown) flags |= LOAD2_OVERTEMP_FLAG;
+    if (loads[0].limit == LOAD_LIMIT_TICKS) flags |= LOAD1_OVERTEMP_FLAG;
+    if (loads[1].limit == LOAD_LIMIT_TICKS) flags |= LOAD2_OVERTEMP_FLAG;
     if (loads[0].limit) flags |= LOAD1_LIMITING_FLAG;
     if (loads[1].limit) flags |= LOAD2_LIMITING_FLAG;