working-est copy with class-based code. still open loop
Fork of analoghalls6 by
statusupdater.cpp@10:b4abecccec7a, 2015-03-08 (annotated)
- Committer:
- nki
- Date:
- Sun Mar 08 00:45:28 2015 +0000
- Revision:
- 10:b4abecccec7a
- Parent:
- 9:d3b70c15baa9
uguu;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |