Что представляет собой радиомодуль в мобильном телефоне?

Наверняка многие задаются вопросом о том, что представляет собой радиомодуль в телефоне. В особенности, такой вопрос стал более часто задаваемым после того, как у пользователей мобильных устройств появилось желание и потребность использовать 2 сим-карты одновременно на одном мобильном телефоне. Для начала стоит отметить, что радиомодули используются в качестве быстродействующих устройств для дистанционного сбора и хранения данных. Таким образом, мобильные телефоны с 2 сим-картами используют либо один радиомодуль, либо два.

Однако в этом случае, принцип их функционирования отличается от плат мобильных устройств с 1 сим-картой. В целом, число доступных для применения радиомодулей в телефоне находится в непосредственной зависимости от его производителя. В результате, в телефоне с 2 сим-картами, который для работы использует лишь 1 радиомодуль, обе сим-карты будут функционировать в режиме ожидания. Т.е. когда звонок поступает на одну сим-карту, вторая становится недоступной. Выходит, что, несмотря на то, что такой телефон даёт возможность пользоваться двумя сим-картам, но активной в этом случае по-прежнему остаётся только одна. Аналогичная ситуация возникает также и при использовании интернет-услуг — лишь одна сим-карта будет способна осуществлять приём и передачу данных. На сайте http://iptech.com.ua/ вы можете узнать больше интересного о технологии беспроводной связи.

Отсюда следует, что использование радиомодуля в мобильном телефоне даёт возможность пользователям передавать и принимать сигналы сети, а именно: вам могут звонить, вы можете звонить, отправлять и принимать как sms-сообщения, так и мультимедийные, а также вы можете пользоваться услугами мобильного интернета.

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

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

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

railwayukr.com

Как прошить или перепрошить модуль связи (радиомодуль)

Потребитель, ориентированный на приобретение современной мобильной техники, часто испытывает сильнейшее разочарование спустя небольшое время после приобретения смартфона.

Например, известнейший производитель Lenovo ориентирован на два различных рынка сбыта. Первый направлен на европейского потребителя, поэтому смартфоны производятся в Европе, а второй вид смартфонов «рождается» на китайском пространстве.

Если вы отмечаете проблемы с покрытием — возможно, дело в радиомодуле

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

К сожалению, «китаец» очень часто отказывается ловить сигнал сети 3G на частоте GSM 900.

Столкнувшись с такой проблемой, придётся вам вникнуть в некоторые технические параметры, чтобы понять, как прошить модуль связи Андроид.

Это не будет слишком сложно, если вы внимательно ознакомитесь со всеми этапами, постигнете важные секреты, разберётесь в том, что такое прошивка модуля связи.

Необходимость в прошивке

Любые действия с мобильными телефонами следует производить аккуратно, поскольку незнание некоторых азов способно спровоцировать нежелательные результаты.

Кирпич — так называют смартфон, утративший свою функциональность

Менять прошивку на смартфоне следует только в тех случаях, когда иного варианта решения проблем найти просто невозможно.

Причины смены прошивки

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

При плохой поддержке сигнала сети на частоте GSM 900 разговор не получится, поскольку связь будет постоянно прерываться, соответственно, собеседник не сможет разобрать вашу речь.

Даже если это так, вернуть аппарат не удастся, поэтому можно ознакомиться с информацией, как прошить радиомодуль, после чего проделать такие действия самостоятельно.

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

Перед покупкой устройства обратите внимание на надписи под крышкой

Если же вам китайское устройство подарили, придётся его самостоятельно усовершенствовать, «заставить» работать корректно и быстро, но для этого потребуется разобраться, какая прошивка радиомодуля является максимально эффективной.

Прошивка радиомодуля

Итак, разобравшись в тонкостях, как перепрошить радиомодуль, вы сможете усовершенствовать свое любимое мобильное устройство.

Очень важно соблюдать алгоритм прошивки, не пропускать никаких подпунктов, чтобы не навредить и не спровоцировать ещё более серьёзный сбой.

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

Алгоритм прошивки

В самом начале столь ответственных действий важно получить Root-права на ваш Андроид. Далее закачайте TWRP-recovery и сохраните её на SD-карте.

Теперь понадобится закачать с Плей Маркета специальное программное обеспечение, которое поможет обновить Recovery. Отличным помощником при осуществлении таких действий может выступать утилита Mobileuncle MTK Tools.

Установите эту программу, запустите её и найдите пункт «Обновление Recovery». После того как вы кликните по этому пункту, система запросит место, куда был помещён файл Recovery. Безусловно, следует указать SD-карту.

Далее программа совершит автоматически несложные действия и успешно завершит обновление Recovery, после чего можно перейти к установке прошивки радиомодуля.

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

Далее запустите Recovery, в основном меню найдите подпункт «Install», кликните по нему. Теперь на экране вновь появится окно, в котором необходимо указать путь к сохранённой версии прошивки радиомодуля.

После завершения процесса остаётся почистить кэш, удалив из смартфона все ненужные файлы. Для этого найдите пункт «Wipe cache/dev link», кликните и дождитесь завершения очистки. Теперь просто перезагрузите мобильный аппарат, после чего можете приступать к его использованию.

Очистите кэш устройства, нажав Wipe cache

Для прошивки радиомодуля можно воспользоваться и другим способом. Для этого первоначально придётся закачать и сохранить желаемую версию прошивки, а также файл android-info.txt.

Прошивку распаковать, найти файл Radio.img, переместить его в новую папку, куда также забросить и файл android-info.txt.

Теперь эту папку назвать PC10IMG, а затем заархивировать в формате zip. Этот созданный архив переместить на SD-карту.

После таких действий выключить аппарат, извлечь аккумулятор на пять секунд, затем вновь его подключить, но только при зажатой клавише «громкость вниз».

В этом случае на экране появится программный запрос «Do you want to start update», на который должен последовать позитивный ответ, а именно — нажатие клавиши «громкость вверх».

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

Итак, прошивка радиомодуля не так сложна, как может показаться сначала. Важно только следовать алгоритму, не игнорировать ни одного пожелания опытных пользователей. Только в этом случае мобильный аппарат порадует вас корректной работой и быстродействием.

nastroyvse.ru

Использование RF-модулей / Habr

Иногда, между устройствами требуется установить беспроводное соединение. В последнее время для этой цели все чаще стали применять Bluetooth и Wi-Fi модули. Но одно дело передавать видео и здоровенные файлы, а другое — управлять машинкой или роботом на 10 команд. С другой стороны радиолюбители часто строят, налаживают и переделывают заново приемники и передатчики для работы с готовыми шифраторами/дешифраторами команд. В обеих случаях можно использовать достаточно дешевые RF-модули. Особенности их работы и использования под катом.
Типы модулей

RF-модули для передачи данных работают в диапазоне УКВ и используют стандартные частоты 433МГц, 868МГц либо 2,4ГГц (реже 315МГц, 450МГц, 490МГц, 915МГц и др.) Чем выше несущая частота, тем с большей скоростью можно передавать информацию.
Как правило, выпускаемые RF-модули предназначены для работы с каким-либо протоколом передачи данных. Чаще всего это UART (RS-232) или SPI. Обычно UART модули стоят дешевле, а так же позволяют использовать нестандартные (пользовательские) протоколы передачи. Вначале я думал склепать что-то типа такого, но вспомнив свой горький опыт изготовления аппаратуры радиоуправления выбрал достаточно дешевые HM-T868 и HM-R868 (60грн. = менее $8 комплект). Существуют также модели HM-*315 и HM-*433 отличающиеся от нижеописанных лишь несущей частотой (315МГц и 433МГц соответственно). Кроме того есть множество других модулей аналогичных по способу работы, поэтому информация может быть полезной обладателям и других модулей.
Передатчик

Почти все RF-модули представляют собой небольшую печатную плату с контактами для подключения питания, передчи данных и управляющих сигналов. Рассмотрим передатчик(трансмиттер) HM-T868
На нем имеется трехконтактный разъем: GND(общий), DATA(данные), VCC(+питания), а также пятачок для припайки антенны(я использовал огрызок провода МГТФ на 8,5см — 1/4 длинны волны).
Приемник

Ресивер HM-R868, внешне, очень похож на соответствующий ему трансмиттер

но на его разъеме есть четвертый контакт — ENABLE, при подаче на него питания приемник начинает работать.
Работа

Судя по документации, рабочим напряжением является 2,5-5В, чем выше напряжение, тем большая дальность работы. По сути дела — это радиоудлинитель: при подаче напряжения на вход DATA передатчика, на выходе DATA приемника так же появится напряжение (при условии что на ENABLE также будет подано напряжение). НО, есть несколько нюансов. Во-первых: частота передачи данных (в нашем случае — это 600-4800 бит/с). Во-вторых: если на входе DATA нету сигнала более чем 70мс, то передатчик переходит в спящий режим(по-сути отключается). В-третьих: если в зоне приема ресивера нету работающего передатчика — на его выходе появляется всякий шум.

Проведем небольшой эксперимент: к контактам GND и VCC трансмиттера подключим питание. Вывод DATA соединим с VCC через кнопку или джампер. К контактам GND и VCC ресивера также подключаем питание, ENABLE и VCC замыкаем между собой. К выходу DATA подключаем светодиод (крайне желательно через резистор). В качестве антенн используем любой подходящий провод длинной в 1/4 длинны волны. Должна получиться такая схемка:

Сразу после включения приемника и/или подачи напряжения на ENABLE должен загореться светодиод и гореть непрерывно (ну или почти непрерывно). После нажатии кнопки на передатчике, со светодиодом также ничего не происходит — он продолжает гореть и дальше. При отпускании кнопки светодиод мигнет(погаснет и снова загорится) и продолжает гореть дальше. При повторном нажатии и отпускании кнопки все должно повторится. Что же там происходило? Во время включения приемника, передатчик находился в спящем состоянии, приемник не нашел нормального сигнала и стал принимать всякий шум, соответственно и на выходе появилась всякая бяка. На глаз отличить непрерывный сигнал от шума нереально, и кажется, что светодиод светит непрерывно. После нажатия кнопки трансмиттер выходит из спячки и начинает передачу, на выходе ресивера появляется логическая «1» и светодиод светит уже действительно непрерывно. После отпускания кнопки передатчик передает логический «0», который принимается приемником и на его выходе также возникает «0» — светодиод, наконец, гаснет. Но спустя 70мс передатчик видит что на его входе все тот же «0» и уходит в сон, генератор несущей частоты отключается и приемник начинает принимать всякие шумы, на выходе шум — светодиод опять загорается.

Из вышесказанного следует, что если на входе трансмиттера сигнал будет отсутствовать менее 70мс и находится в правильном диапазоне частот, то модули будут вести себя как обычный провод (на помехи и другие сигналы мы пока не обращаем внимания).

Формат пакета

RF-модули данного типа можно подключить напрямую к аппаратному UART или компьютеру через MAX232, но учитывая особенности их работы я бы посоветовал использовать особые протоколы, описанные программно. Для своих целей я использую пакеты следующего вида: старт-биты, байты с информацией, контрольный байт(или несколько) и стоп-бит. Первый старт-бит желательно сделать более длинным, это даст время чтобы передатчик проснулся, приемник настроился на него, а принимающий микроконтроллер(или что там у Вас) начал прием. Затем что-то типа «01010», если на выходе приемника такое, то это скорее всего не шум. Затем можно поставить байт идентификации — поможет понять какому из устройств адресован пакет и с еще большей вероятностью отбросит шумы. До этого момента информацию желательно считывать и проверять отдельными битами, если хоть один из них неправильный — завершаем прием и начинаем слушать эфир заново. Дальше передаваемую информацию можно считывать сразу по байтам, записывая в соответствующие регистры/переменные. По окончании приема выполняем контрольное выражение, если его результат равен контрольному байту — выполняем требуемые действия с полученной информацией, иначе — снова слушаем эфир. В качестве контрольного выражения можно считать какую-нибудь контрольную сумму, если передаваемой информации немного, либо Вы не сильны в программировании — можно просто посчитать какое-то арифметическое выражение, в котором переменными будут передаваемые байты. Но необходимо учитывать то, что в результате должно получится целое число и оно должно поместится в количество контрольных байт. Поэтому лучше вместо арифметических операций использовать побитовые логические: AND, OR, NOT и, особенно, XOR. Если есть возможность, делать контрольный байт нужно обязательно так как радиоэфир — вещь очень загаженная, особенно сейчас, в мире электронных девайсов. Порой, само устройство может создавать помехи. У меня, например, дорожка на плате с 46кГц ШИМ в 10см от приемника очень сильно мешала приему. И это не говоря о том, что RF-модули используют стандартные частоты, на которых в этот момент могут работать и другие устройства: рации, сигнализации, радиоуправление, телеметрия и пр.
Что еще можно почитать

HM-T и HM-R — описание и документация на сайте производителя.
1, 2 и 3 — интересные статьи и наблюдения (много чего полезного можно найти в комментариях).

habr.com

Радиомодули для беспроводной передачи данных. Часть 3.

РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Радиомодули для беспроводной передачи данных. Часть 3.

Обратимся теперь к радиомодулям на основе приёмо-передатчиков фирмы Texas Instruments для субгигагерцового диапазона. Продукцию фирмы для этого диапазона можно условно разделить на 4 следующих класса. К первому классу относятся микросхемы приёмников и передатчиков, основанных на чипе CC1101 и его бюджетных вариантах. Ко второму – трансиверы CC112x с улучшенными характеристиками. К третьему – высокопроизводительные трансиверы CC120x, и к четвёртому – трансиверы со встроенными микроконтроллерами с Flash памятью и развитой периферией, в которые можно загрузить программу пользователя. Я опустил старые микросхемы CC10xx с гораздо более ограниченным функционалом, вместо которых фирма сегодня рекомендует использовать CC1101.

В статье рассмотрены вопросы применения микросхем только из первых двух классов. Отмечу, что большинство трансиверов первоначально разработаны Норвежской фирмой Chipcon AS, которая в 2006 году вошла в состав TI. Поэтому до недавнего прошлого контроллер, управляющий радиотрактом этих микросхем, был выполнен по архитектуре 8051, что не типично для линейки микроконтроллеров, производимых TI. Это относилось и к трансиверам с загрузкой программы пользователя CC1110/CC1111. Относительно недавно TI выпустила новую линейку трансиверов четвёртого классa CC430F513x/CC430F613x с интегрированным микроконтроллером серии MSP430. Однако, и в них использован радиотракт из полулярной и удачно разработанной ранее базовой модели CC1101.

Разработка программного обеспечения для всех примеров в статье производилась для микроконтроллера семейства Kinetis фирмы Freescale с архитектурой ARM Cortex-M0+. Однако, как и ранее, основное внимание будет уделено аспектам работы с радиомодулями без привязки к конкретной модели микроконтроллера. Тем не менее, я уже рассказывал о подобных МК в [1]. Кроме того, если Вы когда-либо работали с 8-битными МК фирмы Freescale, например с семейством HCS08, Вам будет гораздо легче при необходимости детально разобраться в прилагаемых программах, поскольку многие системные и периферийные модули в 8- и 32-битных МК фирмы во многом похожи. Рассматриваемые здесь радиомодули, как и в предыдущих статьях, имеют богатый функционал, полное описание которого с примерами имело-бы объём книги. Поэтому и в этой вводной статье мы ограничимся лишь односторонней передачей и приёмом короткого пакета данных. Вместо номера пакета в предыдущих статьях я решил передавать более осмысленные данные, именно значение температуры, получаемое с датчика TMP112A, подключённому к МК по интерфейсу I2C. Сопряжение МК со всеми радиомодулями в статье выполнено по следующей схеме.

Передача пакетов модулем на CC1150

Передатчик CC1150 является самым простым в использовании и принадлежит к первому классу нашей классификации. Он выпускается в корпусе с всего 16 выводами с шагом 0.65 мм, поддерживает модуляцию типов (G)FSK, MSK, OOK и bit rate до 500 kbps, и обеспечивает мощность в нагрузке до +10 dBm. Для уменьшения числа пассивных компонентов я использовал интегрированный балун фирмы Johanson Technology [4], разработанный специально для CC1101 и его производных. Такие балуны выпускаются фирмой для рабочих частот начиная с 430 мгц, я применил балун для диапазона 915 мгц.

Схема собрана на плате размером 15×18 мм и толщиной 0.8 мм, фольга на обратной стороне платы, как и ранее, используется в качестве земли. Антенной служит отрезок одножильного провода длиной 82 мм. Все детали на плате типоразмера 0402 кроме C7 (0603). Кристалл в корпусе размером 3.2×2.5 мм и нагрузочной емкостью 10 пФ. Микросхема требует распайки подложки на землю. Изображения увеличиваются при кликании.

 

Связь передатчика с микроконтроллером производится по интерфейсу SPI на частотах до 9 мгц. Вывод GDO0 чипа можно запрограммировать на одну из 11 функций [2]. В нашем случае он сконфигурирован на индикацию конца передачи пакета падающим уровнем напряжения. Микросхемы фирмы из первого класса были разработаны задолго до Si446x, рассмотренных ранее. Отчасти поэтому, в них всё проще, включая гораздо меньшее число опций и настроек. Вместо API функций, как у Si446x, конфигурация чипа производится записью данных в регистры. Передатчик CC1150 по сути состоит только из передающей части трансивера CC1101, и имеет всего 29 регистров конфигурации. Записи и чтению регистров предшествует посылка в чип байта заголовка, в котором определяется адрес регистра, операция с ним (запись или чтение), и тип операции – работа с единичным регистром, или с блоком регистров, расположенных в последовательных адресах (burst access). В последнем случае производится автоматическая инкрементация адреса регистров. Помимо записи конфигурации чипа в регистры, в него можно посылать однобайтовые команды для перевода передатчика в определённое состояние. Всего поддерживается 9 комманд.

Для программной настройки чипа фирма предлагает систему SmartRF Studio, доступную для свободной загрузки с вебсайта фирмы. Помимо параметров явно заданных пользователем система определяет оптимальные значения других параметров, из которых не все оговорены в ДШ (например, содержимое регистров TEST). Studio может работать как с подсоединённым через CC-debugger чипом или демо-платой, так и без них. Ниже показано окно Studio для настройки передатчика на те-же параметры передачи, что и в предыдущих статьях (частота 903 мгц, модуляция 2-FSK, девиация 5.15 кгц, burst rate 1.2 kpbs) и мощность +10 dBm.

Параметры для загрузки в регистры передатчика показаны в правой части окна. Их можно экспортировать в разные форматы нажатием на кнопку Register export. В открывшемся окне сначала нажимаем на кнопку Select в правой части и в открывшемся маленьком окне выбираем все регистры, как показано ниже. Если при этом выбрать HTML формат в левой части окна Register Export, получим содержимое регистров вместе с их адресами в передатчике и комментариями.

Как я отмечал, CC1150 основан на чипе CC1101, и содержимое всех его регистров совместимо с таковыми для CC1101. Однако, у последнего регистров больше (46 против 29), и некоторые регистры CC1101 не имеют смысла для CC1150. Это приводит к тому, что не все регистры CC1150 находятся в последовательных адресах и их нельзя загрузить в течении одной SPI сессии, используя опцию автоинкремента адреса. Для загрузки единичного регистра необходимо сначала передать байт заголовка, содержащий адрес регистра с последующим значением регистра. Например, для загрузки регистра IOCFG1 (см. таблицу выше) в передатчик следует послать байты 0х01 0х2Е, где 0х01 – адрес регистра.

Однако, можно поступить и иначе, особенно если в качестве приёмника будет использован CC1101. Для этого сначала генерируем в Studio конфигурацию для CC1101 с теми-же параметрами передачи (частота и пр.), и заменяем в ней значения последних 3-х регистров TEST2, TEST1, TEST0 значениями, рекомендованными Studio для CC1150. Получим массив из 46 регистров, находящихся в последовательных адресах, который можно будет загрузить в CC1150 в течении одной SPI сессии, используя burst access. Для этого сначала загружаем в передатчик байт заголовка 0х40, и потом все 46 байт конфигурации. Содержимое регистров CC1101, расположенных по адресам, не задействованным в CC1150, будет проигнорировано последним и не повлияет на его работу. Таким образом, можно будет в программах приёмника и передатчика использовать практически одну и ту же конфигурацию.

Для завершения конфигурировании передатчика осталось выставить его выходную мощность. В случае +10 dBm следует послать байт 0хC4 по адресу 0x3E. Наконец, последний шаг – выбор режима передатчика между посылками пакетов. Минимальное токопотребление передатчика в 200 нА достигается в режиме SLEEP, однако при этом (в отличии от CC1101) вся память передатчика обесточивается и он, как и Si4012, забывает все свои установки. Следующим по токопотреблению (220 мкА) является режим XOFF, в котором сохраняется содержимое всех регистров, но кварцевый генератор выключен. Именно такой режим используеся в моей программе, что достигается посылкой в CC1150 байтов 0x3E, 0xC4, 0x32. Первые 2 из них устанавливают выходную мощность, а последний по завершении конфигурирования переводит чип в режим XOFF.

Режим XOFF является также начальным состоянием, в котором передатчик находится сразу после подачи питания. Выход из этого состояния в активный режим начинается по падению уровня напряжения на выводе CS. Однако, кварцевому генератору нужно некоторое время для активизации. Готовность генератора индицируется падением напряжения на выводе SO, до которого не следует посылать в чип никакие команды – его SPI интерфейс не готов и команды будут проигнорированы. Время раскрутки кварцевого генератора зависит от параметров кристалла и в моём случае составляет около 260 мксек. В программе я просто вставил задержку на 260 мксек каждый раз перед посылкой пакета.

Итак, мы разобрались с конфигурацией чипа, теперь самое время поговорить о структуре пакета. Напомню, что в предыдущих статьях пакет состоял из 6 байт. Первый байт – длина информационной части пакета (0х05), второй – порядковый номер пакета, а 4 оставшиеся – ASCII коды тестовой строки “ABCD”. Сейчас вместо номера пакета мы передадим значение температуры, измеренное сенсором TMP112A в нашей схеме. Структура пакета показана ниже.

Как следует из русунка, структура пакета CC1150 во многом аналогична таковой для Si4461. Пакет также начинается с битов преамбулы и 2-4 байтов синхрослова. После них следует байт длины пакета (для пакетов переменной длины) и адрес приёмника (по желанию для автоматической фильтрации пакетов приёмником; в нашем случае адрес не передаётся). Затем идут байты информационной части. Пакет завершается байтами контрольной суммы, автоматически вычисляемой с помощью полинома CRC16 и добавляемой к пакету, если это разрешено конфигурацией. В передатчике имеется FIFO объёмом 64 байт, куда следует загрузить передаваемый пакет, начиная с поля длины. Биты преамбулы и синхрослова автоматически добавляются к передаваемому пакету из регистров конфигурации. Для загрузки нашего пакета в FIFO следует послать в CC1150 последовательность байтов 0x7F 0x05 0x16 0x41 0x42 0x43 0x44. Здесь 0х7F – адрес FIFO и запрос на burst access, а 0х16 – значение температуры от датчика TMP112A.

Начало передачи пакета осуществляется подачей одно-байтовой команды STX (код 0х35). В нашей конфигурации после передачи синхрослова напряжение на выводе GDO0 поднимается от 0 до напряжения питания, а после передачи всего пакета (включая контрольную сумму, если разрешено) падает обратно до 0. Таким образом, окончание передачи пакета можно определить, разрешив прерывание МК по падающему уровню сигнала на выводе GDO0, а сам МК отправить в сон на всё время передачи пакета.

Прилагаемая программа после конфигурирования передатчика, как описано выше, входит в основной цикл с пробуждением каждую секунду от таймера. По пробуждении считывается значение температуры из сенсора, формируется пакет в RAM МК, куда включется измеренная температура. Затем пакет загружается в FIFO передатчика функцией Send_Package() из файла main.s. После загрузки пакета в CC1150 подаётся команда начала передачи STX. По окончании передачи передатчик вводится в режим XOFF до следующего пробуждения. Токопотребление схемы определяется потреблением передатчика в режиме XOFF и составляет около 220 мкА. Его можно сократить на 3 порядка, если после окончания передачи переводить чип в состояние SLEEP командой SPWD (код 0х39) и каждый раз после пробуждения передатчика заново загружать в него конфигурацию. Потребление остальной части схемы в паузах между передачами не превышает 2 мкА.

Тестовая схема была собрана на безпаячной макетке. МК и сенсор TМP112A смонтированы на индивидуальных маленьких платах (сенсор – на зелёной). В качестве антенны передатчика использовалась укороченная Whip-антенна ANT-916-JJB-ST фирмы Linx диаметром 7 мм и высотой активной части 9 мм. Как оказалось, с этой антенной обеспечивается практически такая-же дальность связи, как и со штыревой проволочной (см. подробности ниже). Приём производился на модуль на Si4461 из второй части статьи с отображением температуры на ЖКИ и без изменения программы МК.

Отмечу, что CC1150 стоит особняком среди бюджетных изделий первого класса из-за корпуса и особенностей режима сна. Остальные бюджетные аналоги CC1101 этого класса (приёмник CC113L, передатчик CC115L, и трансивер CC110L) выпускаются в корпусах QFN20 и совместимы друг с другом и CC1101 по выводам корпуса, конфигурации регистров, структуре пакетов и пр., но не поддерживают некоторые функции CC1101 (например, FEC – Forward Error Correction). В частности, все они сохраняют значения своих регистров в режиме сна с потреблением около 200 нА. Более того, для всех них подходит балун, использованный нами выше с CC1150. Работа с ними полностью аналогична таковой с CC1101, я о ней уже рассказывал в [3].

Передача пакетов модулем на CC1101

Схема модуля почень похожа на CC1150. В ней использован такой-же балун и кварцевый резонатор.

Модуль собран на плате размером 15×18 мм с фольгой на обратной стороне, используемой в качестве земли. В переходные отверстия (via) диаметром 0.3 мм вставлены отрезки провода, распаянные с обох сторон. Антенна также проволочная. Вывод подложки микросхемы необходимо соединить с землёй.

 

Для интерфейса с МК помимо линий SPI задействованы выводы GDO0 и GDO2. Первый из них, как и в CC1150, сконфигурирован для индикации окончания передачи пакета, а второй – для индикации готовности передатчика при выходе из сна. Вся схема потребляет около 2 мкА в промежутках между передачей пакетов.

Конфигурация CC1101 производится с помошью SmartRF Studio за несколько кликов. При запуске Studio выбираем CC1101 в окне, показанном ниже. Далее, во вновь открывшемся окне конфигурации устанавливаем параметры передачи, например, такие-же как и ранее для CC1150. Вычисленные Studio значения конфигурационных регистров (всего 46 значений) загружаем в передатчик по интерфейсу SPI. Так как значения расположены в регистрах с последовательным набором адресов, для загрузки можно использовать burst access, начиная с адреса 0. Именно, сначала засылаем в CC1101 байт 0х40 и следом за ним все 46 байтов конфигурации.

Данные в регистрах с адресами 0х00 и 0х02 служат для конфигурации функций выводов GDO2 и GDO0, соответственно. В нашем случае, вместо задержки на 260 мкс при пробуждении чипа можно ожидать установки 0 на выводе GDO2 в качестве сигнала готовности чипа. Вместо этого, можно также ожидать наличие 0 на выводе SO/GDO1 после установки CS в 0 каждый раз при активизации интерфейса SPI и до начала коммуникации (первого импульса на линии SCLK). При работающем в номинальном режиме кварцевом генераторе трансмиттера напряжение на выводе SO/GDO1 сразу падает до нуля при сбросе CS в 0. В противном случае оно сразу поднимается до напряжения питания. При задействовании вывода SO/GDO1 для ожидания готовности чипа, вывод GDO2 можно не использовать вообще.

После установки значений регистров конфигурации следует задать выходную мощность передатчика как описано выше для CC1150. Процессы передачи пакета для CC1101 и перевод его в различные состояния также полностью идентичны таковым для CC1150.

Для тестирования передатчиков CC1150 и CC1101 на дальность связи я устанавливал их на открытой веранде дома, и отходил с приёмником на модуле CC1101, подсоединённым через CC-debugger к SmartRF Studio, в ту-же точку на расстояние около 370 м от дома, как и в случае с Si4012 из первой части статьи. Уровень сигнала, показываемый Studio в точке приёма был в пределах -90 ... -95 dBm, приём пакетов был уверенным. В моей ранней статье [3] рассказано о готовых модулях на чипах из первого класса, производимых фирмой Anaren.

Приём пакетов модулем на CC1101

Для приёма пакетов в регистры CC1101 можно загрузить такую-же конфигурацию, что использовалась выше для передачи. После её загрузки приём начинается с посылки в CC1101 команды SRX (код 0x34). Далее, при данной конфигурации, следует ожидать падающего уровня сигнала на выводе GD00. Как только это произойдёт, то либо пакет принят и загружен в FIFO приёмника, либо произошла ошибка, которую можно определить по байту состояния чипа. В случае успешного приёма длина пакета (при передаче пакетов переменной длины – наш случай) доступна из регистра RXBYTES по адресу 0x3B. Для его чтения следует послать в CC1101 байт заголовка 0хFB и далее прочитать 1 байт длины.

После определения объёма информации, доступной в FIFO приёмника, для её чтения следует послать в в CC1101 байт заголовка 0хFF и принять через интерфейс SPI число байт, соответствующее длине пакета. В нашей конфигурации после приёма пакета CC1101 автоматически переходит в режим IDLE. Поэтому для приёма следующего пакета в него опять следует послать команду SRX.

В прилагаемой программе приём пакетов производится в основном цикле программы. В начале цикла в CC1101 посылается команда SRX и ожидается прерывание по падающему уровню на выводе GDO0. Как только это произойдёт, вызывается функция Read_Package, которая работает в соответствии с вышеизложенным. Содержимое принятого пакета можно посмотреть отладчиком в буфере SPIbuf в RAM МК.

Радиомодули на основе CC1125

К этому классу в нашей классификации относятся передатчик CC1175, трансивер CC1125, и его бюджетные варианты CC1120 и CC1121. Все микросхемы выпускаются в корпусах QFN32 и совместимы по выводам. Передающая часть микросхем обеспечивает мощность в нагрузке до +16 dBm (40 мВт), что почти в 4 раза выше, чем у CC1101. Трансиверы предназначены для работы в узкополосных системах цифровой связи с минимальным по частоте расстоянием между каналами от 6.25 кгц у CC1175 и CC1125, от 12.5 кгц у CC1120 и от 50 кгц у CC1121. Приёмные части трансиверов обладают рекордными показателями по избирательности и чувствительности. Максимальную чувствительность при малой скорости передачи (300 bps) обеспечивает наиболее дорогая модель трансивера CC1125 (-129 dBm при согласовании с 50 Ом антенной, что соответствует 0.08 мкВ) . С такими параметрами следует ожидать значительно большую дальность устойчивой связи. Фирмой Johanson Technology также выпускаются балуны для этих микросхем [5], которые, однако, отличаются от балунов для микросхем из первого класса. Балун и выходной фильтр передатчика можно собрать и на дискретных компонентах по схеме из ДШ.

В модуле применены детали типоразмера 0402 кроме C20 (0603). Кристал в корпусе размера 2.0×1.6 мм и нагрузочной ёмкостью 10 пФ. Фольга на обратной стороне платы (размер платы 19×17 мм) служит в качестве общего провода. Через проходные отверстия (via) земля на обратной стороне платы соединена с островками земли на верхней стороне. Для соединения подложки чипа с обратной стороной платы под ним просверлено отверстие и после распайки чипа на плату залито припоем. Поначалу я вывел вывод RESET передатчика на разъём, но впоследствии это оказалось необязательно и я установил подтягивающий резистор R2 (который необходим) на плату. Вывод GDO3 передатчика на разъём не выведен и в данном проекте не используется. В качестве антенны применена та-же Whip-антенна, что и раньше: модель ANT-916-JJB-ST фирмы Linx. Такая-же антенна установлена и на втором экземпляре модуля, который я собрал для проверки дальности связи.

 

Работа с модулями из второго класса во многом аналогична работе с CC1101. Однако, у них имеется больше регистров конфигурации. Адресное пространство регистров разбито на 2 части. К первой части относятся регистры с адресами 0х00 – 0х2Е, и доступ к ним производится также как и у CC1101. Ко второй части относятся регистры из расширенного адресного пространства. Для доступа к ним следует предварительно послать в чип байт заголовка 0х2F с выставленными битами операции (чтение/запись) и автоинкрементации адреса для burst access (по желанию). После этого байта следует адрес регистра в расширенном пространстве и далее значение регистра (при записи). SmartRF Studio делает конфигурацию регистров очень лёгкой и основанной на интуитивном графическом интерфейсе с пользователем. Единственное, на что следует обратить внимание – это какие регистры сохраняются в режиме сна.

В CC112x/CC1175 имеется несколько новых опций. Например, введена поддержка автоматической отправки пакета-подтверждения при успешном приёме пакетов (по желанию). Подтверждающий пакет должен быть предварительно записан в FIFO передатчика. Кроме того, введена поддержка повторной посылки пакета путём переустановки указателей на пакет в FIFO. Кстати, размер каждой FIFO у приёмной и передающей частей увеличен до 128 байт. Также улучшена система автопробуждений при приёме пакетов, имеется генератор случайных чисел, дополнительно рандомизируемый шумом приёмника, и т.д., и т.п. Однако, перечисленные опции очень полезны для реализации более сложных сетевых протоколов, и работа с ними выходит за рамки этой вводной статьи.

Для проверки работы модулей, каждый из них был подключён к SmartRF Studio через индивидуальный CC-debugger. Один работающий экземпляр Studio может поддерживать несколько CC-debugger-ов и позволяет независимо конфигурировать подсоединённые к ним модули. У модуля на верхней монтажке вывод RESET подтянут резистором к напряжению питания и не подсоединён к Studio. У нижнего модуля все его выводы честно подсоединены к Studio, согласно [6]. Неподсоединённый к Studio вывод RESET на функционирование модуля не влияет. Сначала модули были расположены в разных углах стола, чтобы убедиться в правильности их конфигурации для совместной работы. Один из модулей был сконфигурирован на приём, другой – на передачу. Зелёный светодиод у CC-debugger символизирует о распознавании модуля в Studio.

После отладки на столе модули были подключены к разным лаптопам и оба они вынесены на улицу. Дальность связи тестировалась при установке выходной мощности передатчика +15 dBm и остальными параметрами как и ранеее, и оказалась весьма значительной. Согласно Google Maps она в условиях показанных ниже получилась около 1.1 км. Значения RSSI в точке приёма, отмеченной красным маркером, согласно Studio, находилось в районе -121 dBm.

В заключении несколько слов о питании радиомодулей фирмы. Как следует из ДШ, их диапазон питающих напряжений соответствует таковому для большинства МК (1.8 – 3.6 В). Понижение питающего напряжения приводит в повышению потребляемого тока. Однако, из-за наличия внутреннего LDO в радио-микросхемах, также уменьшается рассеивание мощности на LDO. Поэтому в активном режиме рекомендуется питать модули как можно более низким напряжением. Экономия энергии при этом получается весьма ощутимой [7].

Часто напряжение питания устройства ограничено снизу другими компонентами в схеме. Например многие сенсоры требуют питающего напряжения не менее 2.1 – 2.4 В. Уменьшить напряжение питания, скажем, с 3.3 В до 2.1 В можно с помошью серии высокоэффективных DC-DC конвертеров TPS6273x (х = 0,2,3), специально разработанных для использования с приёмо-передающими устройствами (применение внешних линейных стабилизаторов никакого выигрыша по энергетике не даст).

Конвертеры работают на частоте до 3 мгц, поэтому размеры дросселя получаются очень маленькими. Я ставил многослойные дроссели типоразмера 0402 в передатчиках с потреблением до 40 мА. Помех приёму при их работе не наблюдалось. Конвертер не обязан работать постоянно. При заземлении управляющего входа с помощью МК конвертер выключается и напряжение батареи поступает на его выход без изменения. При этом собственное потребление конвертера снижается до 30 нА. Включать конвертер следует в основном лишь тогда, когда радиомодуль переводится в режим приёма или передачи.

Литература

1. О применении микроконтроллеров семейства Kinetis в микромощных устройствах.
2. GDO Pin Usage, DN506, Texas Instruments.
3. Радиоканал передачи данных на модулях A110LR09A.
4. Johanson Technology Matched Balun Filters, DN025, Texas Instruments.
5. CC112x IPC 868/915MHz 2 layer Reference Design, SWRR106, Texas Instruments.
6. CC Debugger. User’s Guide. SWRU197H, Texas Instruments.
7. Using a DC-DC Converter to Reduce Power (Current) Consumption In CC430 Systems, SLAA500, Texas Instruments.

Файлы:
Архив

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


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

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

www.radiokot.ru

Радиоканал передачи данных на модулях A110LR09A

РадиоКот >Схемы >Аналоговые схемы >Приемники и передатчики >

Радиоканал передачи данных на модулях A110LR09A

Радиомодуль и его параметры

Недавно мне понадобились радиомодули для передачи в здание с железобетонными стенами информации от сенсоров, находящихся снаружи. Эксперименты, проведенные с модулями RF2500 работающими в диапазоне 2.4 ггц в университетском кэмпусе повсеместно оснащенным WiFi раутерами, не увенчалась успехом. Передатчик при этом был установлен на улице на высоте человеческого роста, а приемник  находился примерно в 50 м от него в дальнем углу комнаты на 4-м этаже здания с окнами обращенными в сторону передатчика. Гораздо лучших результатов при этом удалось добиться на субгигагерцовых диапазонах 315 мгц, 430 мгц, 868 мгц, и 915 мгц.

На одном из Дней Технологии, организуемых компанией TexasInstruments (TI), я долго бродил среди киосков производителей радиочастотных модулей и общался с представителями их изготовителей. Особенно мне понравились модули фирмы Anaren. Модули эти собраны на основе микросхемы трансивера CC110L фирмы TI, который, как и его старший собрат CC1101, может работать во всех упомянутых выше субгигагерцовых диапазонах в зависимости от обвязки из пассивных компонентов. Модули на его основе уже содержат на плате все необходимые трансиверу компоненты (под металлическим экраном), включая разъем для внешней антенны, или печатную антенну. Из-за необходимости соблюдения норм FCC (FederalCommunicationsCommission), решено было остановиться на диапазоне 915 мгц. Габариты большего модуля с печатной антенной для этого диапазона всего около 9×16×2 мм.


На основе этих модулей фирма Anaren также производит отладочные платы AIR BoosterPack, предназначенные для установки в разъемы на отладочной плате MSP-EXP430G2 LaunchPad от TI. Для экспериментов был приобретен такой набор, включающий 2 платы с модулями A110LR09A, и еще отдельно 2 набора LaunchPad. Ниже показано как выглядит одна из пар плат LaunchPad+BoosterPack в сборе. Речь пойдет о собранной на них демонстрационной системе  передачи данных температуры от удаленного сенсора и отображения ее на экране компьютера. Если будет интерес к теме, как-нибудь в другой раз расскажу про применение радиомодулей A110LR09A в реальном устройстве.


Итак, что нужно от радиомодуля с автономным питанием, работающего в купе, скажем, с сенсором температуры, расположенным вне дома? Помимо обеспечения надежной связи, наверняка одним из важнейших факторов будет его энергопотребление. Однако, в режиме передачи с максимальной выходной мощностью +11 dBm радиомодуль потребляет около 34 мА, а в режиме приема порядка 15 мА. Понятно, что никакая разумная батарея в таких условиях долго не проработает. Выход один – минимизировать время активной работы передатчика и приемника и как можно дольше держать радиомодуль в режиме сна, при котором его токопотребление снижается до 200 нА. Как известно, для обеспечения надежного радиоканала, особенно в условиях помех, необходим протокол связи, включающий систему подтверждений с возможностью повторной передачи пакетов. Однако, разработка сетевых протоколов выходит за рамки настоящей статьи, и я расскажу здесь лишь об организации простейшего канала типа P2P (point-to-point) без посылки подтверждения приема пакетов. Во многих случаях (например, передача информации от одного сенсора на базовую станцию) такого канала может быть достаточно, и в этом случае достигается наименьшее токопотребление на стороне сенсора. В более сложных случаях трансивер CC110L поддерживается стеком сетевых Open Source протоколов SimpliciTI от TI, и еще Anaren предлагает свою адаптацию этого стека к модулям A110LR09A. После долгого копания в исходниках этих программ и разбора их работы с внутрисхемным отладчиком и МК я понял, что в моем простейшем случае связи будет гораздо проще написать все с нуля, что и было сделано.

Таким образом, для описываемой односторонней реализации канала P2P трансивер сенсора работает в течении очень короткого времени только на передачу данных постоянно работающей (только) в режиме приема базовой станции. Модуль A110LR09A поддерживает несколько способов модуляции и скоростей передачи вплоть то 500 kBps. Я остановился на скорости 100 kBps и модуляции 2-FSK (BFSK), так что передача информационного пакета из 8 байт занимает порядка 1.5 мсек (включая передачу преамбулы, байтов синхронизации, и CRC). В результате среднее токопотребление передатчика при периоде посылки пакетов 5 сек составляет около 10 мкА. В таких условиях становится реальным питание устройства с внешним сенсором от маломощных источников, включая солнечные батареи. При большем интервале времени между посылками среднее токопотребление соответственно уменьшается. Ниже приведена схема соединения плат радиомодуля и МК, входящего в состав набора LaunchPad.


Радиомодуль A110LR09A включает аппаратную реализацию уровней MAC+PHY с поддержкой приема/передачи пакетов. Для настройки модуля в его регистры следует загрузить 47 параметров. Хотя все они детально описаны в ДШ на CC110L, для упрощения и оптимизации настройки TI разработала свободно скачиваемую систему SmartRF Studio. Помимо этого, Anaren в ДШ на A110LR09A приводит таблицы о том какие из этих параметров конфигурации можно варьировать без нарушения норм радиосвязи, согласованными и одобренными организациями CE (Conformité Européenne для стран Европы) и FCC/IC (США/Канада). В прилагаемом исходнике связь осуществляется на канале 0 диапазона 915 мгц с частотой несущей 902.299 мгц. Для настройки и проверки приемно/передающего тракта использовался CC Debugger от TI, с помошью которого можно загрузить параметры конфигурации регистров в RF SoC выпускаемые фирмой и посылать в них команды через графический интерфейс на компьютере. При этом связь с трансивером производится по интерфейсу SPI. Вот как выглядит окно отладки приемной части трансивера в SmartStudio. Передатчик запрограммирован на посылку тестовых пакетов. Отрицательные числа в правом столбце нижнего окна  – это уровень RSSI в точке приема в dBm.


Излучение передатчика контролировалось анализатором спектра MSP-SA430-SUB1GHZ, также от TI. Ниже показана осциллограмма при посылке передатчиком преамбулы (101010...) и модуляции 2-FSK при расстоянии около 1м между приемником и передатчиком. Отчетливо видны 2 «горба» на частотах передачи нулей и единиц (вертикальная полоса маркера примерно в центре между ними соответствует частоте несущей) и можно убедиться, что ширина спектра излучаемых частот при используемой конфигурации удовлетворяет нормам FCC.



Передача пакетов

Как отмечалось выше, радиомодуль A110LR09A аппаратно поддерживает пакетную обработку информации. Структура пакета, заимствованная из ДШ на CC110L, показана ниже. Он начинается с двух областей, формируемых передатчиком автоматически - преамбула и слово синхронизации. Не вдаваясь в подробности, отмечу лишь, что слово синхронизации можно изменить в конфигурации и таким образом автоматически (аппаратно) различать передающие стороны. Хотя, конечно, никто не мешает передавать адрес отправителя в области данных пакета. Следом за этими полями в пакете идет длина информационной части. Она по идее не должна превосходить размера FIFO передатчика (64 байт). Сразу за длиной имеется опция поместить адрес приемника. Этот адрес сравнивается с соответствующим байтом конфигурации и при несоответствии имеется возможность автоматического удаления пакета из FIFO приемника (при отключении этой опции адрес приемника можно не передавать). После информационной части передатчик автоматически вставляет 2 байта контрольной суммы (CRC) передаваемого пакета. Эту опцию также можно отключить программно. При несоответствии контрольных сумм также имеется возможность автоматического удаления пакета из FIFO. Я сдесь бегло отметил лишь небольшое число опций настроек. Для получения более точной информации читателю рекомедуется найти время на освоение ДШ.


Как видно из принципиальной схемы, помимо линий питания и связи с МК через интерфейс SPI, модули имеют выводы GDO2 и GDO0. В программе эти выводы сконфигурированы, соответственно, на генерацию прерываний, сигнализирующих о готовности модуля принимать команды, и о завершении передачи слова синхронизации или всего пакета. Большую часть времени модуль проводит в состоянии сна, из которого он переводится в активное состояние падающим урoвнем на выводе CS. Вообще, внутренний конечный автомат, управляющий работой модуля, имеет 22 состояния (см. ДШ). Упрощенно, (поэтому местами не совсем верно, но достаточно близко к истине) передача пакета происходит так. После пробуждения модуль активизирует кварцевый генератор и систему PLL генерации несущей (и других) частот. Этот процесс занимает около 150 мксек, после окончания которого на выводе GDO2 появляется низкий логический уровень и модуль переходит в состояние IDLE. Только после этого интерфейс SPI готов к работе и модуль можно командами перевести в состояние передачи, приема или калибровки, или загружать в FIFO данные для передачи. В нашей программе производится именно последнее, а калибровка модуля осуществляется автоматически перед передачей каждого пакета, на что тратится около 750 мксек. После отсылки преамбулы и слова синхронизации модуль выставляет сигнал высокого уровня на выводе GDO0, в результате чего генерируется прерывание МК и программа переходит на ожидание низкого уровня на том-же выводе, что произойдет по завершении посылки всего пакета. После этого модуль (опять-же благодаря надлежащей конфигурации) автоматически переходит в режим IDLE и оттуда командой SPWD в режим сна с ультра-низким токопотреблением.

Длина информационной части пакета в нашей демо-программе равна 8 байт, включая байт спецификации длины. После длины идет байт с адресом приемника (установлен как 0х11 с включенной в приемнике опцией удаления пакета из FIFO при несовпадении) и байт идентификатора передатчика 0хАА - может быть любым, в настоящей версии программы этот адрес пока не используется. Задействовать его планируестя в будующем при установке нескольких сенсоров с передатчиками, обслуживаемыми той-же приемной станцией. Следом за ID идет байт с порядковым номером пакета. Он в программе пока используется только для контроля функционирования канала (см ниже), и зарезервирован для реализации протокола отсылки подтверждений (при необходимости). Последние 4 байта собственно информационные. Первые 2 из них – показания встроенного в МК датчика температуры, а послединие 2 зарезервированы для передачи данных от (пока не установленного) сенсора влажности. Как видно, при передаче для простоты не используется режим LBT (Listen Before Talk), характерный для многих сетевых протоколов, хотя модуль предоставляет аппаратную поддержку для такого режима.

Таким образом, структура программы такова: после инициализации портов МК производится установка его тактовой частоты 8 мгц, настройка модуля eUSCI_B0 для SPI с тактовой частотой 4 мгц, настройка АЦП для обслуживания встроенного датчика температуры, и таймера А0 на генерацию прерывания каждые 5 секунд. После этого в регистры радиомодуля засылаются 47 байт конфигурации и производится установка выходной мощности передатчика. Таймер A0 работает от встроенного низкочастотного генератора (VLO, около 12 кгц), который работоспособен в режиме LPM3 сна МК. При этом токопотребление МК и всей системы не превосходит 0.6 мкА.  Токопотребление замерялось на контактах VCC джампера J3 на плате LaunchPad (для измерения джампер, конечно, следует  временно удалить). Переполнение таймера вызывает пробуждение МК, измерение температуры, формирования пакета передачи и загрузки его в радиомодуль с последующей передачей в эфир. МК при этом насколько это возможно долго содержится в режиме малого токо-потребления LPM0 или LPM3.

Программа (файл sensor.s43) написана на языке ассемблера и предназначена для компиляции в системе IAR Embedded Workbench, Kickstart edition. Проект загружается в IDE путем открытия файла sensor.eww. Для надежной работы устройства собранного на плате LaunchPad следует разомкнуть оба джампера J5 (показаны в зеленом кружке на фото ниже. Эти джамперы подключают светодиоды на те-же пины, что используются для коммуникации с радиомодулем. Положение джамперов J3 в верхнем кружке для передатчика не важно.



Прием пакетов и связь с компьютером

Отладочная плата LaunchPad оснащена преобразователем USB-UART и при ее подключении к компьютеру создается виртуальный COM порт. Имеется возможность подключить линии RХ и TX порта к МК, используя либо аппаратный, либо программный драйвер UART. Мы используем аппаратный UART драйвер МК, поэтому на плате приемника следует установить джамперы J3, показанные в верхнем зеленом кружке на фото выше, в положение HW UART. Также, как и на плате передатчика, следует разомкнуть оба джампера J5 (нижний зеленый кружок) по тем-же причинам.

Далее, если Вы используете Windows7, то Вам нужно будет установить программу работы с терминалом, в качестве которой я рекомендую использовать Parallax Serial Terminal. Она находится в свободном доступе на сайте parallax.com и мне лично нравится больше всех. Скриншот ее работы представлен внизу. В ее настройках следует выбрать опцию “Wrap text to Pane”. Вместо этой программы можно использовать, например, Putty. В этом случае в категории Terminal ее настроек следует поставить галку на “Implicit LF in every CR”. Обе эти программы состоят из одного файла и не требуют инсталляции. Для подключения их к плате LaunchPad следует задать номер витруального COM порта, который Windows открыла для работы с платой. Этот номер можно определить в окне диспетчера устройств Windows. Помимо этого, программу следует настроить на скорость 9600 Bps с опциями 8N1 (8-битные посылки с одним стоповым битом без контроля четности).

После загрузки в МК программы из прилагаемого проекта hub и запуске программы в отладчике IAR, можно открыть Parallax Serial Terminal. Любопытно, что и отладчик и терминальная программа могут быть подключены к плате LaunchPad одновременно (через один и тот-же USB кабель). При работающем передатчике на другой плате LaunchPad каждые 5 сек в терминальном окне появится новая строчка, как показано ниже.


Первый столбец – это ID сенсора (0хАА в нашем проекте), второй – шеснадцатиричный номер принятого пакета (1 байт, номер пакета берется из принятых данных), третий – статус CRC принятого пакета, четвертый – температура в месте установки передатчика, и последний – RSSI сигнала в месте приема. Отмечу, что встроенный сенсор температуры в МК имеет существенный разброс параметров и требует калибровки как оффсета, так и наклона передаточной характеристики. Калибровка этого сенсора может быть легко произведена в двух точках и в данной статье не рассматривается.

Прилагаемая программа hub.s43, как и программа передатчика, написана на языке ассемблера и предназначена для компиляции в среде IAR Embedded Workbench. Она начинается с конфигурации портов ввода/вывода, установки частоты тактового генератора 8 мгц, конфигурации модуля eUSCI_B0 в МК для работы с SPI и модуля eUSCI_A0 в приемнике для работы с UART, и засылки 47 байтов конфигурации в регистры радиомодуля. После этого она переходит в бесконечный цикл. На каждой итерации этого цикла производится прием пакета с последующим выводом новой строки в терминальное окно.

Прием пакета в программе производится функцией Receive_Packet(). Она начинается с перевода радиомодуля в режим приема командой SRX (см. ДШ). После этого ожидается прерывание от пина GDO0. Нарастающий уровень сигнала на этом выводе появляется после приема байтов преамбулы, а последующий падающий уровень сигнализирует об окончании приема пакета. Радиомодуль при этом (благодаря конфигурации регистров) автоматически переходит в состояние IDLE. Здесь есть одна тонкость. Именно, описанное поведение пина GDO0 в режиме приема будет таким-же и при автоматическом сбросе пакета если его длина превышает установленную в регистре конфигурации (в данном случае 61). В этом случае FIFO будет пустой и из нее не следует ничего читать. Поэтому перед чтением FIFO программа проверяет содержимое регистра RXBYTES, содержащего число байт в буфере FIFO. Только если это число ненулевое, программа копирует содержимое пакета из FIFO в буфер RAM с последующей выдачей новой строки в окно терминала.

В условиях описанных в начале статьи с этой программой и примененными модулями удалось установить передачу данных на расстоянии около 100 м.

Файлы:
Тексты программ

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


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

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

www.radiokot.ru

Радиомодули для беспроводной передачи данных. Часть 1.

РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Радиомодули для беспроводной передачи данных. Часть 1.

Эта статья первая из планируемой серии статей, посвящённых изготовлению и использованию радиомодулей для субгигагерцового диапазона, основанных на микросхемах приёмников/передатчиков фирм Silicon Laboratories и Texas Instruments. Описанные конструкции работают в диапазоне 915 мгц, но при соответствующей замене пассивных компонентов и коррекции кода управляющего МК эти модули можно будет использовать и в диапазонах 315/430/860 мгц.

Начнём с самой, пожалуй, простой микросхемы передатчика Si4012 фирмы Silicon Labs с розничной ценой в 1 USD. Микросхема выпускается в корпусе с всего 10 выводами и развивает мощность на выходе до +11 dBm (12.5 mW) при модуляции OOK или 2-FSK и скорости передачи до 100 kbaud. Одной из особенностей микросхемы является возможность работы без кварцевого кристалла. Патентованная технология фирмы обеспечивает достаточную для некоторых приложений точность установки и стабильность частоты в широком диапазоне температур. Но мы не будем экономить на широкораспространённом кристалле на 10 мгц и включим его в схему. Иллюстрации в статье увеличиваются щелчком мышкой.

РЧ тракт микросхемы имеет дифференциальный выход с ОК, нагрузкой которого является дроссель L5. Дроссели L3,L4 служат для распределения питания на дифференциальные выходы, а компоненты C1-C5,L1,L2 образуют антенный фильтр и балун (balun) для согласования высокого выходного импеданса микросхемы с асимметричной 50-омной нагрузкой. Номиналы конденсаторов C1-C7 в пикофарадах, а дросселей L1-L5 в наногенри. Взяты они из [1], где также приведены номиналы для других диапазонов частот. Дроссель L6 – ферритовая бусина. При острой необходимости его можно исключить из схемы. В качестве антенны я использовал кусок одножильного медного провода диаметром 0.5 мм и длиной в четверть волны (около 82 мм). Не утверждая, что показанный на схеме балун обеспечивает идеальное согласование с такой антенной, результаты на практике получились вполне удовлетворительные, см. ниже

Выводы на правой по схеме стороне микросхемы предназначены для связи с МК. К выводу 6 можно подключить LED (по желанию) для индикации работы передатчика. Отмечу, что LED не требует токоограничительного резистора, т.к. в микросхеме имеется встроенный перестраеваемый генератор тока. Конфигурация передатчика и загрузка в него данных для передачи производится по SMBus интерфейсу. Этот интерфейс совместим с I2C за исключением некоторых нюансов, которые в нашем случае несущественны. Подробнее о сравнении этих интерфейсов можно прочитать, например, в [2]. Вывод 7 передатчика может быть сконфигурирован на запрос различных прерываний для МК. Наконец, вывод 8 служит для перевода микросхемы в спящий режим с низким токотреблением. Достигается это путем подтяжки вывода к напряжению питания. Перевод также можно осуществить командами по шине SMBus при условии, что вывод 8 соединён с общим проводом. О рациональности такого решения см. ниже.

Модуль собран на плате размером 24×14 мм и толщиной 0.8 мм. Фольга на обратной стороне платы используется в качестве общего провода. Зелёными кружками на эскизе платы показаны переходные отверстия (via) диаметром 0.3 мм с нижнего слоя земли на верхний. В них вставлены отрезки медного провода, распаянные с обеих сторон платы. На верхней стороне платы имеется одна проволочная перемычка. С обратной стороны платы выходит коннектор (header) с шагом 2.54 мм. Файл платы для системы Eagle прилагается.

 

Все пассивные компоненты типоразмера 0402. Применять детали типоразмера 0603 и выше в РЧ трактах таких устройств фирмы не рекомендуют из-за большей индуктивности их выводов по сравнению с 0402. Я, правда, не проверял на практике насколько это существенно. Красный LED в корпусе 0603, размеры корпуса кварцевого кристалла 3.2×2.5 мм, его нагрузочная ёмкость 12 пФ. Микросхема сконфигурирована на формирование входной ёмкости 3 пФ на выводе 1, что в сочетании с C6 обеспечивает номинальную нагрузку кристаллу.

В качестве управляющего МК я использовал модель семейства Tiny Gecko с архитектурой ARM Cortex-M3 фирмы Energy Micro, которая уже около года входит в состав Silicon Labs. Далее я подробно опишу работу с передатчиком, так что вы сможете применить его со своим любимым МК. Схема включения моего МК особенностей не имеет и пояснений не требует. Разъём в правой части схемы служит для программирования МК и внутрисхемной отладки.

Для облегчения настройки модуля фирма предлагает в свободном доступе 2 программных продукта. Первый – это Wireless Development Suite (WDS). Её можно использовать с демонстрационными платами фирмы, или просто отдельно просимулировать работу разных радио-чипов. В последнем случае система генерирует код на языке С для использования чипа в установленном режиме и может открыть созданный на лету проект для МК серии С8051 фирмы в Silicon Labs IDE. Вот так выглядит окно контроля передатчика Si4012 в WDS:

Второй продукт – это спредшит (spreadsheet) специально для Si4012, где можно установить требуемые параметры передатчика и получить значения для загрузки в его регистры. Работа со спредшитом описана в [3]. Наконец, имеется документ [4] с описанием тестовых программ под разные ситуации.

Для настройки Si4012 я использовал упомянутый спредшит, показанный ниже. В левой колонке “User Input” при работе на штыревую антенну следует заполнить только 2 средние таблицы. В первую из них заносим желаемую выходную мощность (11 dBm) и рабочую частоту (у меня 903 мгц). Номиналы обоих конденсаторов следует установить в 0. Они предназначены для настройки чипа при работе с печатной рамочной антенной. Во второй таблице выбираем вид модуляции (в статье рассматривается только FSK), bit rate, и девиацию частоты.

Чем больше bit rate, тем скорее передастся сообщение и тем меньше будет работать передатчик, что хорошо для снижения токопотребления. С другой стороны, при больших скоростях передачи следует расширять полосу пропускания приёмника, из-за чего падает его чувствительность и избирательность, так что нужен компромисс. Для передачи небольшого объёма информации достаточно bit rate в 1.2 kbaud.

С девиацией дело обстоит несколько сложнее. Она тоже зависит от bit rate и её следует увеличивать с ростом последнего. Выбор девиации также сильно зависит от приёмника. Обратите внимание, что несмотря на установку девиации 11.1 кгц, фактическое её значение, показанное в колонке “Calculated Results” оказалось 12.29 кгц. Отличие произошло из-за дискретности установки частот синтезатора передатчика. Следующее по убыванию возможное значение девиации 9.89 кгц (при рабочей частоте 903 мгц), т.е. дискрет изменения девиации 2.4 кгц и зависит от частоты. Для экспериментов в качестве приёмника я использовал CC1101 фирмы Texas Instruments (о нём подробнее пойдет речь в другой раз, а пока см. [6]), у которого, также из-за дискретности синтезатора, возможные значения девиации 9.52, 10.31, 11.1, 11.9, 12.7 кгц, и т.д. После подбора фактических значений частоты и девиации, данные из третьей колонки спредшита, показанные на зелёном фоне, следует загрузить в Si4012.

Команды управления Si4012, как и у других радио-чипов фирмы, разделены на 2 класса: собственно команды, и настройки (properties). Первые предназначены для оперативного контроля чипа, например включить или выключить LED, начать передачу, изменить состояние, прочитать флаги прерываний. Всего имеется 13 комманд, см. детали в ДШ. Настройки служат для установки параметров передачи, например рабочей частоты, частоты кристалла, выходной мощности, интенсивности LED.

Посылка команды в Si4012 по интерфейсу SMBus начинается с засылки адреса чипа (0хЕ0), после чего следует код команды и некоторое число параметров, описанных в ДШ. После засылки команды следует считать байт статуса, содержащий готовность чипа к принятию новой команды и код ошибки, если такая произошла. Ряд команд, например чтение product/revision ID предполагают приём нескольких байтов данных после байта статуса. Некоторые команды (например, начать передачу), исполняются асинхронно и бит готовности в статусе лишь показывает готовность чипа к приёму новой команды (например, прекратить передачу), но не означает завершение исполнения предыдущей. Интерфейс SMBus поддерживает тактирование на частотах 100 или 400 кгц, но чип иногда автоматически тормозит МК, не допуская перегруз себя данными. Торможение (clock stretching) осуществляется путём притягивания чипом на короткое время линии SCL к земле. Это следует учитывать в программе МК, особенно если используется программный драйвер SMBus/I2C. В этом случае перед формированием каждого импульса на линии SCL следует проверять её состояние. Аппаратные модули I2C многих современных МК предполагают возможность торможения ведомым устройством и автоматически адаптируются без участия пользователя. Вот, к примеру, как выглядит осциллограмма разрешения прерывания по окончании передачи пакета и установки интенсивности LED. Нерегулярность на линии SCL – результат торможения МК передатчиком.

На этом-же примере показан протокол обмена данными. Так, для разрешения прерывания в Si4012 сначала засылается его SMBus адрес 0xE0, затем код команды 0х63 с последующей маской прерывания 0х08, предназначенной для индикации завершения передачи пакета. По окончании этой посылки следует сформировать сигнал STOP и далее запросить чтение из чипа байтом 0хЕ1. Принятый байт статуса 0х80 символизирует об отсутствии ошибок и готовности Si4012 к приёму следующей команды. Важно подчеркнуть, что для перехода от записи данных к чтению статуса необходимо сформировать сигнал STOP (красный квадратик). Без него последующий сигнал START (зелёный кружок) не воспринимается Si4012 как повторный START при переходе от записи к чтению.

Пример выше также иллюстрирует установку (property) интенсивности LED. Для этого в Si4012 после его адреса 0хЕ0 посылается команда установки property 0х11 с последующим кодом property (в этом случае также 0х11) и его значением 0х03 – максимальная интенсивность LED, см. ДШ. Последние 2 байта – чтение статуса – такие-же как и после отправки команды.

После того, как мы разобрались с интерфейсом передатчика, можно приступить к разработке тестового приложения. Итак, мы хотим с интервалом в одну секунду передавать пакет, скажем, из 5 байт, где первый байт – номер пакета, а остальные 4 пусть пока будут фиксированными и соответствуют строке “ABCD”. Цель приложения – принять пакет на стороне приёмника (чип CC1101) и оценить дальность связи. Раз в игру вступает приёмник, поговорим сначала немного о нём. Прежде всего, почему СС1101? Объясняется это простотой общения с приёмником с помощью CC-debugger и продвинутои системы SmartRF Studio от Texas Instruments. При этом ничего и программировать не надо. Модуль приёмника, подключенный через CC-debugger к компьютеру, показан ниже. В качестве антенны у приёмника также использован отрезок провода длиной 82 мм. Подробнее обо всём этом хозяйстве в другой раз, сейчас-же необходимо понять в каком формате следует посылать данные приёмнику.

В приёмнике на чипе СС1101, помимо всего прочего, реализована автоматическая обработка пакетов с распознаванием битов преамбулы и синхрослова, проверкой длины сообщения, и автоматической проверкой CRC (Cyclic Redundancy Check) пакета. Само собой, всё это следует добавить на стороне передатчика к передаваемым данным. Многие передатчики (в частности и от Silicon Labs, о которых речь пойдет в следующий раз) автоматически дополняют пакет преамбулой, синхрословом, CRC и пр. на аппаратном уровне. Нам-же, с Si4012, предстоит это сделать самим программно. Следуя требуемой структуре пакета для СС1101, мы должны передать в него следующую последовательность байтов (шестнадцатиричные числа):

0хАА 0хАА 0хАА 0хАA 0хD3 0х91 0хD3 0х91 0х05 XX 0х41 0х42 0х43 0х44 YY ZZ

Первые 4 байта пакета – это преамбула, т.е. чередующаяся последовательность нулей и единиц 10101010... для синхронизации во времени выборок битов приёмником с их посылкой передатчиком. Следующие 4 байта – две копии синхрослова D3 91, позволяющего приёмнику отделить биты преамбулы от информационной части пакета (можно ограничиться и одним синхрословом). Синхрослово может быть практически любым, но известным приёмнику до посылки пакета. Мы его изменять не будем. Байт 05 в данном случае это длина информационной части пакета, в которой байт ХХ – номер пакета. Следующие 4 байта (41 42 43 44) – ASCII коды символов строки “ABCD”.

Пакет завершают два байта контрольной суммы CRC (YY и ZZ, где YY – старший байт), соответствующие информационной части пакета, начиная с байта его длины 05 и кончая последним байтом 44. Вообще, CRC можно и не передавать, отменив в приёмнике её проверку, но давайте всё сделаем как следует. В СС1101 аппаратно реализована проверка CRC на основе широко используемого полинома CRC16 (x16 + x15 + x2 + 1). Этот полином также используется и в других приёмниках/передатчиках фирм Silicon Labs и TI. Вдаваться в подробности вычисления CRC выходит за рамки настоящей статьи, за деталями можно обратиться к [5]. В прилагаемой программе формирование пакета и вычисление CRC производится функциями Compose_Package() и Compute_CRC16() в файле main.s.

Разобравшись с тем, что следует передавать, чтобы нас поняли на приёмном конце, мы вплотную подошли к программированию алгоритма приложения. Основная программа (метка start в файле main.s) начинается с конфигурирования периферии МК (тактовый генератор, GPIO, модуль I2C, и таймер). Затем программа входит в бесконечный цикл с периодическим пробуждением с интервалом в 1 сек. от таймера. На каждой итерации цикла вызывается продпрограмма Send_Package() для формирования и отсылки пакета. По-окончании посылки Si4012 переводится в режим сна shutdown с низким токопотреблением, а МК – в режим сна deep sleep. Пока всё просто.

Насколько низко токопотребление передатчика в режиме сна? Согласно ДШ, оно должно быть около 10 нА, но мне никак не удавалось опуститься ниже 56 мкА. Оказалось, что вывод 8 у Si4012 оснащён внутренним подтягивающим резистором сопротивлением около 120К. При заземлении этого вывода для активизации передатчика ток через подтягивающий резистор и определяет минимальное потребление. Как я отмечал выше, выключать чип можно либо по шине SMBus, либо манипулируя напряжением на выводе 8 (в следующий раз я-бы так и сделал). В первом случае сэкономим на одной линии интерфейса с МК, но получим высокое потребление в режиме сна. В любом случае, в активном режиме к токопотреблению добавится ток через резистор подтяжки. Однако, при потреблении около 22 мА в режиме передачи с выходной мощностью +11 dBm эта добавка незначительна. Попутно отмечу, что при тактировании Si4012 от кварцевого кристалла, его генератор потребляет примерно на 1.5 мА больше, чем без него. Переводить чип в режим сна между посылками не обязательно. Если этого не делать, время выхода Si4012 на рабочий режим существенно сокращается, но за счет ощутимо большего токопотребления в режиме покоя (начиная от 620 мкА в зависимости от состояния).

Итак, перед посылкой пакета Si4012 следует пробудить. Для этого мы посылаем по шине SMBus 1 байт с адресом чипа 0хЕ0. В режиме глубокого сна интерфейс SMBus передатчика обесточен, и чип не подтверждает битом ACK прием этого байта. На пробуждение из сна чипу требуется около 14 мс (установлено экспериментально, для другого экземпляра чипа это время может быть несколько иным). Вместо ожидания можно повторять посылку байта адреса чипа 0хЕ0 до тех пор пока он не ответит сигналом ACK. На осциллограмме ниже чип не подтверждает первый байт при пробуждении, но спустя некоторое время (14 мс в моем случае) подтверждает следующий.

Первая посылка с битом NAK увеличенно выглядит так:

... а вторая – так:

Как видно по второй посылке, чип ответил сигналом ACK на свой адрес и начал тормозить линию SCL (clock stretching). Кстати, вторая посылка после ожидания 14 мс не обязательно должна быть пробуждающей – вместо неё в Si4012 можно загрузить и что-нибудь полезное.

Разобравшись с пробуждением передатчика из глубокого сна, нас ожидает следующая «засада»: оказывается, Si4012 в режиме сна (и только в нём) забывает все свои настройки на частоту и пр. Объясняется это тем, что в целях снижения токопотребления большинство блоков чипа обесточивается. Это относится и к его области RAM, хранящую настройки. Поэтому, первым делом при пробуждении мы должны заново задать все его параметры. Реализуется это подпрограммой Si4012_setup(), которая загружает в передатчик следующие последовательности байтов:

• Частота кристалла и его нагрузочная ёмкость (у меня менее 14 пФ): 0xE0, 0x11, 0x50, 0x00, 0x98, 0x96, 0x80, 0x01.
• Вид модуляции FSK и девиация ±12 кгц: 0xE0, 0x11, 0x20, 0x01, 0x05.
• Bit rate (1.2 kbaud): 0xE0, 0x11, 0x31, 0x00, 0x0C, 0x04.
• Рабочая частота + девиация (903.012 мгц): 0xE0, 0x06, 0x11, 0x40, 0x35, 0xD2, 0xDE, 0xA0.
• Выходная мощность (+11 dBm): 0xE0, 0x08, 0x11, 0x60, 0x01, 0x4D, 0x00, 0x00, 0x7D, 0xCC.
• Разрешeние прерывания по окончании передачи пакета: 0xE0, 0х83, 0х08.
• Установка высокой интенсивности LED: 0xE0, 0х11, 0х11, 0х03.

Завершение конфигурации передатчика сигнализируется включением LED: 0xE0, 0x13, 0x01. При подготовке к передаче из других режимов заново засылать в чип всю конфигурацию не требуется. Теперь мы, наконец-то, готовы собственно к передаче информации. Для этого сначала в RAM МК следует сформировать пакет как рассказано выше, и загрузить его в FIFO передатчика: 0xE0, 0х11, 0х66 и далее все байты пакета. Объём FIFO 256 байт, что более чем достаточно для наших целей. Перед загрузкой пакета в FIFO её следует очистить от возможного мусора: 0xE0, 0х65.

Итак, передаваемый пакет загружен в FIFO передатчика, но ещё не передан. Мы узнаем об окончании передачи падением уровня сигнала на выводе IRQ, который следует сначала вывести на высокий уровень, прочитав флаги прерывания передатчика. Это производится подачей команды чтения флагов 0хЕ0, 0х64, 0хЕ1, XX, YY. Последние 2 байта передаются Si4012 в MK, где XX – как всегда байт статуса, а YY – байт флагов прерывания. После прочтения этого байта все флаги в передатчике сбрасываются и уровень напряжения на выводе IRQ устанавливается в лог. 1. Вместо ожидания прерывания можно просто периодически считывать флаги прерывания до установки желаемого. Передача пакета начинается подачей соответствующей команды: 0хЕ0, 0х62, 0х00, 0х10, 0х00, 0х00, 0х00. Здесь 0х10 – длина пакета, а следующие 2 байта из нулей говорят передатчику оставаться в активном режиме, чтобы иметь возможность подать следующие команды. В нашем случае это команды гашения LED (0хЕ0, 0х13, 0х00), сброса флагов прерываний (0хЕ0, 0х64, 0хЕ1, XX, YY), и отправки чипа в сон (0х60, 0х01, 0х00). После отправки последней команды не следует читать из чипа статус – он уже спит и не ответит. Можно и автоматически отправить Si4012 в глубокий сон по окончании передачи пакета. Для этого передачу следует инициировать последовательностью 0хЕ0, 0х62, 0х00, 0х10, 0х01, 0х00, 0х00. Здесь третий с конца байт (0х01) определяет состояние чипа после отправки пакета. В этом случае и LED сам погаснет, т.к. во сне генератор тока LED отключен, а при пробуждении передатчик всё-равно забывает все свои настройки и заменяет их дефолтными, в которых драйвер LED деактивирован. При автоматической отправке в сон не следует разрешать прерывания, т.к. иначе получим лишнее потребление через подтягивающий резистор на выводе IRQ. Это упрощает коммуникацию и благоприятно сказывается на токопотреблении всей схемы. МК тоже можно усыпить, не дожидаясь завершения отправки пакета.

Я отметил здесь не весь функционал заложенный в Si4012. Без внимания остались состояния его внутреннего автомата FSM, возможность периодической проверки напряжения питания встроенным АЦП, автоматическое начало передачи при определенном уровне заполнения FIFO, упомянут лишь 1 из 8 флагов прерывания. Совсем не обсуждались режим модуляции OOK, безпакетная передача данных, и работа на рамочную антенну, и пр. Однако, мы получили представление о возможностях Si4012, остальное приложится в рабочем порядке.

А сейчас самое время со знанием дела дописать тестовую программу и опробовать её. Прилагаемые исходники и файл проекта предназначены для системы Keil µViSion, версия 5.11. После запуска программы LED на плате передатчика должен мигать с периодом 1 гц. На приёмном конце SmartRF Studio показывает периодическое наличие сигнала на установленной в приёмнике рабочей частоте. Приёмник и передатчик при этом находятся у меня в разных углах стола на расстоянии около 1.5 м друг от друга.

А вот так выглядит окно приёма пакетов в Studio. Показаны все 5 информационных байтов пакета. Напомню, что первый из них – это 8-битный номер пакета. Отрицательное число после вертикальной черты справа – это уровень RSSI в точке приёма. Все пакеты прошли тест на совпадение контрольной суммы, иначе в окне Studio была-бы указана ошибка CRC.

Спектр излучения передатчика при передаче пакетов оценивался с помощью анализатора SA430. Красная кривая в его окне соответствует излучению в данный момент сканирования, а зелёная показывает максимум излучения на соответствующей частоте за время наблюдения. В этом эксперименте анализатор регистрирует сигнал принятый на его Whip-антенну. К сожалению, анализатор работает только на частотах до 1 ггц, так что с ним я не могу оценить спектр гармоник излучаемого сигнала.

Ниже показан тот-же сигнал при большем разрешении. Удалось поймать момент передачи 0.

В заключении, пожалуй, о самом главном – тесте на дальность связи. Для этого приёмник с управляющим МК на макетке, показанной ниже (LCD в этом проекте не используется), был установлен на открытой веранде дома на высоте около 3 м над землей. Плата в правой части на макетке содержит стабилизатор на 3.3 В, разъем и выключатель питания.

Приём вёлся на модуль на основе СС1101, показанный выше. Приёмник был подключен к лаптопу через CC-debugger и его плата находилась на клавиатуре лаптопа. С лаптопом в руках я отошёл от дома на 372 м, согласно Google Maps. В точке приёма, отмеченной на карте красным маркером, уровень RSSI, показанный SmartRF Studio, находился в пределах -95... -100 dBm. Приём пакетов был уверенным (чувствительность приёмника при bit rate в 1.2 kbaud около -112 dBm). Прямой видимости между приёмником и передатчиком не было. Как видно из карты, они разделены несколькими домами и деревьями.

Напомню, что из-за дискретности синтезаторов частот в приёмнике и передатчике, девиация частот при модуляции FSK у них несколько отличалась (соответственно 11.9 и 12.29 кгц). Лучших результатов удалось добиться понизив девиацию до 5.15 и 5.25 кгц, соответственно, и, таким образом, уменьшив различие между ними. С такими установками и антеннами можно рассчитывать на дальность уверенной связи порядка 450-500 м.

В следующей части статьи будет рассказано о радиомодуле на основе более продвинутого (и сложного) трансмиттера Si4461 фирмы Silicon Labs.

Литература

1. Si4012 Antenna Interface and Matching Network Guide, AN727, Silicon Labs.
2. Comparing the I²C Bus to the SMBus. AN476, Maxim Integrated.
3. Si4012 Calculator Spreadsheet Usage, AN564, Silicon Labs.
4. Si4012 Programming Guide, AN746, Silicon Labs.
5. CRC Implementation, DN502, Texas Instruments.
6. С. Безруков: Радиоканал передачи данных на A110LR09A.

Файлы:
архив

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


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

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

www.radiokot.ru

Как включить на телефоне радиомодуль, чтобы заработал 3G на этом же телефоне?

3g модуль на телефоне - этот тот самый радиомодуль, которым он с сотовой базовой станцией связан. Другого там нет. Так что если телефон "ловит", на него можно позвонить - значит работает. А уровень сигнала 3G или edge зависит уже от станции, загруженности сети, рельефа местности, погодных условий и так далее....

он сам включится как только 3G обнаружит.

Если телефон его имеет, то он включится когда надо.

Ой, у меня была проблема такая. Пожаловалась мужу на разряжение смартфона, он в настройках лазил. Мне заразина такая натворил, оставил без 3G, а сам уехал в командировку. Я неделю мучилась. А потому уже от злости полезла в настройки, а там просто надо было снять галочку "использовать только 2G". После этого все заработало. Больше к своему смарт я его не подпускаю. Женщины рулят!!!

touch.otvet.mail.ru

alexxlab

leave a Comment