WANG YUCHAO / Mbed 2 deprecated Motor_DRV8323RH_for_20190

Dependencies:   mbed FastPWM3

Files at this revision

API Documentation at this revision

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

CurrentRegulator/CurrentRegulator.cpp Show annotated file Show diff for this revision Revisions of this file
CurrentRegulator/CurrentRegulator.h Show annotated file Show diff for this revision Revisions of this file
PositionSensor/PositionSensor.cpp Show annotated file Show diff for this revision Revisions of this file
SVM/SVM.cpp Show annotated file Show diff for this revision Revisions of this file
SVM/SVM.h Show annotated file Show diff for this revision Revisions of this file
Transforms/Transforms.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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;
     }