]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control.git/blobdiff - pmsm-control/test_sw/main_pmsm.c
Regulation function now implemented with use of polymorphism.
[fpga/rpi-motor-control.git] / pmsm-control / test_sw / main_pmsm.c
index 2eb92627ea55c8174b4e7661b201c86c2e0f71cc..f0fc982529cb410ebf8fc4aafd3e8425a8d6803a 100644 (file)
@@ -60,7 +60,9 @@ struct rpi_state rps={
        .log_col_count=0,       /* pocet radku zaznamu */
        .log_col=0,
        .doLogs=0,
-       .alpha_offset=960
+       .alpha_offset=960,
+       .main_commutator=zero_commutator,       /* komutace vypnuta */
+       .main_controller=zero_controller        /* rizeni vypnuto */
 };
 
 
@@ -112,7 +114,7 @@ void * pos_monitor(void* param){
  * Feedback loop.
  * TODO: replace bunch of 'IFs' with Object-like pattern
  */
-void * read_data(void* param){
+void * control_loop(void* param){
        int i;
        struct rpi_in pocatek;
        struct rpi_state poc={
@@ -135,10 +137,9 @@ void * read_data(void* param){
 
                        /*old positions*/
                        rps.old_pos[rps.tf_count%OLD_POS_NUM]=rps.spi_dat->pozice;
-                       spi_read(&rps);         /*exchange data*/
-                       /*subtract initiate postion */
+                       spi_read(&rps);                         /*exchange data*/
                        rps.tf_count++;
-                       substractOffset(&data,poc.spi_dat);
+                       substractOffset(&data,poc.spi_dat);     /*subtract initiate postion */
                        compSpeed(&rps);                        /*spocita rychlost*/
 
                        if (!rps.index_ok){
@@ -146,7 +147,7 @@ void * read_data(void* param){
                                        last_index=data.index_position;
                                        first=0;
                                }else if (last_index!=data.index_position){
-                                       rps.index_ok=1;
+                                       setIndexOK(&rps);
                                        comIndDist(&rps);       /*vypocet vzdalenosti indexu*/
                                }
                        }else{ /*index je v poradku*/
@@ -154,21 +155,10 @@ void * read_data(void* param){
                        }
 
                        /* pocitame sirku plneni podle potreb rizeni*/
-                       if (rps.pos_reg_ena){           /*pozicni rizeni*/
-                               pos_pid(&rps);
-                       }else if(rps.spd_reg_ena){      /*rizeni na rychlost*/
-                               spd_pid(&rps);
-                       }
+                       rps.main_controller(&rps);
 
-                       /* sirka plneni prepoctena na jednotlive pwm */
-                       if (rps.index_ok && rps.commutate){
-                               /*simple_ind_dist_commutator(rps.duty);*/
-                               /*sin_commutator(rps.duty);*/
-                               inv_trans_comm(&rps);
-                               inv_trans_comm_2(&rps);
-                       }else if(!rps.index_ok && rps.commutate){
-                               simple_hall_commutator(&rps);
-                       }
+                       /* sirku plneni prepocteme na jednotlive pwm */
+                       rps.main_commutator(&rps);
 
                        /*zalogujeme hodnoty*/
                        if (rps.doLogs && !(rps.tf_count%LOG_PERIOD)){
@@ -203,7 +193,7 @@ int main(){
        base_thread_id=pthread_self();
 
        /*main control loop*/
-       create_rt_task(&base_thread_id,PRIOR_HIGH,read_data,NULL);
+       create_rt_task(&base_thread_id,PRIOR_HIGH,control_loop,NULL);
 
        /*monitor of current state*/
        create_rt_task(&base_thread_id,PRIOR_LOW,pos_monitor,NULL);