Простой CPPM энкодер (CPPM encoder) своими руками на Attiny2313

Принципиальная схема CPPM энкодера своими рукамиКогда я начал настраивать контролер Omnibus F4, то столкнулся со смешной проблемой:  у меня нету свободных приемников с выходом CPPM. А ведь этот контролер Omnibus F4 уже и CPPM не слишком жалует, SBUS ему подавай, а уж о подключении по отдельным каналам и речи быть не может. Словом — либо покупать готовый CPPM энкодер для моих приемников, либо покупать готовый новый приемник с SBUS. Не то, чтобы мне было жалко денег на новый приемник (заметку о превосходстве нового над старым и старого над новым я еще напишу) — но стало обидно. Ну как так? Я электронщик или нет?! Попробую сделать свой простой CPPM энкодер!

Простой CPPM энкодер (CPPM encoder) своими руками

На текущий момент у меня FrSky приемников 3 шт: FrSky D8R-XP (вот еще ссылка на бангуд), FrSky V8R7-II и FrSkyv8FR-II (куплен по причине большущей скидки в 50%). И полноценный CPPM выход есть только у первого. Ну не ставить же эту громадину на коптер 250 размера? К тому же… он уже установлен на коптер 550 размера, и снимать жалко.

Сначала давайте глянем при помощи логического анализатора, чего происходит на каналах приемника.

photo_2018-01-23_11-49-10Хм, не так уж и плохо. Все сигналы разнесены по времени, а значит сформировать CPPM будет намного легче (на самом деле — я бы удивился, если бы импульсы на каналах радиоприемника шли бы одновременно, ведь это намного муторнее реализовать).

Теперь разберемся, что из себя представляет CPPM сигнал

Если в PWM сигналах (т.е сигналах на отдельных каналах) информация зашифрована в длительности импульса (от 1000 до 2000мкс), то в PPM информация о значении каналов кодируется отрезками времени между фронтами соседних импульсов. Длительность самих импульсов при этом может быть одинакова (например 300мкс).

Я не буду тут расписывать все свои неудачные попытки объединить сигналы без микроконтроллера. Там были и диоды, и дифференциирующие RC цепочки и логические ИЛИ элементы….   но все это было не то. В конце концов я понял, что ничего зазорного в использовании микроконтроллера нет. (их сейчас пихают во все попало… утюги, холодильники…  в домашние тапочки. Пожалуй с тапочками я погорячился, но не удивлюсь, если вдруг правда. Гм, «умные» тапки с WiFi и подогревом…  срочно патентовать! :) :) :) ).

Изготовление энкодера CPPM для изготовления своими руками

Ну а раз контролерам дан зеленый свет, то давайте будем его выбирать. Понятно, что для захвата нужно использовать прерывания. Из доступных мне контроллеров с нужным количеством прерываний оказались mega48, mega328, и tiny2313. Вот последнюю я и взял. У нее как раз есть 8 одинаковых прерываний типа PinChange.

Принципиальная схема CPPM энкодера своими руками

Схема предельно проста :) . Да там вообще почти ничего кроме МК нет! Разве что фильтрующий конденсатор и два резистора (один из которых для перестраховки).

Печатная плата (в файле для Sprint Layout еще прилагается печатка для mega48/88/328).

Печатная плата для CPPM энкодера своими рукамиА вот фотографии внешнего вида нет. Поскольку энкодер уже установлен внутри моего 250 коптера… и разбирать я это не хочу :) . Я, как нибудь, сделаю фотку. Конструктивно — впаял PBS разъемы, чтобы сразу в FrSky приемник вставлять свою платку. Получилось вполне симпатично.

Прошивка тоже предельно проста. Я даже выкладывать отдельным файлом ее не буду, а приведу текст прямо здесь с комментами.

#include <tiny2313.h>
#include <delay.h>

// Pin change 0-7 interrupt service routine
interrupt [PC_INT] void pin_change_isr0(void)
{
       if (PINB>0)  //если на любую из ножек порта В приходит импульс
        PORTD.2=0; //обнуляем сигнал на выходе СРРМ
}

void main(void)
{
PORTB=0x00;  //подтяжку входов не делаем! А то при питании ниже 4.8В не работает :) 
DDRB=0x00;

PORTD=0b00000000;
DDRD=0b00000100;

// Interrupt on any change on pins PCINT0-7: On
GIMSK=0x20;
MCUCR=0x00;
PCMSK=0xFF;
EIFR=0x20;

#asm("sei")

while (1)
      {
        if (PIND.2==0)   //если сигнал на выходе СРРМ был обнулен, то 
        {
            delay_us(300);  //ждем 300мкс
            PORTD.2=1;     // ставим назад высокий уровень на выходе СРММ   
        }
      }
}

Фьюзы от заводских отличаются только тем, что нужно отключить делитель частоты процессора на 8 (снять галочку CKDIV8).

Тестируем тем же логическим анализатором.

Как выглядbт PPM сигналУра! Все работает! И Omnibus F4 «увидел» CPPM сигнал с моего энкодера!

 На этом все, удачи! :)


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>