Добрый день всем!
Не знаю точно, куда поместить эту тему, вроде как больше всего подходит сюда.
Задумал я детишкам сделать радиоуправление
В Китае полно различных готовых модулей и устройств для этого, и я выбрал модули на основе чипа NRF24L01+ и усилителя к нему AT2401C.
Есть два типа плат на таких чипах - без усилителя, со встроенной антенной:
И с усилителем и внешней антенной (антенну я тут не показал, она накручивается на разъём SMA-F):
Мне нужно проконтролировать передачу сигнала, поэтому я выбираю вариант с усилителем и входом на SMA.
Для управления платой потребуется какой-нибудь микроконтроллер с SPI-интерфейсом.
Приспособил для этого китайскую же Ардуино Нано на АТМега328Р.
На плате контроллера уже имеется гнездо USB, что очень удобно при программировании.
Чтобы не припаиваться каждый раз или не изобретать что-то, что отнимает время, взял плату расширения для Ардуино Нано
Контроллер на плате
Также нужно учесть, что плата передатчика питается от напряжения 3,3 В, причём кушает приличный ток (встроенный стабилизатор Ардуино Нано не справляется). Нужен внешний стабилизатор.
Годится специальная платка YL-105
Модули NRF24L01+
ru0aog
- ru0aog
- Сообщения: 942
- Зарегистрирован: 30 сен 2021, 05:50
- Позывной: ru0aog
- Город: Красноярск
- Имя: Станислав
- Благодарил (а): 126 раз
- Поблагодарили: 138 раз
Модули NRF24L01+
Сообщение ru0aog » 07 фев 2022, 07:31
По многочисленным советам (раз, два) поставил на выход стабилизатора дополнительный электролит на 10 мкФ (на плате нет никакого) и зашунтировал вход питания платы передатчика керамикой на 1 мкФ.
Вышло примерно так Залил проверочный код. Он простоянно передайт одну и ту же цифру (109) на канале 00
Вышло примерно так Залил проверочный код. Он простоянно передайт одну и ту же цифру (109) на канале 00
Библиотека:/*
Победа над nRF24L01: на три шага ближе, передатчик
https://habr.com/ru/post/476716/
*/
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10); // порты D9, D10: CSN CE
const uint32_t pipe = 111156789; // адрес рабочей трубы;
byte data;
void setup() {
Serial.begin(115200);
Serial.println("TransmitterTester ON");
radio.begin(); // инициализация
delay(2000);
radio.setDataRate(RF24_1MBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS
radio.setCRCLength(RF24_CRC_8); // размер контрольной суммы 8 bit или 16 bit
radio.setPALevel(RF24_PA_MAX); // уровень питания усилителя RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH and RF24_PA_MAX
radio.setChannel(0x00); // установка канала
radio.setAutoAck(false); // автоответ
radio.powerUp(); // включение или пониженное потребление powerDown - powerUp
radio.stopListening(); //радиоэфир не слушаем, только передача
radio.openWritingPipe(pipe); // открыть трубу на отправку
}
void loop() {
data = 109;
radio.write(&data, 1);
Serial.println("data= " + String(data));
}
- RF24-master.rar
- (4.85 МБ) 202 скачивания
ru0aog
- ru0aog
- Сообщения: 942
- Зарегистрирован: 30 сен 2021, 05:50
- Позывной: ru0aog
- Город: Красноярск
- Имя: Станислав
- Благодарил (а): 126 раз
- Поблагодарили: 138 раз
Модули NRF24L01+
Сообщение ru0aog » 07 фев 2022, 07:54
Далее, мне нужно определить - есть ли передача в эфир?
Воспользоваться программным откликом этого же модуля не совсем достоверно. Китайцы могли накосячить, например, в усилителе.
Тогда NRF24L01+ даст рапорт об успешной передаче, а AT2401C или не переключится на передачу, или ещё что-нибудь...
А что такое AT2401C ? Это китайский аналог RFX2401C - RFeIC (RF Front-end Integrated Circuit), то есть, усилитель мощности передатчика, малошумящий усилитель приёмника и цепи коммутации приём/передача.
Вся эта радость работает на выход 50 Ом на частотах 2,4 ГГц.
Выходной мощности обещано +22 dBm при потребляемом токе 100 мА.
В общем, раз есть 50-омный выход, то решил замерить сигнал прямо оттуда.
Поначалу ничего не получилось, ибо питался я от USB-порта.
Повторюсь, плата передачи кушает весьма неслабый ток. Причём импульсно. 100 мА - это уже среднее значение.
В результате порт просел, какие-то одиночные палочки выпрыгивали, но редко. И похоже, это приводило к перезагрузке контроллера.
Отключился от компа, запитал от лабораторного источника - и дело пошло. Кстати, по питанию выглядит это так:
Первоначальный пуск - 25 мА,
инициализация - 15 мА,
работа усилителя - 90...100 мА.
Поскольку передаётся цифра, то сигнал выглядит как набор палок. Включаем удержание пиков.
Это канал 00: Насколько я помню, верхний канал тут имеет номер 7F.
Проверим, на какой частоте находится этот канал: Ага, что-то работает.
Во-первых, контроллер устанавливает частоту чипа и происходит какая-то передача данных.
Во-вторых, усилитель тоже работает.
Но на нижних каналах мощность почему-то оказалась больше:
канал 00, частота 2400 МГц, сигнал +19 dBm,
канал 7F, частота 2520 МГц, сигнал +12 dBm.
Воспользоваться программным откликом этого же модуля не совсем достоверно. Китайцы могли накосячить, например, в усилителе.
Тогда NRF24L01+ даст рапорт об успешной передаче, а AT2401C или не переключится на передачу, или ещё что-нибудь...
А что такое AT2401C ? Это китайский аналог RFX2401C - RFeIC (RF Front-end Integrated Circuit), то есть, усилитель мощности передатчика, малошумящий усилитель приёмника и цепи коммутации приём/передача.
Вся эта радость работает на выход 50 Ом на частотах 2,4 ГГц.
Выходной мощности обещано +22 dBm при потребляемом токе 100 мА.
В общем, раз есть 50-омный выход, то решил замерить сигнал прямо оттуда.
Поначалу ничего не получилось, ибо питался я от USB-порта.
Повторюсь, плата передачи кушает весьма неслабый ток. Причём импульсно. 100 мА - это уже среднее значение.
В результате порт просел, какие-то одиночные палочки выпрыгивали, но редко. И похоже, это приводило к перезагрузке контроллера.
Отключился от компа, запитал от лабораторного источника - и дело пошло. Кстати, по питанию выглядит это так:
Первоначальный пуск - 25 мА,
инициализация - 15 мА,
работа усилителя - 90...100 мА.
Поскольку передаётся цифра, то сигнал выглядит как набор палок. Включаем удержание пиков.
Это канал 00: Насколько я помню, верхний канал тут имеет номер 7F.
Проверим, на какой частоте находится этот канал: Ага, что-то работает.
Во-первых, контроллер устанавливает частоту чипа и происходит какая-то передача данных.
Во-вторых, усилитель тоже работает.
Но на нижних каналах мощность почему-то оказалась больше:
канал 00, частота 2400 МГц, сигнал +19 dBm,
канал 7F, частота 2520 МГц, сигнал +12 dBm.
ru0aog
- ru0aog
- Сообщения: 942
- Зарегистрирован: 30 сен 2021, 05:50
- Позывной: ru0aog
- Город: Красноярск
- Имя: Станислав
- Благодарил (а): 126 раз
- Поблагодарили: 138 раз
Модули NRF24L01+
Сообщение ru0aog » 07 фев 2022, 17:44
Так, передача есть.
Теперь надо наладить приём.
Поскольку мы работаем на диапазоне, также занятым сетями Wi-Fi, то сначала глянем, что там в эфире твориться.
Ставлю антенну на гнездо анализатора и разворачиваю диапазон 2,4 ГГц
Ага, кто-то есть!
Собственно, это и не удивительно.
Мой стационарный комп также подключен по Wi-Fi.
Собираем второй комплект.
На приёмнике нет особой надобности ставить конденсаторы по питанию. Может потом добавлю.
К тому же, приёмник соединён с компом - он получает данные через порт. Прошиваем программу сканера диапазона
Начинаем сканировать.
Каждый столбик цифр - это свой канал. Циферки от работы сетей Wi-Fi примерно совпадают с тем местом на диапазоне, что показал анализатор.
В середине работы включаю передатчик (выделено красным).
Значит что-то передаётся и что-то принимается.
Уже хорошо.
P.S.
Кстати, на передатчике пришлось поднять напряжение до +8 вольт.
При питании от +7В возникали ошибки передачи по SPI, если потрогать пальцем около сигнальных линий. Видимо надо снизить скорость обмена.
Теперь надо наладить приём.
Поскольку мы работаем на диапазоне, также занятым сетями Wi-Fi, то сначала глянем, что там в эфире твориться.
Ставлю антенну на гнездо анализатора и разворачиваю диапазон 2,4 ГГц
Ага, кто-то есть!
Собственно, это и не удивительно.
Мой стационарный комп также подключен по Wi-Fi.
Собираем второй комплект.
На приёмнике нет особой надобности ставить конденсаторы по питанию. Может потом добавлю.
К тому же, приёмник соединён с компом - он получает данные через порт. Прошиваем программу сканера диапазона
Spoiler
/*
Победа над nRF24L01: на три шага ближе, сканер эфира
https://habr.com/ru/post/476716/
*/
/*
Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
version 2 as published by the Free Software Foundation.
*/
/**
Channel scanner
Example to detect interference on the various channels available.
This is a good diagnostic tool to check whether you're picking a
good channel for your application.
Inspired by cpixip.
See http://arduino.cc/forum/index.php/topic,54795.0.html
*/
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
//
// Hardware configuration
//
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
RF24 radio(9, 10); //Arduino UNO
//
// Channel info
//
const uint8_t num_channels = 128;
uint8_t values[num_channels];
//
// Setup
//
void setup(void)
{
//
// Print preamble
//
Serial.begin(9600);
Serial.println("Scanner Air On");
printf_begin();
//
// Setup and configure rf radio
//
radio.begin();
radio.setAutoAck(false);
// Get into standby mode
radio.startListening();
radio.printDetails();
delay(5000);
// Print out header, high then low digit
int i = 0;
while ( i < num_channels )
{
printf("%x", i >> 4);
++i;
}
printf("\n\r");
i = 0;
while ( i < num_channels )
{
printf("%x", i & 0xf);
++i;
}
printf("\n\r");
}
//
// Loop
//
const int num_reps = 100;
void loop(void)
{
// Clear measurement values
memset(values, 0, sizeof(values));
// Scan all channels num_reps times
int rep_counter = num_reps;
while (rep_counter--)
{
int i = num_channels;
while (i--)
{
// Select this channel
radio.setChannel(i);
// Listen for a little
radio.startListening();
delayMicroseconds(512);
radio.stopListening();
// Did we get a carrier?
if ( radio.testCarrier() )
++values;
}
}
// Print out channel measurements, clamped to a single hex digit
int i = 0;
while ( i < num_channels )
{
printf("%x", min(0xf, values & 0xf));
++i;
}
printf("\n\r");
}
Начинаем сканировать.
Каждый столбик цифр - это свой канал. Циферки от работы сетей Wi-Fi примерно совпадают с тем местом на диапазоне, что показал анализатор.
В середине работы включаю передатчик (выделено красным).
Значит что-то передаётся и что-то принимается.
Уже хорошо.
P.S.
Кстати, на передатчике пришлось поднять напряжение до +8 вольт.
При питании от +7В возникали ошибки передачи по SPI, если потрогать пальцем около сигнальных линий. Видимо надо снизить скорость обмена.
ru0aog
- ru0aog
- Сообщения: 942
- Зарегистрирован: 30 сен 2021, 05:50
- Позывной: ru0aog
- Город: Красноярск
- Имя: Станислав
- Благодарил (а): 126 раз
- Поблагодарили: 138 раз
Модули NRF24L01+
Сообщение ru0aog » 08 фев 2022, 05:16
Посмотрел описание частот каналов.
Канал 00 = 2400 МГц.
Каждый следующий канал отстоит на 1 МГц.
Канал 7F = 127. Частота 2400+127 = 2527 МГц.
ru0aog
- ru0aog
- Сообщения: 942
- Зарегистрирован: 30 сен 2021, 05:50
- Позывной: ru0aog
- Город: Красноярск
- Имя: Станислав
- Благодарил (а): 126 раз
- Поблагодарили: 138 раз
Модули NRF24L01+
Сообщение ru0aog » 08 фев 2022, 06:08
Хм, забавно.
Вчера модули на передачу работали, а сегодня - нет.
Ответ дают, но тока не потребляют и сигнала на выходе нет.
Вчера модули на передачу работали, а сегодня - нет.
Ответ дают, но тока не потребляют и сигнала на выходе нет.
ru0aog
Перейти
- Обязательно к прочтению
- Аналоговая схемотехника
- ↳ Супергетеродинные приемники и трансиверы
- ↳ Прямое преобразование
- ↳ Прямое усиление
- ↳ Регенераторы
- ↳ Узлы, блоки, модули
- ↳ Усилители мощности
- Цифровая техника
- ↳ SDR приемники
- ↳ SDR приставки
- ↳ SDR трансиверы
- ↳ Микроконтроллеры и программирование
- Теплая лампота
- ↳ Супергетеродины
- ↳ Регенераторы
- ↳ Прямого усиления
- ↳ УНЧ
- ↳ ВЧ усилители мощности
- Источники питания
- ↳ Трансформаторные и линейные
- ↳ Импульсные и преобразователи
- ↳ Гибриды
- ↳ Аккумуляторы и батареи
- ↳ Альтернативные источники
- Антенны
- ↳ Антенны КВ
- ↳ Антенны УКВ
- ↳ Фидеры кабели
- ↳ Антенные приборы и устройства
- ↳ Тюнеры
- Фирменная аппаратура
- ↳ Yaesu
- ↳ Icom
- ↳ Kenwood
- ↳ Прочие
- Мастерская
- ↳ Измерения, приборы и софт
- ↳ Паяльное оборудование
- ↳ Слесарка
- ↳ ЧПУ и 3D принтеры
- Разное
- ↳ Другие радио темы
- ↳ Полевой день
- ↳ Помогите опознать
- ↳ Куплю Продам Магазины Продавцы
- ↳ Флудильня и оффтоп
- Работа форума