roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 115 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
 Заголовок сообщения: Управление сервопривода от компьютера
СообщениеДобавлено: 22 окт 2005, 11:24 
Не в сети

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Здравствуйте уважаемые !!! Как я рад что нашел этот форум !!!
А теперь к делу.
Собственно меня интересует как это можно сделать, что такое серва знаю :) ибо занамиюсь rc моделирование (авто). Програмировани тоже знаю,  C++ под дос, управление как я понимаю осушествляеться через COM порт, собственно что нужно писать чтобы все заработало, какие нужны микросхемы, контролеры, между компом и сервой. Если напишете как в кулинарной книге :),  тоесть по шагам, буду очень рад.
Заранее извините если задаю тупые вопросы :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2005, 13:30 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Есть два способа:
1)воткнуть серву в LPT и слать туда искуственно сделанный сигнал
2)сделать преобразователь на контроллере (COM-порт -> ШИМ)

В первом случае сильно завязываешься на комп, чтоб создать такой сигнал придется использовать системмный таймер и все время его генерить. к ЛПТ можно подключить до 8 серв. Если извратиться - около 16, но это геморно и сигнал нагенерить трудно будет.
Во втором - надо знать контроллеры. И комп тут не нагружен - шлешь в порт номер сервы и значение на которое ее выставить и не паришься, контролер все сделает сам. Количество серв в этом случае зависит от крутизны контроллера. На АВР, например Мега какая-нить хоть 32 штуки потянет!


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

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Начнем пожалуй с простого, интересует способ с LPT, как с ним работать, может код накидаете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 окт 2005, 19:21 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
А где думаешь писать?
Под ДОС все просто:

outp(888,a);
888 это адрес LPT1 в десятичной системе (378 в 16ричной)
а - байт. Каждый разряд отвечает за одну серву.

Цикл.
Вначале отправляем туда 255 (стартовый импульс всем)
Затем гасим разряды по-очереди, когда какой серве надо, зависит от ее положения.
Ждем сколько надо
Повторяем.

Значения выдержек смотри в файле.

Под ХР/NT/2000 ищи DLPORTIO.dll и как с ней работать, я уже не помню. Смысл тот-же.


Вложения:
ServoStandart.pdf [121.62 КиБ]
Скачиваний: 278
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 08:47 
Не в сети

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Да писать буду под дос на с++ ,  такая просьба может вы накидаете весь код программы, как я понимаю он небольшой? С портами до этого вообще не работал и поэтому немножко страшно вдруг что спалю, вообще спалить чтонибудь можно или нет.
И вопрос как все это подключаеться к порту? От сервы отходит три провода: плюс, земля и сигнал. Как я понимаю плюс и землю на 5 вольт, а сигнал какуда, ведь по одному проводу сиглан не передать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 10:19 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Найди распайку ЛПТ. Там тоже есть земля. Эту землю соединяешь с землей питания сервы. (не советую втыкать серву в компьютерное питание, винтам плохо станет от помех) Потом видишь на распайки 8 контактов данных. Туда и подключаются 8 серв своими сигнальными проводами.

Писанием в порты можно разве-что комп подвесить, спалить ничего нельзя.

По поводу кода - не знаю когда, щас досовское си еще найти надо...  :roll:

В общем задача простая: генерить импульсы заднной длины и повторять через заданное время. Тоесть ставим бит, ждем, сбрасываем, снова ждем. А вот сколько ждать - смотри в том файле. Помню только что повторяться должно с частотой 50 Гц. И так для каждого бита порта. Для удобства можно поднимать все биты одновременно, а сбрасывать уже как получится... Проще всего это сделать кручением счетчика. Скажем работает таймер, счетчик прибавляется. Для серв есть переменные с их значениями (положениями серв) если счетчик больше этого значения - сбрасываем бит. Счетчик заполнен - обнуляем. Второй счетчик считает общий период. Досчитал - обнуляем и запускаем оба, выставляем все байты снова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 10:47 
Не в сети

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Ага, будем пробовать, распайку уже нашел, с сервой тоже разобрался там от 0.9мс до 2.1 мс , частота 50 гц ,что кодирует полный поворот в лево и поворот в право.


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

Зарегистрирован: 21 апр 2005, 01:19
Сообщения: 111
Откуда: Екб
А я вот так и не понял: что получится если на серву вообще ни каких имульсов не подавать?
Она воспримит это как импульс минимальной длины и уйдёт в нулевое положение ИЛИ останется в текущем положении вала???
Т.е. можно ли рулить сервой не постоянно, а по мере необходимости, так сказать, в "пакетном режиме"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 11:36 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
А черт ее знает... Мне попадались и такие что держат положение, а были и такие которые взглючивали по-всякому... Пробовать надо...  :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 14:20 
Не в сети
Модератор

Зарегистрирован: 11 ноя 2004, 03:18
Сообщения: 1274
Откуда: Москва
Цитата:
А я вот так и не понял: что получится если на серву вообще ни каких имульсов не подавать?

Останется в том месте где была.


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

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Но вот сохраняет ли она усилие, тоесть если ее положение измениться она наверно не вернется в исходное положение.
И еще, кто пишет на С++ под дос, может накидает простейшую програмку для управления одной сервой, без всякого интерфейса и прочего (см. выше), я  тоже попробую сам разобраться, но так на всякий случай.


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

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
При отсутствии импульсов серва не пытается сохранять положение, потому как незнает какое положение сохранять ввиду отсутствия памяти как таковой :)

Во!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 19:33 
Не в сети

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Александр кажеться я допер как управлять LPT поравте если не прав.
Нужно послать значение 255 чтобы включить все канал в адресс оперативки с адресом 378 так ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 окт 2005, 23:32 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
Да. Тебе только одни этот адрес и нужен. 255 - это единицы во всех каналах, начало импульса для всех серв. Если серва одна - отправляй единицу в тот разряд, к которому она подключена.


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

Зарегистрирован: 22 окт 2005, 11:15
Сообщения: 345
Откуда: Красноярск
Прогу я буду писать под дос но в Win XP , блуждая по просторам интернета я обнаружил что XP не пускает в ту область оперативки так ли это , сам еще не пробовал. Что скажете по этому поводу?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 115 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.

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


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

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


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

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