Page 1 of 1

ограничение стартовых оборотов

Posted: Tue Feb 18, 2014 2:07 pm
by rus084
как насчет такого : если тормоз нажат или открыта дверь , не давать подниматься оборотам больше определенных ?
допустим у нас автомат , зачем мотор на старте крутить больше чем обороты максимального крутящего момента?
после езды на мотоциклах ездильщики постоянно поджимают тормоз и жмут газ , так мало того что стираются тормоза , так еще и обгонная муфта (центробежное сцепление) стирается .

Re: ограничение стартовых оборотов

Posted: Tue Feb 18, 2014 2:13 pm
by AndreyB
Какую задачу решает эта фича? Это защита от дурака?

Или это уже в сторону launch control?

Re: ограничение стартовых оборотов

Posted: Tue Feb 18, 2014 2:40 pm
by rus084
ну можно еще и стабилизировать стартовые обороты на уровне максимального крутящего момента

Re: ограничение стартовых оборотов

Posted: Tue Feb 18, 2014 3:32 pm
by meXanicus
У БМВ начала 2000-х если натянут ручник, то мотор не развивает обороты, вот защита, причем иногда нужная всем ))

Re: ограничение стартовых оборотов

Posted: Tue Apr 22, 2014 6:30 am
by rus084
вот набросал патчик

Code: Select all

Index: controllers/math/engine_math.cpp
===================================================================
--- controllers/math/engine_math.cpp   (revision 2629)
+++ controllers/math/engine_math.cpp   (working copy)
@@ -27,6 +27,7 @@
 #include "io_pins.h"
 #include "OutputSignalList.h"
 #include "trigger_decoder.h"
+#include "rpm_calculator.h"
 
 /*
  * default Volumetric Efficiency
@@ -241,7 +242,7 @@
       return getOneDegreeTimeMs(rpm) * angle;
    }
 
-   if (rpm > engineConfiguration->rpmHardLimit) {
+   if (engineNeedSkipStoke()) {
       // technically this could be implemented via interpolate2d by setting everything above rpmHardLimit to zero
       warning(OBD_PCM_Processor_Fault, "skipping spark due to rpm=%d", rpm);
       return 0;
@@ -347,3 +348,14 @@
 void setTimingLoadBin(engine_configuration_s *engineConfiguration, float l, float r) {
    setTableBin(engineConfiguration->ignitionLoadBins, IGN_LOAD_COUNT, l, r);
 }
+
+
+int engineNeedSkipStokeT(engine_configuration_s *engineConfiguration) {
+   if (getRpm() > engineConfiguration->rpmHardLimit) {
+      return 1;
+   }
+   // todo: add damageVoltage
+   // todo: probably add brakeRpmLimit
+   // todo: add sportMode to turn off this function (or part of function)
+   return 0;
+}
Index: controllers/math/engine_math.h
===================================================================
--- controllers/math/engine_math.h   (revision 2629)
+++ controllers/math/engine_math.h   (working copy)
@@ -56,6 +56,9 @@
 
 void setSingleCoilDwell(engine_configuration_s *engineConfiguration);
 
+int engineNeedSkipStokeT(engine_configuration_s *engineConfiguration);
+#define engineNeedSkipStoke() engineNeedSkipStokeT(engineConfiguration)
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
Index: controllers/trigger/main_trigger_callback.cpp
===================================================================
--- controllers/trigger/main_trigger_callback.cpp   (revision 2629)
+++ controllers/trigger/main_trigger_callback.cpp   (working copy)
@@ -43,6 +43,7 @@
 #include "histogram.h"
 #include "rfiutil.h"
 #include "LocalVersionHolder.h"
+#include "engine_math.h"
 
 static LocalVersionHolder localVersion;
 
@@ -87,6 +88,10 @@
    if (isCranking())
       scheduleMsg(&logger, "crankingFuel=%f for CLT=%fC", fuelMs, getCoolantTemperature());
 
+   if (engineNeedSkipStoke()) {
+      fuelMs = 0;
+   }
+
    scheduleOutput(event->actuator, delay * TICKS_IN_MS, fuelMs * TICKS_IN_MS, chTimeNow());
 }
 
замечания?

Re: ограничение стартовых оборотов

Posted: Tue Apr 22, 2014 1:26 pm
by AndreyB
Ну для начала не

Code: Select all

return 1;
а

Code: Select all

return TRUE;

Re: ограничение стартовых оборотов

Posted: Sun Apr 27, 2014 7:00 pm
by rus084
Это мелочь , ведь true=1?
а функция очень полезна будет , еще в Todo забыл добавить damageCLT - у вас чтобы при отказе термостата или вентилятора не закипело .

Re: ограничение стартовых оборотов

Posted: Sun Apr 27, 2014 7:10 pm
by AndreyB
нет, это не мелочь - код должен быть хорошим. ты же не считаешь, что ты можешь писать халтурно, а другие за тобой улучшат?

кстати

Code: Select all

if (engineNeedSkipStoke()) {
      fuelMs = 0;
  }
это просто неверно - потому что если пропускать, то нужно делать return - а не планироать сигнал нулевой длинны.

если посмотреть на то, какие методы откуда вызываются - то кажется должно хватать проверки один в правильном месте, тогда ни зажигания не топлива не будет просто потому что метод не будет вызван

Re: ограничение стартовых оборотов

Posted: Sun Apr 27, 2014 7:35 pm
by rus084
Переписать под класс с++ ?
Или в отдельном файле это разместить?

Re: ограничение стартовых оборотов

Posted: Sun Apr 27, 2014 7:38 pm
by AndreyB
Ээээ, неожиданный поворот.

Давай попробуем завтра голосом по скайпу разобраться?