N K
/
analoghalls6
motor spins
Fork of analoghalls5 by
statusupdater.cpp@6:99ee0ce47fb2, 2015-03-04 (annotated)
- Committer:
- nki
- Date:
- Wed Mar 04 15:33:32 2015 +0000
- Revision:
- 6:99ee0ce47fb2
- Parent:
- 5:ee1e6c84c302
3/4;
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; |
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(;;) { |
bwang | 1:1f58bdcf2956 | 47 | if (_time - last_fast > fast_us) { |
nki | 6:99ee0ce47fb2 | 48 | |
bwang | 1:1f58bdcf2956 | 49 | _motor->UpdateState(); |
bwang | 1:1f58bdcf2956 | 50 | _inverter->UpdateVbus(); |
bwang | 1:1f58bdcf2956 | 51 | last_fast = _time; |
nki | 6:99ee0ce47fb2 | 52 | |
nki | 6:99ee0ce47fb2 | 53 | pc->printf("%f %f %f %f %f\n\r", _motor->angle, _motor->I_c, _motor->I_b, test_alpha, test_beta); |
nki | 6:99ee0ce47fb2 | 54 | //pc->printf("%f %f %f %f\n\r", _motor->angle); |
nki | 6:99ee0ce47fb2 | 55 | |
bwang | 1:1f58bdcf2956 | 56 | } |
nki | 4:fdadf4a3577a | 57 | |
bwang | 1:1f58bdcf2956 | 58 | if (_time - last_slow > slow_us) { |
nki | 6:99ee0ce47fb2 | 59 | |
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; |
nki | 6:99ee0ce47fb2 | 64 | |
nki | 6:99ee0ce47fb2 | 65 | //pc->printf("%f %f\n\r", _inverter->va, _inverter->vb); |
bwang | 1:1f58bdcf2956 | 66 | } |
bwang | 1:1f58bdcf2956 | 67 | } |
bwang | 1:1f58bdcf2956 | 68 | } |