Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 5:51c6560bf624, committed 2016-03-12
- Comitter:
- benkatz
- Date:
- Sat Mar 12 18:45:22 2016 +0000
- Parent:
- 4:c023f7b6f462
- Child:
- 6:4ee1cdc43aa8
- Commit message:
- Moved InvClarke out of SVM
Changed in this revision
--- a/CurrentRegulator/CurrentRegulator.cpp Sat Mar 12 08:04:51 2016 +0000
+++ b/CurrentRegulator/CurrentRegulator.cpp Sat Mar 12 18:45:22 2016 +0000
@@ -11,12 +11,15 @@
_Inverter = inverter;
PWM = new SPWM(inverter, 2.0);
_PositionSensor = position_sensor;
- IQ_Ref = 1;
+ IQ_Ref = .5;
ID_Ref = 0;
V_Q = 0;
V_D = 0;
V_Alpha = 0;
V_Beta = 0;
+ V_A = 0;
+ V_B = 0;
+ V_C = 0;
I_Q = 0;
I_D = 0;
I_A = 0;
@@ -76,11 +79,15 @@
V_Q = Q_Integral + _Kp*Q_Error;
V_D = D_Integral + _Kp*D_Error;
+
+
}
void CurrentRegulator::SetVoltage(){
InvPark(V_D, V_Q, theta_elec, &V_Alpha, &V_Beta);
- PWM->Update_DTC(V_Alpha, V_Beta);
+ InvClarke(V_Alpha, V_Beta, &V_A, &V_B, &V_C);
+ PWM->Update_DTC(V_A, V_B, V_C);
+ //PWM->Update_DTC(V_Alpha, V_Beta);
}
--- a/CurrentRegulator/CurrentRegulator.h Sat Mar 12 08:04:51 2016 +0000
+++ b/CurrentRegulator/CurrentRegulator.h Sat Mar 12 18:45:22 2016 +0000
@@ -10,7 +10,7 @@
void UpdateRef(float D, float Q);
void Commutate();
private:
- float IQ_Ref, ID_Ref, V_Q, V_D, V_Alpha, V_Beta, I_Q, I_D, I_A, I_B, I_C, I_Alpha, I_Beta, theta_elec, _Kp, _Ki;
+ float IQ_Ref, ID_Ref, V_Q, V_D, V_Alpha, V_Beta, V_A, V_B, V_C, I_Q, I_D, I_A, I_B, I_C, I_Alpha, I_Beta, theta_elec, _Kp, _Ki;
float Q_Integral, D_Integral, Q_Error, D_Error, Int_Max, DTC_Max;
void SampleCurrent();
void SetVoltage();
--- a/PositionSensor/PositionSensor.cpp Sat Mar 12 08:04:51 2016 +0000
+++ b/PositionSensor/PositionSensor.cpp Sat Mar 12 18:45:22 2016 +0000
@@ -70,7 +70,7 @@
int raw = TIM3->CNT-0x8000;
if (raw < 0) raw += _CPR;
if (raw >= _CPR) raw -= _CPR;
- float signed_mech = fmod(((6.28318530718f*(raw)/(float)_CPR + _offset)), 6.28318530718f); //7 pole pairs
+ float signed_mech = fmod(((6.28318530718f*(raw)/(float)_CPR + _offset)), 6.28318530718f);
if (signed_mech < 0){
return signed_mech + 6.28318530718f;
}
--- a/SVM/SVM.cpp Sat Mar 12 08:04:51 2016 +0000
+++ b/SVM/SVM.cpp Sat Mar 12 18:45:22 2016 +0000
@@ -7,10 +7,11 @@
_inverter = inverter;
_V_Bus = V_Bus;
}
-void SPWM::Update_DTC(float V_Alpha, float V_Beta){
- float DTC_A = V_Alpha/_V_Bus + .5f;
- float DTC_B = 0.5f*(-V_Alpha + 1.73205080757f*V_Beta)/_V_Bus + .5f;
- float DTC_C = 0.5f*(-V_Alpha - 1.73205080757f*V_Beta)/_V_Bus + .5f;
+
+void SPWM::Update_DTC(float V_A, float V_B, float V_C){
+ float DTC_A = V_A/_V_Bus + .5f;
+ float DTC_B = V_B/_V_Bus + .5f;
+ float DTC_C = V_C/_V_Bus + .5f;
if(DTC_A > .95f) DTC_A = .95f;
else if(DTC_A < .05f) DTC_A = .05f;
@@ -19,4 +20,24 @@
if(DTC_C > .95f) DTC_C = .95f;
else if(DTC_C < .05f) DTC_C = .05f;
_inverter->SetDTC(DTC_A, DTC_B, DTC_C);
- }
\ No newline at end of file
+ }
+
+SVPWM::SVPWM(Inverter *inverter, float V_Bus){
+ _inverter = inverter;
+ _V_Bus = V_Bus;
+ }
+
+void SVPWM::Update_DTC(float V_A, float V_B, float V_C){
+ float DTC_A = V_A/_V_Bus + .5f;
+ float DTC_B = V_B/_V_Bus + .5f;
+ float DTC_C = V_C/_V_Bus + .5f;
+
+ if(DTC_A > .95f) DTC_A = .95f;
+ else if(DTC_A < .05f) DTC_A = .05f;
+ if(DTC_B > .95f) DTC_B = .95f;
+ else if(DTC_B < .05f) DTC_B = .05f;
+ if(DTC_C > .95f) DTC_C = .95f;
+ else if(DTC_C < .05f) DTC_C = .05f;
+ _inverter->SetDTC(DTC_A, DTC_B, DTC_C);
+ }
+
\ No newline at end of file
--- a/SVM/SVM.h Sat Mar 12 08:04:51 2016 +0000
+++ b/SVM/SVM.h Sat Mar 12 18:45:22 2016 +0000
@@ -4,7 +4,8 @@
class SVM{
public:
- virtual void Update_DTC(float V_Alpha, float V_Beta) = 0;
+ //virtual void Update_DTC(float V_Alpha, float V_Beta) = 0;
+ virtual void Update_DTC(float V_A, float V_B, float V_C) = 0;
private:
float _V_Bus;
protected:
@@ -15,7 +16,8 @@
class SPWM: public SVM{ //Sinusoidal PWM
public:
SPWM(Inverter *inverter, float V_Bus);
- virtual void Update_DTC(float V_Alpha, float V_Beta);
+ //virtual void Update_DTC(float V_Alpha, float V_Beta);
+ virtual void Update_DTC(float V_A, float V_B, float V_C);
private:
float _V_Bus;
protected:
@@ -26,7 +28,8 @@
class SVPWM: public SVM{ //SVM
public:
SVPWM(Inverter *inverter, float V_Bus);
- virtual void Update_DTC(float V_Alpha, float V_Beta);
+ //virtual void Update_DTC(float V_Alpha, float V_Beta);
+ virtual void Update_DTC(float V_A, float V_B, float V_C);
private:
float _V_Bus;
@@ -34,4 +37,5 @@
Inverter* _inverter;
};
+
#endif
\ No newline at end of file
--- a/Transforms/Transforms.cpp Sat Mar 12 08:04:51 2016 +0000
+++ b/Transforms/Transforms.cpp Sat Mar 12 18:45:22 2016 +0000
@@ -9,6 +9,8 @@
float sine = sin(theta);
*d = alpha*cosine - beta*sine;
*q = -beta*cosine - alpha*sine;
+ //*d = alpha*cosine + beta*sine;
+ //*q = beta*cosine - alpha*sine;
//DAC->DHR12R1 = (int) (*q*49.648f) + 2048;
//DAC->DHR12R1 = (int) (*q*2048.0f) + 2048;
}