From 09a164d0ca22ee4ccb909a75762239a12f6b3f49 Mon Sep 17 00:00:00 2001 From: Paul Guenette Date: Mon, 25 Mar 2019 20:52:36 +0100 Subject: [PATCH 1/2] Add dc_bus_over_power error --- Firmware/MotorControl/axis.cpp | 14 ++++++++++++++ Firmware/MotorControl/axis.hpp | 1 + Firmware/MotorControl/odrive_main.h | 1 + 3 files changed, 16 insertions(+) diff --git a/Firmware/MotorControl/axis.cpp b/Firmware/MotorControl/axis.cpp index 80987c00..4f845eab 100644 --- a/Firmware/MotorControl/axis.cpp +++ b/Firmware/MotorControl/axis.cpp @@ -140,6 +140,20 @@ bool Axis::do_checks() { if (!(vbus_voltage <= board_config.dc_bus_overvoltage_trip_level)) error_ |= ERROR_DC_BUS_OVER_VOLTAGE; + // This is the same math that's used in update_brake_current(). Should we calculate IBus globally? + float Ibus_sum = 0.0f; + for (size_t i = 0; i < AXIS_COUNT; ++i) { + if (axes[i]->motor_.armed_state_ == Motor::ARMED_STATE_ARMED) { + Ibus_sum += axes[i]->motor_.current_control_.Ibus; + } + } + + if(board_config.power_supply_wattage >= 0.0f && + Ibus_sum * vbus_voltage > board_config.power_supply_wattage) + { + error_ |= ERROR_DC_BUS_OVER_POWER; + } + // Sub-components should use set_error which will propegate to this error_ motor_.do_checks(); encoder_.do_checks(); diff --git a/Firmware/MotorControl/axis.hpp b/Firmware/MotorControl/axis.hpp index 9e78fdab..3f240b87 100644 --- a/Firmware/MotorControl/axis.hpp +++ b/Firmware/MotorControl/axis.hpp @@ -21,6 +21,7 @@ public: ERROR_CONTROLLER_FAILED = 0x200, ERROR_POS_CTRL_DURING_SENSORLESS = 0x400, ERROR_WATCHDOG_TIMER_EXPIRED = 0x800, + ERROR_DC_BUS_OVER_POWER = 0x1000, }; enum State_t { diff --git a/Firmware/MotorControl/odrive_main.h b/Firmware/MotorControl/odrive_main.h index 677fb996..7065cd42 100644 --- a/Firmware/MotorControl/odrive_main.h +++ b/Firmware/MotorControl/odrive_main.h @@ -81,6 +81,7 @@ struct BoardConfig_t { // Date: Mon, 25 Mar 2019 20:54:38 +0100 Subject: [PATCH 2/2] Add power_supply_wattage to board config on protocol --- Firmware/communication/communication.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Firmware/communication/communication.cpp b/Firmware/communication/communication.cpp index 79982e64..2558adab 100644 --- a/Firmware/communication/communication.cpp +++ b/Firmware/communication/communication.cpp @@ -158,6 +158,7 @@ static inline auto make_obj_tree() { make_protocol_property("enable_ascii_protocol_on_usb", &board_config.enable_ascii_protocol_on_usb), make_protocol_property("dc_bus_undervoltage_trip_level", &board_config.dc_bus_undervoltage_trip_level), make_protocol_property("dc_bus_overvoltage_trip_level", &board_config.dc_bus_overvoltage_trip_level), + make_protocol_property("power_supply_wattage", &board_config.power_supply_wattage), #if HW_VERSION_MAJOR == 3 && HW_VERSION_MINOR >= 3 make_protocol_object("gpio1_pwm_mapping", make_protocol_definitions(board_config.pwm_mappings[0])), make_protocol_object("gpio2_pwm_mapping", make_protocol_definitions(board_config.pwm_mappings[1])),