Если в прошлой статье был рассмотрен передатчик системы радиоуправления, то удел этой — приемник. В отличии от предыдущей конструкции (ссылка), он базируется на более дешевом микроконтроллере ATmega48 (aliexpress ~ 40р.).К приемнику можно подключить два стандартных сервопривода (выходы для управления серво имеют стандартный сигнал — импульсы выдаются с периодом 20мс, а их длительность составляет 1-2мс), либо сервопривод + регулятор хода и т.д. В моем случае, действует связка регулятор хода + сервопривод SG90 — дешевый но в тоже время вполне надежный механизм. Так же, в данной конструкции приемника, дискретные каналы имеют нагрузочную способность до 100мА. Это достигается путем использования транзисторных ключей (в прошлом варианте транзисторные ключи предполагалось монтировать вне основной платы), что повело за собой увеличение размеров печатной платы.
Принципиальная схема:
Для питания микроконтроллера, рулевых машинок и нагрузки дискретных каналов применяется линейный стабилизатор 7805. Включенный последовательно с ним LM1117-3.3 питает радио модуль, ток потребления которого может достигать 100 мА в режиме передачи. Для управления нагрузкой дискретных каналов применяются биполярные n-p-n транзисторы Q1 — Q5. Нагрузочная способность этих ключей позволяет подключать нагрузку до 100 мА (заявлено в даташите на транзисторы), Так же на принципиальной схеме присутствует кварцевый резонатор с обвесом, но реально он в данный момент не используется. Место под него на плате оставлено как задел на будущее, и его можно не распаивать.
Печатная плата приемника выполнена на одностороннем фольгированном материале (текстолит, гетинакс). Но в силу сложности разводки, пришлось использовать некоторое количество перемычек. В процессе изготовления печатной платы был использован метод ЛУТ (в качестве носителя — глянцевая журнальная бумага), с последующим докрашиванием маркером и корректировкой иглой. Отверстия на плате рассчитаны на сверло диаметром <= 1мм . Большим сверлом будут срезаться контактные площадки.
Топология печатной платы:
Внешний вид.
Модель:
Готовое изделие:
Модуль NRF24L01 подключается к точкам на плате. Они подписаны, и остается лишь соединить их с соответствующими выводами на модуле. Так же, в данном случае модуль находится за пределами печатной платы, а значит необходимо на его ножки, куда подводится питание, припаять конденсатор емкостью 47мкФ и 0.1мкФ. Второй — неполярный. Это делается для предотвращения самопроизвольного сброса и зависания модуля из-за просадок напряжения и помех по питанию во время активной работы.
Программа для микроконтроллера сложностью не отличается. Фактически, все вычисления производит микроконтроллер в передатчике. Приемник же просто отправляет «голые» данные (в данном случае — информацию с АЦП). Но, несмотря на это, в приемнике есть что настроить.
Первое — это канал, на котором данный экземпляр приемника будет работать. По-умолчанию, установлен первый канал. Но, если вам требуется запускать несколько моделей одновременно в одном месте, то требуется задать различные каналы как приемнику, так и передатчику.
#define CHANNEL 1
Второе — установка начального положения сервопривода. Так как сервопривод (рулевая машинка и т.д.) может быть установлен в различных механизмах, то и начальное положение может быть различным. Для изменения этого параметра требуется вписать свое число на место START_POSx. По-умолчанию это 1500.
#define START_POS0 1500
#define START_POS1 1500
Управление сервоприводами выполнено на таймере T1, потому что он имеет для этого все необходимые регистры. Используя режим PWM, phase and frequency correct, получаем ШИМ, период и длительность импульсов можно корректировать с помощью регистров ICR1 и OCR1A, OCR1B.
Рассмотрим на примере одного из каналов:
ICR1 = 312;
…
unsigned long int a;
a = ICR1;
a = a * (980 + rx_data[0] * 4);
a = a / 20000;
OCR1A = a;
312 — это период следования импульсов. Зависит от предделителя таймера и желаемого периода: 8000000/256/312 = 0.01 сек (0.02 сек делим 2) , потому что у нас режим phase correct. Далее, присваиваем переменной a это значение, с последующим умножением на желаемую длительность, с миллисекундах (rx_data[x] — байтовый массив, максимальное значение элемента массива — 255; для получения значений в районе 1000 — 2000 нужно умножить rx_data[x] на 4 (получим 1020), и потом добавить ещё 980 (получим 2000). Потом все это дело делим на 20000 (период, в миллисекундах), и получаем необходимое значение OCR1x.
Как уже упоминалось выше, на передатчик отсылается лишь значение АЦП. Двухбайтная переменная, содержащая результат измерения 10-битного АЦП разбивается байты и отсылается посредством массива data_tx[x]. Более ни для чего этот массив не используется.
Кроме этого, в приемнике имеется возможность включить инверсию отдельных или всех дискретных каналов. Для этого необходимо изменить элементы данного массива:
const unsigned char type_out[5] = {NINV, NINV, NINV, NINV, NINV};
Если вам не требуется инверсия на канале, элемент должен быть «NINV», в противном случае пропишите «INV».
Программа писалась в среде AtmelStudio 7.
Для прошивки микроконтроллера использовался программатор USBasp и программа Khazama AVR Programmer. Биты настройки микроконтроллера можно оставить заводские, но необходимо выбрать тактовый генератор — Int. RC 8MHz и отключить деление тактовой частоты на 8.
Возможная замена деталей. В устройстве можно применить транзисторы BC239, BC547, КТ203, КТ3102 и другие, структуры n-p-n и током не менее 100мА. Резисторы R1 и R2 желательно брать высокоточные, но если таковых нет, подойдут и 5%. Остальные резисторы можно брать с сопротивлением +/- 10-20%. Только резистор R9 не стоит брать меньшего номинала, потому что это чревато выходом из строя светодиода. Стабилизатор LM1117-3.3 можно заменить на любой аналогичный, с напряжением стабилизации 3.3В и корпусом SOT-223. LM7805 так же можно заменить на аналогичный, с напряжением стабилизации 5 вольт и током не менее 1А. К слову, при использовании мощных нагрузок (100 мА) на дискретных каналах, установите стабилизатор 7805 на теплоотвод. В противном случае это может закончиться плачевно для всего устройства в целом.
Микроконтроллер, к сожалению, заменить нельзя.
Перед запуском убедитесь, что нет коротких замыканий между дорожками. Это очень частая проблема на платах, изготовленных методом ЛУТ и имеющих много близко расположенных дорожек.
Фотографии устройства и видео работы:
Звездочка перед надписью LOAD обозначает сигнальный провод. Соответственно, подключать сервомашинку или регулятор хода нужно тка: (*) -> SIGNAL — VCC — GND (оранжевый — красный — коричневый).
Спасибо за внимание!
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
U1
МК AVR 8-битATmega481
TQFP-32U2
Линейный регуляторAMS1117-3.31
SOT-223U3
Линейный регуляторLM78051
TO-220
Радио модульNRF24L01+PA+LNA1
Q1 — Q5
Биполярный транзисторBC5475
TO-92D1
СветодиодЗеленый, 5мм1
X1
Кварцевый резонатор16MHz1
Не обязательноR1 — R3
Резистор10 кОм3
МЛТ-0,25R4 — R8
Резистор4,7 кОм5
0805R9
Резистор220 Ом1
Зависит от типа диода
Конденсатор47 мкФ х 6.3В1
Монтируется на радио модуль
Конденсатор0.1 мкФ1
Монтируется на радио модульC1 — C5
Конденсатор0.1 мкФ5
0805C6, C7
Конденсатор22 пФ2
Не обязательноL1
Катушка индуктивности10 мкГн1
JP1
Перемычка1
РазъемPLS-401
Все разъемы на платеДобавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- RadioControl_M(Receiver) — CADCAM.ZIP (41 Кб)
- RadioControl_M(Receiver).PDF (51 Кб)
- Receiver_.rar (1032 Кб)