rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
vvt.h
Go to the documentation of this file.
1/*
2 * @file vvt.h
3 *
4 * @date Jun 26, 2016
5 * @author Andrey Belomutskiy, (c) 2012-2020
6 */
7
8#pragma once
9
11#include "pwm_generator_logic.h"
12#include "efi_pid.h"
13#include "vvt_generated.h"
14
15class ValueProvider3D;
16
17void initVvtActuators();
20OutputPin* getVvtOutputPin(int index);
21
22#define BANK_BY_INDEX(index) (index / CAMS_PER_BANK)
23#define CAM_BY_INDEX(index) (index % CAMS_PER_BANK)
24#define INDEX_BY_BANK_CAM(bank, cam) ((bank) * CAMS_PER_BANK + (cam))
25
26class VvtController : public EngineModule, public ClosedLoopController<angle_t, percent_t>, public vvt_s {
27public:
29
30 void init(const ValueProvider3D* targetMap, IPwm* pwm);
31
32 // EngineModule implementation
33 void onFastCallback() override;
35
36 // ClosedLoopController implementation
38
43
44 uint8_t getCamIndex() {
45 return m_cam;
46 }
47
48private:
49 const int index;
50 // Bank index, 0 or 1
51 const uint8_t m_bank;
52 // Cam index, 0 = intake, 1 = exhaust
53 const uint8_t m_cam;
54
56
57 // todo: live data?
59 bool m_isRpmHighEnough = false;
60 bool m_isCltWarmEnough = false;
61
62 const ValueProvider3D* m_targetMap = nullptr;
63 IPwm* m_pwm = nullptr;
64};
65
66// Unique types for each VVT so they can be engine modules
70
74
78
Single output pin reference and state.
Definition efi_output.h:49
Definition efi_pid.h:34
IPwm * m_pwm
Definition vvt.h:63
void onFastCallback() override
Definition vvt.cpp:37
bool m_engineRunningLongEnough
Definition vvt.h:58
expected< angle_t > getSetpoint() override
Definition vvt.cpp:66
void onConfigurationChange(engine_configuration_s const *previousConfig) override
Definition vvt.cpp:52
expected< percent_t > getOpenLoop(angle_t target) override
Definition vvt.cpp:90
bool m_isCltWarmEnough
Definition vvt.h:60
expected< percent_t > getClosedLoop(angle_t setpoint, angle_t observation) override
Definition vvt.cpp:106
void setOutput(expected< percent_t > outputValue) override
Definition vvt.cpp:122
Pid m_pid
Definition vvt.h:55
const ValueProvider3D * m_targetMap
Definition vvt.h:62
const uint8_t m_bank
Definition vvt.h:51
expected< angle_t > observePlant() override
Definition vvt.cpp:58
bool m_isRpmHighEnough
Definition vvt.h:59
void init(const ValueProvider3D *targetMap, IPwm *pwm)
Definition vvt.cpp:29
const int index
Definition vvt.h:49
const uint8_t m_cam
Definition vvt.h:53
uint8_t getCamIndex()
Definition vvt.h:44
VvtController1()
Definition vvt.h:68
VvtController2()
Definition vvt.h:72
VvtController3()
Definition vvt.h:76
VvtController4()
Definition vvt.h:80
void stopVvtControlPins()
Definition vvt.cpp:186
void initVvtActuators()
Definition vvt.cpp:192
void startVvtControlPins()
Definition vvt.cpp:180
OutputPin * getVvtOutputPin(int index)
Definition vvt.cpp:155