]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control.git/blobdiff - pmsm-control/test_sw/main_pmsm.c
Added speed regulation.
[fpga/rpi-motor-control.git] / pmsm-control / test_sw / main_pmsm.c
index 48fcf1ec8d61b11e939748d1b1a4875de12b034e..dd2372da992774bf707e2cbbf52f432539c2370e 100644 (file)
@@ -25,9 +25,9 @@
 #include "pmsm_state.h"
 #include "cmd_proc.h"
 
-#define MAX_DUTY       170
+
 #define PID_P          0.3
-#define PID_P_S                0.3
+#define PID_P_S                0.7
 
 #define PRIOR_KERN     50
 #define PRIOR_HIGH     49
@@ -539,7 +539,7 @@ inline void pos_pid(){
  */
 inline void spd_pid(){
        int duty_tmp;
-       duty_tmp = PID_P*(rps.desired_pos - (int32_t)data.pozice);
+       duty_tmp = PID_P_S*(rps.desired_spd - rps.speed);
        if (duty_tmp>MAX_DUTY){
                rps.duty=MAX_DUTY;
        }else if (duty_tmp<-MAX_DUTY){
@@ -601,10 +601,14 @@ void * read_data(void* param){
                        }else{ /*index je v poradku*/
                                comIndDist();           /*vypocet vzdalenosti indexu*/
                        }
+
                        /* pocitame sirku plneni podle potreb rizeni*/
-                       if (rps.pos_reg_ena){
+                       if (rps.pos_reg_ena){           /*pozicni rizeni*/
                                pos_pid();
+                       }else if(rps.spd_reg_ena){      /*rizeni na rychlost*/
+                               spd_pid();
                        }
+
                        /* sirka plneni prepoctena na jednotlive pwm */
                        if (rps.index_ok && rps.commutate){
                                /*simple_ind_dist_commutator(rps.duty);*/