stock mbed AnalogReads current loop closed and working

Dependencies:   mbed

Fork of priustroller_2 by N K

Committer:
bwang
Date:
Thu Apr 16 22:55:21 2015 +0000
Revision:
42:e4f35ff78d91
Parent:
36:11766b5da6ed
Child:
46:bd39f7e6e37f
Scrapped everything for some test code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 11:dccbaa9274c5 1 #include "includes.h"
bwang 11:dccbaa9274c5 2 #include "core.h"
bwang 11:dccbaa9274c5 3 #include "meta.h"
bwang 11:dccbaa9274c5 4 #include "sensors.h"
bwang 11:dccbaa9274c5 5 #include "filters.h"
bwang 11:dccbaa9274c5 6 #include "context.h"
bwang 24:f1ff9c7256b5 7 #include "debug.h"
bwang 11:dccbaa9274c5 8
bwang 24:f1ff9c7256b5 9 float debug_registers[32];
bwang 16:c10d0aa3c0e1 10
bwang 42:e4f35ff78d91 11 Context::Context(bool timed) {
bwang 11:dccbaa9274c5 12 _index = 0;
bwang 42:e4f35ff78d91 13 if (timed) {
bwang 42:e4f35ff78d91 14 _time_upd_ticker = new Ticker();
bwang 42:e4f35ff78d91 15 _time_upd_ticker->attach_us(this, &Context::upd_function, 50);
bwang 42:e4f35ff78d91 16 } else {
bwang 42:e4f35ff78d91 17 _time_upd_ticker = NULL;
bwang 42:e4f35ff78d91 18 }
bwang 11:dccbaa9274c5 19 }
bwang 11:dccbaa9274c5 20
bwang 11:dccbaa9274c5 21 void Context::ConfigureOutputs(PinName oa, PinName ob, PinName oc, PinName en) {
bwang 11:dccbaa9274c5 22 _oa = oa;
bwang 11:dccbaa9274c5 23 _ob = ob;
bwang 11:dccbaa9274c5 24 _oc = oc;
bwang 11:dccbaa9274c5 25 _en = en;
bwang 11:dccbaa9274c5 26 }
bwang 11:dccbaa9274c5 27
bwang 11:dccbaa9274c5 28 void Context::ConfigureCurrentSensors(PinName ib_pin, PinName ic_pin, float scale, float filter_strength) {
bwang 11:dccbaa9274c5 29 _ib_pin = ib_pin;
bwang 11:dccbaa9274c5 30 _ic_pin = ic_pin;
bwang 11:dccbaa9274c5 31 _scale = scale;
bwang 11:dccbaa9274c5 32 _filter_strength = filter_strength;
bwang 11:dccbaa9274c5 33 }
bwang 11:dccbaa9274c5 34
bwang 26:d00561c7bf43 35 void Context::ConfigureIdPidController(float ki, float kp, float kd, float pidmax, float pidmin) {
bwang 26:d00561c7bf43 36 _dki = ki;
bwang 26:d00561c7bf43 37 _dkp = kp;
bwang 26:d00561c7bf43 38 _dkd = kd;
bwang 26:d00561c7bf43 39 _dpidmax = pidmax;
bwang 26:d00561c7bf43 40 _dpidmin = pidmin;
bwang 26:d00561c7bf43 41 }
bwang 26:d00561c7bf43 42
bwang 26:d00561c7bf43 43
bwang 26:d00561c7bf43 44 void Context::ConfigureIqPidController(float ki, float kp, float kd, float pidmax, float pidmin) {
bwang 26:d00561c7bf43 45 _qki = ki;
bwang 26:d00561c7bf43 46 _qkp = kp;
bwang 26:d00561c7bf43 47 _qkd = kd;
bwang 26:d00561c7bf43 48 _qpidmax = pidmax;
bwang 26:d00561c7bf43 49 _qpidmin = pidmin;
bwang 11:dccbaa9274c5 50 }
bwang 11:dccbaa9274c5 51
nki 36:11766b5da6ed 52 void Context::ConfigureThrottle(PinName throttle_pin, float min, float max, float th_filter_strength) {
bwang 11:dccbaa9274c5 53 _throttle_pin = throttle_pin;
bwang 11:dccbaa9274c5 54 _min = min;
bwang 11:dccbaa9274c5 55 _max = max;
nki 36:11766b5da6ed 56 _th_filter_strength = th_filter_strength;
bwang 11:dccbaa9274c5 57 }
bwang 11:dccbaa9274c5 58
bwang 11:dccbaa9274c5 59 void Context::ConfigurePositionSensor(PinName pos_a_pin, PinName pos_b_pin, float cal1_a, float cal2_a, float cal1_b, float cal2_b, float offset) {
bwang 11:dccbaa9274c5 60 _pos_a_pin = pos_a_pin;
bwang 11:dccbaa9274c5 61 _pos_b_pin = pos_b_pin;
bwang 11:dccbaa9274c5 62 _cal1_a = cal1_a;
bwang 13:79e247e54d78 63 _cal2_a = cal2_a;
bwang 11:dccbaa9274c5 64 _cal1_b = cal1_b;
bwang 11:dccbaa9274c5 65 _cal2_b = cal2_b;
bwang 11:dccbaa9274c5 66 _offset = offset;
bwang 11:dccbaa9274c5 67 }
bwang 11:dccbaa9274c5 68
bwang 11:dccbaa9274c5 69 void Context::ConfigureReference(float max_current) {
bwang 11:dccbaa9274c5 70 _max_current = max_current;
bwang 11:dccbaa9274c5 71 }
bwang 11:dccbaa9274c5 72
bwang 11:dccbaa9274c5 73 void Context::AttachCallBack(void (*f)(Context *), int freq) {
bwang 11:dccbaa9274c5 74 _call_times[_index] = 0;
bwang 11:dccbaa9274c5 75 _call_periods[_index] = 1000000 / freq;
bwang 11:dccbaa9274c5 76 _callbacks[_index++] = f;
bwang 11:dccbaa9274c5 77 }
bwang 11:dccbaa9274c5 78
nki 33:e7b132029bae 79 void Context::Start() {
bwang 42:e4f35ff78d91 80 if (_time_upd_ticker == NULL) return;
bwang 42:e4f35ff78d91 81
nki 33:e7b132029bae 82 InitData();
nki 33:e7b132029bae 83
bwang 11:dccbaa9274c5 84 for (;;) {
bwang 11:dccbaa9274c5 85 for (int i = 0; i < _index; i++) {
bwang 11:dccbaa9274c5 86 if (_time - _call_times[i] >= _call_periods[i]) {
bwang 11:dccbaa9274c5 87 (*_callbacks[i])(this);
bwang 11:dccbaa9274c5 88 _call_times[i] = _time;
bwang 11:dccbaa9274c5 89 }
bwang 11:dccbaa9274c5 90 }
bwang 11:dccbaa9274c5 91 }
bwang 11:dccbaa9274c5 92 }
bwang 11:dccbaa9274c5 93
bwang 24:f1ff9c7256b5 94 void Context::ConfigureDebugger(int debugger_channels, int debugger_size) {
bwang 24:f1ff9c7256b5 95 _debugger_channels = debugger_channels;
bwang 24:f1ff9c7256b5 96 _debugger_size = debugger_size;
bwang 24:f1ff9c7256b5 97 }
bwang 24:f1ff9c7256b5 98
bwang 11:dccbaa9274c5 99 void Context::InitData() {
bwang 13:79e247e54d78 100 sense_p = new AnalogHallPositionSensor(_pos_a_pin, _pos_b_pin, _cal1_a, _cal2_a, _cal1_b, _cal2_b, _offset);
nki 33:e7b132029bae 101 sense_ib = new AnalogCurrentSensor(_ib_pin, _scale);
nki 33:e7b132029bae 102 sense_ic = new AnalogCurrentSensor(_ic_pin, _scale);
bwang 11:dccbaa9274c5 103 throttle = new Throttle(_throttle_pin, _min, _max);
bwang 11:dccbaa9274c5 104 sense_bus = new VoltageSensor();
bwang 11:dccbaa9274c5 105 sense_t_motor = new TempSensor();
bwang 11:dccbaa9274c5 106 sense_t_inverter = new TempSensor();
bwang 11:dccbaa9274c5 107
bwang 26:d00561c7bf43 108 pid_d = new PidController(_dki, _dkp, _dkd, _dpidmax, _dpidmin);
bwang 26:d00561c7bf43 109 pid_q = new PidController(_qki, _qkp, _qkd, _qpidmax, _qpidmin);
bwang 11:dccbaa9274c5 110
nki 33:e7b132029bae 111 motor = new Motor(sense_ic, sense_ib, sense_p, sense_t_motor);
bwang 11:dccbaa9274c5 112 inverter = new Inverter(_oa, _ob, _oc, _en, sense_bus, sense_t_inverter);
bwang 11:dccbaa9274c5 113 user = new User(throttle);
bwang 19:280c62c71cf8 114 modulator = new SvmModulator(inverter);
bwang 11:dccbaa9274c5 115 reference = new SynchronousReferenceSynthesizer(_max_current);
bwang 11:dccbaa9274c5 116 filter_d = new MeanFilter(_filter_strength);
bwang 11:dccbaa9274c5 117 filter_q = new MeanFilter(_filter_strength);
nki 36:11766b5da6ed 118 filter_th = new MeanFilter(_th_filter_strength);
nki 36:11766b5da6ed 119
bwang 17:fd6771a6685a 120
nki 33:e7b132029bae 121 serial = new Serial(USBTX, USBRX);
nki 33:e7b132029bae 122 serial->baud(115200);
nki 33:e7b132029bae 123 serial->printf("%s\n\r", "Init Serial Communications");
bwang 24:f1ff9c7256b5 124
bwang 24:f1ff9c7256b5 125 debugger = new BufferedDebugger(this, _debugger_channels, _debugger_size);
bwang 11:dccbaa9274c5 126 }
bwang 11:dccbaa9274c5 127
bwang 11:dccbaa9274c5 128 void Context::upd_function() {
bwang 11:dccbaa9274c5 129 _time += 50;
bwang 11:dccbaa9274c5 130 }