N K
/
GaNtroller
a fork of priustroller
Fork of priustroller_current by
Diff: meta/modulators.cpp
- Revision:
- 22:46d164aa4f1c
- Parent:
- 21:da41c08e51bc
- Child:
- 23:7366022ea0ab
--- a/meta/modulators.cpp Mon Mar 09 05:07:49 2015 +0000 +++ b/meta/modulators.cpp Mon Mar 09 07:44:57 2015 +0000 @@ -16,54 +16,81 @@ void SvmModulator::Update(float valpha, float vbeta) { float va, vb, vc; - InverseClarke(vbeta, valpha, &va, &vb); + InverseClarke(valpha, vbeta, &va, &vb); vc = -(va + vb); float dtcA, dtcB, dtcC, t1, t2; + t1 = 0; + t2 = 0; + dtcA = 0.0f; + dtcB = 0.0f; + dtcC = 0.0f; + + //for positive dtheta/dt, t1 is decreasing. t2 is increasing. if (va >= 0){ // (xx1) if (vb >= 0){ // (x11) - // Must be Sector 3 since Sector 7 not allowed - // Sector 3: (0,1,1) 0-60 degrees - t1 = vb; - t2 = va; + //300-360 degrees + t1 = va; //was -vc + t2 = -vb; //was -va + dtcA = 0.5f - t1/2.0f; + dtcB = 0.5f + t2/2.0f; + dtcC = 1.5f - dtcA - dtcB; } else { // (x01) - if (vc >= 0){ // Sector 5: (1,0,1) 120-180 degrees - t1 = va; - t2 = vc; + if (vc >= 0){ // Sector 5: (1,0,1) 180-240 degrees + t1 = -vc; + t2 = va; + dtcA = 0.5f - t2/2.0f; + dtcC = 0.5f + t1/2.0f; + dtcB = 1.5f - dtcA - dtcC; + } - else {// Sector 1: (0,0,1) 60-120 degrees - t1 = -vc; //was -vb - t2 = -vb; //was -vc + else {// Sector 1: (0,0,1) 240-300 degrees + t1 = -vb; //was -vb + t2 = -vc; //was -vc + dtcC = 0.5f + t2/2.0f; + dtcB = 0.5f + t1/2.0f; + dtcA = 1.5f - dtcC - dtcB; } } } else { // (xx0) if (vb >= 0) { // (x10) - if (vc >= 0) { // Sector 6: (1,1,0) 240-300 degrees - t1 = vc; - t2 = vb; + if (vc >= 0) { // Sector 6: (1,1,0) 60-120 degrees + t1 = vb; + t2 = vc; + dtcB = 0.5f - t1 / 2.0f; + dtcC = 0.5f - t2 / 2.0f; + dtcA = 1.5f - dtcC - dtcB; } - else {// Sector 2: (0,1,0) 300-0 degrees - t1 = -va; //was -vc - t2 = -vc; //was -va + else {// Sector 2: (0,1,0) 0-60 degrees + t1 = -vc; + t2 = -va; + dtcC = 0.5f + t1/2.0f; + dtcA = 0.5f + t2/2.0f; + dtcB = 1.5f - dtcC - dtcA; } } else { // (x00) // Must be Sector 4 since Sector 0 not allowed - // Sector 4: (1,0,0) 180-240 degrees - t1 = -vb; //was -va - t2 = -va; //was -vb + // Sector 4: (1,0,0) 120-180 degrees + t1 = -va; //was -va + t2 = -vb; //was -vb + dtcA = 0.5f + t1/2.0f; + dtcB = 0.5f + t2/2.0f; + dtcC = 1.5f - dtcA - dtcB; } } - - dtcA = (1.0f - t1 - t2)/2.0f; - dtcB = dtcA + t1; - dtcC = dtcB + t2; + + + _inverter->SetDtcA(dtcA); _inverter->SetDtcB(dtcB); _inverter->SetDtcC(dtcC); + + dbg_t1 = t1; + dbg_t2 = t2; dbg_dtcA = dtcA; dbg_dtcB = dtcB;