diff --git a/pages/pagemotorcomparison.cpp b/pages/pagemotorcomparison.cpp index b9d984604..20699ffcd 100644 --- a/pages/pagemotorcomparison.cpp +++ b/pages/pagemotorcomparison.cpp @@ -166,6 +166,8 @@ PageMotorComparison::PageMotorComparison(QWidget *parent) : connect(ui->testLiveUpdateBox, &QCheckBox::toggled, [this](bool checked) { (void)checked; settingChanged(); }); + connect(ui->testNegativeBox, &QCheckBox::toggled, + [this](bool checked) { (void)checked; settingChanged(); }); connect(ui->testRpmBox, QOverload::of(&QDoubleSpinBox::valueChanged), [this](double value) { (void)value; settingChanged(); }); @@ -387,7 +389,7 @@ bool PageMotorComparison::reloadConfigs() void PageMotorComparison::updateDataAndPlot(double posx, double yMin, double yMax) { - if (posx < 0.0) { + if (posx < 0.0 && !ui->testNegativeBox->isChecked()) { posx = 0.0; } @@ -668,14 +670,19 @@ void PageMotorComparison::on_testRunButton_clicked() auto plotTorqueSweep = [this, updateData, updateGraphs](QTableWidget *table, ConfigParams &config, TestParams param) { - double torque = ui->testTorqueBox->value(); + double torque = fabs(ui->testTorqueBox->value()); double rpm = ui->testRpmBox->value(); QVector xAxis; QVector > yAxes; QVector names; - for (double t = torque / 1000.0;t < torque;t += (torque / 1000.0)) { + double torque_start = -torque; + if (!ui->testNegativeBox->isChecked()) { + torque_start = torque / 1000.0; + } + + for (double t = torque_start;t < torque;t += (torque / 1000.0)) { MotorData md; md.update(config, rpm, t, param); xAxis.append(t); @@ -700,7 +707,12 @@ void PageMotorComparison::on_testRunButton_clicked() QVector > yAxes; QVector names; - for (double r = rpm / 1000.0;r < rpm;r += (rpm / 1000.0)) { + double rpm_start = -rpm; + if (!ui->testNegativeBox->isChecked()) { + rpm_start = rpm / 1000.0; + } + + for (double r = rpm_start;r < rpm;r += (rpm / 1000.0)) { MotorData md; md.update(config, r, torque, param); xAxis.append(r); diff --git a/pages/pagemotorcomparison.h b/pages/pagemotorcomparison.h index 702f6cdaf..9e14db81d 100644 --- a/pages/pagemotorcomparison.h +++ b/pages/pagemotorcomparison.h @@ -135,7 +135,7 @@ private slots: double rps_out = rpm * 2.0 * M_PI / 60.0; double rps_motor = rps_out * params.gearing; double e_rps = rps_motor * pole_pairs; - double t_nl = (3.0 / 2.0) * i_nl * lambda * pole_pairs; // No-load torque from core losses + double t_nl = SIGN(rpm) * (3.0 / 2.0) * i_nl * lambda * pole_pairs; // No-load torque from core losses iq = ((torque_motor_shaft + t_nl) * (2.0 / 3.0) / (lambda * pole_pairs)); id = -params.fwCurrent; @@ -169,7 +169,9 @@ private slots: loss_tot = loss_motor_tot + loss_gearing; p_out = rps_motor * torque_motor_shaft * params.motorNum * params.gearingEfficiency; p_in = rps_motor * torque_motor_shaft * params.motorNum + loss_motor_tot; - efficiency = p_out / p_in; + + efficiency = fmin(fabs(p_out), fabs(p_in)) / fmax(fabs(p_out), fabs(p_in)); + vq = r * iq + e_rps * (lambda + id * ld); vd = r * id - e_rps * lq * iq; vbus_min = (3.0 / 2.0) * sqrt(vq * vq + vd * vd) / (sqrt(3.0) / 2.0) / 0.95; diff --git a/pages/pagemotorcomparison.ui b/pages/pagemotorcomparison.ui index 17ef060ad..79651206a 100644 --- a/pages/pagemotorcomparison.ui +++ b/pages/pagemotorcomparison.ui @@ -88,10 +88,13 @@ 2 - - + + + + false + - End RPM + Start RPM @@ -102,6 +105,9 @@ 0 + + 10.000000000000000 + 999999.000000000000000 @@ -109,35 +115,32 @@ 100.000000000000000 - 8000.000000000000000 + 500.000000000000000 - - + + false + + Base Torque + - Pwr: + B: - W + Nm - 1 - - - 0.100000000000000 + 3 - 999999.000000000000000 + 999.000000000000000 - 100.000000000000000 - - - 2000.000000000000000 + 0.200000000000000 @@ -152,6 +155,9 @@ 3 + + -9999.000000000000000 + 9999.000000000000000 @@ -163,13 +169,38 @@ - - + + false + + Pwr: + + + W + + + 1 + + + 0.100000000000000 + + + 999999.000000000000000 + + + 100.000000000000000 + + + 2000.000000000000000 + + + + + - Start RPM + End RPM @@ -180,9 +211,6 @@ 0 - - 10.000000000000000 - 999999.000000000000000 @@ -190,7 +218,7 @@ 100.000000000000000 - 500.000000000000000 + 8000.000000000000000 @@ -219,36 +247,18 @@ - - - - false - + + - Base Torque - - - B: - - - Nm - - - 3 - - - 999.000000000000000 + Include negative RPM and Torque in tests. - - 0.200000000000000 + + Include Negative - - -