Prius IPM controller

Dependencies:   mbed

Fork of analoghalls5_5 by N K

Revision:
33:e7b132029bae
Parent:
31:86b87913d8e1
--- a/context.cpp	Mon Mar 16 02:43:19 2015 +0000
+++ b/context.cpp	Mon Mar 16 03:09:48 2015 +0000
@@ -71,7 +71,9 @@
     _callbacks[_index++] = f;
 }
 
-void Context::Start() {    
+void Context::Start() {
+    InitData();
+    
     for (;;) {
         for (int i = 0; i < _index; i++) {
             if (_time - _call_times[i] >= _call_periods[i]) {
@@ -88,17 +90,9 @@
 }
 
 void Context::InitData() {
-    serial = new Serial(USBTX, USBRX);
-    serial->baud(115200);
-    serial->printf("%s\n\r", "Init Serial Communications");
-    
     sense_p = new AnalogHallPositionSensor(_pos_a_pin, _pos_b_pin, _cal1_a, _cal2_a, _cal1_b, _cal2_b, _offset);
-    channel_ib = NativeAnalogIn::PinToAdcChannel(_ib_pin);
-    channel_ic = NativeAnalogIn::PinToAdcChannel(_ic_pin);
-    AnalogIn dummyb = AnalogIn(_ib_pin);
-    AnalogIn dummyc = AnalogIn(_ic_pin);
-    _dummyb = dummyb;
-    _dummyc = dummyc;
+    sense_ib = new AnalogCurrentSensor(_ib_pin, _scale);
+    sense_ic = new AnalogCurrentSensor(_ic_pin, _scale);
     throttle = new Throttle(_throttle_pin, _min, _max);
     sense_bus = new VoltageSensor();
     sense_t_motor = new TempSensor();
@@ -107,7 +101,7 @@
     pid_d = new PidController(_dki, _dkp, _dkd, _dpidmax, _dpidmin);
     pid_q = new PidController(_qki, _qkp, _qkd, _qpidmax, _qpidmin);
     
-    motor = new Motor(sense_p, sense_t_motor);
+    motor = new Motor(sense_ic, sense_ib, sense_p, sense_t_motor);
     inverter = new Inverter(_oa, _ob, _oc, _en, sense_bus, sense_t_inverter);
     user = new User(throttle);
     modulator = new SvmModulator(inverter);
@@ -115,30 +109,9 @@
     filter_d = new MeanFilter(_filter_strength);
     filter_q = new MeanFilter(_filter_strength);
     
-    wait(1);
-    
-    double ib_mean, ic_mean;
-    TIM2->DIER = 0;
-    for (int i = 0; i < 100; i++) {
-        ADC1->SQR3 = 0;
-        ADC1->SQR3 |= channel_ib;
-        ADC1->CR2 |= ADC_CR2_SWSTART;
-        while ((ADC1->SR & 2) == 0){}
-        ib_mean += (float) ADC1->DR;
-        
-        ADC1->SQR3 = 0;
-        ADC1->SQR3 |= channel_ic;
-        ADC1->CR2 |= ADC_CR2_SWSTART;
-        while ((ADC1->SR & 2) == 0){}
-        ic_mean += (float) ADC1->DR;
-    }
-    TIM2->DIER = 1;
-    ib_mean /= 100.0f;
-    ib_mean /= 4095.0f;
-    ic_mean /= 100.0f;
-    ic_mean /= 4095.0f;
-    
-    motor->InitSensors((float) ib_mean, (float) ic_mean, _scale);
+    serial = new Serial(USBTX, USBRX);
+    serial->baud(115200);
+    serial->printf("%s\n\r", "Init Serial Communications");
     
     debugger = new BufferedDebugger(this, _debugger_channels, _debugger_size);
 }