roboforum.ru

Технический форум по робототехнике.

Центровка сервы

Центровка сервы

michey » 27 окт 2009, 22:37

Доброго времени суток.
Столкнулся с проблемой:
есть шасси от радиоуправляемой машинки,в данный момент,с мегой,принимающей команды по усарт и выполняющей их.
Серва управляющая рулевой - полностью аналоговая. :crazy: имеющая переменный резистор(?)с нулевой точкой.Есть три вывода,один из них общий,допустим 2-ой,когда колеса стоят прямо,на обоих сопротивление бесконечное,когда колеса повернуты влево между 1и2(допустим)сопротивление равно нулю,когда направо - между 2и3.
В данный момент колеса центруются,но точность и скорость этого процесса оставляет желать лучшего.
Был бы очень признателен,если бы ведающие подсказали алгоритм центровки.
Изображение

Re: Центровка сервы

EdGull » 27 окт 2009, 22:40

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

Re: Центровка сервы

michey » 27 окт 2009, 22:46

Совсем не вариант,это надо делать на месте,а впоследствии и на ходу.
Сейчас делаю с помощью АЦП,сравнивая значения после маленького сдвига влево или вправо,в зависимости от начальных значений.Но выходит откровенно паршиво. :cry:

Re: Центровка сервы

galex1981 » 27 окт 2009, 23:17

А что за серва то?

Re: Центровка сервы

michey » 27 окт 2009, 23:19

нонейм чина :D .черная коробочка,два контакта - двигатель,три - резистор.внутри ничего техничнее дифференциалов нету.

Re: Центровка сервы

=DeaD= » 27 окт 2009, 23:21

С чего бы там сопротивление бесконечное? Вроде полное сопротивление между крайними выводами вообще постоянное, или это какие-то новые переменники?

Re: Центровка сервы

michey » 27 окт 2009, 23:29

да,что-то я накосячил,не бесконечность.а между крайними - константа.

Re: Центровка сервы

=DeaD= » 27 окт 2009, 23:36

А в чем задача центровки заключается? Определить напряжение на выходе с переменника, при котором колёса отцентрованы?

Re: Центровка сервы

michey » 27 окт 2009, 23:40

Код: Выделить всёРазвернуть
void cn(void)
{
putchar(0x0D);
printf("cn");
putchar(0x0D);
right=read_adc(1);
left=read_adc(0);
while (right > 64 || left > 64)
     {
      if (left-right>10)
      {
      PORTC.1=0;
      PORTC.2=1;
      delay_ms(10);
      PORTC.1=0;
      PORTC.2=0;
      delay_ms(70);
      }
      right=read_adc(0);
      left=read_adc(1);
      if (right-left>10){
      PORTC.1=1;
      PORTC.2=0;
      delay_ms(10);
      PORTC.1=0;
      PORTC.2=0;
      delay_ms(70);
      }
      right=read_adc(0);
      left=read_adc(1);
}
printf("ok");
}

В данный момент реализовано это так,скорость центрирования и погрешность не удовлетворяют.

Re: Центровка сервы

=DeaD= » 27 окт 2009, 23:53

Так что надо то сделать? Управляя движком получить на выходе с переменника заданное напряжение?

Re: Центровка сервы

michey » 27 окт 2009, 23:55

Да,только,надо согнать значения с обоих каналов к нулю.

Re: Центровка сервы

=DeaD= » 27 окт 2009, 23:57

Что за оба канала? Вроде первый и последний контакты переменника всегда на питании и земле, а средний гоняет и с него снимают потенциал в АЦП?

Re: Центровка сервы

michey » 27 окт 2009, 23:59

Ох стыдно то как.
я на средний кидал плюс,и мерял между 1\3 и землей.

Re: Центровка сервы

=DeaD= » 28 окт 2009, 00:31

Ну ни фига себе вы извратились :)

Короче дальше должно быть проще тогда :) читайте тут про методы управления, не зря же я переводил:
[[Перевод статьи "Просто о ПИД-алгоритмах"]]

Страшных слов не бойтесь, там вроде всё в целом понятно на школьном уровне (старших классов естественно :))

Re: Центровка сервы

michey » 28 окт 2009, 00:34

Спасибо,завтра после учебы почитаю.


cron
Rambler\'s Top100 Mail.ru counter