Самодельный передатчик (часть 1)

икс600

привет всем. Кто подскажет что за микрухи стоят в хайтеке двойки
в передатчике М 52460Р
и в приемнике 14013В

Andrey_K
anm:

… Сделать ограниение хода после применения всех микшеров, т. е. уже после всех обработок. Величина ограничения должна настраиваться.

Александр, а какие ограничения лучше: в процентах от какой-то величины (какой?) или в миллисекундах как в Микростар?

anm
Andrey_K:

Александр, а какие ограничения лучше: в процентах от какой-то величины (какой?) или в миллисекундах как в Микростар?

Думаю, что лучше в милисекундах. Это настройка общая для всех моделей и настраивается 1 раз. Если ставить в %, то не понятно от какого значения брать %.

Andrey_K
anm:

Думаю, что лучше в милисекундах. Это настройка общая для всех моделей и настраивается 1 раз. Если ставить в %, то не понятно от какого значения брать %.

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

В описании FUTABA1024PCM я прочел, что числа 0…1023 соответствуют диапазону длительностей канальных импульсов 1520+/-600 мксек. Но фактически мой передатчик FC15 ограничивает диапазон канальных импульсов примерно 1520+/-500 мксек. В том числе ручка джойстика примерно +/-400 мксек, триммер джойстика примерно +/-100 мксек.(Даже если канальный потенциометр заменить на тумблер!)
ПРЕДПОЛАГАЮ, что числа +/-400 мксек и +/-100 мксек соответствуют 100% расходов ручки и триммера. Поскольку компьютерные передатчики Футаба допускают назначение расходов ручек, триммеров и нулей триммеров >100%, ПРЕДПОЛАГАЮ, что запас 100 мксек предназначен именно для этого.
Из известных мне передатчиков только в Микростар пользователь явно указывает длительность канальных импульсов. В остальных передатчиках пользователь вводит проценты. Пишу так подробно, т.к. считаю, что программист компьютерного передатчика обязательно должен указать в программе (если она доступна пользователю) и/или в инструкции по эксплуатации какому диапазону длительности канальных импульсов соответствует 100%. Крайне желательно хоть как-то обосновать принятые при программировании назначения и ограничения. В этом случае пользователь будет знать, а не угадывать логику программиста и понимать последствия сделанных им (пользователем) назначений тех или иных чисел.
Предлагаю участникам дискуссии высказаться по поводу того стоит ли вводить в интерфейс пользователя назначение длительности канального импульса в микросекундах.

Предлагаю еще несколько тем для дискуссии.

  1. В свободнопрограммируемых смесителях передатчика FUTABA 8U предусмотрена возможность выбора - влияет или не влияет триммер ведущего канала на ведомый канал. Какие мнения есть о необходимости такой возможности?
    Может кто-нибудь привести пример модели, где без вышеуказанной возможности не обойтись?

  2. FUTABA применяет внешнюю память (СamРАС).
    Какие мнения есть о необходимости такой возможности?
    И если есть только одна микросхема памяти - стоит ли делать ее быстросъемной?

  3. Традиционно в передатчиках предусматривают ф-ии D/R и EXPO для каналов AIL, ELE, RUD. Традиционно для включения этих ф-ий в полете могут программироваться выключатели.
    А что если заменить эти ф-ии универсальной ф-ей CURVE (она же трансляционная таблица, она же многоточечная кривая)?
    Стоит ли предусмотреть возможность назначения CURVE для всех восьми каналов?
    Стоит ли предусмотреть возможность программирования выключателей CURVE для всех восьми каналов?
    ПОДЧЕРКНУ, в п.3 речь едет о применении CURVE к нормализованным результатам АЦП канальных потенциометров до задействования каких-либо смесителей.

  4. Интерфейс пользователя-это вызов из памяти, изменение и запись в память каких-то чисел. Я так и не пришел к определенному выводу какие новые назначения должны вступать в силу немедленно а какие только после выхода из режима программирования. (Например, в Микростар до выхода из программирования в режиме CAL, изменения положений серво заблокированы.)
    Какие есть мнения?

  5. Традиционно модели делят на САМОЛЕТ, ПЛАНЕР, ВЕРТОЛЕТ. При этом внутри каждого типа есть еще деление ( планер с таким то числом серво в крыле, вертолет с таким то автоматом перекоса и т.д). Каждый подвид модели имеет свой набор смесителей. Такой подход сильно увеличивает число переменных.
    Может быть, стоит применять универсальные смесители как в Микростар?

  6. Какие мнения есть о необходимости наличия в передатчике таких ф-й как:

  • тахометр
  • контроль батареи приемника
  • программное назначение полярности РРМ сигнала
  • общее время работы передатчика после зарядки аккумулятора
  • программное ограничение числа передаваемых каналов тренер-ученик с передачей информации по кабелю или просто включением/выключением передатчика ученика как было раньше
focus:

Доброго времени суток. Я переделал менюху. Написал библиотеку для дисплея. Кому интересно - гяньте.

Возник такой вопрос: какие готовые микшеры надо испоьзовать? (V-tail, Elevon, Flapperon. А какие еще нужны?)

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

P.S. Периодически возникает мысль: УНИВЕРСАЛЬНЫЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ. А почему нет? Для маленького экрана строка, за редким исключением, выглядит так:

<ТЕКСТ > <ЧИСЛО >

<ТЕКСТ > - это имя переменной или название следующего раздела меню
<ЧИСЛО > - всегда число, даже если на экране какой-то текст. Если <ЧИСЛО> - число, то допустимый диапазон чисел указывается при описании строки…

Если все строки не помещаются – автоматическая разбивка на страницы…

Как идея?

mivaol
Andrey_K:
  1. Традиционно модели делят на САМОЛЕТ, ПЛАНЕР, ВЕРТОЛЕТ. При этом внутри каждого типа есть еще деление ( планер с таким то числом серво в крыле, вертолет с таким то автоматом перекоса и т.д). Каждый подвид модели имеет свой набор смесителей. Такой подход сильно увеличивает число переменных.

А мне кажется что удобно самому замешать все что надо, сделав например четыре-девять отдельных режимов в которых отдельно можно увязать микшеры, расходы. При этом режимы менять чем-то програмируемым самим пользователем. А после саму модель обозвать тем или иным типом и в дальнейшем при настройке новой модели выбирать тип модели и достраивать под определенную модель.
Конечно к типу нужно привязывать только настройку микшеров(с какого канала на какой), расходы и проценты микшера толко в самой модели настраивать надо.
А классная идея как на футабе СamРАС делать но наличие внутренней памати хотябы на две модели надо тоже.
Самое главное в самодельной апаратуре это возможность апгрейда на программном уровне. Подключил к компу установил программу и перепрошил, вот это да! 😃

focus

Трямс! Давно не заходил… Все с предатчиком возился. И наконец доделал. Конечно фукнкций в нем не очень много, но все, что мне надо в нем есть, а имнно

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

Конечно фукнкций в нем не очень много, но все, что мне надо в нем есть, а имнно:

  1. 7 каналов, 5 пропорциональных, 2 дискртых (5 канал - 2 позиции, 6 канал - 3 позиции)
  2. Триммеры, цифровые в настройке каналов и обычные рядом с ручками
  3. Реверс
  4. Расходы на все каналы (верхний и нижний)
  5. Двойные расходы для 1,2,4 каналов (верхний и нижний)
  6. Кнопка выключения двигателя
  7. 3 микшера (V-tail, Elevon, Flapperon)
  8. Память на 5 моделей
  9. Таймер с пищалкой

Про органы управления - они фиксированные, распределение стандартное:
1 элероны
2 элеватор
3 газ
4 поворот
5 шасси
6 закрылки
7 просто канал 😃

P.S. Периодически возникает мысль: УНИВЕРСАЛЬНЫЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ. А почему нет? Для маленького экрана строка, за редким исключением, выглядит так:

У меня тоже возникала, но так и не получилость. Моя менюха мне наиболее понятна, и менеджить ее мне было просто…

Вот выкладываю окончательный вариант кода с библиотекой и фотки:
Еще схему выкладываю.

TX.rar

Prikupets

А экспонента будет? Могу помочь с реализацией 😃

focus

А экспонента будет? Могу помочь с реализацией

Хотел сделать, она даже была в изначальном варианте менюшки как опция. Но возникли проблемы. В Курске удалось достать только мегу 16, а у меня программа сейчас занимает тоже примерно 16кб. Так что экспоненту всовывать у меня некуда. Я вообще еще хотел туда функций впихнуть(маппинг, настраиеваемые микшеры, разные типы моделей, и т.д.) Поэтому я эти части разрабатывать не стал.
Для дальнейших апгрейдов я хочу себе мегу128, чтобы памяти наверняка хватило, но под заказ она у нас стоит больше 500р…

P.S. Сегодня облетал пульт - все ОК. Глюков не замечено. Конечно со старым путьтом это не сравнить. 😃

Doka

эх… тоже чтоли поучавствовать!? =)

focus:

Хотел сделать, она даже была в изначальном варианте менюшки как опция. Но возникли проблемы. В Курске удалось достать только мегу 16, а у меня программа сейчас занимает тоже примерно 16кб. Так что экспоненту всовывать у меня некуда.

есть два пути решения:

  1. использовать не табличный метод вычисления, а кусочно-линейную аппроксимацию. Это довольно распространенный метод. Более того он стандартизован (комитетом по телекоммуникациям . рекомендация ITU-T G.711 - для более полной инф.) чтобы было понятно о чем речь - прикрепляю файл, иллюстрирующий сам принцип (см. Figure1).
  2. использовать внешнюю память 24Схх, куда поместить все таблицы, массивы шрифтов, etc.
    При этом появится некий overhead во время выполнения программы. хотя, IMHO, с вашей тактовой и интенсивностью вычисления новых значений - это мало скажется на производительности.
    макс.объем доступных на сегодняшнй день 24Схх: 64-128Кбайт.
    там хранить и пресеты для разных типов моделей.
    успехов!

g711_pcm.zip

jeti

to focus

А какая марка дисплея?

focus

Марки точно не знаю. Дисплей от Нокиа 3410. Контроллер PCF8812.

I’m very SORRY!!! В схеме , которую я выложил на сайте есть маленькая ошибка. Там выключатели подключены к ножкам 21 - 25, а надо к 22-26. Новую схему выкладываю. Если оставить по старому, то надо переназначить в проге номера ножек.

Shema.rar

rulll

Привет Всем!
Вот хочу поделиться своими достижениями. По сути - это полный комплект аппаратуры управления но без пользовательского интефейса.

Слева - приемник , справа- передатчик.

Оновные характеристики:

Диапазон частот 433 МГц
Шаг сетки частот 25 кГц
Колличество частотных каналов – 80
Модуляция – частотновременная TFCM
Индекс модуляции – 0,5
Температурный диапазон – 0…+40
Напряжение питания 3,3В
Схема приемника - супергетеродин
Остальные характеристики пока не приводятся.

Возможности радиоканала:
8 десятиразрядных аналоговых канала
8 дискретных каналов, из них
2 с выходом на RC-pulse 1-2 милисекунды
6 - дискретный уровень

Контроль целостности пакета на основе CRC
Время передачи пакета – не более 6 милисекунд
Кол-во пакетов во фрейме - 4

Возможности передатчика:
6 аналоговых входов ( АЦП )
6 дискретных входов
1 вход- выход порта USART для обмена данными с внешним модулем
( формат данных: FFFF 00хх 01хх 02хх …)
SPI интерфейс
8 разрядный АЦП контроля батареи
Индикация захвата петли ФАПЧ
Встроенные тестовые функции для настройки передатчика.

Возможности приемника:
SPI интерфейс
USART интерфейс
До 10 выхдов RC-pulse 1-2 милисекунды
5 пользовательских портов
Индикация захвата петли ФАПЧ
Индикация несовпадения CRC
Fail_Save

SAN

Оновные характеристики

Э-э, а дальность в основные входит?

rulll
rulll:

Остальные характеристики пока не приводятся.

Modris

Vot, vikladivaju polnuju shemu moduljatora .
Plati postarajus razrabotatj segodnja ve4erom i vistavitj na poljzovanjije.
Poka plata razrabotana dlja osnovnoi 4asti shemi i knopok

2 Focus:
a displei to4no podklju4ajetsa k B0, B2, B5 i B7??? V failje graflcd.lib ukazano
#define reset PORTB.2
#define DC PORTB.0
#define SCE PORTB.1

Kak bitj?
Mozhet mozhes izmenjitj programku , 4tobi LCD podklju4atj k B0- B3.

TX_modulator.rar

Andrey_K
focus:

Вот выкладываю окончательный вариант кода с библиотекой и фотки:
Еще схему выкладываю.

Женя, есть несколько вопросов.

  1. Как обеспечивается высший приоритет прерываний таймера, формирующего модулирующий сигнал?
  2. Аналоговые триммеры суммируются на входе АЦП. Недостаток очевиден – ручка и триммер масштабируются одновременно. Так будет всегда, или только до перехода на другой процессор?
  3. В смесителях нет масштабных коэффициентов. Почему?
Vad64:

Как одно из возможных направлений предлагаю разработать унифицированую модель данных. Идея (совместно с Pavel_Su) такая: есть некая структура данных, описывающая модель (тип модели, каналы, реверсы, расходы, микширование и т.д.). Этот блок данных можно скидывать из передатчика в РС, наладонник или другой передатчик по доступным каналам связи (Rs232, IrDA и т.п). Поскольку структура унифицирована, то на любой платформе можно будет редактировать настройки и/или “натравливать” на эту структуру микшер, к-рый будет в реальном времени по этим данным формировать РРМ или РСМ или еще что-то. Если это направление кого-то интересует и есть желающие принять участие в обсуждении и разработке, я выложу свой текущий вариант структуры.

Структуру изучил. Предлагаю сначала обсудить концепцию.
Унифицированная структура переменных должна обеспечить пользователям свободный обмен “МОДЕЛЯМИ“.
За унификацию придется платить отказом от каких-то своих взглядов на то, что в черном ящике, называемом передатчик. Унифицированная структура переменных не означает унифицированной конструкции передатчика и унифицированного ПО.

Мне известны две концепции того, что такое “МОДЕЛЬ“.

Вариант Микростар.
Каждый полетный режим оформляется как отдельная “МОДЕЛЬ“.
Это позволяет экономить внешнюю память и оперативную память процессора. При этом переключение режимов сопровождается считыванием новых данных из внешней в оперативную память ВО ВРЕМЯ ПОЛЕТА. (Хотя, если позволяет объем оперативной памяти, можно изменить логику и все прочитать при загрузке “МОДЕЛИ“.) При такой концепции количество полетных режимов может равняться количеству “МОДЕЛЕЙ“ в микросхеме памяти. На данном этапе неизвестна структура переменных, но мой скромный опыт показывает, что 256 байт для одного полетного режима мало. Опыт Микростар показал – резервы должны быть значительными. Приимем за основу для одного полетного режима 512 байт.

Вариант “Классический“.
“МОДЕЛЬ“ включает данные для всех полетных режимов. Возьмем (для примера) за основу FC28 и предположим, что максимальное число полетных режимов – 5. (Я и в двух постоянно путаюсь!) Тогда “МОДЕЛЬ“ будет занимать 5*512=2560 байт.
Эти 2560 байт будут копироваться из внешней в оперативную память при выборе “МОДЕЛИ“ и не могут использоваться для текущих вычислений. Сколько еще надо оперативной памяти? Минимум 256 байт. С запасом, минимальную величину которого еще надо обосновать, - 512 байт. Получаем минимальный объем оперативной памяти процессора 2560+512=3072 байта. Не всякий PIC это обеспечивает, но и не каждому самоделкину нужны 5 полетных режимов. Но, если соглашение будет достигнуто, уже есть три ограничения, о которых необходимо будет четко заявить:

  • объем памяти для одного полетного режима – 256 байт
  • максимальное число полетных режимов – 5
  • объем памяти для одной модели - 2560 байт.

Каждый самоделкин сам решает, сколько “МОДЕЛЕЙ“ ему надо в одной микросхеме памяти, и какую микросхему применить. Это не влияет на взаимозаменяемость моделей.

focus

2 Modris:
В последних версиях вывод SCE не используеся, т.к. на SPI висит только один дисплей и переключаться между кристалами нет смысла.
Первые 2 можешь назначать на любые ножки. Только настройки портов соответственно изменить надо.
#define reset PORTB.2
#define DC PORTB.0
#define SCE PORTB.1 - он не используется.

А B5 и B7 - это железно проставленные выводы контроллера SPI. Их менять нельзя.

2 Andrey_K:

  1. Как обеспечивается высший приоритет прерываний таймера, формирующего модулирующий сигнал?

У меня используется только одно прерывание. И оно от таймера. Может еще выскакивают прерывания от SPI и ADC. Но ADC я обрабатываю во время синхропаузы, а она длинная. А Задержки от SPI очень короткие (он работает на частоте 3МГц) и они не превышают погрешность измерений.

  1. Аналоговые триммеры суммируются на входе АЦП. Недостаток очевиден – ручка и триммер масштабируются одновременно. Так будет всегда, или только до перехода на другой процессор?

Суммтруются, а что делать. Ведь у АЦП только 8 входов. А чтобы разнести триммеры и ручки по отдельным каналам АЦП, надо иметь как минимум 10 каналов. И это скорее всего не излечится новым процем.

  1. В смесителях нет масштабных коэффициентов. Почему?

Мне не хватило памяти программ для реализации этих функций. Да и код у меня пока не очнь оптимальный. Я вообще придумал как в корне реорганиовать всю структуру. Это и меньше места и выше скорость.

По поводу полетных режимов - согласен. Просто почти не юзал компьютерной аппаратуры. И особенно полетные режимы.

Тогда “МОДЕЛЬ“ будет занимать 5*512=2560 байт

Возьмем, например, ATMega 128. У нее 128 кб памяти программ, 4 кб ээпрома и 4 кб ОЗУ. Что как раз достаточно. А сами модели слить на внешнюю флешку. Например AT45DB161 - это 2 метра памяти. Кидай что хочешь.
PS Что -то многовато 512 байт на один полетный режим…

Vad64
Andrey_K:
  1. Как обеспечивается высший приоритет прерываний таймера, формирующего модулирующий сигнал?

Тогда “МОДЕЛЬ“ будет занимать 5*512=2560 байт.

В AVR нет аппаратного механизма приоритета прерываний. Однако, это не проблема, если формировать РРМ 16-битным таймером в режиме ШИМ. Регистры таймера имеют двойную буферизацию, поэтому можно безопасно загружать значение следующего канала во время формирования текущего. Т.е. для обновления таймера при формировании РРМ есть минимум 0.9мс. Естественно, время обработки остальных прерываний не должно превышать этой величины.

По моделям и их объему: нет необходимости держать в ОЗУ все полетные режимы, достаточно только текущего. Остальные можно держать во внешнем копеечном ЕЕПРОМ и загружать в ОЗУ при включении режима. Время загрузки 500 байт по шине I2C будет миллисекунд 15, что вполне приемлемо. Хотя я не очень представляю, откуда у Вас такие объемы. У меня вся модель с 4мя полетными режимами - 540 байт.

focus

Возникли вопросы. Сколько каналов должно быть? (по моим расчетам 8 - выше крыши) Какие типы моделей? (думаю самолет, планер с одной, двумя и четырьмямашинками на крыло и наверное верт, делется по типу автомата перекоса) Сколько режимов полета? И какие они для каждого типа моделей? Что в них должно настраиваться?

Andrey_K
Vad64:

… я не очень представляю, откуда у Вас такие объемы. У меня вся модель с 4мя полетными режимами - 540 байт.

В прилагаемом архиве моя структура переменных. Её можно условно разделить на 3 части.
1 часть. Заголовок, параметры каналов, нули триммеров, таблицы CURVE.
2 часть. Настройки органов управления передатчика (тумблеры, кнопки, потенциометры).
3 часть. Настройки смесителей.
120 из 512 байт – резерв.
Некоторые комментарии. Очень популярно назначать раздельные масштабы D/R и EXPO для разных направлений отклонения ручек. У меня этого нет. Таблицы предназначены и для CURVE и для смесителей.
Видно, что таблицы и смесители занимают почти половину памяти.
Смесители я взял от Микростар и добавил возможность подстройки внешними триммерами. Настоящие смесители Микростар не являются в полном смысле свободнопрограммируемыми. Резервные переменные позволят устранить этот недостаток.
Мое обоснование размера таблицы CURVE. Минимальное число точек – 3. Дальнейшее увеличение числа точек логично производить делением каждого отрезка таблицы пополам. Получим таблицы из 5-ти и 9-ти точек. Увеличение числа точек свыше 9 представляется не целесообразным. В качестве нормализованного значения канальных переменных удобно использовать число 1024. Число отрезков в предлагаемых таблицах является делителем 1024, что позволяет сократить длительность операции деления при интерполяции внутри таблицы.
Для информации. У меня продолжительность одной интерполяции 500 – 600 машинных циклов ( зависит от знака исходных данных). Время вычисления одного свободнопрограммируемого смесителя с трансляционной таблицей и косвенными масштабами в обоих направлениях – 1500 машинных циклов. А максимально возможная длительность всех вычислений – 33200 машинных цикла или16,6 мсек. Многовато! Буду что-то делать.

Strustura.zip

Vad64
Andrey_K:

А максимально возможная длительность всех вычислений – 33200 машинных цикла или16,6 мсек.

Проявляется один из недостатков ПИКов - 4 такта на цикл. Атмел AVR с кварцем 12 МГц выполнит 33200 циклов за 2.8 мсек. Кроме того, у AVR Mega есть аппаратный умножитель, что улучшит производительность в несколько раз. От деления надо по возможности уходить - деление на константу всегда можно заменить умножением.
Для справки - у меня вычисление одного канала занимает не более 70 мксек. Правда, у меня достаточно простой микшер у каждого канала - нормализация АЦП, наложение триммера, интерполяция по 7-миточечной таблице и укладка в расходы.

Нормализованное значение промежуточных переменных лучше выбрать повыше (у меня 32768), чтобы не накапливать ошибки вычислений.