speeduino/speeduino/idle.h

71 lines
2.3 KiB
C
Raw Normal View History

#ifndef IDLE_H
#define IDLE_H
2016-04-06 20:28:13 -07:00
#include "globals.h"
#include "table.h"
#include BOARD_H //Note that this is not a real file, it is defined in globals.h.
2016-04-06 20:28:13 -07:00
#define IAC_ALGORITHM_NONE 0
#define IAC_ALGORITHM_ONOFF 1
#define IAC_ALGORITHM_PWM_OL 2
#define IAC_ALGORITHM_PWM_CL 3
#define IAC_ALGORITHM_STEP_OL 4
#define IAC_ALGORITHM_STEP_CL 5
Closed loop idle improve (#481) * Squashed commit of the following: commit c73f316fa5bf8c929a8fef5736f4a40045ea992f Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Wed Nov 25 21:53:45 2020 +0100 cleanup and fix merge issues commit 57f1e8c6c73bcfb699b18ac51a2ec646be822f55 Merge: 04478ca 131673d Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Wed Nov 25 18:59:58 2020 +0100 Merge branch 'Closedloop_idle_improvements' into ClosedLoopIdleImprovement commit 131673dc60417cbc773b0763d2f93e917c83325f Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Sun Nov 22 21:54:03 2020 +0100 more fiddeling with idle control commit e4406166cde91552027a0dfb7958d6894098f066 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Sun Nov 22 20:36:24 2020 +0100 More fiddeling with idle control commit 45822003d41e021e3ed93e8e14ce05479ddfd17b Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Sat Nov 21 14:59:32 2020 +0100 fix initial value commit ff8fadae7844bd8e5934ee0f311fbf5e0842ec29 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Thu Nov 19 23:14:14 2020 +0100 add TPS limit to prevent integeral windup. commit 7683b2e65569787b1c94eae6f4847cdadd394402 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Thu Nov 19 22:40:53 2020 +0100 cleanup idle.h commit da55ee9dbd76d65608bfb5b950bc948a498b9599 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Thu Nov 19 22:36:18 2020 +0100 Further improvement simplifying code for closedloop PID control with feedforward. make PWM output work Tinkering new Idle control working on closedloop idle Initial work on improving closed loop Idle control * reset platformio.ini Co-authored-by: Tjeerd <tjeerdie@users.noreply.github.com>
2020-12-01 13:37:58 -08:00
#define IAC_ALGORITHM_PWM_OLCL 6 //Openloop plus closedloop IAC control
#define STEPPER_FORWARD 0
#define STEPPER_BACKWARD 1
2015-08-20 06:21:27 -07:00
#define IDLE_TABLE_SIZE 10
2015-05-29 00:33:00 -07:00
enum StepperStatus {SOFF, STEPPING, COOLING}; //The 2 statuses that a stepper can have. STEPPING means that a high pulse is currently being sent and will need to be turned off at some point.
2015-05-29 00:33:00 -07:00
struct StepperIdle
{
int curIdleStep; //Tracks the current location of the stepper
int targetIdleStep; //What the targetted step is
2017-02-28 19:42:24 -08:00
volatile StepperStatus stepperStatus;
2015-05-29 00:33:00 -07:00
volatile unsigned long stepStartTime; //The time the curren
byte lessAirDirection;
byte moreAirDirection;
2015-05-29 00:33:00 -07:00
};
2015-08-20 06:21:27 -07:00
struct table2D iacClosedLoopTable;
struct table2D iacPWMTable;
struct table2D iacStepTable;
//Open loop tables specifically for cranking
struct table2D iacCrankStepsTable;
struct table2D iacCrankDutyTable;
2015-08-20 21:14:47 -07:00
struct StepperIdle idleStepper;
2015-08-20 06:21:27 -07:00
bool idleOn; //Simply tracks whether idle was on last time around
byte idleInitComplete = 99; //TRacks which idle method was initialised. 99 is a method that will never exist
2019-12-01 19:47:30 -08:00
unsigned int iacStepTime_uS;
2019-12-14 14:57:22 -08:00
unsigned int iacCoolTime_uS;
2016-12-11 04:23:54 -08:00
unsigned int completedHomeSteps;
2015-05-29 00:33:00 -07:00
volatile PORT_TYPE *idle_pin_port;
2019-03-03 14:15:57 -08:00
volatile PINMASK_TYPE idle_pin_mask;
volatile PORT_TYPE *idle2_pin_port;
2019-03-03 14:15:57 -08:00
volatile PINMASK_TYPE idle2_pin_mask;
volatile PORT_TYPE *idleUpOutput_pin_port;
volatile PINMASK_TYPE idleUpOutput_pin_mask;
2015-09-25 17:12:59 -07:00
volatile bool idle_pwm_state;
unsigned int idle_pwm_max_count; //Used for variable PWM frequency
2015-09-29 16:27:37 -07:00
volatile unsigned int idle_pwm_cur_value;
long idle_pid_target_value;
Closed loop idle improve (#481) * Squashed commit of the following: commit c73f316fa5bf8c929a8fef5736f4a40045ea992f Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Wed Nov 25 21:53:45 2020 +0100 cleanup and fix merge issues commit 57f1e8c6c73bcfb699b18ac51a2ec646be822f55 Merge: 04478ca 131673d Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Wed Nov 25 18:59:58 2020 +0100 Merge branch 'Closedloop_idle_improvements' into ClosedLoopIdleImprovement commit 131673dc60417cbc773b0763d2f93e917c83325f Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Sun Nov 22 21:54:03 2020 +0100 more fiddeling with idle control commit e4406166cde91552027a0dfb7958d6894098f066 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Sun Nov 22 20:36:24 2020 +0100 More fiddeling with idle control commit 45822003d41e021e3ed93e8e14ce05479ddfd17b Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Sat Nov 21 14:59:32 2020 +0100 fix initial value commit ff8fadae7844bd8e5934ee0f311fbf5e0842ec29 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Thu Nov 19 23:14:14 2020 +0100 add TPS limit to prevent integeral windup. commit 7683b2e65569787b1c94eae6f4847cdadd394402 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Thu Nov 19 22:40:53 2020 +0100 cleanup idle.h commit da55ee9dbd76d65608bfb5b950bc948a498b9599 Author: Tjeerd <tjeerdie@users.noreply.github.com> Date: Thu Nov 19 22:36:18 2020 +0100 Further improvement simplifying code for closedloop PID control with feedforward. make PWM output work Tinkering new Idle control working on closedloop idle Initial work on improving closed loop Idle control * reset platformio.ini Co-authored-by: Tjeerd <tjeerdie@users.noreply.github.com>
2020-12-01 13:37:58 -08:00
long FeedForwardTerm;
2020-07-29 16:15:24 -07:00
unsigned long idle_pwm_target_value;
2016-04-06 20:28:13 -07:00
long idle_cl_target_rpm;
byte idleCounter; //Used for tracking the number of calls to the idle control function
2015-09-25 17:12:59 -07:00
byte idleUpOutputHIGH = HIGH; // Used to invert the idle Up Output
byte idleUpOutputLOW = LOW; // Used to invert the idle Up Output
2015-05-29 00:33:00 -07:00
void initialiseIdle();
void initialiseIdleUpOutput();
void disableIdle();
void idleInterrupt();
#endif