Введение
Беспроводные технологии стали олицетворением современного мира. Данный материал рассказывает о том, как легко можно интегрировать в своё устройство интерфейс сотовой связи. Некоторое время назад было ощущение, что сотовая связь достигла своего пика развития: сотовый телефон был у каждого цивилизованного землянина. Однако возникло новое направление развития сотовой связи: беспроводная передача данных. Это направление продолжает развиваться и сегодня. Параллельно с этим возник новый класс устройств с сотовой связью: охранно-пожарные сигнализации. Так или иначе, если срабатывает пожарная тревога или фиксируется несанкционированное проникновение в помещение, требуется вызов соответствующих служб. Сегодня вмешательство человека в этот процесс не требуется. Устройство, обрабатывающее сигналы датчиков, может самостоятельно вызвать нужную службу, если, конечно, оно содержит в себе модуль GSM связи. Это ещё один вектор развития сотовой связи. Таким образом, представляется ситуация, что в недалёком будущем на одного жителя нашей планеты может прийтись несколько номеров сотовой связи. Условно говоря: сигнализация квартиры, дачи, гаража и машины, и собственно, телефон.
Мы в этом материале построим обратную задачу сигнализации: управление удалённой нагрузкой. Что может быть этой нагрузкой:
— отопление (дача, загородный дом. За несколько часов до приезда вы включаете отопление – приезжаете в тёплый дом)
- управление поливом (можно включить полив – вы решаете сколько и когда поливать, не приезжая)
— кондиционирование
— управление доступом (открыть/закрыть ворота гаража/дачи/квартиры)
— управление освещением
Наверное, можно много чего ещё придумать. Мы же рассмотрим, сегодня самую простую систему управления нагрузкой.
Постановка задачи
- Зарегистрировать номер телефона, с которого будет производиться управление нагрузкой
- Управлять включением / выключением нагрузки по звонку с зарегистрированного номера
- Сигнализировать о включении/выключении нагрузки по звонку зарегистрировать абонента (желательно бесплатно)
- Звонки с других номеров – игнорировать (класть трубку)
Схемотехника
С точки зрения аппаратного построения данного устройства нет никаких проблем. Вся современная схемотехника – это построение конечного устройства из готовых кубиков. Вот и наше устройство за небольшим исключением состоит из двух этих самых кубиков: микроконтроллер и модуль сотовой связи. Разновидностей модулей сотовой связи так же как и микроконтроллеров – великое множество. В качестве микроконтроллера автор взял STM32F101 с минимальным объёмом памяти программ: 16 килобайт и в корпусе VFQFPN36. Почему выбор пал именно на этот контроллер? Сочетание цена-качество-возможности. Контроллер разрядностью 32 бита, произведённый в Европе (кристаллы выращиваются там, а корпусировка – в КНР), по цене среднего 8-ми битного контроллера (полностью произведённого в КНР). Примерно так. В качестве модуля сотовой связи был взят Quectel M95. Причина- та же. Меньше чем за 500 рублей вы добавите сотовую связь в ваше конечное приложение. Этот модуль умеет: делать голосовые вызовы, работать с SMS сообщениями, обмениваться данными по GPRS каналу и ещё много чего.
Правила включения микроконтроллера описаны в электрических параметрах на него. Нет ничего сложного: подать питание (1.8-3.6В) на входы питания (несколько VDD и один VDDA), подать землю (несколько VSS и один VSSA), сброс – оставить «висящим в воздухе», либо соединённым с землёй питания через конденсатор небольшой ёмкости для повышения помехозащищённости, Boot0 – притянуть к земле питания, подключить интерфейс программирования (их там 2 на выбор: SWD и JTAG). В качестве интерфейса программирования я применил SWD: всего 2 линии занимает на контроллере (к тому же JTAG – я отключил в программе).
Рисунок 1. Питание контроллера STM32F1xx.
Инженеры компании STMicroelectronics рекомендуют обвешивать его набором небольших керамических емкостей. Однако автор проигнорировал эту рекомендацию (всё равно же работает)
Рисунок 2. Схема сброса. В схеме автора вывод сброса «висит в воздухе»
Правила подключения модуля сотовой связи так же не требуют ничего особенного: питание, разъём SIM-карты. У M95 есть вход управления питанием: PWRKey. При подаче питания на модуль – он останется выключенным до тех пор, пока на этом входе не появится сигнал «земля» (внутри модуля есть подтяжка к напряжению питания) и не будет удерживаться какое-то время. На этот вход мы подключим кнопку без фиксации (другой конец кнопки – соединён с землёй). По части питания GSM модулей сотовой связи имеется подводный камешек: потребление во время сеанса связи скачет с десятков мА до 1-2А. Это требование к источнику питания. Отсюда же настоятельная рекомендация обвесить шину питания рядом с модулем конденсаторами (тантал/керамика несколько микрофарад). Автор не стал выполнять последнее требование, т.к. система, питающаяся лабораторным источником питания и так работала.
Рисунок 3. Подключение модуля сотовой связи к SIM-карте
Внутри M95 есть встроенный линейный DC-DC преобразователь с выходным напряжением 2.8В. Мы запитаем наш контроллер этим напряжением. Питающее напряжение контроллера появится после запуска модуля кнопкой PWRKey.
Рисунок 4. Питание модуля и контроллера от встроенного линейного преобразователя напряжения
Питание всей системы осуществлялось лабораторным источником питания АКИП-1101.
Интерфейс связи, по которому подключаются микроконтроллер и модуль сотовой связи, как правило USART. В нашем случае не было исключения. В силу того, что автор не сильно утруждал себя пайкой макета, соединение произвёл через UART: это всего 2 линии: Tx и Rx (задействовать линии CTS, RTS, CLK для повышения надёжности связи так же можно).
Сам же макет был построен на такой макетной плате: http://www.promelec.ru/catalog/413/1405/1511/1/152002/ Поменьше проводов, побольше перемычек образованных наплывом припоя + посадочное место под большой выбор контроллеров STM32, + посадочное место под M95 + посадочное место под разъём программирования + место для разъёма SIM карты.
В качестве индикаторов были применены два светодиода с последовательным резистором. Что требовалось индицировать? Во-первых, прошла регистрация управляющего номера или нет, во-вторых, состояние нагрузки. Светодиод нагрузки можно заменить на оптосимистор, например такой: EL3063 и «рулить» более мощной нагрузкой (например, мощным симистором или реле переменного тока).
В заключении описания аппаратной части добавим словесное описание используемых портов контроллера:
PB2 – индикация регистрации номера абонента управления
PB7 – нагрузка
PA9 – UART Tx
PA10 – UART Rx
PA13, PA14 – выводы программирования.
Как видите, стыковка нескольких аппаратных кубиков не составляет большого труда.
Программа контроллера
Как это ни странно, но принципы построения ПО – точно такие же, как и аппаратной части: создание конечного продукта из готовых кубиков. Условно говоря, если всю работу программы разместить в векторах прерываний, то основное приложение никак не почувствует работу «соседнего кубика». Тут важно только одно: мощности микроконтроллера должно быть достаточно. Если говорить о выбранном STM32F101, то автор даже не стал поднимать частоту до максимально допустимых 36МГц, а оставил 8МГц, на которых контроллер стартует. ПО построено на максимальном использовании периферии, так что ядро не выполняет множества рутинных операций. Какая использована периферия:
— USART1 (для обмена с GSM модулем)
— DMA (для обмена UART-память без участия ядра)
— GPIO (управление нагрузкой)
— NVIC (контроллер вложенных векторных прерываний)
— Systic (для повторной отправки сообщений – повышение надёжности без участия ядра)
Алгоритм работы программы:
— инициализация модуля связи (проверка необходимости ввода ПИН-кода)
— регистрация в сети GSM
— ожидание первого звонка, определение его номера и запоминание + гашение светодиода, индицирующего «номер абонента, управляющего нагрузкой не определён». Далее, обрыв связи.
— приём звонков, при совпадении с ранее полученным перевод нагрузки в противоположное состояние, при этом, если нагрузка выключается – один гудок и обрывается связь, если включается – два гудка и связь обрывается (количество гудков можно варьировать текстом программы). Таким образом, пользователь по числу гудков до обрыва связи знает включил он нагрузку или выключил.
— при несовпадении номера входящего звонка с тем, что управлянт нагрузкой, связь сразу же обрывается.
Пара слов об информационном обмене с GSM модулем. Контроллер и модуль меняются текстовыми сообщениями. В конце сообщения появляется символ перевода строки (0xa). Как только символ поступает по UART контроллер/модуль начинает распознавать полученный текст и принимать какие-то действия. Видов текстовых сообщений может быть очень много. Автору проекта пришлось написать маленькую операционную систему, чтобы эффективно распознавать и строить текстовые сообщения для GSM модуля, а главное, делать это в векторах прерываний, чтоб быть абсолютно параллельно остальной (любой) программе контроллера.
Исходники – во вложении, желаю удачных разработок на их основе.
Прикрепленные файлы:
- STM32F1_M95.zip (2756 Кб)