Bayley Wang
/
priustroller_3
temp repo
Fork of priustroller_2 by
Diff: meta/modulators.cpp
- Revision:
- 15:d754b71a1290
- Parent:
- 14:1cc975207995
- Child:
- 19:280c62c71cf8
--- a/meta/modulators.cpp Mon Mar 09 02:06:06 2015 +0000 +++ b/meta/modulators.cpp Mon Mar 09 03:07:10 2015 +0000 @@ -5,10 +5,60 @@ #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 - float dtcA = valpha; - float dtcB = ((-valpha + sqrt(3.0f) * vbeta) / 2.0f); - float dtcC = ((-valpha - sqrt(3.0f) * vbeta) / 2.0f); + _inverter->SetDtcA(dtcA * 0.5f + 0.5f); _inverter->SetDtcB(dtcB * 0.5f + 0.5f); _inverter->SetDtcC(dtcC * 0.5f + 0.5f);