working-est copy with class-based code. still open loop

Dependencies:   mbed

Fork of analoghalls6 by N K

Revision:
3:0a2396597e0d
Parent:
2:8696a62a4077
Child:
4:fdadf4a3577a
--- 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;
 };