реклама на сайте
подробности

 
 
> Отследить разницу в позициях моторов.
Jenya7
сообщение Feb 6 2018, 06:51
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Когда было два мотора я по энкодерам брал их позицию, сравнивал, и если была разница в позициях больше пороговой - один мотор замедлял, другой ускорял.
Код
uint32_t MOT_GetPosDif(uint32_t pos1, uint32_t pos2, uint32_t *gt)
{
    if( pos1 > pos2)
    {
        *gt = 0;
        return (pos1 - pos2);
    }
    else
    {
        *gt = 1;
        return (pos2 - pos1);
    }
}

void MOT_PositionLoopDouble(void)
{
    uint32_t position1, position2, posdif, gt;
    uint32_t pwm1, pwm2;
    
    position1 = motor1_data_double->position;
    position2 = motor2_data_double->position;
    
    posdif = MOT_GetPosDif(position1, position2, &gt);
    
    if (posdif > glob_mot_data.max_pos_diff)
    {
        //retry
        glob_mot_data.pos_diff_count++;
        if (glob_mot_data.pos_diff_count > glob_mot_data.max_pos_diff_count)
        {
            //maximum retries - unable to adjust speed
            glob_mot_data.pos_diff_count = 0;
            //send stop command
            MOT_SendData(motor1_data_double, CAN_COM_STOP, 0);
            MOT_SendData(motor2_data_double, CAN_COM_STOP, 0);
            
            sys_status |= MOT_POS_DIFF;
        }
    }
    else
        glob_mot_data.pos_diff_count = 0;
    
    //no position difference - maximum speed  
    if (posdif < glob_mot_data.max_pos_diff)
    {
        MOT_SendData(motor1_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
        MOT_SendData(motor2_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
    }
    else
    {
        pwm1 = motor1_data_double->speed;  
        pwm2 = motor2_data_double->speed;
    
        if (gt == 0)  //position1 > position2 -> motor1 runs faster
        {
            //adjust pwm
            pwm1 -= glob_mot_data.pwm_delta; //motor1 speed down
            pwm2 += glob_mot_data.pwm_delta; //motor2 speed up
        
            //check min pwm limit
            if (pwm1 < glob_mot_data.pwm_min)
                pwm1 = glob_mot_data.pwm_min;
            //check max pwm limit    
            if (pwm2 > glob_mot_data.pwm_max)
                pwm2 = glob_mot_data.pwm_max;  
        }
        else if (gt == 1)  //position2 > position1 -> motor2 runs faster
        {
            //adjust pwm
            pwm1 += glob_mot_data.pwm_delta;  //motor1 speed up
            pwm2 -= glob_mot_data.pwm_delta; //motor2 speed down
        
            //check max pwm limit
            if (pwm1 > glob_mot_data.pwm_max)  
                pwm1 = glob_mot_data.pwm_max;
            //check min pwm limit    
            if (pwm2 < glob_mot_data.pwm_min)
                pwm2 = glob_mot_data.pwm_min;
        }
    }
    
    //update speed
     MOT_SendData(motor1_data_double, CAN_COM_SSET, pwm1);
     MOT_SendData(motor2_data_double, CAN_COM_SSET, pwm2);
}


Теперь моторов 4 и алгоритмика намного усложнилась, Не соображу как отследить разницу в позициях нескольких моторов.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Отследить разницу в позициях моторов.   Feb 6 2018, 06:51
- - AlexandrY   Цитата(Jenya7 @ Feb 6 2018, 08:51) Теперь...   Feb 6 2018, 07:28
|- - Jenya7   Цитата(AlexandrY @ Feb 6 2018, 12:28) При...   Feb 6 2018, 07:59
|- - AlexandrY   Цитата(Jenya7 @ Feb 6 2018, 09:59) тогда ...   Feb 6 2018, 08:40
|- - Jenya7   Цитата(AlexandrY @ Feb 6 2018, 13:40) А г...   Feb 6 2018, 08:46
|- - AlexandrY   Цитата(Jenya7 @ Feb 6 2018, 10:46) с двум...   Feb 6 2018, 09:15
|- - Jenya7   Цитата(AlexandrY @ Feb 6 2018, 14:15) Так...   Feb 6 2018, 09:18
|- - AlexandrY   Цитата(Jenya7 @ Feb 6 2018, 11:18) знаете...   Feb 6 2018, 09:34
- - Jenya7   А что скажут алгоритмисты на такое решение? Кодuin...   Feb 6 2018, 14:22
|- - jcxz   Цитата(Jenya7 @ Feb 6 2018, 16:22) А что ...   Feb 6 2018, 16:22
|- - AlexandrY   Цитата(jcxz @ Feb 6 2018, 18:22) В полоте...   Feb 6 2018, 18:46
|- - jcxz   Цитата(AlexandrY @ Feb 6 2018, 20:46) В д...   Feb 6 2018, 21:40
- - Dog Pawlowa   Цитата(Jenya7 @ Feb 6 2018, 09:51) Теперь...   Feb 12 2018, 05:58
- - jcxz   Цитата(Dog Pawlowa @ Feb 12 2018, 07:58) ...   Feb 12 2018, 13:21
- - Dog Pawlowa   Цитата(jcxz @ Feb 12 2018, 16:21) В моей ...   Feb 12 2018, 17:35
- - AlexandrY   Цитата(jcxz @ Feb 12 2018, 15:21) В моей ...   Feb 12 2018, 20:12
- - jcxz   Цитата(AlexandrY @ Feb 12 2018, 22:12) Су...   Feb 12 2018, 21:50


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016