/*
 * mydsp.h
 *
 *  Created on: 2. 11. 2021
 *      Author: student
 */

#ifndef INC_MYDSP_H_
#define INC_MYDSP_H_

typedef struct
{
	float tau; // casova konstanta filtru
	float Ts;  // vzorkovaci perioda
	float c0; // konstanty filtru
	float c1;
	float out;
}fltLoPass_typedef;

/*
 * Ridici struktura pro PID regulator
 */
typedef struct
{
	float Kp;    //
	float Ki;    // Ki = Kp*Ts/Ti
	float Kd;    // Kd = Kp*Td/Ts
	float yik_1;  // akumulator integratoru
	float ek_1;   // pamet posledni reg. odchylky
	float lim_l;    // spodni limit
	float lim_h;    // horni limit
	float Ti;    // integracni casova  konstanta
	float Td;    // derivacni casova konstanta
	float Ts;    //  vzorkovaci perioda
}regPID_typedef;


/*
 * Ridici struktura pro PI regulator
 */
typedef struct
{
	float Kp;    //
	float Ki;    // Ki = Kp*Ts/Ti
	float yik_1;  // akumulator integratoru
	float lim_l;    // spodni limit
	float lim_h;    // horni limit
	float Ti;    // integracni casova  konstanta
	float Ts;    //  vzorkovaci perioda
}regPI_typedef;

/*
 * regPID: funkce regulatoru PID
 */
float regPID(float ek, regPID_typedef *par);

/*
 * regPID: funkce regulatoru PI
 */
float regPI(float ek, regPI_typedef *par);

/*
 * regPID_init: funkce pro inicializaci regulatoru PID
 */
void regPID_init( regPID_typedef *par);

/*
 * regPI_init: funkce pro inicializaci regulatoru PI
 */
void regPI_init( regPI_typedef *par);

/*
 * fltLoPass: filtr typu dolni propust 1. radu
 */
static inline void fltLoPass(float in, fltLoPass_typedef* par)
{
	par->out = in * par->c0 + par->out * par->c1;
	//par->out *= par->c1;
	//par->out += (in * par->c0);
}

void fltLoPass_init(fltLoPass_typedef* par);

#endif /* INC_MYDSP_H_ */
