N K
/
analoghalls6
motor spins
Fork of analoghalls5 by
meta.h@2:8696a62a4077, 2015-03-01 (annotated)
- Committer:
- bwang
- Date:
- Sun Mar 01 10:56:57 2015 +0000
- Revision:
- 2:8696a62a4077
- Parent:
- 1:1f58bdcf2956
- Child:
- 3:0a2396597e0d
latest
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bwang | 1:1f58bdcf2956 | 1 | #ifndef __META_H |
bwang | 1:1f58bdcf2956 | 2 | #define __META_H |
bwang | 1:1f58bdcf2956 | 3 | |
bwang | 1:1f58bdcf2956 | 4 | #include "includes.h" |
bwang | 1:1f58bdcf2956 | 5 | #include "core.h" |
bwang | 1:1f58bdcf2956 | 6 | #include "sensors.h" |
bwang | 1:1f58bdcf2956 | 7 | |
bwang | 1:1f58bdcf2956 | 8 | class Modulator { |
bwang | 1:1f58bdcf2956 | 9 | public: |
bwang | 1:1f58bdcf2956 | 10 | Modulator(Inverter *inverter) {_inverter = inverter;} |
bwang | 1:1f58bdcf2956 | 11 | virtual void Update(float va, float vb) = 0; |
bwang | 1:1f58bdcf2956 | 12 | protected: |
bwang | 1:1f58bdcf2956 | 13 | Inverter* _inverter; |
bwang | 1:1f58bdcf2956 | 14 | }; |
bwang | 1:1f58bdcf2956 | 15 | |
bwang | 1:1f58bdcf2956 | 16 | class SinusoidalModulator: public Modulator { |
bwang | 1:1f58bdcf2956 | 17 | public: |
bwang | 1:1f58bdcf2956 | 18 | SinusoidalModulator(Inverter *inverter):Modulator(inverter) {} |
bwang | 1:1f58bdcf2956 | 19 | virtual void Update(float va, float vb); |
bwang | 1:1f58bdcf2956 | 20 | }; |
bwang | 1:1f58bdcf2956 | 21 | |
bwang | 1:1f58bdcf2956 | 22 | class PidController { |
bwang | 1:1f58bdcf2956 | 23 | public: |
bwang | 1:1f58bdcf2956 | 24 | PidController(float ki, float kp, float kd, float out_max, float out_min); |
bwang | 1:1f58bdcf2956 | 25 | float Update(float ref, float in); |
bwang | 1:1f58bdcf2956 | 26 | private: |
bwang | 1:1f58bdcf2956 | 27 | float _ki, _kp, _kd; |
bwang | 1:1f58bdcf2956 | 28 | float _last_in, _integral; |
bwang | 1:1f58bdcf2956 | 29 | float _out_max, _out_min; |
bwang | 1:1f58bdcf2956 | 30 | }; |
bwang | 1:1f58bdcf2956 | 31 | |
bwang | 1:1f58bdcf2956 | 32 | class StatusUpdater { |
bwang | 1:1f58bdcf2956 | 33 | public: |
bwang | 1:1f58bdcf2956 | 34 | StatusUpdater(Inverter *inverter, Motor *motor, User *user); |
bwang | 1:1f58bdcf2956 | 35 | void Config(int fast_sample_rate, int slow_sample_rate); |
bwang | 1:1f58bdcf2956 | 36 | void Start(); |
bwang | 1:1f58bdcf2956 | 37 | private: |
bwang | 1:1f58bdcf2956 | 38 | static void time_upd_isr(); |
bwang | 1:1f58bdcf2956 | 39 | private: |
bwang | 1:1f58bdcf2956 | 40 | Inverter *_inverter; |
bwang | 1:1f58bdcf2956 | 41 | Motor *_motor; |
bwang | 1:1f58bdcf2956 | 42 | User *_user; |
bwang | 1:1f58bdcf2956 | 43 | int _fast_sample_rate; |
bwang | 1:1f58bdcf2956 | 44 | int _slow_sample_rate; |
bwang | 1:1f58bdcf2956 | 45 | |
bwang | 1:1f58bdcf2956 | 46 | static unsigned long _time; |
bwang | 1:1f58bdcf2956 | 47 | Ticker _time_ticker; |
bwang | 1:1f58bdcf2956 | 48 | }; |
bwang | 1:1f58bdcf2956 | 49 | |
bwang | 1:1f58bdcf2956 | 50 | class LoopDriver { |
bwang | 1:1f58bdcf2956 | 51 | public: |
bwang | 1:1f58bdcf2956 | 52 | LoopDriver(Inverter *inverter, Motor *motor, User *user, Modulator *modulator, int update_frequency); |
bwang | 1:1f58bdcf2956 | 53 | void Start(); |
bwang | 1:1f58bdcf2956 | 54 | private: |
bwang | 1:1f58bdcf2956 | 55 | float Clarke(float a, float b, float c, float *alpha, float *beta); |
bwang | 1:1f58bdcf2956 | 56 | float Parke(float alpha, float beta, float *d, float *q); |
bwang | 1:1f58bdcf2956 | 57 | float InverseParke(float d, float q, float *alpha, float *beta); |
bwang | 1:1f58bdcf2956 | 58 | private: |
bwang | 1:1f58bdcf2956 | 59 | static void update(); |
bwang | 1:1f58bdcf2956 | 60 | private: |
bwang | 1:1f58bdcf2956 | 61 | Inverter *_inverter; |
bwang | 1:1f58bdcf2956 | 62 | Motor *_motor; |
bwang | 1:1f58bdcf2956 | 63 | User *_user; |
bwang | 1:1f58bdcf2956 | 64 | Modulator *_modulator; |
bwang | 1:1f58bdcf2956 | 65 | |
bwang | 1:1f58bdcf2956 | 66 | int _update_frequency; |
bwang | 2:8696a62a4077 | 67 | }; |
bwang | 1:1f58bdcf2956 | 68 | |
bwang | 1:1f58bdcf2956 | 69 | #endif |
bwang | 1:1f58bdcf2956 | 70 |