программноое ШИМ управление кучей серв

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

программноое ШИМ управление кучей серв

Сообщение Темыч » 09 мар 2008, 02:38

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

...
PA.1=1;
DELAY 2 ms;
PA.1=0;
DELAY 20 ms;
...


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

вопрос в том, КАК можно более быстро организовать все это хозяйство? так как при управлении 12ю сервами накапливается погрешность около 12*22*0.001=0.264 секунды.
а скорость реакции стандартной сервы - 60 градусов за 0.15 секунды, что вообще недопустимо. устроило бы меня, чтобы полный цикл(чтобы прога успевала "пройтись" по всем сервомоторам) составлял 0.0025(время поворота на 1 град) сек - на крайняк 0.0030, но не больше(эта цифра связана с тем, что критическая точность изменения угла сервы - 1 градус, если за 1 цикл я буду изменять угол поворота сервы больше чем на 1 градус, то у меня сервы начнут двигатьсям не в соответствии с прогой, хотя и будут в итоге становиться в те положения, которые ей послала прога). если кому непонятно, то я нарисую. кварц стоит у меня на 16 МГц. есть вариант прицепить к моей меге еще несколько,как раз таки для контроля моих привов, но мне этот вариант кажется несколько варварским :)
Аватара пользователя
Темыч
 
Сообщения: 35
Зарегистрирован: 04 май 2006, 20:50
Откуда: Тосно (около Питера)

Re: программноое ШИМ управление кучей серв

Сообщение =DeaD= » 09 мар 2008, 09:13

Управление кучей серв у меня уже реализовано вот здесь: [[Шлюз-контроллер GATE-A8D8M2]] и [[Шлюз-контроллер GATE-A8D16]].

Если коротко по сути - вешаемся на прерывание по таймеру и каждый момент времени (очередные 2мс) рулим парой серв или отдыхаем (в прерывании заводим счётчик, который сбрасываем 50 раз в секунду, чтобы обеспечить требуемую частоту ШИМа для серв 50Гц. При этом рулим парой серв таким образом - если сейчас только начинаем рулить этой парой, тогда выдаем 1 на выходы, а затем когда нужно - ставим обратно 0.

Теперь по вашим необоснованным требованиям по времени: "устроило бы меня, чтобы полный цикл (чтобы прога успевала "пройтись" по всем сервомоторам) составлял 0.0025сек". Тут вообще полная ерунда :) естественный цикл управления сервы - 50Гц = 0.02сек, быстрее делать смысла нет, потому что сервы из-за протокола не имеют возможности получить эту информацию от МК. Мой метод обеспечивает эту максимальную производительность без каких-бы то ни было проблем.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: программноое ШИМ управление кучей серв

Сообщение mandigit » 09 мар 2008, 14:05

Возможный вариант управления:
Создаем таблицу в ОЗУ (256 байт)
каждый бит байта отвечает за работу отдельной сервы

цикл выглядит так:
ждем 1 ms
начинаем выводить в порт значения таблицы из ОЗУ каждые 1 ms / 256 = 4мкс
ждем 0,5ms

колгда нужно изменить работу какой-то сервы - вносим изменения в таблицу
Аватара пользователя
mandigit
 
Сообщения: 583
Зарегистрирован: 28 ноя 2005, 12:05
Откуда: Москва

Re: программноое ШИМ управление кучей серв

Сообщение Темыч » 09 мар 2008, 15:31

хмм... интересная очень схемка. НО я пока что с подобными вещами знаком не очень глубоко на уровне программа - железо, а результата хочется сейчас :oops: . пока спал, подумал, что для моих познаний идеально подойдет след вариант:

тупо и банально вешаю к каждой серве микросхемку-ШИМ контроллер, и управляю уже непосредственно мелкосхемкой. тут момент такой: а вообще существуют такие микросхемки? главное требование - небольшой размер, хотя если нет никаких, то пойдут и здоровые. КТО нибудь знает такие микросхемки? и если нет то где их можно поискать? и если да то как именно они работают и как называются?


а вот насчет таблицы я подумаю...

иеще вопрос. возможно ли, чтобы время от импульса до импульса на мою серву было чуть больше 20ms? скажем, 21-22? не откажется ли серва правильно работать при таком раскладе? и еще: ms - это миллисекунды или микро? :oops:
Последний раз редактировалось Темыч 09 мар 2008, 15:37, всего редактировалось 1 раз.
Аватара пользователя
Темыч
 
Сообщения: 35
Зарегистрирован: 04 май 2006, 20:50
Откуда: Тосно (около Питера)

Re: программноое ШИМ управление кучей серв

Сообщение =DeaD= » 09 мар 2008, 15:35

Тёмыч, я вас уверяю, быстрее разобраться с одним из двух предложенных решений, чем городить то, что вы предлагаете.
Либо вообще мою прошивку взять и частично внедрить в свой МК.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: программноое ШИМ управление кучей серв

Сообщение Сергей » 09 мар 2008, 15:57

Ну програмку то несложно написать, аппаратно рулить или нет, всеравно можно если просто знать принцип действия. Главное читать даташит внимательно, и искать в гугле этот велосипед) А вообще лучше готовым воспользоваца, как у =Dead=
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: программноое ШИМ управление кучей серв

Сообщение Темыч » 09 мар 2008, 16:39

лан. все понял. и последний вопрос: можно ли делать промежутки но 20 мс, а чуть чуть больше?
Аватара пользователя
Темыч
 
Сообщения: 35
Зарегистрирован: 04 май 2006, 20:50
Откуда: Тосно (около Питера)

Re: программноое ШИМ управление кучей серв

Сообщение =DeaD= » 09 мар 2008, 17:28

Темыч писал(а):лан. все понял. и последний вопрос: можно ли делать промежутки но 20 мс, а чуть чуть больше?

чуть-чуть больше можно, там вроде в пределах нескольких герц в обе стороны серва нормально реагирует, а потом её начинает плющить. :shock:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: программноое ШИМ управление кучей серв

Сообщение Grover » 11 мар 2008, 10:57

На каждую серву повесить восьми-ногую Tiny. Тюнька ждет сигнал от главного процессора (mega), есть сигнал - включить ШИМ, нет сигнала - Выключить.
Мои странички в интернете: http://groversuper.ucoz.ru
Аватара пользователя
Grover
 
Сообщения: 78
Зарегистрирован: 28 янв 2008, 09:27
Откуда: Россия

Re: программноое ШИМ управление кучей серв

Сообщение =DeaD= » 11 мар 2008, 11:09

Grover писал(а):На каждую серву повесить восьми-ногую Tiny. Тюнька ждет сигнал от главного процессора (mega), есть сигнал - включить ШИМ, нет сигнала - Выключить.

Всё давно придумано до вас - http://www.openservo.org/, только нифига это не дёшево будет и геммороя нахаваетесь.
Без особой нужды лучше так не извращаться.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: программноое ШИМ управление кучей серв

Сообщение Сергей » 11 мар 2008, 15:00

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

Re: программноое ШИМ управление кучей серв

Сообщение =DeaD= » 11 мар 2008, 17:27

Сергей писал(а):Да купить PWM контроллер и не парица.

Я не понимаю чем интерфейс с PWM-контроллером проще управления программного сервами :oops:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: программноое ШИМ управление кучей серв

Сообщение FireFly » 11 мар 2008, 20:13

http://www.lynxmotion.com/Product.aspx? ... egoryID=52

Воть... :)
там контроллер на 32 сервы, можно купить, а можно самому сваять - имеюцо и схема и описалово и исходники и софт для управления с компа - открытый проект одним словом :wink:
основа мега8(168) + сдвиговые регистры копеечные + мах232
Аватара пользователя
FireFly
 
Сообщения: 1576
Зарегистрирован: 19 июн 2005, 18:27
Откуда: Камышин

Re: программноое ШИМ управление кучей серв

Сообщение Сергей » 11 мар 2008, 20:34

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

Re: программноое ШИМ управление кучей серв

Сообщение =DeaD= » 11 мар 2008, 20:55

FireFly писал(а):имеюцо и схема и описалово и исходники и софт для управления с компа - открытый проект одним словом :wink:

Так и я выше привёл свой открытый проект тоже, видимо не нравится чего-то... :)

Добавлено спустя 44 секунды:
Сергей писал(а):А вот ты попробуй написать софт для аппаратного управления сервами для какогонить МК и програмное управление, и сразу почуешь разницу)

Ээээ.... вроде пробовал, и что? Наверное я безчувственный какой-то? :oops:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

След.

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

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

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