roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Управление сервой
СообщениеДобавлено: 09 дек 2011, 19:03 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Привет всем! :D
На днях решил научиться рулить сервой, поигрался чуть чуть, потом решил построить руку-манипулятор из аналоговых серв (4 штуки) на 3 таймера ШИМ. (Просто так, ради интереса). Построил софт, и всё такое. Потом задумался решил кнопочками поуправлять сервой. Теория простая: изменяем задержку и получаем поворот сервы. Теорию взял от сюда : http://cdxp.zx6.ru/archives/355 .начал работу.
Суть проги такая, есть изначальный массив a[2] = {1500, 1500} (у меня так по середине сервы становятся), при нажатии на кнопку значение массива или увелич. или уменьшается. При достижение предела (т.е. если >2000) мы ставим максимальную задержку, т.е. 2000мс. и наоборот.
при нажатии кнопкии мы увеличиваем или уменьшаем задержку на 10мс <= вот тут то у меня проблема, при нажатии на кнопку задержка становится или 2000мс или 1000мс. Я даже не хнаю что делатЬ:(
Я хотел бы что бы при нажатии на кнопку задержка увеличивал ИМЕННО на 10мс или уменьшалась на 10мс.
вот код, он предельно ясен.
Код:
#include <avr/io.h> //Библиотека ввода/вывода
#define TOP 20000
int a[2] = {1500,1500};
/*void servo1_position(int pos)
{
OCR1A = pos;
}

void servo2_position(int pos)
{
OCR1B = pos;
}
*/
void main(void)
{

//настраиваем Timer1
TCCR1A=0xA0;
TCCR1B=0x12;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=TOP>>8;
ICR1L=TOP; //максимальное значение таймера
OCR1B=0x00;
OCR1A=0x00;
DDRA=0x00;
DDRD=0x30; //PORTD4 & PORTD5 сконфигурированы на выход
PORTA=0xff;
/*servo1_position(zos); //на PD5 появится ШИМ с частотой 50 гц и длительностью имлуьса 1000 мксек
servo2_position(zos); //на PD4 аналогично, но длительность импульса уже 1300 мксек*/
while(1){
if (!(PINA & (1<<PINA0))) {a[1]+=10;}// проверить "0" на линии 1 порта D
if (!(PINA & (1<<PINA1))) {a[1]-=10;}// проверить "0" на линии 1 порта D
if (!(PINA & (1<<PINA2))) {a[2]+=10;}// проверить "0" на линии 1 порта D
if (!(PINA & (1<<PINA3))) {a[2]-=10;}// проверить "0" на линии 1 порта D
if (a[1] > 2000) {a[1] = 2000;}
if (a[2] > 2000) {a[2] = 2000;}
if (a[1] <1000) { a[1] =1000;}
if (a[2] < 1000) {a[2] =1000;}
OCR1A = a[1];
OCR1B = a[2];
}
}

спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 09 дек 2011, 19:26 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Дык надо вот это:
Код:
OCR1A = a[1];
OCR1B = a[2];
}
}


превратить во что-то типа:
Код:
OCR1A = a[1];
OCR1B = a[2];
delay(100);
}
}


Синтаксис конкретной delay проверьте сами. Задержку сделать можно где-нибудь 50-100мс

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 10 дек 2011, 15:11 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
=DeaD= писал(а):
Дык надо вот это:
Код:
OCR1A = a[1];
OCR1B = a[2];
}
}


превратить во что-то типа:
Код:
OCR1A = a[1];
OCR1B = a[2];
delay(100);
}
}


Синтаксис конкретной delay проверьте сами. Задержку сделать можно где-нибудь 50-100мс

Это всё понятно, просто странно, я при нажатии кнопки говорю МК, чтобы он увеливал переменную на 10, или уменьшал её на 10, а он сразу доводит её до максимума или минимума.
вроде запись a[1]+=10 означает, типо увеличить значение первой ячейки массива на 10 а не довести до максимума.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 10 дек 2011, 15:32 
Не в сети
Аватара пользователя

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

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 10 дек 2011, 17:18 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Пасибо ) поставил задержку в 10мс и стало всё отлично работать, жалко только то что использую я дорогие мне таймеры, а так всё отлично :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 19 янв 2012, 12:39 
Не в сети
Аватара пользователя

Зарегистрирован: 19 янв 2012, 12:31
Сообщения: 12
Надеюсь, топикстартер не будет против, если я немного поэксплуатирую его тему (:

И сразу с сути вопроса - требуется возможность по нажатию кнопки посылать одновременно в два сервопривода сигнал на поворот в 90 градусов. Повторное нажатие кнопки должно возвращать их в начальное положение. Если получится к этому ещё и привязать питание диодов (положение "верх-выкл", положение "низ-вкл"), то вообще шикарно.

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

Заранее огромное спасибо всем сочувствующим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 12:02 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
Судя по ТЗ, можно применить самый маленький МК, ведь потребуется всего 4порта : 1.кнопка 2.две сервы 3.светодиод вкл 4.светодиод выкл. Ну максимум 5, если сервы на разные порты повесить, хотя смысла в этом не вижу исходя из задачи.
Кроме того, при такой постановке задачи можно обойтись без МК, программирования и прошивки, правда схема будет немного увесистей.
Дуина для такого ТЗ ИМХО то же что из пушки в муху :roll:
ЗЫ: <питание диодов> я понял как <подключить светодиоды>.
ЗЫЫ: куски кода для сервы могу предоставить, но только на ассемблере. Хотя по сервам не найти код на баскоме или си - просто нереал...

_________________
_________
Sincerely,
Vovan


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

Зарегистрирован: 19 янв 2012, 12:31
Сообщения: 12
Т.е всё, что мне требуется - это непосредственно сервы, МК, диоды и программное обеспечение для того, чтобы залить программу? Потом это дело собирается, ищется/пишется программа и готово?


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

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Да. А я как фанат дискавери для похожей задачи взял дискавери и сервы. Диоды с кнопкой есть на борту мк :) Хотя это даже не из пушки:))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: 19 янв 2012, 12:31
Сообщения: 12
Ох, голова кругом от всего (впервые сталкиваюсь).
Обязательно куплю и всё это дело соберу. Надеюсь, что всё получится. :D
Всем большое спасибо за советы!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 17:10 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
2Hito: верно, а как альтернатива ИМХО можно и сервотестер (гугль сразу схему выдает) на таймере, например применить... Схема немногим больше, зато без мороки с программированием и программатором...

_________________
_________
Sincerely,
Vovan


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 18:15 
Не в сети
Аватара пользователя

Зарегистрирован: 19 янв 2012, 12:31
Сообщения: 12
Вроде бы всё понятно, единственное - смогу ли я заставить обе сервы действовать одновременно по нажатию кнопки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 18:21 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
??? Почему нет? Что, собственно помешает? Для начала их можно вообще запараллелить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 19:41 
Не в сети
Аватара пользователя

Зарегистрирован: 19 янв 2012, 12:31
Сообщения: 12
Повторюсь, я вообще впервые электронику в руках держать буду. Поэтому чем подробнее - тем лучше! (:

Кстати, паять много придётся?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервой
СообщениеДобавлено: 20 янв 2012, 20:03 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
Параллельно (я уже писал <на один порт> потому что проверял, а иначе не писал бы) ничто не мешает, как и сказал elmot.
Hito писал(а):
я вообще впервые электронику в руках держать буду
мы все когда-то первый раз паяльник в руки брали :wink: ИМХО лучше поздно чем некогда :roll:
Выбирайте схему, обсудим.
Много или мало паять - понятие относительное :wink:

_________________
_________
Sincerely,
Vovan


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

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


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

Сейчас этот форум просматривают: Bing [Bot] и гости: 5


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

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