Реклама
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Подскажите как подключить к приемнику микроконтролер

  1. #1
    Постоянный пользователь Аватар для eliash

    Регистрация
    22.03.2010
    Сообщений
    224
    Вес репутации
    15
    Суть вопроса проста, может кто знает, что выдает приемник?

    хочу собрать БАНО на Arduino, но при этом посадить ее на пропорциональный канал, чтоб включать габариты(стояночные огни), больше стробы(полетные), больше - такси фонари (взлет/посадка)

    что выдают приемники на своих каналах? PWM? или разное напряжение?



    P.S. аппаратура FlySky TH9b

  2. #2
    Модератор раздела Аватар для olegtur77

    Регистрация
    15.06.2007
    Сообщений
    5,454
    Вес репутации
    59
    У всех приемников на выходе канальный прямоугольный импульс импульс, учите матчасть! На рцдизайне есть пару тем уже готовых проэктов на тини13/24, работают от 3х позиционного дискретного канала ,но и на пропорциональный его можно его подключить, разницы нет.

  3. #3
    Постоянный пользователь Аватар для eliash

    Регистрация
    22.03.2010
    Сообщений
    224
    Вес репутации
    15
    Цитата Сообщение от olegtur77 Посмотреть сообщение
    У всех приемников на выходе канальный прямоугольный импульс импульс, учите матчасть! На рцдизайне есть пару тем уже готовых проэктов на тини13/24, работают от 3х позиционного дискретного канала ,но и на пропорциональный его можно его подключить, разницы нет.
    Так я ж чего и спрашиваю, чтоб матчасть знать!

    пошел искать на рц-дизайн...

  4. #4
    Постоянный пользователь

    Регистрация
    05.06.2010
    Сообщений
    410
    Вес репутации
    14
    канал 90% времени в нуле, когда подходит его очередь он поднимается на +5 и держится 1000 нс(1мс) если канал на пульте в нуле, 1500 нс(1.5мс) если канал на пульте в середине и 2мс есть канал в 100% на пульте

    меряется очень просто - настраиваете таймер на 1 нс тикать, обнуляете и ждете когда вход поднимется в 1 тут же стартуете таймер и ждете когда упадет в ноль...как только в ноль упало - глушите тактовую таймеру а потом уже читаете из таймера число и отнимаете 900 и умножаете на 0.8 ... естественно проверяете чтоб не вылезало за минуса

  5. #5
    Постоянный пользователь

    Регистрация
    26.09.2009
    Сообщений
    62
    Вес репутации
    15
    Где-то есть класная статья, не могу найти



    Полный период большинство серв укладывается в 15мс.

    Период можно и больше, главное не меньше. В принципе экспериментально я доводил до 7-10мс, дальше серва перестаёт различать периоды.

    Такими периодами надо подавать сигнал непрерывно.



    В первой половине периода сигнал +5v, во второй прижат на землю.

    Длительность высокого сигнала определяет положение сервы.

    1500мс - это середина.

    Кажется 900мс это одно крайнее положение, 2100 - другое.

    Зависимость длительности от угла строго линейная.



    Если что обращайтесь, под AVR есть готовые прошивки. Правда не под arudino.



    А вот Смотреть на картинку



    1050мс 45 градусов в одну сторону,

    1950мс 45 градусов в другую.

  6. #6
    Постоянный пользователь Аватар для eliash

    Регистрация
    22.03.2010
    Сообщений
    224
    Вес репутации
    15
    Цитата Сообщение от shebeko Посмотреть сообщение
    Где-то есть класная статья, не могу найти



    Полный период большинство серв укладывается в 15мс.

    Период можно и больше, главное не меньше. В принципе экспериментально я доводил до 7-10мс, дальше серва перестаёт различать периоды.

    Такими периодами надо подавать сигнал непрерывно.



    В первой половине периода сигнал +5v, во второй прижат на землю.

    Длительность высокого сигнала определяет положение сервы.

    1500мс - это середина.

    Кажется 900мс это одно крайнее положение, 2100 - другое.

    Зависимость длительности от угла строго линейная.



    Если что обращайтесь, под AVR есть готовые прошивки. Правда не под arudino.



    А вот Смотреть на картинку



    1050мс 45 градусов в одну сторону,

    1950мс 45 градусов в другую.
    На большую ардуину у меня есть серво шилд, к нему просто подключается серва. Так вот там логика простая, я пишу на цифровую ногу значение в градусах, и серва поворачивается...

    получился почти круг, обычная серва работала в пределах 270 градусов.

    Конечно в своем самолете я лишних 70 грамм везти не буду, Arduino mini = 4,3 грамма, но под нее нет серво шилдов... Вот по этому буду писать управление. Там простой и удобный язык...

    Осталось повесить вход на прерывание, посчитать пришедшие данные (я так понимаю новую длину импульса) и заполнить переменные. потом вернуть управление основному циклу.

    Основной цикл уже будет считать задержки строб, и ключать то что должно быть включено.

  7. #7
    Постоянный пользователь

    Регистрация
    05.06.2010
    Сообщений
    410
    Вес репутации
    14
    купите ATMEGA8A в дипе и одну кренку на 5 вольт....ну и транзисторов на каждый фонарик(или группу фонариков)

    прошивку я вам могу написать аж за 2 секунды....это просто легко примитивно и никаких сложностей вообще не представляет!

    Вот как я читаю значение двух каналов с приёмника и управляю двумя сервами на выходе



    Код:
    #define Gas_in PIND.2
    
    #define Gyro_in PIND.3
    
    #define TimOn 2
    
    
    
    unsigned int Mem_Min_Gas = 1000;
    
    unsigned int Mem_Max_Gas = 2000;
    
    unsigned int Mem_Min_Gyro = 1000;
    
    unsigned int Mem_Max_Gyro = 2000;
    
    unsigned int Gyro_Centr = 250; // переменная нулевого отсчета гироскопа / 2
    
    
    
    
    
    // Timer/Counter 1 initialization
    
    // Clock source: System Clock
    
    // Clock value: 1000,000 kHz
    
    // Mode: Ph. & fr. cor. PWM top=ICR1
    
    // OC1A output: Non-Inv.
    
    // OC1B output: Non-Inv.
    
    // Noise Canceler: Off
    
    // Input Capture on Falling Edge
    
    // Timer1 Overflow Interrupt: Off
    
    // Input Capture Interrupt: Off
    
    // Compare A Match Interrupt: Off
    
    // Compare B Match Interrupt: Off
    
    TCCR1A=0xA0;
    
    TCCR1B=0x12;
    
    TCNT1H=0x00;
    
    TCNT1L=0x00;
    
    ICR1H=0x26;
    
    ICR1L=0xFF;
    
    OCR1AH=0x01;
    
    OCR1AL=0xf1;
    
    OCR1BH=0x01;
    
    OCR1BL=0xf1;
    
    
    
    
    
    // Timer/Counter 2 initialization
    
    // Clock source: System Clock
    
    // Clock value: 250,000 kHz
    
    // Mode: Normal top=FFh
    
    // OC2 output: Disconnected
    
    ASSR=0x00;
    
    TCCR2=TimOn;
    
    TCNT2=0x00;
    
    OCR2=0x00;
    
    
    
    // External Interrupt(s) initialization
    
    // INT0: Off
    
    // INT1: Off
    
    MCUCR=0x00;
    
    
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    
    TIMSK=0x41;
    
    
    
              //ждём пока вход Газ упадёт в нуль
    
              while(Gas_in);                    
    
              //теперь ждём поднятия в 1                            
    
              //TCCR2=TimOn;
    
              TCCR2=0x00;                   // таймер глушим
    
              Timer_ext = 0;                // обнуляем накопитель таймера
    
              TCNT2 = 0;
    
              #asm("wdr")                   // обнулили и сам таймер
    
              while(!Gas_in);
    
              //запускаем таймер
    
              TCCR2=TimOn;
    
              // ждём пока вход Газ упадёт вниз
    
              while(Gas_in);
    
              //срочно тормозим таймер
    
              TCCR2=0x00;
    
              // расчитываем кол-во отсчетов от нуля
    
              In_Gas = TCNT2+Timer_ext;
    
    
    
              //ждём пока вход Гиры упадёт в нуль
    
              while(Gyro_in);                    
    
              //теперь ждём поднятия в 1                            
    
              //TCCR2=TimOn;
    
              TCCR2=0x00;                   // таймер глушим
    
              Timer_ext = 0;                // обнуляем накопитель таймера
    
              TCNT2 = 0;                    // обнулили и сам таймер
    
              while(!Gyro_in);
    
              //запускаем таймер
    
              TCCR2=TimOn;
    
              // ждём пока вход Гyro упадёт вниз
    
              while(Gyro_in);
    
              //срочно тормозим таймер
    
              TCCR2=0x00;           
    
              // расчитываем кол-во отсчетов от нуля
    
              In_Gyro = TCNT2+Timer_ext;
    
                
    
              #asm("wdr")
    
    
    
    
    
    // расчитываем выход газа
    
                //TempA = (float)(Gas_in-Mem_Min_Gas)/(Mem_Max_Gas-Mem_Min_Gas)*0x03ff;
    
                TempA = (float)(In_Gas);
    
                TempA = TempA - (float)(Mem_Min_Gas);
    
                Delta_Gas = Mem_Max_Gas;
    
                Delta_Gas-= Mem_Min_Gas;
    
                TempA = TempA/Delta_Gas;
    
                TempA = TempA * 500.0;
    
                            
    
                // расчитываем выход гиры
    
                //TempA = (float)(Gas_in-Mem_Min_Gas)/(Mem_Max_Gas-Mem_Min_Gas)*0x03ff;
    
                TempB = (float)(In_Gyro);
    
                TempB = TempB - (float)(Mem_Min_Gyro);
    
                Delta_Gyro = Mem_Max_Gyro;
    
                Delta_Gyro-= Mem_Min_Gyro;
    
                TempB = TempB/Delta_Gyro;
    
                TempB = TempB * 500.0;
    
                TempB = TempB - Gyro_Centr;
    
                
    
                Delta_Gyro = TempB/2;
    
                
    
                TempB = TempA;
    
                TempA = TempB+Delta_Gyro;
    
                TempB = TempB-Delta_Gyro;
    
                
    
                TempA = TempA + 0x01F0;
    
                TempB = TempB + 0x01F0;
    
                
    
                if(TempA<0x01F0)
    
                    TempA = 0x01F0;
    
                if(TempA>0x03F0)
    
                    TempA = 0x03F0;
    
                if(TempB<0x01F0)
    
                    TempB = 0x01F0;
    
                if(TempB>0x03F0)
    
                    TempB = 0x03F0;
    
                
    
                OCR1A = TempA;
    
                OCR1B = TempB;


    вот это процедурка для ламы блдц....вход газа и гиры....вход гиры - это раздрай между выходами...

  8. #8
    Постоянный пользователь Аватар для eliash

    Регистрация
    22.03.2010
    Сообщений
    224
    Вес репутации
    15
    Цитата Сообщение от clawham Посмотреть сообщение
    купите ATMEGA8A в дипе и одну кренку на 5 вольт....ну и транзисторов на каждый фонарик(или группу фонариков)

    прошивку я вам могу написать аж за 2 секунды....это просто легко примитивно и никаких сложностей вообще не представляет!

    Вот как я читаю значение двух каналов с приёмника и управляю двумя сервами на выходе


    Спасибо за предложение, но платформа Arduino (ATMEGA168/Atmega328) по функционалу для меня наиболее привлекательна. И програмится практически на С++ с которым постоянно так или иначе приходиться сталкиваться.

    Тут только подключиться к нужным ногам и получить желаемый результат.

    Там я так понимаю, надо начинать с создания платы, пайки транзюков и так далее... проект затянится на несколько вечеров работы...



    Если бы ее не хватало для этих целей, то безусловно я бы менял платформу. А так разве оно того стоит?



    Цитата Сообщение от clawham Посмотреть сообщение
    вот это процедурка для ламы блдц....вход газа и гиры....вход гиры - это раздрай между выходами...
    Код Вы пишите понятный, с коментариями, а вот тут что имелось ввиду?



    Кстати, спасибо за пример кода, наглядно считываете, думаю мне это поможет.

  9. #9
    Постоянный пользователь

    Регистрация
    05.06.2010
    Сообщений
    410
    Вес репутации
    14
    имелось ввиду что это не окончательный проект и много лишнего есть



    по сути дела то не нужно никакой платы...припаять мегу 8 в дипе на макетку и туда же влепить 2-3-5 тринзюков а потом прямо к контроллеру 5-10 проводками это всё дело поподключать....ну ...вы меня конечно извините но например этот миксер на куске макетки с нуля я создал и облетал за 2-3 часа....при том что написание и отладка прошивки в эти 2 часа тоже входила...стоимость? ну например 10 грн макетка(ещё на 10 таких же хватит) и 20 грн мега8....кренку выдрал из старой материнки....всё! не нужно ни кварца ни транзюков ничего....аналогично сделал и машинку...аналогично же делал и ламу не блдц(тоесть выход под колекторники) ну реально нечего делать....максимум 2-3 часа работы и 5-10 проводков из ИДЕ шлейфа .... могу выложить фото того что получилось

  10. #10
    Постоянный пользователь Аватар для eliash

    Регистрация
    22.03.2010
    Сообщений
    224
    Вес репутации
    15
    В отдельную ветку выложил то, что получилось http://forum.modelka.com.ua/index.ph...8&#entry269218



    Всем спасибо за советы и участие

TEST

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Информация:
Приветствуем Вас на самом крупном в Украине модельном портале. Советуем Вам зарегистрироваться, после чего вы сможете читать и писать сообщения.
Полезные ссылки
www.modelka.com.ua
www.icar.com.ua
www.magiya.com.ua
Free Photobank torange.biz
Присоединяйтесь