Prius IPM controller

Dependencies:   mbed

Fork of analoghalls5_5 by N K

Committer:
bwang
Date:
Mon Mar 09 11:33:14 2015 +0000
Revision:
24:f1ff9c7256b5
Parent:
22:46d164aa4f1c
Child:
25:0003b824dd7d
Added multi-channel debug logger in debug/, set up #channels and depth in main(), write in log() function. motor stops turning after trace is captured, requires reset to restart

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 11:dccbaa9274c5 1 #include "includes.h"
bwang 11:dccbaa9274c5 2 #include "transforms.h"
bwang 11:dccbaa9274c5 3 #include "filters.h"
bwang 11:dccbaa9274c5 4 #include "context.h"
bwang 11:dccbaa9274c5 5 #include "core.h"
bwang 11:dccbaa9274c5 6 #include "meta.h"
bwang 11:dccbaa9274c5 7 #include "sensors.h"
bwang 24:f1ff9c7256b5 8 #include "debug.h"
bwang 11:dccbaa9274c5 9
bwang 11:dccbaa9274c5 10 void fast(Context *c) {
bwang 11:dccbaa9274c5 11 float alpha, beta, d, q, ref_d, ref_q, valpha, vbeta;
nki 21:da41c08e51bc 12 float I_b, I_c, angle, d_filtered, q_filtered, vd, vq;
bwang 24:f1ff9c7256b5 13 dbg_ib = I_b = c->motor->GetCurrentB();
bwang 24:f1ff9c7256b5 14 dbg_ic = I_c = c->motor->GetCurrentC();
bwang 24:f1ff9c7256b5 15 dbg_angle = angle = c->motor->GetPosition();
bwang 24:f1ff9c7256b5 16
bwang 24:f1ff9c7256b5 17 Clarke(-(I_b + I_c), I_b, &alpha, &beta);
bwang 11:dccbaa9274c5 18 Parke(alpha, beta, angle, &d, &q);
bwang 11:dccbaa9274c5 19
bwang 24:f1ff9c7256b5 20 dbg_d_filtered = d_filtered = c->filter_d->Update(d);
bwang 24:f1ff9c7256b5 21 dbg_q_filtered = q_filtered = c->filter_q->Update(q);
bwang 11:dccbaa9274c5 22
bwang 11:dccbaa9274c5 23 c->reference->GetReference(angle, c->user->throttle, &ref_d, &ref_q);
bwang 24:f1ff9c7256b5 24
bwang 24:f1ff9c7256b5 25 dbg_ref_d = ref_d;
bwang 24:f1ff9c7256b5 26 dbg_ref_q = ref_q;
bwang 24:f1ff9c7256b5 27 dbg_loop_d = vd = c->pid_d->Update(ref_d, d_filtered);
bwang 24:f1ff9c7256b5 28 dbg_loop_q = vq = c->pid_q->Update(ref_q, q_filtered);
bwang 11:dccbaa9274c5 29
bwang 11:dccbaa9274c5 30 vd = 0.0f;
bwang 11:dccbaa9274c5 31 vq = c->user->throttle;
bwang 11:dccbaa9274c5 32
bwang 11:dccbaa9274c5 33 InverseParke(vd, vq, angle, &valpha, &vbeta);
bwang 11:dccbaa9274c5 34
bwang 11:dccbaa9274c5 35 c->modulator->Update(valpha, vbeta);
bwang 11:dccbaa9274c5 36 }
bwang 11:dccbaa9274c5 37
bwang 11:dccbaa9274c5 38 void slow(Context *c) {
bwang 11:dccbaa9274c5 39 c->user->UpdateThrottle();
bwang 11:dccbaa9274c5 40 }
bwang 11:dccbaa9274c5 41
bwang 11:dccbaa9274c5 42 void debug(Context *c) {
bwang 24:f1ff9c7256b5 43 //c->serial->printf("%f %f\n\r", dbg_d_filtered, dbg_q_filtered);
bwang 24:f1ff9c7256b5 44 }
bwang 24:f1ff9c7256b5 45
bwang 24:f1ff9c7256b5 46 void log(Context *c) {
bwang 24:f1ff9c7256b5 47 //c->debugger->Write(0, dbg_ib);
bwang 24:f1ff9c7256b5 48 //c->debugger->Write(1, dbg_ic);
bwang 11:dccbaa9274c5 49 }