custom-board-bundle-sample-.../firmware/controllers/algo/idle_controller.h

45 lines
881 B
C

/**
* @file idle_controller.h
*
* @date May 22, 2013
* @author Andrey Belomutskiy, (c) 2012-2013
*/
#ifndef IDLE_CONTROLLER_H_
#define IDLE_CONTROLLER_H_
// 700‰ duty cycle by default
#define DEFAULT_IDLE_DUTY 600
#define DEFAULT_TARGET_RPM 1000
//#define DEFAULT_TARGET_RPM 2000
#define IDLE_PERIOD 1
// Per mil (1/1000) values
#define MIN_IDLE 100
#define MAX_IDLE 900
#define IDLE_INCREASE_STEP 5
#define IDLE_DECREASE_STEP 5
typedef struct {
int time;
int targetRpmRangeLeft, targetRpmRangeRight;
int value;
int timeOfLastIdleChange;
} IdleValveState;
void idleInit(IdleValveState *idle);
int getIdle(IdleValveState *idle, int currentRpm, int time);
void setTargetRpm(IdleValveState *idle, int targetRpm);
// todo: move these somewhere else!
int max(int i1, int i2);
int min(int i1, int i2);
float maxF(float i1, float i2);
#endif /* IDLE_CONTROLLER_H_ */