working-est copy with class-based code. still open loop
Fork of analoghalls6 by
Diff: meta.h
- Revision:
- 1:1f58bdcf2956
- Child:
- 2:8696a62a4077
diff -r 54cf32d35f4d -r 1f58bdcf2956 meta.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meta.h Sun Mar 01 10:51:28 2015 +0000 @@ -0,0 +1,70 @@ +#ifndef __META_H +#define __META_H + +#include "includes.h" +#include "core.h" +#include "sensors.h" + +class Modulator { +public: + Modulator(Inverter *inverter) {_inverter = inverter;} + virtual void Update(float va, float vb) = 0; +protected: + Inverter* _inverter; +}; + +class SinusoidalModulator: public Modulator { +public: + SinusoidalModulator(Inverter *inverter):Modulator(inverter) {} + virtual void Update(float va, float vb); +}; + +class PidController { +public: + PidController(float ki, float kp, float kd, float out_max, float out_min); + float Update(float ref, float in); +private: + float _ki, _kp, _kd; + float _last_in, _integral; + float _out_max, _out_min; +}; + +class StatusUpdater { +public: + StatusUpdater(Inverter *inverter, Motor *motor, User *user); + void Config(int fast_sample_rate, int slow_sample_rate); + void Start(); +private: + static void time_upd_isr(); +private: + Inverter *_inverter; + Motor *_motor; + User *_user; + int _fast_sample_rate; + int _slow_sample_rate; + + static unsigned long _time; + Ticker _time_ticker; +}; + +class LoopDriver { +public: + LoopDriver(Inverter *inverter, Motor *motor, User *user, Modulator *modulator, int update_frequency); + void Start(); +private: + float Clarke(float a, float b, float c, float *alpha, float *beta); + float Parke(float alpha, float beta, float *d, float *q); + float InverseParke(float d, float q, float *alpha, float *beta); +private: + static void update(); +private: + Inverter *_inverter; + Motor *_motor; + User *_user; + Modulator *_modulator; + + int _update_frequency; +} + +#endif +