working-est copy with class-based code. still open loop
Fork of analoghalls6 by
Diff: modulators.cpp
- Revision:
- 9:d3b70c15baa9
- Parent:
- 6:99ee0ce47fb2
- Child:
- 10:b4abecccec7a
diff -r 99ee0ce47fb2 -r d3b70c15baa9 modulators.cpp --- 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