Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Игрушки >

Радиoуправление на чипе СС1101

Автор: Rishat Sadriev г.Хайфа
Опубликовано 03.02.2016.
Создано при помощи КотоРед.

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

 

Чип управляется микроконтроллером по шине SPI, для передачи используется буфер FIFO для передачи 64 байта, для приема используется приемный буфер FIFO на 64 байта. Один и тот же чип может работать и на передачу и на прием, что позволяем создать дуплексный канал. В радиоуправлении это может быть канал для телеметрии, когда с приемника можно получать данные о напряжении батареи, температуре двигателя и т. д., но в целях упрощения наша аппаратура будет работать только в одном направлении.

   Аппаратура радиоуправления содержит 4 сервоканала управляемые джойстиками (стиками), 2 канала медленных серв управляемые тумблерами, и 8 дискретных каналов управляемые кнопками или тумблерами. Все данные передаются пакетом в 16 байт (последний байт резервный и информацию не несет) при скорости передачи 38000 бит/сек, девиации 20 кГц, модуляции GFSK, на частоте 868.3 мГц. Приемник настроен на полосу пропускания 80 кГц. Частота следования пакетов 20 мсек, с этой же скоростью опрашиваются кнопки дискретных каналов, а в приемнике сервомашинки с тем же периодом получают сервоимпульсы. СС1101 позволяет в пакете в стандартном варианте отправлять до 64 байт, мы же используем всего 16 байт. Как видно, имеется достаточный запас для дополнительных каналов.

   В передатчике и в приемнике применяются готовые радиомодули с микросхемой СС1101. Модуль в передатчике используем только на передачу, в приемнике только на прием. Начальная загрузка у передатчика и у приемника одинакова. При включении схемы программа в микроконтроллере инициализирует аппаратный интерфейс SPI , ресетует чип СС1101, обнуляя его внутренние регистры. После этого контроллер загружает по интерфейсу SPI в чип СС1101 данные в его 47 регистров которые определяют его режимы работы.

Передатчик в сборе

Схема передатчика


   Дальнейшее описание работы передатчика:
      1.Загружаются данные мощности передатчика
      2.Собираются данные каналов и кнопок в массив txBuffer (пакет).
      3.Данные массива txBuffer загружаются в буфер FIFO СС1101.
      4.Дается команда на передачу (STX).
      5.Делается пауза в 20 милисекунд.
      6.Передатчик переводится в режим ожидания (SIDLE).
      7.Производится очистка буфера (SFTX).
   Пункт 1 выполняется при включении питания, остальные повторяются с цикличностью 20 мсек. Это время работы сигнала для сервопривода. При необходимости время можно увеличить до 25 милисекунд.
   Оцифровка положений потенциометров стиков (джойстиков) производится путем измерения напряжения на потенциометрах с последующем переводом в цифру во встроенном в контроллер аналого-цифровом преобразователе. Нейтральному положению джойстиков должна соответствовать цифра 500 ( это 1.25в на входе микроконтроллера), которая затем умножается на 3 и получаем 1500 это - цифра в микросекундах нейтрали сервы. Крайним положениям соответствуют цифры 366 и 633 соответственно. Последовательно с резистором джойстика для триммирования можно подключить подстроечный резистор с номиналом около 5-10% от номинала резистора джойстика. Полученный 10 битный результат каждого канала, в виде 2 байтов записывается в определенном месте пакета.
   «Медленные сервы» (Low servo) это механизмы которые работают с замедлением из одного крайнего положения в другое, например выпуск шасси или закрылок у самолета. Каждому крайнему положению сервы соответствует определенное число. 76C это 1900, а 44C это 1100 микросекунд ширины импульса сервы соответственно если прибавлять или убавлять ( в зависимости от положения тумблера) по 8 каждые 20 мсек, то через 2 секунды серва закончит выполнение команды. Если взять не 8, а 10 то выполнение будет за 1.6 секунды.
   Состояние кнопок передается одним байтом, при этом не имеет значения сколько кнопок нажато одновременно. После того как пакет собран, он по SPI интерфейсу за 400 микросекунд загружается в микросхему СС1101 и дается команда на передачу. Пакет на скорости 38000 бит в секунду передается в эфир примерно за 5.5 мсек.

Приемник с подключенными сервоприводами

Схема приемника


   Принцип работы приемника:
      1.Получает команду от контроллера на прием пакета (SRX)
      2.Пока СС1101 получает пакет от передатчика, контроллер формирует сервоимпульсы на
         каналы в среднем по 1.5 мсек на канал.
      3.По окончании приема пакета СС1101 выдает сигнал для прерывания на INT0 микроконтроллера.
      4.Считывается количество байтов в приемном FIFO (RXBYTES)
      5.Считываются данные из FIFO указанного количества байтов
      6.Приемник переводится в режим ожидания (SIDLE)
      7.Очищается приемный буфер FIFO (SFRX)
   СС1101 выдает низкий уровень сигнала при окончании приема пакета на вывод GDO0. По спаду сигнала на входе INT0 контроллер выводит прерывание после чего начинаются считываться данные из FIFO. При каждом прерывании от INT0 производится обнуление TMR0. Если приемник от передатчика будет получать пакеты с данными каждые 20-25 мсек то переполнение TMR0 происходить не будет. Переполнение таймера произойдет через 30 мсек после последнего прерывания и программа установит сервоканалы в среднее положение переведя таким образом приемник в SAFE MODE. Это произойдет в случае потери сигнала от передатчика.

Сигналы в приемнике при получении пакетов от передатчика : канал 1- CS, канал 2- GDO0.

Сигналы в приемнике при потере сигнала передатчика 

Сигнал CS в передатчике и приемнике формируется одинаково  

           
   Формирование сервоимпульсов для сервоприводов производится при помощи TMR1 установленного в 16 битный режим. Делители TMR1 устанавливаются с расчетом длительности импульса таймера в 1 микросекунду. Таймер останавливается, обнуляется и запускается, при этом на вход соответствующей сервы подается логическая «1». Счет таймера постоянно считывается и сравнивается с данными полученными от передатчика для этого канала. Когда счет таймера достигнет числа данных от передатчика на вывод серво подаются логический «0», а таймер останавливается и программа переходит к формированию импульсы для следующей серво используя при этом тот же TMR1.
   Приемник работает при напряжении 3.3в. Это связано с тем что напряжение работы чипа СС1101 не должно превышать 3.6в. Уровень сигнала для серво машинки соответственно не превышает это напряжение. Тем не менее это уровень выше 2.4 в стандарта TTL для 5 вольт и серво машинки работают устойчиво, поэтому можно не опасаться за надежность работы из-за разных уровней сигнала.


      Детали:
   Микроконтроллер PIC может быть любой семейства 16F/18F основное требование к которому это наличие аппаратного SPI интерфейса. В качестве микроконтроллера для передатчика выбран PIC16F887, а для приемника PIC18F25K20. Особых требований к контроллерам не было поэтому схему собирал из того, что у меня было под рукой. Чип СС1101 рекомендую приобрести распаянный в готовом высокочастотном модуле т.к. пайка подобных модулей требует высокой квалификации исполнения. В моей схеме высокочастотный модуль работает на частоте 868 МГц, но можно использовать модули на другие частоты 315,433,915 МГц для этого придется изменить в программе передатчика и приемника настройки регистров СС1101.  При настройке желательно использовать спекроанализатор и осциллграф.

   Аналоговые регуляторы напряжения на 3.3в могут любые с низким падением напряжения. Для питания передатчика который потребляет 19 мА, достаточно 3 батареи АА или 4 аккумулятора NiCd ( NiMh ) общим напряжением 4.8 вольта. К приемнику подключены сервы, поэтому питающее напряжение 5 вольт идет от ВЕС регулятора хода электродвигателя, но можно для этого использовать и батарею из 4 NiCd (NiMh) аккумуляторов. Приемник без серво машинок потребляет 22мА. Резисторы и конденсаторы могут быть любыми. Кнопки выбирайте из расчета на замыкание, форма и размер зависят от ваших требований, если кнопки заменить тумблерами то можно будет фиксировать команды: например включение фар у автомобиля. Антенна четвертьволновый штырь длиной 82 мм можно выполнить из медной проволоки. Микроконтроллер передатчика работает от внутреннего генератора на 8 мГц, но схема работоспособна и на 4 мГц, при этот время загрузки FIFO передатчика увеличивается до 800 микросекунд. Стики или джойстики могут быть любыми, номинал переменных резисторов может находится в пределах 1-10килоом, я использовал самодельные сделанные давно, но учитывая собственный опыт, рекомендую приобрести и установить промышленные: сэкономит много времени и нервов. В качестве стиков отлично подходят стики от консоли Sony PlayStation, для этого в программе передатчика строку ADCON1 = 0x90; нужно заменить на ADCON1 = 0x80;,  вычисления после аналогового-цифрового преобразования так же необходимо изменить, заменив на строки

        ADC_ch1 += 1000; // 500 +1000 = 1500 mksec - senter servo
        ADC_ch2 += 1000;
        ADC_ch3 += 1000;
        ADC_ch4 += 1000;

при этом R6 и VD1 можно не монтировать.

   Похожие стики продают в качестве комплектующих для Ардуино.

   Схемы собраны на макетных платах, что при единичном производстве оправдано, поэтому разводка платы не проводилась.
   Программирование проводилось в среде microC PRO for PIC v5.20 где использованы стандартные библиотеки компилятора.
Правильно собранная схема начинает работать сразу. Тем кто не будет задействовать все джостики и кнопки, рекомендую не использованные входы заземлить.
   Настройка программы проводилась при помощи утилиты SmartRF Studio 7 которую можно бесплатно скачать с сайта Texas Instruments.


      Заключение:
   Данная система радиоуправления имеет простое линейное вычисление движения джойстиков и имеет потери во время вычислений, но не смотря на это сервоприводы работают устойчиво, не дрожат. Написание кода для многофункционального кодера не входило в задачу данной статьи.
   Рассмотренная система радиоуправления имеет мощность на передачу не более 12 dBm и как следствие дальность не превышает 100м. Для увеличения мощности можно использовать усилитель радиочастоты RF2172 который может раскачать сигнал СС1101 до 24 dBm.
   Приемник получается простым, малогабаритным и легким, вес моего приемника составил 6 грамм.

Приемник.

   Для авто моделей мощности СС1101 достаточно. Система радиоуправления впору подойдет строителям роботов которые с легкостью могут увеличить необходимое количество серво- и дискретных каналов.
   Конструкция получилась относительно простая и по моему мнению доступна для повторения начинающим, при этом система радиоуправления получилась достаточно функциональной.


Файлы:
Архив схем прошивок и исходников


Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

41 4 3