]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control.git/blobdiff - pmsm-control/test_sw/main_pmsm.c
Speed regulation with zero error.
[fpga/rpi-motor-control.git] / pmsm-control / test_sw / main_pmsm.c
index dd2372da992774bf707e2cbbf52f432539c2370e..3d13ff28a484b11ea43c62f6d61b7287d26ff4e5 100644 (file)
@@ -27,7 +27,8 @@
 
 
 #define PID_P          0.3
 
 
 #define PID_P          0.3
-#define PID_P_S                0.7
+#define PID_P_S                0.9     /*2.3 kmita*/ /*1.4 vhodne jen pro P regulator*/
+#define PID_I_S                0.01
 
 #define PRIOR_KERN     50
 #define PRIOR_HIGH     49
 
 #define PRIOR_KERN     50
 #define PRIOR_HIGH     49
@@ -55,7 +56,8 @@ struct rpi_state rps={
        .pos_reg_ena=0,
        .desired_spd=0,
        .spd_reg_ena=0,
        .pos_reg_ena=0,
        .desired_spd=0,
        .spd_reg_ena=0,
-       .old_pos={0}
+       .old_pos={0},
+       .spd_err_sum=0
 };
 
 /**
 };
 
 /**
@@ -539,7 +541,10 @@ inline void pos_pid(){
  */
 inline void spd_pid(){
        int duty_tmp;
  */
 inline void spd_pid(){
        int duty_tmp;
-       duty_tmp = PID_P_S*(rps.desired_spd - rps.speed);
+       int error;
+       error=rps.desired_spd - rps.speed;
+       rps.spd_err_sum+=error;
+       duty_tmp = PID_P_S*error+PID_I_S*rps.spd_err_sum;
        if (duty_tmp>MAX_DUTY){
                rps.duty=MAX_DUTY;
        }else if (duty_tmp<-MAX_DUTY){
        if (duty_tmp>MAX_DUTY){
                rps.duty=MAX_DUTY;
        }else if (duty_tmp<-MAX_DUTY){