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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Сообщение Lirzman » 17 авг 2006, 14:15

Оцените мои достижения!!!
Я слегка подправил формулу:
TCNT1=1+(60000/10)+(61000/10)+(59000/10)...;
Получается ~18000 - то что надо.
Вложения
success!!!.JPG
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Lirzman » 17 авг 2006, 14:47

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

Вот код:
Вложения
demo.c
(5 КиБ) Скачиваний: 374
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Lirzman » 17 авг 2006, 14:52

Как оказалось заморачиваться с расчетами периода(20-t1-t2-t3...)не пришлось. :D
Разница между 2мс и 1мс очень мало вляет на длину периода!!!
Поэтому я поставил константу  - ~27000(~18.5мс)
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение aesok » 17 авг 2006, 15:28

Lirzman писал(а):Фу!!!
Тока старая проблема вылезла с накоплением ошибки от сервы к серве.


Какая величина ошибки? Лучше а тактах контроллера.

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Сообщение Lirzman » 17 авг 2006, 15:32

Какая величина ошибки? Лучше а тактах контроллера.

Как и раньше 0.25 - 0.3гр.
А в тиках МК,... не знаю считать надо.
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Lirzman » 17 авг 2006, 15:35

Самое интересное что сервы 7 и 8 работают правильно(ошибки нет)
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Сергей » 17 авг 2006, 17:08

Скорее всего это изза того что ты выставил ТСNT1 = 27000; нада по формуле.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Lirzman » 17 авг 2006, 17:36

Скорее всего это изза того что ты выставил ТСNT1 = 27000; нада по формуле

По формуле получается от 26000 до 28000.
Я поставил 27000, разницы  - 0 , хоть 1 поставь всё равно работает, только сервы дрожать начинают.
Дело тут не в формуле.
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Сергей » 17 авг 2006, 17:53

Вот я с ИК-датчиками закончу, протестю сам сервы, если проблема не решится.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение 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
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Сергей » 17 авг 2006, 18:00

Отлично!
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Lirzman » 17 авг 2006, 18:17

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

При включении МК все сервы встают в положение +3.00гр.

Думаю теперь надо внедрить модуль управления гусеничным шасси, колёсное не подходит т.к предпологается использовать робота внутри помещений(где невысоки требования к скорости но нужна проходимость, компактность и возможность поворачиваться на месте).

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

Думаю надо моторы помощнее на 36v(от стеклоподъёмников), а так-же мостовую схему управления на транзисторах(H-мост).
На счет l293(298) не знаю.
Управлять всё это дело надо ШИМом.

Ваши мнения?

ЗЫ Щас придет aesok и найдет кучу багов.(как обычно) :)

Вот код держите:
Вложения
demo.c
(4.9 КиБ) Скачиваний: 369
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Lirzman » 17 авг 2006, 18:54

Сергей писал(а):Думаю не мешалобы переименовать тему =))

Согласен.
Как назвать?
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение avr123.nm.ru » 17 авг 2006, 19:13

да, уту переименовать в "SERVO - программирование на WinAVR"

или еще как-то конкретно.

А под новые идеи новый топик завести в соответствующем разделе форума.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Сообщение Lirzman » 17 авг 2006, 19:33

Эту тему переименую в "Управление Сервами в WinAvr".
А под робота создам новую "Открытый проект по созданию Гусеничного робота".

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

Соглашусь с теми кто скажет что задача ОЧЕНЬ трудная, но я в отличие от них руководствуюсь крылатой фразой - "Тот кто хочет стать миллионером очень редко им становится, но тот кто этого не хочет не становится им никогда".
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11