rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
lua_pid.h
Go to the documentation of this file.
1#pragma once
2
3#include "pch.h"
4
5struct LuaPid final {
6 LuaPid() = default;
7
8 LuaPid(float kp, float ki, float kd, float min, float max)
10 {
11 m_params.pFactor = kp;
12 m_params.iFactor = ki;
13 m_params.dFactor = kd;
14
15 m_params.offset = 0;
17 m_params.minValue = min;
18 m_params.maxValue = max;
19
21 criticalError("Lua: minValue %d/maxValue %d", m_params.minValue, m_params.maxValue);
22 }
23
24 m_lastUpdate.reset();
25 }
26
27 float get(float target, float input) {
28#if EFI_UNIT_TEST
29 // this is how we avoid zero dt
30 advanceTimeUs(1000);
31#endif
32
33 float dt = m_lastUpdate.getElapsedSecondsAndReset(getTimeNowNt());
34
35 return m_pid.getOutput(target, input, dt);
36 }
37
38 void setOffset(float offset) {
40 reset();
41 }
42
43 void reset() {
44 m_pid.reset();
45 }
46
47private:
51};
52
53// todo: use templates and reduce duplication between LuaPid and LuaIndustrialPid?
54struct LuaIndustrialPid final {
55 LuaIndustrialPid() = default;
56
57 LuaIndustrialPid(float kp, float ki, float kd, float min, float max)
58 : m_pid(&m_params)
59 {
60 m_params.pFactor = kp;
61 m_params.iFactor = ki;
62 m_params.dFactor = kd;
63
64 m_params.offset = 0;
66 m_params.minValue = min;
67 m_params.maxValue = max;
68
70 criticalError("Lua: minValue %d/maxValue %d", m_params.minValue, m_params.maxValue);
71 }
72
73 m_lastUpdate.reset();
74 }
75
76 float get(float target, float input) {
77#if EFI_UNIT_TEST
78 // this is how we avoid zero dt
79 advanceTimeUs(1000);
80#endif
81
82 float dt = m_lastUpdate.getElapsedSecondsAndReset(getTimeNowNt());
83
84 return m_pid.getOutput(target, input, dt);
85 }
86
87 void setOffset(float offset) {
89 reset();
90 }
91
92 void setDerivativeFilterLoss(float derivativeFilterLoss) {
93 m_pid.derivativeFilterLoss = derivativeFilterLoss;
94 reset();
95 }
96
97 void setAntiwindupFreq(float antiwindupFreq) {
98 m_pid.antiwindupFreq = antiwindupFreq;
99 reset();
100 }
101
102 void reset() {
103 m_pid.reset();
104 }
105
106private:
110};
Definition efi_pid.h:34
virtual void reset()
Definition efi_pid.cpp:103
float getOutput(float target, float input)
Definition efi_pid.cpp:56
float getOutput(float target, float input, float dTime) override
Definition efi_pid.cpp:249
float antiwindupFreq
Definition efi_pid.h:123
float derivativeFilterLoss
Definition efi_pid.h:124
efitick_t getTimeNowNt()
Definition efitime.cpp:19
void advanceTimeUs(int us)
void setOffset(float offset)
Definition lua_pid.h:87
Timer m_lastUpdate
Definition lua_pid.h:108
LuaIndustrialPid(float kp, float ki, float kd, float min, float max)
Definition lua_pid.h:57
void setDerivativeFilterLoss(float derivativeFilterLoss)
Definition lua_pid.h:92
LuaIndustrialPid()=default
void setAntiwindupFreq(float antiwindupFreq)
Definition lua_pid.h:97
float get(float target, float input)
Definition lua_pid.h:76
PidIndustrial m_pid
Definition lua_pid.h:107
float get(float target, float input)
Definition lua_pid.h:27
void reset()
Definition lua_pid.h:43
pid_s m_params
Definition lua_pid.h:50
LuaPid()=default
Pid m_pid
Definition lua_pid.h:48
void setOffset(float offset)
Definition lua_pid.h:38
LuaPid(float kp, float ki, float kd, float min, float max)
Definition lua_pid.h:8
Timer m_lastUpdate
Definition lua_pid.h:49
uint16_t offset
Definition tunerstudio.h:0