rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
tc_4.cpp
Go to the documentation of this file.
1#include "pch.h"
2
3#include "tc_4.h"
4
5#if EFI_TCU
7static SimplePwm pcPwm("Pressure Control");
8
22
24 if (gear != getCurrentGear()) {
26 isShifting = true;
27 measureShiftTime(gear);
28 }
29
30 // set torque converter and pressure control state
31 setTccState(gear);
32 setPcState(gear);
33
34 setCurrentGear(gear);
35
37
38 float time = isShiftCompleted();
39 // 0 means shift is not completed
40 if (time != 0) {
41 lastShiftTime = time;
42 isShifting = false;
43 }
44}
45
47 // disable if shifting
48 if (isShifting) {
50 return;
51 }
52
55 if (!tps.Valid || !vss.Valid) {
56 return;
57 }
58 // only enable TC in gear 4
59 if (gear == GEAR_4) {
60 int lockSpeed = interpolate2d(tps.Value, config->tcu_tccTpsBins, config->tcu_tccLockSpeed);
61 int unlockSpeed = interpolate2d(tps.Value, config->tcu_tccTpsBins, config->tcu_tccUnlockSpeed);
62 if (vss.Value > lockSpeed) {
63 // torqueConverterDuty is only used for a gauge
66 } else if (vss.Value < unlockSpeed) {
69 }
70 } else {
73 }
74}
75
77 uint8_t (*pcts)[efi::size(config->tcu_pcAirmassBins)];
78
79 switch (gear) {
80 case REVERSE:
81 pcts = &config->tcu_pcValsR;
82 break;
83 case NEUTRAL:
84 pcts = &config->tcu_pcValsN;
85 break;
86 case GEAR_1:
87 if (isShifting && shiftingFrom == GEAR_2) {
88 pcts = &config->tcu_pcVals21;
89 } else {
90 pcts = &config->tcu_pcVals1;
91 }
92 break;
93 case GEAR_2:
94 if (isShifting && shiftingFrom == GEAR_1) {
95 pcts = &config->tcu_pcVals12;
96 } else if (isShifting && shiftingFrom == GEAR_3) {
97 pcts = &config->tcu_pcVals32;
98 } else {
99 pcts = &config->tcu_pcVals2;
100 }
101 break;
102 case GEAR_3:
103 if (isShifting && shiftingFrom == GEAR_2) {
104 pcts = &config->tcu_pcVals23;
105 } else if (isShifting && shiftingFrom == GEAR_4) {
106 pcts = &config->tcu_pcVals43;
107 } else {
108 pcts = &config->tcu_pcVals3;
109 }
110 break;
111 case GEAR_4:
112 if (isShifting && shiftingFrom == GEAR_3) {
113 pcts = &config->tcu_pcVals34;
114 } else {
115 pcts = &config->tcu_pcVals4;
116 }
117 break;
118 default:
119 break;
120 }
121
122 if (pcts) {
125 }
126}
127
131#endif // EFI_TCU
SingleTimerExecutor scheduler
Definition engine.h:271
EngineState engineState
Definition engine.h:344
OutputPin tcuPcSolenoid
Definition efi_gpio.h:135
OutputPin tcuTccOnoffSolenoid
Definition efi_gpio.h:133
float airflowEstimate
void setTccState(gear_e gear)
Definition tc_4.cpp:46
void setPcState(gear_e gear)
Definition tc_4.cpp:76
void initPin(const char *msg, brain_pin_e brainPin, pin_output_mode_e outputMode, bool forceInitWithFatalError=false)
Definition efi_gpio.cpp:711
void setValue(const char *msg, int logicValue, bool isForce=false)
Definition efi_gpio.cpp:604
virtual SensorResult get() const =0
void setSimplePwmDutyCycle(float dutyCycle) override
virtual gear_e getCurrentGear() const
Definition tcu.cpp:26
void measureShiftTime(gear_e)
Definition tcu.cpp:42
virtual gear_e setCurrentGear(gear_e)
Definition tcu.cpp:21
EnginePins enginePins
Definition efi_gpio.cpp:24
static EngineAccessor engine
Definition engine.h:413
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
void startSimplePwm(SimplePwm *state, const char *msg, Scheduler *executor, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *callback)
gear_e
@ GEAR_2
@ REVERSE
@ GEAR_1
@ GEAR_4
@ NEUTRAL
@ GEAR_3
@ DriverThrottleIntent
scaled_channel< uint8_t, 1, 5 > tcu_pcAirmassBins[TCU_TABLE_WIDTH]
Generic4TransmissionController generic4TransmissionController
Definition tc_4.cpp:6
Generic4TransmissionController * getGeneric4TransmissionController()
Definition tc_4.cpp:128
static SimplePwm pcPwm("Pressure Control")