roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 май 2025, 16:50

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 227 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13, 14, 15, 16  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 00:49 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Лучше делать так - прерываться как в задаче 6  - каждые 20 мс по таймеру 0, запускать таймер 1 и подавать на все сервы "1".

затем выходить из прерывания и начинать ожидание насчета времени сервы (или нескольких) которую выключить 1-й, затем 2-й и так далее.

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

чем выше частота кварца тем тоньше регулирование серв.

окончание этого процесса будет максимум 2300 мкС после прервания.

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

=======

можно сделать прервание каждые 5 мС и управлять 2 сервами в каждом промежутке. Это проще алгоритмически и снизит ударную нагрузку на питание серв.

=======

Советую не бросатья кодировать, а сформулировать четко алгоритм, написать прогу в псевдокоде и затем закодировать на Си.

на этой простой задаче вы будете учится организовывать процесс разработки программ как я советую в задаче 1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 01:00 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
avr123.nm.ru писал(а):
Советую не бросатья кодировать, а сформулировать четко алгоритм, написать прогу в псевдокоде и затем закодировать на Си.

Полностью с вами согласен.
Завтра попытаюсь это сделать.
Сегодня даже в псевдокоде я уже ничего путного не напишу. :D  :D  :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 01:14 
Не в сети

Зарегистрирован: 11 авг 2006, 01:02
Сообщения: 69
Откуда: ----
Lirzman писал(а):
aesok писал(а):
char szInput [5]; - Место под 5 символов

А разве счет в массиве не с нуля идет?
Просто я уже проверял, если в массив под 5 запихнуть 4 символа
оно не заработает пока Enter не нажмешь, ну или там символ какой-нибудь не введешь.

В том то идето что нумеруеться а 0, а размер задается с 1.

Масив с размерностью 1 имеет одну запись с индексом 0.

Цитата:

Насчет нескольких серв мне пришла интересная идея:idea: .
А что если поставить все управляющие импульсы в очередь?
Учитывая что МК остаётся свободным(работает таймер) времени и ресурсов это займет немного.
Пример:
(2мс+20мс)*8(кол-во серв)=88мс
Сервы успеют за это время 20 раз туда и обратно повернутся.

Как идейка реализуема?


Напраление мыслей правильное. лучше всего обрабатывать в очередь. Но учти програма будет раза в 3-4 больше. Готов.

Шли код, в нем есть 2 ошибки совершенно неочевидные для начинающих, попробую завтра объяснить в чем дело. Лучше вначале разобраться с простой, а потом усложнять.

Анатолий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 01:24 
Не в сети

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

Максимальная длина импульса для сервы - 2.1 мс. выделяем для сервы 2,5 мс. для 8 серв надо 2,5 * 8 = 20 мс.  Дунай в этом направлении.

Анатолий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 02:07 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
кстати можно на неостанавливаемом таймере 1 все зделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 02:26 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
aesok писал(а):
Симулятор же вводит тебя в заблуждение, ему достаточно только одного импульса чтобы установить положение сервы.

Поэтому сейчас более важен осцилограф чем модель сервы.


не надо на PROTEUS балоны катить !

он не вводит в заблуждение !

Если на серву перестать подавать импульсы управления то она останется в том положении в каком была если не поворачивать ее ось !

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 13:26 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
avr123.nm.ru писал(а):
кстати можно на неостанавливаемом таймере 1 все зделать.

А я и хочу всё на одном таймере сделать. :D
Отводить под сервы 2 таймера, это слишком жирно получается. :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 14:00 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
aesok писал(а):
Максимальная длина импульса для сервы - 2.1 мс. выделяем для сервы 2,5 мс. для 8 серв надо 2,5 * 8 = 20 мс

На бумаге красиво получается, но на практике таким способом удастся управлять каждой 8-й сервой, и то с очень небольшой точностью.

Что будет если всем сервам надо будет повернуться на 0.7мс?
20мс период выродится в 5.6мс :shock:.

Так что сейчас буду думать над реализацией идеи с очередью.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 14:29 
Не в сети

Зарегистрирован: 11 авг 2006, 01:02
Сообщения: 69
Откуда: ----
Попробуйте запрограмировать вот это.


Вложения:
Комментарий к файлу: рис
Безымянный.GIF
Безымянный.GIF [ 5.2 КиБ | Просмотров: 2048 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 16:12 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
aesok писал(а):
Попробуйте запрограмировать вот это.

Запрограммировать это несложно, но мы опять упираемся в пресловутую проблему "тиков таймера=тиков процессора".
Это можно обойти если вручную найти задержку 20мс-t1-t2-t3-t4-t5-t6-t7-t8, и жестко закрепить это число в константу.

Добавлено:
Но!!! Тогда мы сможем поворачивать серву только на определенный(закрепленный в константе угол)
Управляющий импульс ведь у каждой сервы СВОЙ!!!


Последний раз редактировалось Lirzman 16 авг 2006, 16:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 16:16 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Lirzman писал(а):
aesok писал(а):
Что будет если всем сервам надо будет повернуться на 0.7мс?
20мс период выродится в 5.6мс :shock:.

Так что сейчас буду думать над реализацией идеи с очередью.


а какая разница на сколько нужно повернуть сервы ? вы каждой управляете через 2500 мкС (или 2400 или поменьше) не зависимо от длины управляющего импульса.

у вас есть число которые нужно загрузить в таймер 1 после управления каждой сервой - например 2500  5000  7500  и так далее

чтоб во 2-й серве слеоать импульс вам нужно в прервании на 2500 сделать "1"  на серву 2 и вписать в регистр таймер 1 число 4500, когда он опятьпрервется нужно сделать "0" на серве 2 и вписать в таймер 1 число 5000

по прерванию на 5000 на серве 3 сделать "1" и вписать в таймер1 число  (5000 + (длина импульса для серво 3 в мкС))

это пример чисел если таймер1 тикает каждую мкС.

========

Вот такие настройки для таймера_1 похоже нужны:

// Timer/Counter 1 тикает от  System Clock
TCCR1A=0x00;
TCCR1B=0x01;


OCR1AH=0x0F; // это 2 байтное число
OCR1AL=0xFF; // при досчете до которого
// произойдет прерывание - TIM1_COMPA


//вот включение этого прерывания
TIMSK=0x10;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 16:57 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
ИМНО слишко сложно всё.
Зачем огород городить с расчетами, если гораздо проще так:
Подать упр. импульс в (X)мс на серву 1.
Подать задержку в 20мс на серву 1.

Подать упр. импульс в (X)мс на серву 2.
Подать задержку в 20мс на серву 2.

И т.д до 8 сервы.

Я думаю сила(torque) сервы не слишком упадет если сигнал будет раз в 176мс ((2+20)*8=176)?

Или я неправ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 17:20 
Не в сети

Зарегистрирован: 11 авг 2006, 01:02
Сообщения: 69
Откуда: ----
Lirzman писал(а):
ИМНО слишко сложно всё.
Зачем огород городить с расчетами, если гораздо проще так:
Подать упр. импульс в (X)мс на серву 1.
Подать задержку в 20мс на серву 1.

Подать упр. импульс в (X)мс на серву 2.
Подать задержку в 20мс на серву 2.

И т.д до 8 сервы.

Я думаю сила(torque) сервы не слишком упадет если сигнал будет раз в 176мс ((2+20)*8=176)?

Или я неправ?


Не надо ждать 20 мс чтобы подать ипульс на следующюу серву. 20 мс это пероуд импульсов на одной серве.

Думаю период в  176 мс очень большой. Нужно поискать спецификации серв.

Анатолий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 17:30 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
aesok писал(а):
Думаю период в  176 мс очень большой.

Почему-же большой каждая серва будет позиционироваться ~5 раз в секунду

[OFFTOP]
ICQ цветок не смотрите,он не горит потому что у меня Miranda,
а так я в сети постоянно(у меня ADSL)  :D
[/OFFTOP]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 авг 2006, 18:46 
Не в сети

Зарегистрирован: 11 авг 2006, 01:02
Сообщения: 69
Откуда: ----
Lirzman писал(а):
aesok писал(а):
Думаю период в  176 мс очень большой.

Почему-же большой каждая серва будет позиционироваться ~5 раз в секунду



Я не спец по сервомашинкам, но вот что я думаю:

Для цифровых сервомошинок не нет большой разници в переоде следования импульсов. Микроконтроллер измеряет длительность импульса, запоминиет это значение в памяти, и изпользует для установки положения сервомашинки. Нет новых импульсов, используеться значение из памяти, есть значение обновляеться.

В аналоговых сервомашинках запоминающим элементом являеться кондесатор. Если не подзаряжать его время от времени до нужного напряжения (по спецификациям сервомашинок через каждые 20 мс) то он будет из за токов утечки разряжаться, и положение сервомашинки будет изменяться. Но нужно проверить на реальной сервомашинке.

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

To 123: Что говорит ваш любимый симулятор по этому поводу.

Анатолий.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 227 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13, 14, 15, 16  След.

Часовой пояс: UTC + 4 часа


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

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


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO