N K
/
GaNtroller
a fork of priustroller
Fork of priustroller_current by
meta/modulators.cpp
- Committer:
- nki
- Date:
- 2015-03-09
- Revision:
- 15:d754b71a1290
- Parent:
- 14:1cc975207995
- Child:
- 19:280c62c71cf8
File content as of revision 15:d754b71a1290:
#include "includes.h" #include "core.h" #include "meta.h" #include "fastmath.h" #include "transforms.h" void SinusoidalModulator::Update(float valpha, float vbeta) { //swapping valpha and vbeta for reasons documented in CalcRef.s here: http://ww1.microchip.com/downloads/jp/AppNotes/ACIM%20Vector%20Control%2000908a.pdf float vra = vbeta; float vrb = ((-vbeta + sqrt(3.0f)*valpha)/2.0f); float vrc = ((-vbeta - sqrt(3.0f)*valpha)/2.0f); float dtcA; float dtcB; float dtcC; if( vra >= 0 ){ // (xx1) if( vrb >= 0 ){ // (x11) // Must be Sector 3 since Sector 7 not allowed // Sector 3: (0,1,1) 0-60 degrees T1 = vrb; T2 = vra; } else{ // (x01) if( vrc >= 0 ){ // Sector 5: (1,0,1) 120-180 degrees T1 = vra; T2 = vrc; } else{// Sector 1: (0,0,1) 60-120 degrees T1 = -vrb; T2 = -vrc; } } } else{ // (xx0) if( Vrb >= 0 ){ // (x10) if( Vrc >= 0 ){ // Sector 6: (1,1,0) 240-300 degrees T1 = vrc; T2 = vrb; } else{// Sector 2: (0,1,0) 300-0 degrees T1 = -vrc; T2 = -vra; } } else{ // (x00) // Must be Sector 4 since Sector 0 not allowed // Sector 4: (1,0,0) 180-240 degrees T1 = -vra; T2 = -vrb; } } } dtcA = (1.0f-T1-T2)/2.0f dtcB = dtcA + T1 dtcC = dtcB + T2 //--hack to make duty cycles positive _inverter->SetDtcA(dtcA * 0.5f + 0.5f); _inverter->SetDtcB(dtcB * 0.5f + 0.5f); _inverter->SetDtcC(dtcC * 0.5f + 0.5f); } void SvmModulator::Update(float valpha, float vbeta) { float va, vb, vc; InverseClarke(valpha, vbeta, &va, &vb); vc = -(va + vb); }