Сотовый шлюз своими руками

Mirn14 июля 2015 в 11:06

Моя система тестирования и повышения качества GSM шлюза, часть первая: функциональный и схемный уровень

Tags:

Вторая часть

С чего всё начиналось


Я работаю в небольшой фирме, которая разрабатывает и производит системы записи телефонных разговоров. Но в ряде случаев клиентам нужен аналоговый GSM шлюз как источник телефонной линии. Ранее его закупали и перепродавали. Но то что закупали было низкого качества и часто попадался брак — было принято решение самим разработать. Разработали мы вдвоём: схемотехник и я — программист, недавние выпускники без опыта разработок в аналоговой телефонии и без опыта внедрения в производства. Получилось, мягко говоря, не очень, хоть и была решена проблема брака и скорее «вопреки».

Но проблема в том, что для нас даже 1% брака недопустим: на каждый случай у тех поддержки и разработчиков уходило очень много времени на клиента. Да и для всех нас это недопустимо чисто из соображений профессиональной гордости. Мы хотели такой шлюз снять с производства, даже несмотря на то, что у нас была доля от каждого изделия. Это очень стыдно, когда дилеры про остальные изделия говорят: «у вас вообще брак бывает?», а про наши «мы боимся их продавать — у нас же потом ничего не купят».

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

Как мы от этого

Снизу платы только китайский GSM модуль

Пришли к этому
Верх:



Низ:



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

Первый вариант шлюза: разбор ошибок


Позволил снизить количество брака раз в десять. И как просто шлюз он, в принципе, нормально работает.

Но по неопытности были допущены три существенных ошибки:

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

Вторая ошибка: были использованы готовые модули низкого качества, китайский GSM модуль глючил, а телефонный интерфейс оказался чувствительным к любому нестандартному использованию — он сгорал. Причём, нестандартное использование, это не подключение к 220В, а то, к которому привыкли пользователи и связисты и считают нормой. Например, подключение в порт АТС не предназначенный для этого: когда источник линии подключался к источнику на АТС.

Третья ошибка: слишком простая общая структура, всё сделано впритык: нет настроек даже громкости и нет запаса по прошивке — она занимает 99.9% свободного ОЗУ и флеша. Всё подключено напрямую, а не через микроконтроллер. По сути, нет возможности доработать как программно, так и схемотехнически. Возможности обновления прошивки также нет.

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

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

Сейчас многие проблемы исправлены: и защиту поставили, и качество прошивок GSM модулей китайцы улучшили, но осадок остался. А настройки как отсутствовали так и отсутствуют, что многим очень неудобно: звук в шлюзе хоть и оказался громче и чётче чем у большинства китайцев, но для некоторых клиентов он слишком громкий. Да и что скрывать — я набыдлокодил — отсюда и занятость флеша на 99% и невозможно в этом макаронном убожестве что-либо так просто подправить или добавить.

Вариант второй: Работа над ошибками


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

Решили сделать программно на микроконтроллере всё что можно: МК должен работать в разрыв, обрабатывать и звук и управлять телефонной линией с GSM модулем. Полностью самим реализовать на МК обработку звука и телефонную линию, и сделать её такой чтоб её невозможно было сжечь даже подключив в 220 или электрошокером. Первый вариант был на AVR atmega8512, и его кое-как хватало на генерацию гудка и АОНа. Второй вариант решили делать на ARM-Cortex M3, а в последствии ARM-Cortex M4 — потребовалось самим реализовать и эхоподавление. А это очень сложная вычислительная задача поиска глобального минимума в 256-мерном пространстве в реалтайме. В МК должен быть запас по ОЗУ, флешу и загрузке проца, как минимум 50%. Обязательно должна быть возможность обновить прошивку у клиента.

В команде разработчиков стало три человека — был нанят новый сотрудник. Ему поручили делать основную прошивку, сразу договорившись, что всю работу с техподдержкой клиентов он берёт на себя — чтоб делал сразу всё идеально. Никаких «в начале выкатим ЭТО, а потом протестируем на пользователях» — уже протестировали, не понравилось. А раз у меня был опыт работы с браком и я лучше знал на тот момент схемотехнику, то я взял на себя разработку тестовой прошивки и системы качества. Это позволило сделать две независимых прошивки, боевую и тестовую и взглянуть на схемотехнику с двух независимых точек зрения, сверив то что хотели и что получили в схемотехнике. А также контролировать друг друга. Часть работы по основной прошивке делал я и проверял я, а также обучал новичка, т.к. он был без опыта работы ему многое пришлось изучить самостоятельно.

Было принято решение самим собирать и разбраковывать первые партии шлюзов, чтоб сами видели свои ошибки в технологии. Было опрошено производство и учтены их пожелания. В последствии собирал платы не только схемотехник, но и я небольшую партию, пока схемотехник был в отпуске. А также сами разбраковали несколько партий в 10… 40 штук, что позволило отладить тестовый софт и взаимодействие с производством.

Решили делать на четырёхслойной плате — этого требовали и МК и GSM модуль и меньше аналоговых шумов когда для «земли» и питания выделены отдельные слои — их сопротивления существенно меньше. А GSM модуль очень сильно шумит — он потребляет импульсами по 2 Ампера, частота импульсов будто назло ложится широкополосным спектром на весь слышимый диапазон.

GSM модуль взяли без китайского быдлокода внутри — итальянской разработки, но китайской сборки. Его внутренняя прошивка оказалась на порядок более продуманной и качественной. Выбрали модель такую, чтоб звук был сразу цифровой, чтобы не ловить аналоговые помехи на стыке между МК и модулем и уменьшить количество аналоговых цепей до минимума.

Шлюз должен уметь проверять себя сам, включая телефонный разъём и наличие телефона. Это позволит провести само-диагностику прямо у клиента сразу значительно упростив тех-поддержку. Для того чтоб он сам себя смог проверить пришлось внутрь шлюза добавить имитатор телефонного аппарата — чтоб он умел снимать трубку и отвечать на звонки. А также добавили измерительные цепи ключевых параметров, таких как: сила тока питания, напряжения, ёмкость по питанию — например, для проверки, что не вздулись кондёры.

Шлюз удобно было настраивать: сделали голосовое меню, которое проговаривает всё: настройки, их значения, допустимые значения, как можно изменить громкость, быстрый набор и тд. Для этого использовали звуковой декодек Speex.

Шлюз должен уметь записывать разговоры. Наконец-то, то, что от нас ждали все. Записывать на полноформатную SD карту — устройство большое и мельчить нету смысла. Тем более у microSD и потребление больше и не всегда SPI они поддерживают. Записи складываются на карту в 3 вариантах сжатия: pcm, a-law, adpcm. Лог записей также ведётся в html списке с возможностью сортировки (на javascript) по любому столбцу.

Было:



Стало:



Схемотехника


Заложили резисторы 0805 с точностью 1% вместо обычных 5% — это позволит точнее проводить тесты и больше получать информации. Это нужно например для того чтоб увидеть непропай небольшого танталового конденсатора в 330мкФ, на фоне параллельно подключенных очень крупных электролитов в 5000 — 10000 мкФ, а они фильтруют разные частотные диапазоны звука. Аналогично конденсаторы 0805 с точностью 10%. Более точные компоненты позволяют избежать подстройки параметров прошивки. При этом разница в стоимости при переходе на более точные компоненты на фоне общей стоимости мизерна.

Упрощенная электрическая схема

Извините за hand-made, но воевать с новым офисом сил нет


Система питания


Шлюз питается покупным 12 вольтовым 1А стабилизированным блоком питания от 220В.

Схема питания целиком




Сразу после разъёма питания стоит схема защиты питания, защита от обратной полярности — обычный шотки-диод. Предохранитель по току в 1А. И супрессор защиты от перенапряжения с порогом в 15В. Далее идёт цепь измерения напряжения питания с делителем 1:6 на резисторах. Им будем проверять блок питания, нагрузку давать включением и выключением всех потребителей (около 0.7А).

После схемы защиты и измерения, питание разделяется на три ветки: GSM, телефонная линия, цифро-аналоговое питание.
Для всех трёх используем микросхему импульсного стабилизатора MC34063A. Она умеет как повышать, так и понижать напряжение. Также имеет защиту по току и температуре. Напряжение и ток можно задавать резисторами. Её плюсы в цене и простоте использования, а ещё в КПД, она с большим КПД стабилизирует лучше чем линейные стабилизаторы — меньше греется. Но она шумит и после неё надо ставить фильтры.



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

Ветка питания GSM



Для надёжного сброса GSM модуля необходимо иметь возможность управлять питанием GSM — для этого в самом начале ветки стоит ключ на полевом транзисторе. Далее стабилизатор на 3.75 В и 0.5 А. GSM модуль во время работы потребляет импульсами 500 мк. сек х 2А, а это очень много и именно они обычно приводят к наводкам звука и поэтому их надо отфильтровать. Для этого поставлены электролитические конденсаторы с малым внутренним сопротивлением, 4 шт для ещё большего его уменьшения. А также стоит танталовый и керамические конденсаторы — все они фильтруют на всё более высоких частотах. Также свой вклад в фильтрацию вносит стабилизатор — он ограничивает импульсы потребления с 2 А до 0.5 А, не позволяет брать все 2А с блока питания, эти импульсы берутся с конденсаторов, чем уменьшается влияние на другие ветки питания.

Далее идёт цепь тестирования питания — датчик питания и тестовая нагрузка в 2.15 Ом, управляемая с МК через полевик, с помощью её можно замерить все основные параметры питания: напряжение, ток, сопротивление нагрузки.

Ветка цифрового и аналогового питания


Питание разделено на две под-ветки:
  • Аналоговое питание для ОУ выдачи и приёма звука с линии, и для ЦАП и АЦП в МК.
  • Цифровое питание для МК и SD карты они также потребляют импульсами, особенно при записи сектора на SD карту.

Если не отделить аналог от цифры, то клиент при разговоре услышит как работает SD карточка и просыпается/засыпает МК. Питание стабилизируется в два этапа, в начале опускается импульсником с хорошим КПД до 5В, но он шумный, поэтому далее стабилизируется до 3.3 двумя тихими линейными стабилизаторами. И если сразу поставить два линейных, то они будут сильно греться т.к. на них будет падать 9В. также у каждой под-ветки есть цепи измерителя напряжения на делителях 1:2.

Ветка питания источника телефонной линии

Телефонная линия, это источник напряжения в 48В / 60В с внутренним сопротивлением около 700 Ом.

Во время звонка напряжение должно быть 60 В и менять полярность 20-30 раз в сек, в остальное время 48 В с постоянной полярностью.
Подъём трубки детектируется тем что телефон нагружает источник и из-за внутреннего сопротивления в 700 Ом на разъёме напряжение падает примерно до 10 В, при токе около 30-40 мА.

Но мощность = сила_тока * напряжение, а при поднятой трубке на внутреннем сопротивлении падает 38В при 40мА. А это очень много тепла. Настолько много что шлюз пришлось бы делать размером с лист А4. Это дорого и неудобно для клиентов. Поэтому мы поступили хитро: сделали так что при поднятой трубке источник переставал стабилизировать напряжение, а начинал стабилизировать ток. Ток остаётся прежним, а падает уже в 2 раза меньше напряжения. Меньше и нагрев.

Но тут возникает проблема — стабилизатор при ограничении тока уже не стабилизирует напряжение, и все помехи по напряжению напрямую проходят через него. Но звук то в телефонной линии выдаётся модуляцией в 1В телефонного напряжения в 48В или 10В если трубка поднята, т.е. помехи усиливаются от 10 до 50 раз.



Для решения этой проблемы в самом начале мы поставили линейный стабилизатор LM1117 на 10В. А далее после него стоит импульсный стабилизатор MC34063A, который стабилизирует либо напряжение, либо ток если трубка поднята пользуясь уже стабильным питанием. Для того чтоб стабилизатор мог повышать как до 48в, так и до 60В, в цепь обратной связи сделали переменной: красной стрелкой обозначено подключение ножки МК, с помощью которой он шунтирует в обратной связи резисторы (подключая к земле), и стабилизируемое напряжение поднимается до звонкового, в остальное время там Z стояние. Но импульсник шумный, поэтому далее стоит П-фильтр первого порядка на RC цепочке 5мкф и 4х51 Ом. А также диод E1SD, цель которого — защитить от втекающих в схему токов (например при подключении 220В или прочих помех).

Схема источника телефонной линии


Схема целиком


Слева телефонный разъём, правее стоит защита в виде супрессора на 85В и пары самовосстанавливающихся предохранителей на 80мА, параллельно им подключен разрядник в виде двух оголенных падов.

Выглядит это так

Эта защита хорошо защищает источник питания от попадания 220В и от искровых наводок во время грозы. Но её скорость не достаточно высока и быстрые выплески могут пройти до звука, поэтому для защиты от них все входа ОУ выдачи и приёма защищены дополнительно парными диодами шоттки BAT54S которые защищают от напряжения выше питания и ниже земли.



Это цепь тестового подъёма трубки, при помощи её шлюз сам себя может проверить и сам себе трубку снять. Нагрузка выбрана в 1кОм потому что это удобно — 1В падения равен 1мА тока.

Цепь приёма звука с линии:



Сделана на ОУ в дифференциальном включении — в таком включении собственные шумы относительно телефонной линии вычитаются и не слышны. Слышна только разница между контактами в телефонном разъёме. Для приёма только звука на входе стоят конденсаторы, несколько штук т.к. они 50В, а звук может иметь размах больше (при звонке). На выходе ОУ стоит RC-фильтр низких голосовых частот.

Цепь выдачи звука в линию:



В телефонную линию звук необходимо выдавать током, поэтому в этой схеме на ОУ собран источник тока. На входе ОУ стоит RC фильтр низких голосовых частот. Сам ОУ на трёх резисторах 27ом поддерживает напряжение такое же, как на входе после RC фильтра, тем самым задаёт ток.
Обратная связь ОУ защищена.

При помощи выдачи звука в линию можно проверить и приём звука с линии, выдав и послушав результат, что и используется в тестовой прошивке. Также в ней проверяется АЧХ.

АЧХ реального шлюза и его описание

По Х — Герцы, по Y — децибелы.
На нижних частотах спад из-за входных кондёров которые отделяют звук от постоянной составляющей.
На средних и высоких спад из за RC-фильтров на выдаче и приёме звука с линии — по этому спаду измеряются RC-параметры фильтров.

Схема смены полярности:



Обычный H-мост позволяет менять полярность телефонной линии. Сделан из комплементарных пар транзисторов.

Схема внутреннего сопротивления телефонной линии:



Сделан на больших резисторах, их невозможно сжечь — быстрее дорожки сгорят, они имеют большие паразитные индуктивности и сопротивления — хорошо фильтруют помехи. Они также хорошо рассеивают тепло. И в паре с RC-фильтром на кондёрах 0.33 и резисторах в 51 ом они хорошо фильтруют звук от помех, включая помехи импульсного повышателя.

За этими огромными резисторами остальная схема как за каменной стеной. Остальные реализации источника телефонной линии, что я видел, были сделаны без подобных резисторов и из-за этого и горели. В том числе и первый наш вариант шлюза.

Схема USB моста




Использована микросхема CP2103. Она используется как для связи так и для прошивки или сброса.

Она удобна тем, что помимо линий квитирования RS232, есть ножки GPIO — ввода вывода. Проблема в том, что при подключении к ПК ОС начинает дёргать линиями квитирования, а GPIO не трогает и если к ним подключены ножки сброса МК, то шлюз будет сбрасываться, а разговор прерываться. Поэтому, к GPIO и подключен сброс и перевод в режим встроенного загрузчика. И при помощи только этого моста и прошивается шлюз как на производстве, так и у клиентов если необходимо обновить прошивку.

Схема GSM модуля


Схема


Использован 2.5G двухдиапазонный модуль Telit 868 dual. Т.е. он будет работать только в странах СНГ. Держатель симки обычный лоточный.

Звук по цифровому DVI (переименованный I2S).

Схема микроконтроллера


Схема


Использован мк STM32F405RG с
168к ОЗУ и 1024к Флеша, используется того и того 50%.
160MHz тактовая частота используется на 3/4, основные потребители — декодек speex и эхоподовление
В МК есть датчик температуры — удобно контролировать самонагрев устройства.
Также в МК есть внутреннее опорное напряжение, им можно замерить опорное напряжение АЦП и напряжение питания — таким образом мк может проверить сам себя и своё питание. И тем самым убедиться что он всё остальное меряет правильно.
Предусмотрено питание от литиевой батарейки — таблетки для хранения дат и времени. Умеет сам из GSM сети их запрашивать.
Индикация состояния на четырёх красно-зелёных светодиодах.

Схема SD карточки


Схема


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

Далее ключ для тестирования питания путём подключения тестовой нагрузки, а также измеритель напряжения питания на делителе 1:2 на резисторах. Ключ для тестирования также важен и в основной прошивке — им можно разрядить до нуля вольт питание, если этого не сделать, то SD карточка начинает при последующем включении сильно глючить.

Снизу видны сдвоенные диоды защиты SD карточки во время горячего подключения.
Справа на схеме держатель карточек с механикой push-pull — вставил-защёлкнулось, надавил-отщёлкнулось-достал.

На этом с схемотехникой всё.
Плата обоих вариантов была разведена в программе TOPOR.

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

Огромное спасибо за потраченное время. Надеюсь, было не скучно.
Источник: https://habr.com/post/262531/

Предыдущая статья: охлаждение комп своими руками

Следущая статья: детский цилиндр своими руками

Лучшие статьи: