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

Dependencies:   mbed

Fork of analoghalls6 by N K

Committer:
nki
Date:
Thu Mar 05 11:02:54 2015 +0000
Revision:
7:76d6ceb23e0d
Parent:
6:99ee0ce47fb2
uh what;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 1:1f58bdcf2956 1 #include "includes.h"
bwang 1:1f58bdcf2956 2 #include "core.h"
bwang 1:1f58bdcf2956 3 #include "sensors.h"
bwang 1:1f58bdcf2956 4 #include "meta.h"
nki 4:fdadf4a3577a 5 #include "lut.h"
bwang 1:1f58bdcf2956 6
bwang 1:1f58bdcf2956 7 unsigned long StatusUpdater::_time;
bwang 1:1f58bdcf2956 8
bwang 1:1f58bdcf2956 9 StatusUpdater::StatusUpdater(Inverter *inverter, Motor *motor, User *user) {
bwang 1:1f58bdcf2956 10 _inverter = inverter;
nki 4:fdadf4a3577a 11 _motor = motor;
bwang 1:1f58bdcf2956 12 _user = user;
bwang 1:1f58bdcf2956 13 _fast_sample_rate = 5000;
bwang 1:1f58bdcf2956 14 _slow_sample_rate = 10;
bwang 1:1f58bdcf2956 15
bwang 1:1f58bdcf2956 16 _time_ticker.attach_us(&time_upd_isr, 50);
bwang 1:1f58bdcf2956 17 }
bwang 1:1f58bdcf2956 18
bwang 1:1f58bdcf2956 19 void StatusUpdater::Config(int fast_sample_rate, int slow_sample_rate) {
bwang 1:1f58bdcf2956 20 _fast_sample_rate = fast_sample_rate;
bwang 1:1f58bdcf2956 21 _slow_sample_rate = slow_sample_rate;
bwang 1:1f58bdcf2956 22 }
bwang 1:1f58bdcf2956 23
bwang 1:1f58bdcf2956 24 void StatusUpdater::time_upd_isr() {
nki 4:fdadf4a3577a 25 _time+= 50;
nki 4:fdadf4a3577a 26 }
nki 4:fdadf4a3577a 27
nki 4:fdadf4a3577a 28 float StatusUpdater::LutSin(float theta) {
nki 4:fdadf4a3577a 29 if (theta < 0.0f) theta += 360.0f;
nki 4:fdadf4a3577a 30 if (theta >= 360.0f) theta -= 360.0f;
nki 4:fdadf4a3577a 31 return sinetab[(int) theta];
nki 4:fdadf4a3577a 32 }
nki 4:fdadf4a3577a 33
nki 4:fdadf4a3577a 34 float StatusUpdater::LutCos(float theta) {
nki 4:fdadf4a3577a 35 return LutSin(90.0f - theta);
bwang 1:1f58bdcf2956 36 }
bwang 1:1f58bdcf2956 37
bwang 1:1f58bdcf2956 38 void StatusUpdater::Start() {
bwang 1:1f58bdcf2956 39 _time = 0;
bwang 1:1f58bdcf2956 40 int fast_us = 1000000 / _fast_sample_rate;
bwang 1:1f58bdcf2956 41 int slow_us = 1000000 / _slow_sample_rate;
bwang 1:1f58bdcf2956 42
bwang 1:1f58bdcf2956 43 int last_fast = 0;
bwang 1:1f58bdcf2956 44 int last_slow = 0;
bwang 1:1f58bdcf2956 45
nki 4:fdadf4a3577a 46 for(;;) {
nki 7:76d6ceb23e0d 47
nki 7:76d6ceb23e0d 48 #ifdef __DEBUG
nki 7:76d6ceb23e0d 49 pc->printf("%f",LutSin(_motor->angle));
nki 7:76d6ceb23e0d 50 pc->printf("\n\r");
nki 7:76d6ceb23e0d 51 #endif
nki 7:76d6ceb23e0d 52
bwang 1:1f58bdcf2956 53 if (_time - last_fast > fast_us) {
bwang 1:1f58bdcf2956 54 _motor->UpdateState();
bwang 1:1f58bdcf2956 55 _inverter->UpdateVbus();
bwang 1:1f58bdcf2956 56 last_fast = _time;
bwang 1:1f58bdcf2956 57 }
nki 4:fdadf4a3577a 58
bwang 1:1f58bdcf2956 59 if (_time - last_slow > slow_us) {
bwang 1:1f58bdcf2956 60 _user->UpdateState();
bwang 1:1f58bdcf2956 61 _motor->UpdateTemp();
bwang 1:1f58bdcf2956 62 _inverter->UpdateTemp();
bwang 1:1f58bdcf2956 63 last_slow = _time;
bwang 1:1f58bdcf2956 64 }
nki 7:76d6ceb23e0d 65
bwang 1:1f58bdcf2956 66 }
bwang 1:1f58bdcf2956 67 }