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

Dependencies:   mbed

Fork of analoghalls6 by N K

Committer:
nki
Date:
Sun Mar 08 00:45:28 2015 +0000
Revision:
10:b4abecccec7a
Parent:
9:d3b70c15baa9
uguu;

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;
nki 9:d3b70c15baa9 14 _med_sample_rate = 100;
bwang 1:1f58bdcf2956 15 _slow_sample_rate = 10;
bwang 1:1f58bdcf2956 16
bwang 1:1f58bdcf2956 17 _time_ticker.attach_us(&time_upd_isr, 50);
bwang 1:1f58bdcf2956 18 }
bwang 1:1f58bdcf2956 19
nki 9:d3b70c15baa9 20 void StatusUpdater::Config(int fast_sample_rate, int med_sample_rate, int slow_sample_rate) {
bwang 1:1f58bdcf2956 21 _fast_sample_rate = fast_sample_rate;
nki 9:d3b70c15baa9 22 _med_sample_rate = med_sample_rate;
bwang 1:1f58bdcf2956 23 _slow_sample_rate = slow_sample_rate;
bwang 1:1f58bdcf2956 24 }
bwang 1:1f58bdcf2956 25
bwang 1:1f58bdcf2956 26 void StatusUpdater::time_upd_isr() {
nki 4:fdadf4a3577a 27 _time+= 50;
nki 4:fdadf4a3577a 28 }
nki 4:fdadf4a3577a 29
nki 4:fdadf4a3577a 30 float StatusUpdater::LutSin(float theta) {
nki 4:fdadf4a3577a 31 if (theta < 0.0f) theta += 360.0f;
nki 4:fdadf4a3577a 32 if (theta >= 360.0f) theta -= 360.0f;
nki 4:fdadf4a3577a 33 return sinetab[(int) theta];
nki 4:fdadf4a3577a 34 }
nki 4:fdadf4a3577a 35
nki 4:fdadf4a3577a 36 float StatusUpdater::LutCos(float theta) {
nki 4:fdadf4a3577a 37 return LutSin(90.0f - theta);
bwang 1:1f58bdcf2956 38 }
bwang 1:1f58bdcf2956 39
bwang 1:1f58bdcf2956 40 void StatusUpdater::Start() {
bwang 1:1f58bdcf2956 41 _time = 0;
bwang 1:1f58bdcf2956 42 int fast_us = 1000000 / _fast_sample_rate;
nki 9:d3b70c15baa9 43 int med_us = 1000000 / _med_sample_rate;
bwang 1:1f58bdcf2956 44 int slow_us = 1000000 / _slow_sample_rate;
bwang 1:1f58bdcf2956 45
bwang 1:1f58bdcf2956 46 int last_fast = 0;
nki 9:d3b70c15baa9 47 int last_med = 0;
bwang 1:1f58bdcf2956 48 int last_slow = 0;
bwang 1:1f58bdcf2956 49
nki 4:fdadf4a3577a 50 for(;;) {
bwang 1:1f58bdcf2956 51 if (_time - last_fast > fast_us) {
nki 6:99ee0ce47fb2 52
bwang 1:1f58bdcf2956 53 _motor->UpdateState();
bwang 1:1f58bdcf2956 54 _inverter->UpdateVbus();
bwang 1:1f58bdcf2956 55 last_fast = _time;
nki 6:99ee0ce47fb2 56
nki 9:d3b70c15baa9 57 //pc->printf("%f %f %f %f %f\n\r", _motor->angle, _motor->I_c, _motor->I_b, test_alpha, test_beta);
nki 9:d3b70c15baa9 58 //pc->printf("%f %f %f\n\r", test_DtcA, test_DtcB, test_DtcC);
nki 6:99ee0ce47fb2 59
bwang 1:1f58bdcf2956 60 }
nki 4:fdadf4a3577a 61
nki 9:d3b70c15baa9 62 if (_time - last_med > med_us) {
nki 9:d3b70c15baa9 63
nki 9:d3b70c15baa9 64 }
nki 9:d3b70c15baa9 65
bwang 1:1f58bdcf2956 66 if (_time - last_slow > slow_us) {
nki 6:99ee0ce47fb2 67
bwang 1:1f58bdcf2956 68 _user->UpdateState();
bwang 1:1f58bdcf2956 69 _motor->UpdateTemp();
bwang 1:1f58bdcf2956 70 _inverter->UpdateTemp();
bwang 1:1f58bdcf2956 71 last_slow = _time;
nki 10:b4abecccec7a 72
nki 10:b4abecccec7a 73
nki 10:b4abecccec7a 74 //pc->printf("%f %f\n\r", test_alpha, test_beta);
nki 10:b4abecccec7a 75
nki 10:b4abecccec7a 76 /*
nki 10:b4abecccec7a 77 for (int i = 0; i < 10000; i++) {
nki 10:b4abecccec7a 78 pc.printf("%f,", fbuffer[i]);
nki 10:b4abecccec7a 79 }
nki 10:b4abecccec7a 80 */
nki 10:b4abecccec7a 81
nki 6:99ee0ce47fb2 82
nki 6:99ee0ce47fb2 83 //pc->printf("%f %f\n\r", _inverter->va, _inverter->vb);
bwang 1:1f58bdcf2956 84 }
bwang 1:1f58bdcf2956 85 }
bwang 1:1f58bdcf2956 86 }