Технический форум по робототехнике.
Lirzman » 17 авг 2006, 14:15
Оцените мои достижения!!!
Я слегка подправил формулу:
TCNT1=1+(60000/10)+(61000/10)+(59000/10)...;
Получается ~18000 - то что надо.
- Вложения
-
![success!!!.JPG (223.98 КиБ) Просмотров: 2029 success!!!.JPG](./download/file.php?id=984&t=1&style=9&sid=611490a508588aa0bd495ea3dd5a106c)
Lirzman » 17 авг 2006, 14:47
Фу!!!
Доделал до 8 серв.
Тока старая проблема вылезла с накоплением ошибки от сервы к серве.
Вот код:
- Вложения
-
demo.c
- (5 КиБ) Скачиваний: 385
Lirzman » 17 авг 2006, 14:52
Как оказалось заморачиваться с расчетами периода(20-t1-t2-t3...)не пришлось.
Разница между 2мс и 1мс очень мало вляет на длину периода!!!
Поэтому я поставил константу - ~27000(~18.5мс)
aesok » 17 авг 2006, 15:28
Lirzman писал(а):Фу!!!
Тока старая проблема вылезла с накоплением ошибки от сервы к серве.
Какая величина ошибки? Лучше а тактах контроллера.
Анатолий.
Lirzman » 17 авг 2006, 15:32
Какая величина ошибки? Лучше а тактах контроллера.
Как и раньше 0.25 - 0.3гр.
А в тиках МК,... не знаю считать надо.
Lirzman » 17 авг 2006, 15:35
Самое интересное что сервы 7 и 8 работают правильно(ошибки нет)
Сергей » 17 авг 2006, 17:08
Скорее всего это изза того что ты выставил ТСNT1 = 27000; нада по формуле.
Lirzman » 17 авг 2006, 17:36
Скорее всего это изза того что ты выставил ТСNT1 = 27000; нада по формуле
По формуле получается от 26000 до 28000.
Я поставил 27000, разницы - 0 , хоть 1 поставь всё равно работает, только сервы дрожать начинают.
Дело тут не в формуле.
Сергей » 17 авг 2006, 17:53
Вот я с ИК-датчиками закончу, протестю сам сервы, если проблема не решится.
Lirzman » 17 авг 2006, 17:58
Я уже исправил, просто к каждой последующей серве прибавлял +7 тиков таймера.
Пример:
- Код: Выделить всё • Развернуть
if(cur_servo==3)
{PORTB SET_B(2);
PORTB CLR_B(1);
TCNT1=gangle[2]+2;
cur_servo=4;
}
else
if(cur_servo==4)
{PORTB SET_B(3);
PORTB CLR_B(2);
TCNT1=gangle[3]+9;
cur_servo=5;
}
else
if(cur_servo==5)
{PORTB SET_B(4);
PORTB CLR_B(3);
TCNT1=gangle[4]+16;
cur_servo=6;
}
else
if(cur_servo==6)
{PORTB SET_B(5);
PORTB CLR_B(4);
TCNT1=gangle[5]+23;
cur_servo=7;
}
else
if(cur_servo==7)
{PORTB SET_B(6);
PORTB CLR_B(5);
TCNT1=gangle[6]+30;
cur_servo=8;
Все сервы встали в положение +3.00
![Very Happy :D](http://roboforum.ru/images/smilies/icon_biggrin.gif)
Сергей » 17 авг 2006, 18:00
Отлично!
Lirzman » 17 авг 2006, 18:17
Так с сервами я теперь уж точно закончил(если aesok ещё ошибок не найдет)
При включении МК все сервы встают в положение +3.00гр.
Думаю теперь надо внедрить модуль управления гусеничным шасси, колёсное не подходит т.к предпологается использовать робота внутри помещений(где невысоки требования к скорости но нужна проходимость, компактность и возможность поворачиваться на месте).
Из всего вышестоящего резонно следует вопрос какие моторы и схему управления использовать.
Думаю надо моторы помощнее на 36v(от стеклоподъёмников), а так-же мостовую схему управления на транзисторах(H-мост).
На счет l293(298) не знаю.
Управлять всё это дело надо ШИМом.
Ваши мнения?
ЗЫ Щас придет aesok и найдет кучу багов.(как обычно)
Вот код держите:
- Вложения
-
demo.c
- (4.9 КиБ) Скачиваний: 380
Lirzman » 17 авг 2006, 18:54
Сергей писал(а):Думаю не мешалобы переименовать тему =))
Согласен.
Как назвать?
avr123.nm.ru » 17 авг 2006, 19:13
да, уту переименовать в "SERVO - программирование на WinAVR"
или еще как-то конкретно.
А под новые идеи новый топик завести в соответствующем разделе форума.
Lirzman » 17 авг 2006, 19:33
Эту тему переименую в "Управление Сервами в WinAvr".
А под робота создам новую "Открытый проект по созданию Гусеничного робота".
Вообще хотелось бы сделать универсального робота(для работы по дому) на подобии того что слева вверху страницы нарисован.
Соглашусь с теми кто скажет что задача ОЧЕНЬ трудная, но я в отличие от них руководствуюсь крылатой фразой - "Тот кто хочет стать миллионером очень редко им становится, но тот кто этого не хочет не становится им никогда".