roboforum.ru

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


Реверс сервы с помощью Arduino

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Реверс сервы с помощью Arduino

Сообщение =DeaD= » 25 июн 2011, 10:43

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

Re: Реверс сервы с помощью Arduino

Сообщение Michael_K » 25 июн 2011, 10:47

Ну вот посмотрите прогу выше - она кривая.
Она МОЖЕТ работать, а может и не работать. А может импульсы пропускать... Серва может дребезжать, а может не дребезжать. Это зависит от того, как наложатся асинхронные события (частота приходящих импульсов, их скважность, частота цикла программы).

Вы же понимаете, что работоспособность программы совсем не является критерием правильно спроектированной программы. То же самое и к железу относится.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Реверс сервы с помощью Arduino

Сообщение =DeaD= » 25 июн 2011, 11:01

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

Re: Реверс сервы с помощью Arduino

Сообщение avr123.nm.ru » 25 июн 2011, 22:16

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

Re: Реверс сервы с помощью Arduino

Сообщение Dmitri Vladimirovich » 25 июн 2011, 22:52

народ а че вы паритесь ? (с дребезгом сервы)

я тут недавно в фотруме про микроконтроллеры создал тему АТМЕГА + серва

все оказалось в том что просто в сырую нельзя серве скормить выход с ШИМА или таймера. Он меняет не только длинну импульсов но и скважность. Соответственно не всегда скважность будет 20 мс

Все решилось добавлением в проект функции мап ардуиновской которая будет мапить угол от нуля до 180 к значению шима от 0ля до 255

Это четко так, проверенно не раз (уже трем людям с этим помог).
Как бы они ШИМ не настраивали серва все равно дергается. Добавляют маппинг и все работает.

прикол библиотеки серво.h - наличие маппинга вот и все.

Добавлено спустя 1 минуту 5 секунд:
forum2/topic10150.html
#define TRUE FALSE
Dmitri Vladimirovich
 
Сообщения: 283
Зарегистрирован: 05 янв 2010, 23:07
Откуда: Красноармейск
Skype: dmitry.vladimirivich
ФИО: Дима.В.

Re: Реверс сервы с помощью Arduino

Сообщение =DeaD= » 25 июн 2011, 23:02

Dmitri Vladimirovich писал(а):Он меняет не только длинну импульсов но и скважность

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

Re: Реверс сервы с помощью Arduino

Сообщение HarryStar » 26 июн 2011, 01:31

задержка в 20 мс - это 100% ошибка. Этого в программе не должно быть.
Завтра будет время набросаю на своем макете прогу-реверс.
Аватара пользователя
HarryStar
 
Сообщения: 990
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Re: Реверс сервы с помощью Arduino

Сообщение Сергей » 26 июн 2011, 09:33

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

Re: Реверс сервы с помощью Arduino

Сообщение HarryStar » 26 июн 2011, 13:16

Неизвестно кому было адресовано столь категоричное заявление.
Если мне, то я вроде как уже все изучил довольно давно :)

К сожалению у меня нет Ардуино, только обычные МК + CVAVR, это конечно не совсем по теме, я просто хотел проверить работоспособность. Но думаю на ардуине можно сделать аналог.

Код: Выделить всёРазвернуть
#include <mega32.h>

interrupt [EXT_INT2] void ext_int2_isr(void)
{
    unsigned int channel0;
    if(PINB.2) // Передний фронт
    {
        TCNT1 = 0;      // Обнуление таймера
        MCUCSR=0x00;    // Переключаемся на режим "По заднему фронту"
    }
    else       // Задний фронт
    {
        MCUCSR=0x40;    // Переключаемся на режим "По переднему фронту"
        channel0 = TCNT1;    // В channel0 длительность импульса в 2x микросекундах
        channel0 = (3000 - channel0) + 3000;    // Реверс
        PORTA = 0xFF;   // Старт инмпульса
        TCNT1 = 0;      // Обнуление таймера
        while(TCNT1<channel0) continue;
        PORTA = 0x00;   // Стоп импуьса
    }
}

void main(void)
{
    PORTA=0x00; DDRA=0xFF;
    PORTB=0xFF; DDRB=0x00;
    PORTC=0x00; DDRC=0x00;
    PORTD=0x00; DDRD=0x00;

    // Внешнее прерывание
    GICR|=0x20;
    MCUCR=0x00;
    MCUCSR=0x40; // По переднему фронту
    GIFR=0x20;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    TCCR1A=0x00; TCCR1B=0x02; // Clock value: 2000,000 kHz
    TCNT1H=0x00; TCNT1L=0x00;
    ICR1H=0x00;  ICR1L=0x00;
    OCR1AH=0x00; OCR1AL=0x00;
    OCR1BH=0x00; OCR1BL=0x00;

    TIMSK=0x00;

    #asm("sei")

    while (1) continue;
}




Вроде проблем нет, ничего не дергается.
Вход - порт B пин 2, выход - любой пин порта А
Аватара пользователя
HarryStar
 
Сообщения: 990
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Пред.

Вернуться в Arduino и другие Xduino

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

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

Mail.ru counter