roboforum.ru

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

Управление Сервами в WinAvr

Lirzman » 17 авг 2006, 14:15

Оцените мои достижения!!!
Я слегка подправил формулу:
TCNT1=1+(60000/10)+(61000/10)+(59000/10)...;
Получается ~18000 - то что надо.
Вложения
success!!!.JPG

Lirzman » 17 авг 2006, 14:47

Фу!!!
Доделал до 8 серв.
Тока старая проблема вылезла с накоплением ошибки от сервы к серве.

Вот код:
Вложения
demo.c
(5 КиБ) Скачиваний: 385

Lirzman » 17 авг 2006, 14:52

Как оказалось заморачиваться с расчетами периода(20-t1-t2-t3...)не пришлось. :D
Разница между 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 :D

Сергей » 17 авг 2006, 18:00

Отлично!

Lirzman » 17 авг 2006, 18:17

Так с сервами я теперь уж точно закончил(если aesok ещё ошибок не найдет) :D

При включении МК все сервы встают в положение +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".
А под робота создам новую "Открытый проект по созданию Гусеничного робота".

Вообще хотелось бы сделать универсального робота(для работы по дому) на подобии того что слева вверху страницы нарисован.

Соглашусь с теми кто скажет что задача ОЧЕНЬ трудная, но я в отличие от них руководствуюсь крылатой фразой - "Тот кто хочет стать миллионером очень редко им становится, но тот кто этого не хочет не становится им никогда".


cron
Rambler\'s Top100 Mail.ru counter