Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uint32_t get_changed_channel(void) {
- uint32_t retval;
- static uint32_t idr_old = 0;
- uint32_t idr_new = GPIOC->IDR & (LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8);
- retval = (idr_old ^ idr_new) >> 6;
- if(idr_old > idr_new)
- retval |= 64; //Флаг в удобное место
- idr_old = idr_new;
- return retval;
- }
- ctl.yV = 0.25f * mc_conf.mot_param_Vmax;
- ctl.gIsr = ctl.gIs = 0.25f * mc_conf.mot_param_Imax;
- ctl.yS = 0.0f;
- ctl.yph = M_PI - (M_PI / 6.0f);
- tune.routine = tune_routine_hall_setup;
- FOC_change_state(TUN);
- task_wait(1000);//Стабилизация ротора
- get_changed_channel();
- ctl.yS = 1.0f;
- uint32_t count = 3;
- while(count) {
- task_wait(2);
- ret = get_changed_channel();
- if(ret) {
- ret >>= 1;
- count--;
- sect = (ctl.yph + M_PI + (M_PI / 6.0f)) / (M_PI / 3.0f);
- switch(sect) {
- case 0:
- DBG_INFO("HALL_2");
- hall_map = (ret << 2) & 12;
- break;
- case 1:
- DBG_INFO("HALL_1");
- hall_map |= (ret << 0) & 3;
- break;
- case 2:
- DBG_INFO("HALL_3");
- hall_map |= (ret << 4) & 48;
- hall_map |= ret & 64;
- break;
- case 3:
- case 4:
- case 5:
- case 6:
- DBG_INFO("3,4,5,6");
- //DBG_ERROR("HALL_CALIB_ERROR");
- break;
- }
- }
- }
- FOC_change_state(INI);
- print(" OK.\n");
- printf("hall_map = %d\n", hall_map);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement