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

 
 
> Отследить разницу в позициях моторов.
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
 
Start new topic
Ответов
Dog Pawlowa
сообщение Feb 12 2018, 05:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Jenya7 @ Feb 6 2018, 09:51) *
Теперь моторов 4 и алгоритмика намного усложнилась, Не соображу как отследить разницу в позициях нескольких моторов.

У меня в похожей задаче в качестве базы задавался всегда наиболее медленный мотор, потому что ускорить его невозможно (заполнение ШИМ 100%).
Так что алгоритм и был построен на поиске наиболее медленного мотора(максимальном удалении от цели). ШИМ быстрых моторов определялся эмпирической формулой пропорционально рассогласованию. При ускорении/торможении всех моторов максимум ШИМ (значение ШИМ наиболее медленного мотора ) изменялось линейно.

Что касается ПИД ... Не очень хорошо он работает в этих системах, т.к. разрешение датчиков Холла как правило недостаточное, а требования к синхронности - высокие.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 12 2018, 13:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Dog Pawlowa @ Feb 12 2018, 07:58) *
Что касается ПИД ... Не очень хорошо он работает в этих системах, т.к. разрешение датчиков Холла как правило недостаточное, а требования к синхронности - высокие.

У датчиков Холла нет разрешения. Оно есть у системы построенной на них.
В моей схеме датчики Холла дают разрешение ~1 градус (механический). В системе ТС разрешение может быть ещё выше.
И это только разрешение по импульсам самих датчиков. Система построенная на них, при более-менее равномерном вращении, может дать угловое разрешение во много раз выше.
PS: Я имею в виду цифровые датчики Холла.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 12 2018, 20:12
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Feb 12 2018, 15:21) *
В моей схеме датчики Холла дают разрешение ~1 градус (механический).

Хм, датчик холла на моторе конечно даст большое разрешение, но это довольно рсковано.
Тут мы буквально недавно нагрелись
Судили о скорости выходного вала редуктора по датчикам холла на моторе, а китайцы сделали редуктор при определенных моментах силы начинающий прокручиваться.
И все, проблема на ровном месте.

Если человек говорит что ему подходит пропорциональное управление значит его управление очень медленное и неточное.
Тут нет смысла что либо советовать. У него так или иначе будет работать любой способ управления.
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   Цитата(jcxz @ Feb 12 2018, 16:21) В моей ...   Feb 12 2018, 17:35
- - jcxz   Цитата(AlexandrY @ Feb 12 2018, 22:12) Су...   Feb 12 2018, 21:50


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:05
Рейтинг@Mail.ru


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