Advertisement
7134956

Untitled

Jun 21st, 2020
1,515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.43 KB | None | 0 0
  1. uint32_t get_changed_channel(void) {
  2.     uint32_t retval;
  3.     static uint32_t idr_old = 0;
  4.  
  5.     uint32_t idr_new = GPIOC->IDR & (LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8);
  6.  
  7.     retval = (idr_old ^ idr_new) >> 6;
  8.  
  9.     if(idr_old > idr_new)
  10.         retval |= 64; //Флаг в удобное место
  11.  
  12.     idr_old = idr_new;
  13.  
  14.     return retval;
  15. }
  16.  
  17.             ctl.yV = 0.25f * mc_conf.mot_param_Vmax;
  18.             ctl.gIsr = ctl.gIs = 0.25f * mc_conf.mot_param_Imax;
  19.             ctl.yS = 0.0f;
  20.             ctl.yph = M_PI - (M_PI / 6.0f);
  21.  
  22.             tune.routine = tune_routine_hall_setup;
  23.             FOC_change_state(TUN);
  24.  
  25.             task_wait(1000);//Стабилизация ротора
  26.             get_changed_channel();
  27.             ctl.yS = 1.0f;
  28.             uint32_t count = 3;
  29.             while(count) {
  30.                 task_wait(2);
  31.                 ret = get_changed_channel();
  32.                 if(ret) {
  33.                     ret >>= 1;
  34.                     count--;
  35.                     sect = (ctl.yph + M_PI + (M_PI / 6.0f)) / (M_PI / 3.0f);
  36.                     switch(sect) {
  37.                     case 0:
  38.                         DBG_INFO("HALL_2");
  39.                         hall_map = (ret << 2) & 12;
  40.                         break;
  41.                     case 1:
  42.                         DBG_INFO("HALL_1");
  43.                         hall_map |= (ret << 0) & 3;
  44.                         break;
  45.                     case 2:
  46.                         DBG_INFO("HALL_3");
  47.                         hall_map |= (ret << 4) & 48;
  48.                         hall_map |= ret & 64;
  49.                         break;
  50.                     case 3:
  51.                     case 4:
  52.                     case 5:
  53.                     case 6:
  54.                         DBG_INFO("3,4,5,6");
  55.                         //DBG_ERROR("HALL_CALIB_ERROR");
  56.                         break;
  57.                     }
  58.                 }
  59.             }
  60.  
  61.             FOC_change_state(INI);
  62.             print(" OK.\n");
  63.             printf("hall_map = %d\n", hall_map);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement