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

Dependencies:   mbed

Fork of analoghalls6 by N K

Revision:
9:d3b70c15baa9
Parent:
6:99ee0ce47fb2
Child:
10:b4abecccec7a
--- a/modulators.cpp	Wed Mar 04 15:33:32 2015 +0000
+++ b/modulators.cpp	Fri Mar 06 19:12:53 2015 +0000
@@ -1,18 +1,27 @@
 #include "includes.h"
+#include "core.h"
 #include "meta.h"
+#include "sensors.h"
+#include "lut.h"
 
 void SinusoidalModulator::Update(float va, float vb) {
     _inverter->va = va;
     _inverter->vb = vb;
     
-    _inverter->SetDtcB(va/2.0f + 0.5f);
-    _inverter->SetDtcC((-va / 2.0f - sqrt(3.0f) / 2.0f * vb)/2.0f + 0.5f);
-    _inverter->SetDtcA((-va / 2.0f + sqrt(3.0f) / 2.0f * vb)/2.0f + 0.5f);
+    //inverse \alpha \beta (Clarke) transform
+    _inverter->SetDtcA(va/2.0f + 0.5f);
+    _inverter->SetDtcB(((-va + sqrt(3.0f)*vb)/2.0f)/2.0f + 0.5f);
+    _inverter->SetDtcC(((-va - sqrt(3.0f)*vb)/2.0f)/2.0f + 0.5f);
     
+    /*
+    _inverter->SetDtcA((LutSin(va)/2.0f)+0.5f);
+    _inverter->SetDtcB((LutSin(va - 120.0f)/2.0f)+0.5f);
+    _inverter->SetDtcC((LutSin(va + 120.0f)/2.0f)+0.5f);
+    */
     
-    test_DtcB = va;
-    test_DtcC = -va / 2.0f - sqrt(3.0f) / 2.0f * vb;
-    test_DtcA = -va / 2.0f + sqrt(3.0f) / 2.0f * vb;
+    test_DtcA = vb/2.0f + 0.5f;
+    test_DtcB = ((-vb + sqrt(3.0f)*va)/2.0f)/2.0f + 0.5f;
+    test_DtcC = ((-vb - sqrt(3.0f)*va)/2.0f)/2.0f + 0.5f;
     
     
     /*
@@ -20,4 +29,14 @@
     _inverter->SetDtcB(0.5f);
     _inverter->SetDtcC(1.0f);
     */
+}
+
+float SinusoidalModulator::LutSin(float theta) {
+    if (theta < 0.0f) theta += 360.0f;
+    if (theta >= 360.0f) theta -= 360.0f;
+    return sinetab[(int) theta] * 2.0f - 1.0f;
+}
+
+float SinusoidalModulator::LutCos(float theta) {
+    return LutSin(90.0f - theta);
 }
\ No newline at end of file