Страница 7 из 9 ПерваяПервая 123456789 ПоследняяПоследняя
Показано с 61 по 70 из 88
  1. #61
    Пользователь Аватар для poraboloid
    Регистрация
    30.11.2009
    Возраст
    43
    Сообщений
    39
    Вес репутации
    186

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    Цитата Сообщение от Skiw Посмотреть сообщение
    Весьма интересная ссылочка.
    Жаль только на турбо не поставишь.
    Да и не продают сию систему.
    А их фото не особо ясно, что и как устроено.
    Ставится второй вакуумник, управляющая тяга крепится к тросику газа, подсос от ресивера, через электромагнитный калапан.
    Грубо где-то так.

    Есть еще чисто с электромагнитом и блоком управления - http://megamatik.autoserp.ru/vaz-2110-2112
    Последний раз редактировалось poraboloid; 08.09.2012 в 01:54.

  2. #62
    Новичок
    Регистрация
    19.07.2010
    Сообщений
    6
    Вес репутации
    172

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    2 вопроса:
    1. как будут себя чувствовать синхронизаторы?
    2. а зачем это все?

  3. #63
    Новичок
    Регистрация
    25.03.2013
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    а если для первоначального этапа оставить только автомат сцепления с логикой. кнопка на руле разрыв добавляем газ включение. скорость менее ??? км разрыв ну и обороты менее 1000 последние два параметра для всех передач кроме первой. если нейтраль то включение сцепления при скорости менее 10 км.
    Последний раз редактировалось pnp1106; 25.03.2013 в 14:42.

  4. #64
    Продвинутый
    Регистрация
    20.12.2011
    Сообщений
    336
    Вес репутации
    221

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    Проект не умер, он продолжается...
    Второй вариант привода был собран,протестирован и установлен на машину:
    http://big-e.ru/images/Gallery/preview_ex.php?dir=Robot
    (см. последние фото)
    Более того, удалось проехать на этом приводе два квартала, туда и обратно. После чего привод был снят с определенной долей недовольства.
    Причина: привод имеет низкую виброустойчивость.

    В результате, от шаговых моторов пришлось отказаться, по случаю приобрел актуаторы от робота короллы, на них собственно и делаю Третий вариант привода (на первой фото его видно).
    Он почти готов...

    Вот актуатор на основе которого Третий вариант делается:

    Тут вся обвязка и датчики в том числе.
    Последний раз редактировалось kadushkin; 03.05.2013 в 23:23.

  5. #65
    Новичок
    Регистрация
    25.03.2013
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    у меня ситроен берлинго он же пежо типпи. на них роботы идут только в европии. сейчас ищу актуатор сцепления к нему. о передачах пока только мечтаю

  6. #66
    Новичок
    Регистрация
    16.06.2013
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    Тоже делаю роботизированную КПП на основе привода от Яриса (аналог Короллы, как у топикстартера).

    Привод представляет из себя исполнительный механизм из двух коллекторных двигателей и датчиков их положений.

    Приобрел контроллер для коллекторных двигателей
    monster moto shield

    http://pacpac.ru/product/dev-10182/

    И решил его использовать для управления приводом.

    Для каждого из двигателей нужно поймать три положения:

    по датчикам это значения 450, 600 и 800

    450 и 800 конечные положения с жесткими упорами их поймать проблем нет, а вот среднее положение 600 я или пролетаю или не дохожу.

    Двигатели можут вращаться со скоростью 0...1023, линейный ход всего 16мм.

    Замутил такой алгоритм: 0,5 пути который нужно пройти приводу он идет со скоростью 1023, дальше идет торможение и останов

    Посоветуйте как быть..., вот моя функция из скетча:

    int ChangeGear_P_135=450;//380;
    int ChangeGear_P_N=600;
    int ChangeGear_P_24R=800;//850;

    float k1m1min=0.3; // коэф. общего пути до которого использовать полную скорость M1 при малом расстоянии (потеряно например)
    float k2m1min=0.5; // коэф. общего пути с которого включать замедляющкю скорость M1
    float k1m1=0.3; // коэф. общего пути до которого использовать полную скорость M1
    float k2m1=0.5; // коэф. общего пути с которого включать замедляющкю скорость M1
    float k1m1max=0.5; // коэф. общего пути до которого использовать полную скорость M1 при большом расстоянии (от линии 12 до 5R)
    float k2m1max=0.6; // коэф. общего пути с которого включать замедляющкю скорость M1

    // Функция привода переключения передач (2ой привод) M1
    // В функцию передаются значения скорости (с любым знаком) и положения к которому нужно прийти (P_N12, P_N34, P_N5R)
    byte Select_Gear_Motor_On(int Select_Gear_Start_Speed, int Select_Gear_End_Speed, int to_Position)//, boolean Search=false)
    {
    byte Rezult=0;
    //int CurrentGearPosition=GetCurrentGearPosition();
    boolean MotorToDo=false;
    ReadSensors();

    int znak_speed=1;

    // определяемся со знаком скорости (т.е напралением вращения)
    if (Select_Gear_Start_Speed<0){Select_Gear_Start_Spee d=-Select_Gear_Start_Speed;} //приводим к положительному знаку
    if (Select_Gear_End_Speed<0){Select_Gear_End_Speed=-Select_Gear_End_Speed;} //приводим к положительному знаку


    if (to_Position==P_N12)
    {
    if ((SelectGearSensor1>SelectGear_P_N12)||(SelectGear Sensor2>SelectGear_P_N12)) {znak_speed=1;}
    if ((SelectGearSensor1<SelectGear_P_N12)||(SelectGear Sensor2<SelectGear_P_N12)) {znak_speed=-1;}
    if ((IsValInRangeEx(SelectGearSensor1,SelectGear_P_N1 2, SensorPositionLimitForWork))||(IsValInRangeEx(Sele ctGearSensor1,SelectGear_P_N12, SensorPositionLimitForWork))) {znak_speed=0;} // дальше крутить не нужно - нужное положение
    if (znak_speed!=0) {MotorToDo=true;}
    }

    if (to_Position==P_N34)
    {
    if ((SelectGearSensor1>SelectGear_P_N34)||(SelectGear Sensor2>SelectGear_P_N34)) {znak_speed=1;}
    if ((SelectGearSensor1<SelectGear_P_N34)||(SelectGear Sensor2<SelectGear_P_N34)) {znak_speed=-1;}
    if ((IsValInRangeEx(SelectGearSensor1,SelectGear_P_N3 4, SensorPositionLimitForWork))||(IsValInRangeEx(Sele ctGearSensor1,SelectGear_P_N34, SensorPositionLimitForWork))) {znak_speed=0;} // дальше крутить не нужно - нужное положение
    if (znak_speed!=0) {MotorToDo=true;}
    }

    if (to_Position==P_N5R)
    {
    if ((SelectGearSensor1>SelectGear_P_N5R)||(SelectGear Sensor2>SelectGear_P_N5R)) {znak_speed=1;}
    if ((SelectGearSensor1<SelectGear_P_N5R)||(SelectGear Sensor2<SelectGear_P_N5R)) {znak_speed=-1;}
    if ((IsValInRangeEx(SelectGearSensor1,SelectGear_P_N5 R, SensorPositionLimitForWork))||(IsValInRangeEx(Sele ctGearSensor1,SelectGear_P_N5R, SensorPositionLimitForWork))) {znak_speed=0;} // дальше крутить не нужно - нужное положение
    if (znak_speed!=0) {MotorToDo=true;}
    }

    float End_position=0;
    float dystance=0;
    float full_dystance=0;
    boolean started=false;
    boolean endingstarted=false;
    boolean stopped=false;
    float k1=k1m1;
    float k2=k2m1;
    if (MotorToDo)
    {

    Select_Gear_Start_Speed=Select_Gear_Start_Speed*zn ak_speed;
    Select_Gear_End_Speed=Select_Gear_End_Speed*znak_s peed;

    #if DEBUG
    //Serial.println("***");
    //Serial.println(SelectGear_P_N);
    //Serial.println(SelectGearSensor1);
    #endif


    boolean stopMotor=false;
    unsigned long now_timer=0;
    unsigned long total_timer=0;
    unsigned long control_timer=millis();
    int cyclescount=0;

    do {

    now_timer=millis();
    total_timer = now_timer - control_timer;
    if (total_timer>=motor_check_timer) {SET_ERROR_MOTOR(ERROR_TOOLONGWORKINGM1); stopMotor=true;break;} // проверка на время длительности работы приводов
    ReadSensors();

    if (to_Position==P_N12)
    {
    if (((SelectGearSensor1>SelectGear_P_N12)||(SelectGea rSensor2>SelectGear_P_N12)) && (cyclescount>0)) {stopMotor=true;break;} // дальше крутить в эту сторону нельзя - конечное положение
    if ((IsValInRangeEx(SelectGearSensor1,SelectGear_P_N1 2, SensorPositionLimitForRotate))||(IsValInRangeEx(Se lectGearSensor1,SelectGear_P_N12, SensorPositionLimitForRotate))) {stopMotor=true;break;} // дальше крутить не нужно - нужное положение
    End_position=SelectGear_P_N12;
    }

    if (to_Position==P_N34)
    {
    if ((IsValInRangeEx(SelectGearSensor1,SelectGear_P_N3 4, SensorPositionLimitForRotate))||(IsValInRangeEx(Se lectGearSensor1,SelectGear_P_N34, SensorPositionLimitForRotate))) {stopMotor=true;break;} // дальше крутить не нужно - нужное положение
    End_position=SelectGear_P_N34;
    }

    if (to_Position==P_N5R)
    {
    if (((SelectGearSensor1<SelectGear_P_N5R)||(SelectGea rSensor2<SelectGear_P_N5R)) && (cyclescount>0)) {stopMotor=true;break;} // дальше крутить в эту сторону нельзя - конечное положение
    if ((IsValInRangeEx(SelectGearSensor1,SelectGear_P_N5 R, SensorPositionLimitForRotate))||(IsValInRangeEx(Se lectGearSensor1,SelectGear_P_N5R, SensorPositionLimitForRotate))) {stopMotor=true;break;} // дальше крутить не нужно - нужное положение
    End_position=SelectGear_P_N5R;
    }



    dystance=abs(SelectGearSensor1-End_position);
    if (full_dystance==0) {full_dystance=dystance;}
    if (full_dystance<100) {Select_Gear_Start_Speed=M1MotorMidSpeed*znak_spee d;}
    if (full_dystance<100){k1=k1m1min; k2=k2m1min;}
    if (full_dystance>300){k1=k1m1max; k2=k2m1max;}

    if (!started)// разгон
    {
    if (full_dystance-dystance<full_dystance*k1) {
    //Pololuqik.setM1Speed(Select_Gear_Start_Speed);
    if (znak_speed>0){motorGo(1, CCW, 1023);}
    if (znak_speed<0){motorGo(1, CW, 1023);}
    started=true;}

    }


    if (!endingstarted)//малая скорость
    {
    if ((full_dystance-dystance>=full_dystance*k1) && (full_dystance-dystance<=full_dystance*k2)) {
    //Pololuqik.setM1Speed(Select_Gear_End_Speed);
    //if (znak_speed>0){motorGo(1, CCW, 512);}
    //if (znak_speed<0){motorGo(1, CW, 512);}
    endingstarted=true;} //малая скорость
    }

    if (stopped==false) // торможение
    {
    if (full_dystance-dystance>full_dystance*k2) {
    //Pololuqik.setM1Brake(127);
    motorGo(1, BRAKEGND, 1023);
    stopped=true;}
    }

    cyclescount++;
    } while (stopMotor==false);

    //Pololuqik.setM1Brake(127); //останов
    motorGo(1, BRAKEGND, 1023);
    motorOff(1);
    }

    Rezult=GetCurrentGearPosition();
    if (Rezult!=0) {SetSuccessGearPosition_to_RAM(Rezult);}
    //else {SetNotSuccessGearPosition_to_RAM(Rezult);}
    return Rezult;
    }

  7. #67
    Гуру Аватар для reanon
    Регистрация
    02.03.2009
    Возраст
    44
    Сообщений
    927
    Вес репутации
    685

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    Цитата Сообщение от kadushkin Посмотреть сообщение
    Проект не умер, он продолжается...
    Второй вариант привода был собран,протестирован и установлен на машину:
    http://big-e.ru/images/Gallery/preview_ex.php?dir=Robot
    (см. последние фото)
    Более того, удалось проехать на этом приводе два квартала, туда и обратно. После чего привод был снят с определенной долей недовольства.
    Причина: привод имеет низкую виброустойчивость.

    В результате, от шаговых моторов пришлось отказаться, по случаю приобрел актуаторы от робота короллы, на них собственно и делаю Третий вариант привода (на первой фото его видно).
    Он почти готов...

    Вот актуатор на основе которого Третий вариант делается:

    Тут вся обвязка и датчики в том числе.
    а можно номер этой детали? А то в инете такойже без номера чото найти не могу

  8. #68
    Продвинутый
    Регистрация
    20.12.2011
    Сообщений
    336
    Вес репутации
    221

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    reanon
    33960-12010 (33960-12030)

    zis100
    Ты поднял актуальную тему. Попробовал твой алгоритм, у меня аналогичный контроллер коллекторных двигателей - фигово получилось, действительно плохое позиционирование.

    Chip
    Может ты нам с zis100 подскажешь как оптимально отпозиционировать привод. В PID регулировании я не совсем понял, что можно подбирать.

    Сейчас имеем:
    Обратная связь по датчику положения.
    В нашей ситуации, можно управлять скоростью и временем. Током и напряжением контроллер сам управляет, не давая возможности их регулировки. Можно управлять частотой, но там градация 20кГц, 10кГц и ниже.
    Причем скорость в начальный момент времени нужно сделать максимальной, чтобы стронуть привод (проверено).
    По идее можно на короткий промежуток времени (мс) выдать максимальную скорость, затем накат (скорость 0), реверс или торможение, и так в цикле. Но у меня это не получилось, двигатель просто стоит и воет, увеличение времени запуска с максимальной скоростью приводит к банальному пролету двигателя...

    Пока оптимальный такой вариант в цикле:
    do
    {
    ReadSensors(); // чтение положения привода SelectGearSensor1
    dystance=abs(SelectGearSensor1-End_position); // End_position - к чему стремимся
    .... тут проверка на соотвествие позиции
    ....

    и самое главное:
    Pololuqik.setM1Speed(127); // макс скорость
    delayMicroseconds(500);
    Pololuqik.setM1Speed(127/2); // снижение скорости
    delayMicroseconds(500);
    } while

    Точность позиционирования средняя, хотелось бы выше, да и сбои бывают.
    Последний раз редактировалось kadushkin; 02.07.2013 в 23:51.

  9. #69
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,380
    Вес репутации
    10

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    Может ты нам с zis100 подскажешь как оптимально отпозиционировать привод. В PID регулировании я не совсем понял, что можно подбирать.

    Сейчас имеем:
    Обратная связь по датчику положения.
    В нашей ситуации, можно управлять скоростью и временем. Током и напряжением контроллер сам управляет, не давая возможности их регулировки. Можно управлять частотой, но там градация 20кГц, 10кГц и ниже.
    Причем скорость в начальный момент времени нужно сделать максимальной, чтобы стронуть привод (проверено).
    По идее можно на короткий промежуток времени (мс) выдать максимальную скорость, затем накат (скорость 0), реверс или торможение, и так в цикле. Но у меня это не получилось, двигатель просто стоит и воет, увеличение времени запуска с максимальной скоростью приводит к банальному пролету двигателя...
    Я не вникал в тему но, сам бы сделал так:
    Запустил бы на максимальной скорости и читал циклично положение, как только приблизится на минимальное расстояние к цели(Сдесь придется вычислить время), то перевести скорость на минимум и опять читать положение датчика, когда сравняется с требуемым положением (нужно учитывать инертность) включаем торможение.
    Если проскакиваем положение, то тормозим и медленно возвращаемся назад и циклично проверяем положение
    Последний раз редактировалось Chip; 04.07.2013 в 20:33.

  10. #70
    Продвинутый
    Регистрация
    20.12.2011
    Сообщений
    336
    Вес репутации
    221

    По умолчанию Re: Роботизированная КПП из МКПП под управлением Ардуино

    Спасибо за совет. Немного дополнил и получил.

    ...
    Select_Gear_Speed=map(dystance,0,full_dystance,0,S elect_Gear_Start_Speed);
    Pololuqik.setM1Speed(Select_Gear_Speed);
    ...

    full_dystance - весь путь который надо пройти
    dystance - остаток пути
    Select_Gear_Start_Speed - максимальная скорость
    Select_Gear_Speed - подобранная скорость

    т.е по мере приближения к границе позиции в которой нужно остановиться скорость падает до 0 линейно.

    позиционируется достаточно точно.

Страница 7 из 9 ПерваяПервая 123456789 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •