roboforum.ru

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


Управление сервопривода от компьютера

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Сообщение avr123.nm.ru » 13 янв 2006, 10:19

Сергей писал(а):Я в Си не силен и код  тот никак освоить не могу.

хоцца двумя сервами порулить одновременно, а никак не получается))) Или просто объясните какие ф-ции там зачем. .


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

Сообщение Сергей » 13 янв 2006, 16:50

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

Сообщение avr123.nm.ru » 13 янв 2006, 17:52

Сергей писал(а):читал я ваш курс уже. Я про тот код именно говорил.


ну дак теперь на практике попробуй, и как в курсе сказано - записывай что не ясно и выясняй.

а как иначе научится то ?

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

Сообщение Сергей » 13 янв 2006, 22:53

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

Сообщение avr123.nm.ru » 14 янв 2006, 03:30

Сергей писал(а):Тоесть не скомпа рулить а так, програмно.


ты не спеши, подумай как мы (те кт ответит тебе) должны понять управлять програмно ?  должны же быть какието органы управления - кнопки хотябы ?

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

Сообщение avr123.nm.ru » 14 янв 2006, 17:29

ну вот идею программы ты уже озвучил.

давай напишем ее он-лайн.

можно не на Си а на псевдокоде.

Т.е. на русском языке.

Расскажи что ты знаешь о том что нужно сделать чтоб позиционировать серво ?

напиши по русски краткий алгоритм той функции что тебе нужна.

детализируй алгоритм.

не стесняйся - публикуй что накрапал.

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

Сообщение Сергей » 14 янв 2006, 21:23

Значит так я себе впринципе это представляю:

*Серва работает так: каждые 20мс делается прерывание от 1 до 2мс.
Чтобы сделать прерывания нужен таймер. Помойму таймер1 нужен.
Расчитать таймер исходя из того что у мя внешний кварц на 16мГц.
Как я знаю, таймер тикает постоянно независимо от остальных процесов. (если его включить)
Чтобы включить серву нада подать на нее сигнал.
*Чтобы подать нее сигнал нада нада сделать функцию которая будет выставлять значение задержек(от 1 до 2мс) и подвать сигнал таймера на какуюто опр ногу МК. (Дело в том, что некоторые говорят что можно управлять несколькими сервами одновременно на любых портах, а некоторые говорят что это не так ибо есть спец ноги для ШИМ).
*К примеру, нужно сделать механическую руку на сервах. Для хорошего позиционирования нужно чтобы сервы могли двигаться одновременно и в разных направлениях.
(Вообще, я оч много слышал что когда делают позиционирование серв, значения позиции могут быть от 0 до 255 те 256 позиций сервы)
Ну первое что мне приходило в голову это вот типа такого кода:
set_position(PORTB, 0xff, 175)
set_position(PORTD, 0xff, 234)
и тд
В Си насколько я знаю, код читается сверху вниз. Значит МК читает функции сверху вниз НЕ задерживаясь на какойлибо ф-ции ожидая ее выполнения, а команды читаются просто сверху вниз и выполняются таймером который тикает постоянно.
----
Ну вот примерно так. Я наверно еще чтото упустил, но Вы задайте вопросы если что.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Сергей » 14 янв 2006, 21:26

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

Сообщение avr123.nm.ru » 15 янв 2006, 02:28

Сергей писал(а): *Серва работает так: каждые 20мс делается прерывание от 1 до 2мс.


сразу старайся точно и грамотно формулировать свои мысли!  1-я стр. курса

я б сформулировал так:

avr123.nm.ru писал(а):- для управления положением вала servo необходимо ножкой МК каждые 20 мС создавать управляющий положительный импульс, длительность которого оределяет положение вала сервы и может находится в пределах от 800 до 2200 мкС при этом длительность ипульса 1500 мкС соответвует среднему положению вала сервы.


сразу чувствуется что нужны прерывания хотябы каждые 20 мС

Сергей писал(а):Чтобы сделать прерывания нужен таймер. Помойму таймер1 нужен.

Расчитать таймер исходя из того что у мя внешний кварц на 16мГц.

Как я знаю, таймер тикает постоянно независимо от остальных процесов. (если его включить)


лучше 8 битный таймер_0 задействовать.

и ГЛАВНОЕ в задачах моего курса есть пример как это сделать с таймером_0 - в задачах 1, 3, 3new и по моему 8.  Посмотри там сам.

НО !

Кварц лучше ВСЕГДА брать UART'овский (см таблицу в ДШ на МК) - потому как потом захочется связать свою штуку с ПК например иль с другим устройством на стандартной скорости COM порта - а попрут ошибки.

Сергей писал(а):Чтобы включить серву нада подать на нее сигнал.


опять не точность - а она повлечет за собой ошибки...

Чтобы включить серву надо подать на нее ПИТАНИЕ !  
от 4.8 до 6 вольт обычно.

Сергей писал(а):*Чтобы подать нее сигнал нада нада сделать функцию которая будет выставлять значение задержек(от 1 до 2мс) и подвать сигнал таймера на какуюто опр ногу МК.


я предлагаю чуть иначе - прямее, "в лоб"

пусть серв 4, тогда будем прерваться по переполнению Timer_0 каждые 5 мС а в обработчике прервания поствим счетчик для номера текущей сервы

объявление переменной:

Код: Выделить всёРазвернуть
unsigned char srvo_ctr = 1; // номер сервы


в обработчике прерывания по переполнению Timer_0 каждые 5 мС такой кусочек вставить:

Код: Выделить всёРазвернуть
// в этом месте программы номер сервы может быть от 0 до 3

........

// после выдачи импульса
servo_ctr++; // увеличить номер сервы на 1

if (servo_ctr > 3) { // если номер сервы уже 4
servo_ctr = 0; // сделаем его 0
}; // Я СПЕЦИАЛЬНО НЕ ПИШУ if В ОДНУ СТРОЧКУ !!!
// и ученикам не советую !

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

Сообщение avr123.nm.ru » 15 янв 2006, 02:28

между прерываниями мы вычисляем или задаем нужные положения серв, и храним их в глобальном (т.е. доступном в любом месте программы - значит объявленом вне {} скобок какой либо функции программы !) массиве из 4 переменных, например:
Код: Выделить всёРазвернуть
unsigned int servo_pos[3] = {1500,1500,1500,1500}; 
// требуемая длительность импульса в мкС для servo номер servo_ctr


======= дальше:

Что думаешь? что делать?  

Есть у нас нужное время импульса и есть 4 прерывания по числу серв, каждые 5 мС


Сергей писал(а):некоторые говорят что можно управлять несколькими сервами одновременно на любых портах


Конечно.

Сергей писал(а):а некоторые говорят что это не так ибо есть спец ноги для ШИМ


для ШИМ АППАРАТНОГО есть спец ноги, а для софтверного любая нога подойдет,

но в наем случае ШИМ не нужен, хотя сигнал и похож на ШИМ с очень большой скважностью.

Сергей писал(а):В Си насколько я знаю, код читается сверху вниз.

Значит МК читает функции сверху вниз НЕ задерживаясь на какойлибо ф-ции ожидая ее выполнения, а команды читаются просто сверху вниз и выполняются таймером который тикает постоянно.


НЕТ ! а говоришь мой курс читал .......

Код можно читать как угодно и как удобно.

А выполняется он согласно его содержанию.

Функция, после вызова в программе, исполняется до конца и затем происходит возврат к месту после знака ; за местом вызова функции.

Однако выполнении функции может быть прервано:
- прерыванием
- сбросом МК (не с высоты!) по нескольким причинам
- вызовом другой функции из исполняемой щас функции, тогда возможен возврат обратно
- безусловным или условным переходом в место программы вне этой функции

Сергей писал(а):.... блин, щас чото задумался.


Это круто!   я мыслю - я живу...

Сергей писал(а):Если таймер один, то тогда можно удет управлять только одной сервой?

Как один и тотже таймер сможет делатть столько прерываний?
причем разных...

Или ему пофигу?


Ему и правда пофигу - он же "железный"

А может то он может, но мы не будем на него наваливаться скопом, есть ведб и другие таймеры в МК

я на ATmega16 намекаю например...

===============

Напоминаю - "согласно традициям гостеприимства" и стр. 1 курса

у тебя не должно остаться чего либо не ясного из того что я написал, читай записывай что не ясно,

в начале ищи ответы сам:

пожалуйса добавь в избраное этот линк:
-> поиск GOOGLE по Краткому курсу AVR начинающим
и используй его.

а лучше всеже найди время почитай спокойно ВЕСЬ курс, и сделай упражнения-задачи.

Загляни в библиотеку книг по электронике и технике
http://lord-n.narod.ru/walla.html  (в низу страницы)

а потом уже спрашивай.

==============

C-дай свое мыло и получи CodeVisionAVR

Хотя нам будет достаточно VMLAB (скачай по линк-АМ ! на стр 4 курса)
но в PROTEUS есть модель и сервы и ШД и просто ЭлМотора.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение -= Александр =- » 15 янв 2006, 03:13

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

Сообщение Digit » 15 янв 2006, 03:53

avr123.nm.ru, замечательно и подробно написал! Поддерживаю Александра в плане респекта!
Только сдержаннее надо быть, коли учить взялись, ИМХО.
:wink: Это я о вот этом:
Сергей: .... блин, щас чото задумался
Вы: Это круто!   я мыслю - я живу...
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Сообщение avr123.nm.ru » 15 янв 2006, 05:07

Digit писал(а):Это круто!   я мыслю - я живу...


ну этож древняя мудрость: "я мыслю значит я живу" иначе, без мысли человек не живет а существует.

а жить я считаю это круто, т.е. активно жить - познавать что-то новое как и полочено человеку.

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

Сообщение Digit » 15 янв 2006, 05:50

avr123.nm.ru, тоже зацепить не хотел.
Просто желаю улучшить процесс взаимодействия...
Всякому ж учителю фидбэк нужен для самосовершенствования :wink:
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Сообщение Сергей » 15 янв 2006, 19:29

Поддерживаю всех насчет респекта)))
---
КодВизион у меня есть, я на нем пишу. Еще пишу в АВРСтудио.
ВМлаб у меня тоже есть, только я его не юзал. Почему? Както он мне не приглянулся, винить меня за это не надо. Я все делаю вживую. Все паяю и не жалею.
---
На днях прочитаю курс заного.
---
Русский язык у мя точно хромает)))
---
До меня чото всетаки не доперает... щас еще посижу подумаю.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Пред.След.

Вернуться в Новичкам или основы основ роботостроения.

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

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