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

Dependencies:   mbed

Fork of analoghalls6 by N K

Revision:
1:1f58bdcf2956
Child:
2:8696a62a4077
--- /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
+