ESC scaling fix

This commit is contained in:
Pavel Kirienko
2014-10-12 15:34:28 +04:00
parent 835bab9115
commit ced75deebe
2 changed files with 7 additions and 10 deletions
+6 -9
View File
@@ -93,25 +93,22 @@ void UavcanEscController::update_outputs(float *outputs, unsigned num_outputs)
*/ */
uavcan::equipment::esc::RawCommand msg; uavcan::equipment::esc::RawCommand msg;
static const int cmd_max = uavcan::equipment::esc::RawCommand::FieldTypes::cmd::RawValueType::max();
if (_armed) { if (_armed) {
for (unsigned i = 0; i < num_outputs; i++) { for (unsigned i = 0; i < num_outputs; i++) {
float scaled = (outputs[i] + 1.0F) * 0.5F * uavcan::equipment::esc::RawCommand::CMD_MAX; float scaled = (outputs[i] + 1.0F) * 0.5F * cmd_max;
if (scaled < 1.0F) { if (scaled < 1.0F) {
scaled = 1.0F; // Since we're armed, we don't want to stop it completely scaled = 1.0F; // Since we're armed, we don't want to stop it completely
} }
if (scaled < uavcan::equipment::esc::RawCommand::CMD_MIN) { if (scaled > cmd_max) {
scaled = uavcan::equipment::esc::RawCommand::CMD_MIN; scaled = cmd_max;
perf_count(_perfcnt_scaling_error); perf_count(_perfcnt_scaling_error);
} else if (scaled > uavcan::equipment::esc::RawCommand::CMD_MAX) {
scaled = uavcan::equipment::esc::RawCommand::CMD_MAX;
perf_count(_perfcnt_scaling_error);
} else {
; // Correct value
} }
msg.cmd.push_back(static_cast<unsigned>(scaled)); msg.cmd.push_back(static_cast<int>(scaled));
} }
} }
+1 -1
View File
@@ -73,7 +73,7 @@ private:
void orb_pub_timer_cb(const uavcan::TimerEvent &event); void orb_pub_timer_cb(const uavcan::TimerEvent &event);
static constexpr unsigned MAX_RATE_HZ = 100; ///< XXX make this configurable static constexpr unsigned MAX_RATE_HZ = 200; ///< XXX make this configurable
static constexpr unsigned ESC_STATUS_UPDATE_RATE_HZ = 5; static constexpr unsigned ESC_STATUS_UPDATE_RATE_HZ = 5;
static constexpr unsigned MAX_ESCS = uavcan::equipment::esc::RawCommand::FieldTypes::cmd::MaxSize; static constexpr unsigned MAX_ESCS = uavcan::equipment::esc::RawCommand::FieldTypes::cmd::MaxSize;