.log_col_count=0, /* pocet radku zaznamu */
.log_col=0,
.doLogs=0,
- .alpha_offset=960
+ .alpha_offset=960,
+ .main_commutator=zero_commutator /*komutace vypnuta*/
};
* 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={
/*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){
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*/
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)){
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);