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

Dependencies:   mbed

Fork of analoghalls6 by N K

meta.h

Committer:
bwang
Date:
2015-03-01
Revision:
1:1f58bdcf2956
Child:
2:8696a62a4077

File content as of revision 1:1f58bdcf2956:

#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