X-Git-Url: https://rtime.felk.cvut.cz/gitweb/fpga/rpi-motor-control.git/blobdiff_plain/8f3fb13ef9c8da9ac312b3b3b0ea4239306b986f..5d8290ceb4f6810b3bf47d15bcbb0fc63ff4a837:/pmsm-control/test_sw/main_pmsm.c diff --git a/pmsm-control/test_sw/main_pmsm.c b/pmsm-control/test_sw/main_pmsm.c index 25b0acc..ac3563d 100644 --- a/pmsm-control/test_sw/main_pmsm.c +++ b/pmsm-control/test_sw/main_pmsm.c @@ -60,9 +60,11 @@ 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*/ }; + /** * \brief Initilizes GPCLK. */ @@ -73,13 +75,6 @@ int clk_init() gpioSetMode(4, FSEL_ALT0); return 0; } -/* - * \brief Terminates GPCLK. - */ - -inline void clk_disable(){ - termClock(0); -} /** * \brief Signal handler pro Ctrl+C @@ -95,7 +90,7 @@ void appl_stop(){ spi_read(&rps); spi_disable(); - clk_disable(); + termClock(0); freeLogs(&rps); /*muzeme zavrit semafor*/ sem_destroy(&rps.thd_par_sem); @@ -118,7 +113,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={ @@ -141,10 +136,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){ @@ -152,7 +146,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*/ @@ -166,15 +160,8 @@ void * read_data(void* param){ spd_pid(&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)){ @@ -194,11 +181,9 @@ void * read_data(void* param){ } } - /** * \brief Main function. */ - int main(){ pthread_t base_thread_id; clk_init(); /* inicializace gpio hodin */ @@ -211,7 +196,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);