roboforum.ru

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

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

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

=DeaD= » 25 июн 2011, 10:43

И при этом софт успешно читает с UART'а команды на той же скорости и положения сервы те же? Ну не знаю, не знаю...

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

Michael_K » 25 июн 2011, 10:47

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

Вы же понимаете, что работоспособность программы совсем не является критерием правильно спроектированной программы. То же самое и к железу относится.

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

=DeaD= » 25 июн 2011, 11:01

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

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

avr123.nm.ru » 25 июн 2011, 22:16

Возможно влияние помех по питанию на RC генератор - резко меняло его частоту.

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

Dmitri Vladimirovich » 25 июн 2011, 22:52

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

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

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

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

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

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

Добавлено спустя 1 минуту 5 секунд:
forum2/topic10150.html

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

=DeaD= » 25 июн 2011, 23:02

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

Так вроде скважность это отношение длины 1 к периоду? И вроде логично, что при сохранении общей частоты (а значит и периода) - при изменении длины 1 меняется соотв. и скважность?

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

HarryStar » 26 июн 2011, 01:31

задержка в 20 мс - это 100% ошибка. Этого в программе не должно быть.
Завтра будет время набросаю на своем макете прогу-реверс.

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

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

Рекомендую для начала просто изучить программирование на языке Си. А потом уже браться за микроконтроллеры.

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, выход - любой пин порта А


Rambler\'s Top100 Mail.ru counter