MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/Inverter.cpp

94 lines
2.7 KiB
C++
Raw Normal View History

// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
/*
* Inverter.cpp
*
* Created on: 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2016 <EFBFBD>.
* Author: titov
*/
#include "Inverter.hh"
#include <cmath>
namespace driver {
Inverter::Inverter( peripheral::IPwm & u, peripheral::IPwm & v, peripheral::IPwm & w, IDiscreteOutput & pulse_en ) :
phase_u(u), phase_v(v), phase_w(w), pulse_en(pulse_en),
disabled_u(false), disabled_v(false), disabled_w(false),
pulse_enable(false), Tp(0),
pulse_release(false), _Ta(NAN), _Tb(NAN), _Tc(NAN) {
peripheral::IPwm::PwmTime time = phase_u.getMaxThreshold();
Tp = static_cast<float>( time );
}
void Inverter::enPulse() {
pulse_en.on();
pulse_enable = true;
}
void Inverter::disPulse() {
pulse_en.off();
pulse_enable = false;
pulse_release = false;
phase_u.disableOutput();
phase_v.disableOutput();
phase_w.disableOutput();
_Ta = _Tb = _Tc = NAN;
}
void Inverter::pwm(float Ta, float Tb, float Tc) {
using namespace std;
//core::CriticalSection cs_0;
if(isnan(Ta)) { // <20><><EFBFBD><EFBFBD> NAN - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
disabled_u = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
phase_u.disableOutput(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
} else if(disabled_u && pulse_release) { // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
phase_u.enableOutput(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,
disabled_u = false; // <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
}
_Ta = Ta;
phase_u.setThreshold(TxToTreshold(Ta)); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.
if(isnan(Tb)) {
disabled_v = true;
phase_v.disableOutput();
} else if(disabled_v && pulse_release) {
phase_v.enableOutput();
disabled_v = false;
}
_Tb = Tb;
phase_v.setThreshold(TxToTreshold(Tb));
if(isnan(Tc)) {
disabled_w = true;
phase_w.disableOutput();
} else if(disabled_w && pulse_release) {
phase_w.enableOutput();
disabled_w = false;
}
_Tc = Tc;
phase_w.setThreshold(TxToTreshold(Tc));
if(pulse_enable) { // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
if(!disabled_u) phase_u.enableOutput(); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD>
if(!disabled_v) phase_v.enableOutput(); // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(!disabled_w) phase_w.enableOutput();
pulse_enable = false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
pulse_release = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
}
}
}