working-est copy with class-based code. still open loop

Dependencies:   mbed

Fork of analoghalls6 by N K

inverter.cpp

Committer:
nki
Date:
2015-03-08
Revision:
10:b4abecccec7a
Parent:
6:99ee0ce47fb2
Child:
7:76d6ceb23e0d

File content as of revision 10:b4abecccec7a:

#include "includes.h"
#include "core.h"
#include "sensors.h"

Inverter::Inverter(PinName ph_a, PinName ph_b, PinName ph_c, PinName en, VoltageSensor *sense_bus, TempSensor *sense_t) {
    _en = new DigitalOut(en);
    Disable();
    
    _pwm_a = new PwmOut(ph_a);
    _pwm_b = new PwmOut(ph_b);
    _pwm_c = new PwmOut(ph_c);
    _pwm_a->period_us(100);
    _pwm_b->period_us(100);
    _pwm_c->period_us(100);
    
    _sense_bus = sense_bus;
    _sense_t = sense_t;
    
    SetDtcA(0);
    SetDtcB(0);
    SetDtcC(0);
    
    TIM2->CR1 &= ~(TIM_CR1_CEN);
    TIM2->CR1 |= TIM_CR1_CMS;
    TIM2->CR1 |= TIM_CR1_CEN;
    
    UpdateVbus();
    UpdateTemp();
    Enable();
}

void Inverter::SetDtcA(float dtc) {
    if (dtc < 0) dtc = 0.0f;
    if (dtc > 1.0f) dtc = 1.0f;
    *_pwm_a = dtcA = dtc;
} 

void Inverter::SetDtcB(float dtc) {
    if (dtc < 0) dtc = 0.0f;
    if (dtc > 1.0f) dtc = 1.0f;
    *_pwm_b = dtcB = 1.0f - dtc;
} 

void Inverter::SetDtcC(float dtc) {
    if (dtc < 0) dtc = 0.0f;
    if (dtc > 1.0f) dtc = 1.0f;
    *_pwm_c = dtcC = dtc;
}

void Inverter::Enable() {
    *_en = 0;
}

void Inverter::Disable() {
    *_en = 1;
}

float Inverter::UpdateVbus() {
    return v_bus = _sense_bus->GetVoltage();
}

float Inverter::UpdateTemp() {
    return temp = _sense_t->GetTemp();
}