Радиоуправление на ATmega8 и радиомодулях NRF24L01+PA+LNA. Приемник

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

Как и в случае с передатчиком, основой устройства выступает микроконтроллер ATmega8. Этот выбор не обусловлен ничем, кроме того, что у меня несколько таких микроконтроллеров валялось без дела. Кроме микроконтроллера в схеме фигурируют уже знакомые нам NRF24L01+ (или их модификации), линейные стабилизаторы L7805 и LM1117-3.3, а так же несколько разъемов, кварцевый резонатор и резисторы с конденсаторами.

Принципиальная схема приведена ниже:

Внимание! На схеме не указан стабилизатор LM1117-3, подключенный к выходу L7805, и питающий радиомодуль NRF24L01 (на схеме обозначено точкой «VCC_NRF24»).

Разъем J2 предназначен для подключения дискретных (включено/выключено) нагрузок, но для управления чем-то, что требует тока >20 mA, необходимо установить транзисторные ключи. J3 служит для измерения напряжения батареи (делитель на R1 и R4 уже подключен к входу стабилизатора L7805). J4, а так же S1, S2, S3 — это исполнительные устройства (которым требуется пропорциональное управление). J5, J6 — шины питания, выведены для удобства подключения. К J7 подключаются два проводника, при замыкании которых микроконтроллер определяет, что в корпусе появилась вода (все-таки управление создавалось для водной модели). Но, если вам эта функция не нужна, просто можете не выводить этот разъем. J10 это разъем питания, к нему подключается аккумуляторная батарея.

С J11 и J12 несколько интереснее. Изначально планировалось подключать к управлению два датчика температуры DS18B20, потому что на модель должно было быть установлено два двигателя. Но в ходе работ оказалось, что второй двигатель не нужен, и датчик к нему как следствие тоже. В прошивке, на момент написания статьи, возможно использование лишь одного датчика температуры, который подключен к разъему J11. J12 пока что не используется, но немного изменив прошивку, к нему можно будет подключить светодиод для индикации приема команд.

Программа для микроконтроллера, как и в случае с передатчиком, писалась на C под AVR-GCC (WinAVR). Все исходные файлы присутствуют в архиве, прикрепленном к статье.

Алгоритм работы программы можно описать так:

  • Инициализация таймера, АЦП, прерываний и регистров ввода-вывода.
  • Инициализация исполнительных устройств (сервомашинки и т.д.)
  • Инициализация радиомодуля.
  • Перевод радиомодуля в режим приема.
  • Ожидание приема, а так же циклический опрос АЦП с целью мониторинга напряжения аккумуляторной батареи. Опрос датчика DS18B20, датчика воды.
  • При приеме данных, корректируется положение исполнительных механизмов, состояние нагрузок. Если получен флаг запроса состояния, отправляются данные о температуре и напряжении.
  • Работа с переменными-счетчиками, переход к пункту 5.
  • Есть момент, на котором, на мой взгляд, стоит остановиться подробнее.

    Измерение напряжения (уровня заряда) аккумулятора несколько отличается от аналогичной процедуры в передатчике. Всему виной различное опорное напряжение АЦП микроконтроллера (3,3В в передатчике против 5В в приемнике).

    unsigned char battery_level[2][3] = {{135, 147, 155}, {67, 73, 77}}; //Значения, характеризующие уровень заряда

    //

    unsigned char get_battery(unsigned char n)
    {
    volatile unsigned char a, i;
    battery = adc_read(n + 6, 0);
    //
    for (i = 0;i < 2;i++)
    {
    if (battery < battery_level[i][0]) a = 0;
    else if (battery < battery_level[i][1]) a = 1;
    else if (battery < battery_level[i][2]) a = 2;
    else a = 3;
    }
    //
    return a;
    }

    Выше представлена упрощенная процедура для оценки уровня заряда. Принцип действия прост — если нужно узнать общий уровень заряда, вызываем:

    x = get_battery(0);

    Если же лишь «нижней» банки, то:

    x = get_battery(1);

    Для примерной оценки «верхней» банки можно сначала узнать общий уровень и сравнить его с уровнем «нижней». Если вам необходимо более точно контролировать уровень заряда, то можно сделать следующим образом: измерять напряжение на делителе R1-R4, далее измерить на R2-R3. Полученную разницу сохранить в отдельную переменную. После этого все три 2-хбайтовых переменных можно будет разбить на пары байт и отправить на передатчик, для последующего отображения.

    При прошивке микроконтроллера Fuse-биты выставляются в соответствии с образцом (мной использовался Khazama AVR Programmer в связке с USBasp):

    Печатная плата, как и в случае с приемником является односторонней. Что, однако, повлекло за собой использование перемычек. Размеры готовой платы составляют 70х40(мм).

    Разъем для программирования не выведен, так что для заливки прошивки в микроконтроллер необходимо аккуратно припаяться тонкими проводками к печатным проводникам, либо использовать программатор со специальной панелькой для программирования МК ещё до установки на плату.

    Про возможную замену деталей в данном случае можно не упоминать. Единственное, L7805 заменить на L78L05 нельзя — от нее питаются и сервоприводы, а «облегченная» версия не потянет ток более 100мА.

    Немного фотографий, а так же видео:

     

     

    Так же, хочу напомнить, что для корректной работы модуля NRF24L01+ необходимо подпаять к его выводам питания два конденсатора: электролитический, емкостью ~47мкФ, и керамический ~100нФ (последнее фото). Либо, как вариант, предусмотреть посадочные места для них на плате, непосредственно возле разъема для подключения радио модуля.


    Список радиоэлементовОбозначение
    Тип
    Номинал
    Количество
    ПримечаниеМагазинМой блокнот

    U0
    Линейный регуляторLM1117-3.31
    Расположен вне платыU1
    МК AVR 8-битATmega81
    TQFP-32U4
    Линейный регуляторL7805AB1
    TO220U5
    Датчик температурыDS18B201
    ОпциональноR1, R2
    Резистор10 кОм2
    0805R3, R4
    Резистор1 кОм2
    0805R9, R10
    Резистор4.7 кОм2
    0805C6, C7
    Конденсатор100 нФ2
    0805C8
    Электролитический конденсатор470мкФ1
    16ВC9, C10
    Конденсатор33 пФ2
    0805J1-J7, J10-J11
    РазъемPLS-401
    X2
    Кварцевый резонатор8МГц1
    НизкопрофильныйДобавить все

    Скачать список элементов (PDF)

    Прикрепленные файлы:

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

    Ваш адрес email не будет опубликован.