working-est copy with class-based code. still open loop
Fork of analoghalls6 by
Diff: meta.h
- Revision:
- 3:0a2396597e0d
- Parent:
- 2:8696a62a4077
- Child:
- 4:fdadf4a3577a
diff -r 8696a62a4077 -r 0a2396597e0d meta.h --- a/meta.h Sun Mar 01 10:56:57 2015 +0000 +++ b/meta.h Mon Mar 02 01:24:37 2015 +0000 @@ -29,6 +29,23 @@ float _out_max, _out_min; }; +class ReferenceSynthesizer { +public: + ReferenceSynthesizer(float max_phase_current) {_max_phase_current = max_phase_current;} + virtual void GetReference(float angle, float *ref_d, float *ref_q) {*ref_d = 0; *ref_q = 0;} +protected: + static float LutSin(float theta); + static float LutCos(float theta); +protected: + float _max_phase_current; +}; + +class SynchronousReferenceSynthesizer : public ReferenceSynthesizer { +public: + SynchronousReferenceSynthesizer(float max_phase_current):ReferenceSynthesizer(max_phase_current) {} + virtual void GetReference(float angle, float *ref_d, float *ref_q); +}; + class StatusUpdater { public: StatusUpdater(Inverter *inverter, Motor *motor, User *user); @@ -49,20 +66,28 @@ class LoopDriver { public: - LoopDriver(Inverter *inverter, Motor *motor, User *user, Modulator *modulator, int update_frequency); + LoopDriver(Inverter *inverter, Motor *motor, User *user, PidController *pid_d, PidController *pid_q, + Modulator *modulator, float max_phase_current, 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); + static void Clarke(float a, float b, float *alpha, float *beta); + static void Parke(float alpha, float beta, float theta, float *d, float *q); + static void InverseParke(float d, float q, float theta, float *alpha, float *beta); private: static void update(); private: - Inverter *_inverter; - Motor *_motor; - User *_user; - Modulator *_modulator; + static float LutSin(float theta); + static float LutCos(float theta); +private: + static Inverter *_inverter; + static Motor *_motor; + static User *_user; + static PidController *_pid_d, *_pid_q; + static ReferenceSynthesizer *_reference; + static Modulator *_modulator; + Ticker _upd_ticker; + float _max_phase_current; int _update_frequency; };