Инструменты и измерительные приборы http://myowndevice.ru Wed, 28 Aug 2024 12:10:42 +0000 Joomla! - Open Source Content Management ru-ru USB UART адаптер /index.php/pribory/item/7-usb-uart-konverter /index.php/pribory/item/7-usb-uart-konverter USB UART адаптер

Очень полезный прибор для работы с Serial портом через USB с помощью компьютера. Пригодится для получения данных с наших приборов, программирования микроконтроллеров, общения с GSM и GPS датчками.

{autotoc}

Зачем нужен USB UART адаптер

Как следует из названия данный прибор организует мост между компьютером через USB порт и вашим устройством по Serial протоколу. Можно сказать что он является USB COM портом для логики TTL (уровни 1.8v-5v).

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

  • управление устройством

  • отладка программы

  • передача небольших объёмов данных

  • прошивка различных приборов —разработчики часто делают выход serial для возможности перепрошивки своего устройства

  • прошивка микроконтроллеров — многие микроконтроллеры имеют Bootloader (специальная программа для загрузки прошивки по serial) загруженный на заводе, и для загрузки прошивки не нужен специальный программатор — достаточно данного устройства.

Нам он будет необходим в первую очередь для прошивки ST-Link. Ну и собственно так как тут нечего программировать — прибор состоит из одной микросхемы — то на этом приборе мы поучимся паять и работать в Kicad. В этой статье подробно рассмотрим как трассировать печатную плату вручную.

Как сделать USB UART адаптер

1. Прочитать эту статью внимательно и до конца!

2. Подготовить или приобрести необходимые инструменты: все для пайки

3. Внимательно прочитать статьи из раздела Обязательная теория.

4. Скачать необходимые файлы по данному прибору с github.

5. Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

6. Приобрести все необходимые комплектующие в виде готового радиоконструктора можно в нашем магазине.

{product id=26}

7. Запаять все компоненты на плату, смотри наше видео.

ПРИБОР ГОТОВ, можно пользоваться!

Как работает USB UART адаптер

Для реализации данного моста обычно используется специализированная микросхема, которая с одной стороны имеет usb выход, а с другой — serial выход. Обычно эти микросхемы имеют драйвера для Windows \ Linux и определяются системой как COM — порт. Дальше используется специальная программа для работы через COM порт. Это может быть и программа прошивки микроконтроллера или программа для получения данных от прибора и т. д.

Выбираем микросхему для прибора

По сути данное устройство будет состоять из разъемов, микросхемы и минимальной ее обвязки. Так что, у нас не будет никакого функционального ТЗ в данном случае. Основной критерий по которому мы будем выбирать микросхему — удобство пайки, цена.

Итак, самые распространённые микросхемы для данного девайса:

  • cp2102 (cp2103) — дешевая отличная микросхема, но имеет корпус QFN28 — то есть безвыводный корпус — паять такую в самом начале пути не очень легко — поэтому мы ее не будем использовать

  • pl2303 — отличная микросхемы фирмы Prolific — существует очень много вариантов этой микросхемы (в том числе китайские подделки). У нее корпус TSOP28 — отлично подходит для пайки. И старые модификации стоят недорого и отлично работают. Мы будем использовать ее — модификацiия pl2303TA — самый недорогой вариант. Есть модификация Rev. D которая не требует внешний кварц — но она стоит в 2 раза дороже.

  • CH340 — китайский вариант (оригинал) моста — микросхема хорошая — но ее трудно купить где-либо кроме как в Китае.

  • FT232R — микросхема от FTDI — отлично подходит и работает — но стоит почти в 2 раза дороже. Ее плюс также в том что не требуется внешний кварц.

Несколько слов о том как подобрать микросхему для своего проекта. Есть очень простой путь. Сначала необходимо найти одну микросхему которая подходит под данную задачу. Набираем в интернете — USB — serial chip и сразу находим — FT232R. Отлично. Далее идет на сайт крупного поставщика микросхем — например — mouser.com. Там в поиске набираем — FT232R. И в разделе интегральных схем видим нашу микросхему.

Самое главное для нас здесь — ЭТО КАТЕГОРИЯ в которую входит микросхема. Здесь это «ИС интерфейс USB». Также смотрим тип «Bridge, USB to UART». Идем в эту категорию и смотрим какие бывают микросхемы. Далее проверяем по datasheets подходит ли она нам.

 

Итак, наш выбор PL2303TA.

Составляем схему на базе PL2303

Любая схема должна начинаться с чтения Datasheet. Производитель микросхем очень заинтересован в том, чтобы купили именно его чип. В документации он обычно максимально подробно разбираем как пользоваться микросхемой, прикладывает схемы и пишет тонкости и особенности реализации прибора на этом чипе. Посмотрим что советует нам производитель (из документации на чип pl2303HXD):


тут приведена полная схема с трансивером (преобразователь уровня до 9v) для получения полного COM порта. Нам эта часть не нужна. Также схема не содержит кварца, а нам он необходим. Дополнительно можно отметить, что еще не хватает светодидов для сигнализации процесса обмена данными. В итоге поискав различные варианты схемы на данной микросхеме (pl2303 schematic) нашли самую простую схему со светодиодами и кварцев — ее и возьмем.


По сути на этой схеме сокращена обвязка USB порта (убраны высокочастотные фильтры L1 L2), убран трансивер. В остальном схема совпадает. Мы же дополнительно ещё добавим разводку всех сигнальных выводов DTR и т. д. - они могут быть полезны. Также следует отметить, что на вывод согласования уровней в нашей версии чипа нельзя подавать 5v, поэтому на разъеме уберем подальше этот вывод. Сам вывод для согласования уровней оставим — вдруг необходимо будет пользоваться UART на 1.8v. Таким образом, по умолчанию у нас будет стоять джампер соединяющий вывод 4 и 3.3v и на выходе всех сигналов UART у нас будет 3.3v. Данного напряжения уверенно хватает для определения логической 1 в 5v схеме, согласно datasheet все сигнальные ножки толерантны 5v ( то есть на них можно подавать 5v смело). Так что при таком подключении схема будет работать с напряжением от 3.3в до 5в. Дополнительно оставим выводы 5v и 3.3v для питания например прошиваемого контроллера. Имейте ввиду, что без внешнего EEPROM usb порт будет отдавать только 100ma! Соответственно питать что-то существенное не получится.

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

Разрабатываем плату в Kicad

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

Прежде чем разрабатывать плату необходимо определится какие у нас будут использоваться разъемы и определить посадочные места. Мы будем делать плату переходник которая втыкается в usb порт и на конце имеет угловые разъемы PIN 2.54mm — это самый распространяенный формат. На конечный разъем мы выведем только наиболее нужные выводы — остальное просто разведем на плате и оставим как дырки на будущее. Основные выводы: RX, TX, 5V, 3.3v, DTR (часто используется как reset схемы микроконтроллера при прошивке). Остальные выводы разведем в самом конце.

Итак, начинаем трассировку платы. В схеме формируем список цепей — Инструменты — сформировать список цепей. Переключаемся в плату и по кнопке Инструменты-Список Цепей — прочитать текущий список цепей. Загружаем все посадочные места в плату. Далее размещаем все посадочные места в авторежиме. Получаем такой набор компонентов.


На данном этапе лучше скрыть лишнюю информацию. Убираем отображение слоев Связи, Скрытый текст, Значения, Обозначения.

Далее начинаем располагаем на будущей плате основные компоненты — разъемы и чип. Так чтобы выводы чипа располагались согласно подключению разъемов. Особенно важно в этом случае чтобы выводы подключения USB были напротив разъема. Наводим мышку на нужный компонент — жмем M — и переносим его чуть ниже на пустое место — формируем будущую плату. Так как плата у нас двух стороняя — то надо сразу определить нужную сторону компонент. Самый просто вариант — все DIP элементы (под которые надо сверлить сквозные отверстия) располагаем с обратной стороны, а все smd элементы с основной стороны — так проще будет подводить дорожки. Для смены стороны используем кнопку F. Так как Kicad умеет подсвечивать связи при переносе элемента, то очень удобно все резисторы связанные с разъемами размещать сразу. Это позволит быстро увидеть связи при переносе микросхемы. Итак, размещаем USB разъем, потом резисторы с ним связанные на сигнальных линиях и потом разъем на другом краю платы:


дальше размещаем чип — так чтобы было как можно меньше пересечений.

Далее размещаем кварц (тоже с обратной стороны — он у нас выводной). Он должен быть как можно ближе к выводам чипа.


После этого размещаем кондецаторы по цепям питания — они должны быть как можно ближе к выводам питания.

После этого соединяем дорожками обязательные выводы — это usb сигнальные — кварц, кондецаторы по питанию. Прикидываем линии питания. Если что-то не удобно — то компоненты двигаем — переносим.

Например кондецатор C3 удобнее перенести вниз чтобы не делать переходное отверстие. Конечно это не очень хорошо — но в данном случае дорожка будет очень небольшая.

После размещения основных элементов размещаем оставшиеся — ориентируясь на подсказки по связям и стараясь не пересекать дорожки.


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

Осталось выводы на разъеме расположить в порядке следования выходов чипа. И финально все соединить. На этом этапе плату можно сделать более компактной. Финальный вариант который получился. Можно сделать еще лучше .. но вариант удовлетворительный.

Финально остается задать диаметры переходных отверстий и толщину дорожек — лучше сделать 0.3мм. Выровнять линии и добавить земляные полигоны. Начертить границы платы.

Как пользоваться USB UART конвертером

Для пользования данных приборов в Windows необходимо установить драйвера. Свежие драйвера можно взять на сайте производителя. Если они не подходят, то можно установить более старые драйвера 1.15 — который можно найти в интернет.

После установки драйверов устройство должно определиться как COM порт.

Для Windows самая лучшая программа для работы с COM портом — это Terminal 1.9b (приложена к статье)

Для тестирования нашего устройства необходимо проводами соединить выходы TX — RX. В этом случае мы получим режим эхо — все что будет передано в порт должно тут же возвращаться назад. Скорость при это может быть любая.

Работать с программой очень просто — выбираем порт — можно автоматически по кнопке ReScan или вручную. Задаем скорость и параметры порта. Далее в окне видим все что пришло по терминалу, а в строке SEND можно передать любую информацию. Чтобы передать спецсимволы необходимо использовать запись виды «$1a» в шестнадцетиричном формате.

Для linux устройство должно определится само (драйвера входят в ядро). Неплохая программа — minicom.

Для понимая остальных сигналов данного устройства — DTR, DSR и другие — вот тут есть очень хорошая статья.

Как собирать прибор

Собираем прибор по общим правилам описанным в нашей статье.

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

Самостоятельная работа

Попробуйте осуществить трассировку самостоятельно не подглядывая в данную статью.

 

]]>
(Super User) Приборы Sun, 01 Jan 2017 18:21:00 +0000
ST-Link v2 /index.php/pribory/item/16-st-link-v2 /index.php/pribory/item/16-st-link-v2 ST-Link v2

Программатор-отладчик для программирования и отладки микроконтроллеров STM8 STM32, а также многих микроконтроллеров Cortex M0-M4 по SWD выходу.

{autotoc}

Зачем нужен ST-Link v2

ST-Link/V2 специальное устройство разработанное компанией ST для отладки и программирования микроконтроллеров серии STM8 и STM32. Про сам прибор можно прочитать на сайте компании ST.

Основные его возможности:

  • Выход 5В для питания устройства

  • USB 2.0 высокоскоростной интерфейс

  • SWIM, JTAG/serial wire debugging (SWD) интерфейсы

  • SWIM поддержка низкоскоростного и высокоскоростного режимов

  • SWD and serial wire viewer (SWV)

  • Возможность Обновление прошивки

Так как микроконтроллеры STM32 построены на ядре ARM Cortex, которое имеет интерфейс отладки SWD, то ST-Link позволяет программировать и отлаживать и другие 32-битные микроконтроллеры на базе ARM-Cortex.

Это, можно сказать, единственный программатор микроконтроллеров STM8. Для программирования STM32 существуют и другие универсальные программаторы.

Где можно купить программатор STM8 STM32 ST-Link

На текущий момент интерес к микроконтроллерам ST очень большой. Поэтому программатор ST link довольно широко распространен на рынке. Существует несколько версий, отличающихся по цене.

Оригинальный ST Link от компании ST, как всегда, самый дорогой вариант. Стоит больше 2 000 руб.

Мини ST link (очень похож на наш вариант этого программатора) стоит около 600 руб. Купить его можно у крупных поставщиков электроники - Компэл, Терра электроника и другие.

Ali express (Китай) - тут предлагается большое количество самых простых вариантов Программатора, но в общем, они все рабочие, ими вполе можно пользоваться. Как правило они годятся для программирования STM8 и STM32. Единственное, они не имеют SWO выхода, но он нужен не так часто. Пожалуй, единственный минус тут, это ожидание покупки. Стоимость около 150-200 руб.

Если вам не нужен программатор STM8, а нужна только серия STM32, то хорошим вариантом будут платы Discovery от ST, они имеют на бору и программатор ST link. Однако, как правило, разъем для программирования STM8 там не разведен.

Ну и конечно, можно просто купить детали и сделать данное устройство самостоятельно. В основе лежит не самый дешевый микроконтроллер STM32, да и купить детали дешево не так просто, так что, стоимость будет от 300 до 400 рублей. В данной статье мы будем рассказывать, как собрать данный прибор самостоятельно из набора необходимых SMD компонент. Конечно же мы рекомендуем пойти этим путем. Только так вы сможете научится трассировке плат, их изготовлению и паянию.

{product id=30}

Как изготовить программатор ST-LINK V2

1. Прочитать эту статью внимательно и до конца!

2. Подготовить или приобрести необходимые инструменты: все для пайки, USB UART адаптер (будет нужен для программирования МК)

3. Внимательно прочитать статьи из раздела Обязательная теория.

4. Скачать необходимые файлы по данному прибору с github.

5. Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

6. Приобрести все необходимые комплектующие можно в нашем магазине за 300 руб.

7. Запаять все компоненты на плату, смотри наше видео.

ПРИБОР ГОТОВ, можно пользоваться!

Поиск схемы для ST Link программатора, отладчика

Сама компания ST не дает нам схему данного прибора, однако есть схемы ее ознакомительных плат серии DISCOVERY, в которых приводится и схема отладчика. Например документ UM0919. Но она не полная, там присутсвует только SWD интерфейс. В основе микроконтроллер STM32F103C8T6.


Вторая схема, которая есть в документе UM1670, содержит выводы SWIM выходов, но это уже версия V2.2 на другом микроконтролере STM32F103CBT6.


Также в интернет удалось найти схему ST-LINK v2, восстановленную по оригинальному прибору:

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

Требования к нашему ST-LINK

Мы будем делать приборы на базе STM8, а также STM32, процессоров NUVOTON Cortex-M0, ATMEL. Все они будут питаться от 3.3В или 5В. Так что, нам не нужна возможность работать с микроконтроллерами на напряжении 1.8В. Но сама возможность программировать STM8 нужна обязательно.

Мы делаем прибор для своих задач, поэтому у нас нет необходимости в стандартных разъемах SWIM и JTAG. Будет делать такой разъем, который удобнее для трассировки платы.

Версия 2.2 на микроконтролере STM32F103CBT6 добавляет второе USB устройство — COM порт UART, но он уже у нас есть, так что, нет смысла переплачивать, микроконтроллер там дороже. Правда у него есть хорошая возможность - прошивка через интерфейс DFU, то есть микроконтроллер видится как флешка при подключении по USB, и прошивку просто надо скопировать на диск. Но прошить надо будет один раз, и для этого у нас есть USB UART адаптер, прошивать первый раз будет через него. Дальнейшее обновление прошивки идет уже через программу от ST по USB. Мы будем делать версию 2.0 на базе STM32F103C8T6.

Оригинальная версия ST-Link содержит микросхему преобразования уровней, что удобно для отладки и прошивки готового устройства, и необходимо для работы с напряжением ниже 3.3В. У нас таких не будет, а для работы с 5В и 3.3В — преобразование уровней не нужно.

Прибор будем делать в формате USB dongle, соответсвенно будет использоваться разъем USB-A male.

На защите выходов можно сэкономить, так что не будем использовать защитные диоды. Достаточно будет сопротивлений на всех выходах разъемов на случай, если вдруг мы их подключим на 5В или землю. Надо обязательно иметь в виду, что пользоваться данным прибором надо аккуратно! Все выходы при подключении проверять несколько раз! Выход 3.3В больше защищен, он идет через регулятор напряжения, защищающий от КЗ. Так что, лучше питать тестовые схемы от него!

Теперь можно составить финальную схему нашего ST-Link.

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

Финальная схема

Саму схему вы можете посмотреть в файлах данного прибора. Здесь же приведем ее для комментирования основных узлов.

Основная часть:


Питание и разъемы:

Небольшие комментарии.

В качестве регулятора питания на 3.3в используем NCP603 — очень хороший LDO, выдает ток до 300ма с падением 300mv и точностью +-3%. Светодиоды индикации - обычные smd светодиоды двух цветов. Для программирования по UART необходимо вывод BOOT0 соединить с +3В, для этого выведем его на разъем. Также необходимо вывести сам UART — ножки RX TX. Все остальные выводы без защиты выведем на разъем. Пользуюсь этим программатором уже больше года, и кз были и помехи — ничего не сгорело ни разу.

В некоторых схемах ставится самовостанавливающийся предохранитель на питание от USB для защиты самого порта. Современные компьютеры имеют защиту на портах USB, в том числе предохранители и токовые ограничивающие ключи, так что он не нужен. Но лучше конечно не проверять это, и не ошибаться! Напряжение 3.3в идет с нашего LDO, который имеет защиту от КЗ и от перегрева, и не выдает больше 600ма, там тоже защищать нечего.

Очень удобно подключать STM8 для программирования с помощью ST-Link, нужно всего 3 провода - питание, земля и SWIM выход. Это так же удобно при разводке плат, можно разводить только SWIM выход, землю и питание всегда можно найти на плате.

Трассировка платы в Kicad с помощью автотрассировщика Topor

В приборе USB UART адаптер мы уже тренировались трассировать плату в Kicad вручную. Данный прибор чуть сложнее. На нем можно поучиться разводить плату в автотрассировщике TOPOR. Весь процесс лучше просмотреть на видео в конце статьи, здесь будут лишь небольшие комментарии к видео.

Подготовка платы к автотрассировке

Для того, чтобы работать с Topor, надо сначала подготовить плату в Kicad. Необходимо определить границы платы, импортировать все компоненты и предварительно их расположить. У нас нет требований к разъемам, поэтому на первом этапе лучше сам разъем удалить с платы. Так как каждый вывод разъема соединен через резистор, то резисторы и будут ориентиром выводов разъема. Также для расстановки компонент можно удалить все конденсаторы питания, кварцы, микросхемы питания (их лучше располагать на обратной стороне — там обычно много места) — это все можно расставить потом.

Теперь необходимо определить сторону кажого копонента. И примерно расположить их как необходимо, разъемы расположить у края. И на этом этапе можно все это перебросить в Topor и там продолжить размещение копонентов. USB разъем, светодиоды сразу располагаем на обратной стороне, все остальное на лицевой.

Размещение компонентов с помощью Topor

Теперь переносим это все в Topor и продолжаем там. Чем хорош Topor? Тем, что каждый раз, подвигав компоненты, можно перепроложить все трассы автоматически и посмотреть стало лучше или хуже. Также Topor умеет переворачивать простые компоненты — резисторы, конденсаторы. Нам важно понять как удобнее расположить выводы разъемов, и основные компоненты.

Покрутив и подвигав компоненты в Topor мы пришли к такому расположению:


Теперь необходимо этот результат перекинуть в Kicad обратно и добавить остальные компоненты. Перед финальной трассировкой необходимо:

  • расположить микросхемы питания

  • развести вручную цепи питания

  • распложить и подключить кварц, и конденсаторы питания

  • переопределить выводы разъема на схеме.

Автотрассировка

Перебрасываем нашу полутрассировку в Topor.

Необходимо сразу установить правила трассировки — ширину зазоров, дорожек, размеры переходных отверстий. При первом импорте из Kicad надо выделить все компоненты и зафиксировать их, чтобы можно было легко удалить кнопкой del и заново перепроложить трассировку, оставляя наш полуручной вариант. В параметрах автотрассировки обязательно необходимо установить галку «Использовать имеющуюся разводку в качестве начального варианта», иначе наши ручные трассы будут перепроложены (Сам процесс работы в Topor смотри на видео).

После автотрассировки перебрасываем все обратно и доводим до финального варианта — добавляем земляные полигоны, выравниваем где необходимо дорожки. Плата готова.

Финальный вариант платы

Лицевая сторона


Обратная сторона

 

Прошивка ST Link, установка драйверов

Плата готова, делаем ее методом холодного переноса тонера ацетоном (или любым другим), травим, собираем прибор. Перед первым включением, обязательно проверьте любым мультиметром, что между 5В и GND сопртивления нет (бесконечно велико) — это будет гарантировать, что нет короткого замыкания. Также надо проверить сопротивление между 3.3В и GND.

Для работы с нашим устройством необходимо установить драйвера, прошить его первый раз по UART стартовой прошивкой и потом обновить прошивку до последней версии специальной программой от ST.

Все микроконтроллеры STM32 имеют bootloader и прошиваются по UART. Для прошивки необходимо:

  • скачать с сайта ST программу «STM32 Flash loader demonstrator» по ссылке (необходимо зарегистрироваться у них на сайте).

  • установить ее, все как обычно — далее далее далее — готово.

  • подключить наш ST link для программирования временными проводками:

    • Соединяем выводы программирования PROG_RX и PROG_TX (см. схему в Kickad на github) и USB/UART модуль — наш RX на TX модуля, наш TX на RX модуля.

    • В USB ST Link не включаем, подключаем 5В с UART модуля и GND на любой наш разъем (например на разъеме SWIM есть 5В и GND) — то есть запитаем от нашего модуля (если у вас свой модуль без питания, то можно сразу подключить ST-Link в USB разъем, тогда надо будет только соединить TX и RX, только не забудьте на вашем модуле необходимо выбрать 3.3в)

    • Подключем BOOT0 на выход 3.3В (можно просто держать проводок при подключении питания) — это необходимо для перехода в bootloader

  • включаем USB/UART модуль в компьютер, указываем в программе Flash Loader наш COM порт, жмем далее — программа должна найти наш микроконтроллер, далее, выбираем download и загружаем прошивку STLinkV2.J16.S4.bin, выложенную на github прибора. Вот такие это выглядит в картинках:

    Тут выбираем 64К.

    а тут ставим переключатель на download и выбираем файл прошивки (маска файлов на *.bin)

Теперь у нас есть ST LINK, но со старой прошивкой. Убираем все провода. Скачиваем с сайта ST программу обновления прошивки STSW-LINK007 и драйвера STSW-LINK009 для windows. Вставляем новоиспеченный ST-Link в USB порт компьютера, и запускаем программу обновления прошивки, в ней жмем CONNECT и потом обновить прошивку до последней версии. Прибор ГОТОВ! Теперь у вас есть программатор-отладчик и можно перейти к программированию.

Готовое устройство

Радиоконструктор ST-Link в сборе. Так будет выглядеть твой самодельный ST Link - программатор STM8 и STM32

Набор для пайки в деле. Запаянный ST-Link. Готов к работе. Теперь вы готовы к программированию микроконтроллеров STM8

Самостоятельная работа

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

 

]]>
(Super User) Приборы Mon, 02 Jan 2017 12:36:00 +0000
Цифровая паяльная станция /index.php/pribory/item/19-payalnaya-stantsiya /index.php/pribory/item/19-payalnaya-stantsiya Цифровая паяльная станция

Специальный прибор для автоматической регулировки температуры жала обычного паяльника на 220в или для управления паяльным термофеном. Полностью цифровой вариант. Для измерения термопары используется самый современный метод - внешний 18-ти битный сигма-дельта ADC. Для управления вентилятором фена - ШИМ модуляция и MOSFET. PID регулятор температуры с возможностью различных настроек для фена и паяльника.

{autotoc}

Прежде чем начать

Прежде чем читать эту статью, рекомендуем вам ознакомится со следующей теорией:

Что такое паяльная станция

Паяльная станция — специальное оборудование предназначенное для осуществления пайки. В нашем случае - это устройство, которое обеспечивает стабилизацию температуры паяльника, термофена или любого другого нагревательного прибора, работающего от сети 220В.

Максимальная температура паяльника без терморегулирования составляет около 400 градусов. Для пайки SMD компонент это слишком много. Есть риск перегреть компоненты. Рекомендуемая температура составляет 250-300 градусов. Снизить температуру паяльника можно с помощью регулятора мощности — обычного диммера на 220В. Но при этом, вы снизите максимальную температуру паяльника, а в момент пайки, паяльник начнёт остывать и температура может упасть ниже 200 градусов. Олово перестанет плавиться, и пайка станет некачественной.

Более правильный метод — автоматическая регулировка температуры жала паяльника. Для работы такой схемы необходима обратная связь. Обычно используется термопара К типа для снятия температуры жала. Конец термодатчика должен быть зафиксирован на самом жале, максимально близко к кончику жала. Это несложно сделать на медном жале, просверлив отверстие и зажав конец термопары. Далее прибор должен считывать температуру термопары и регулировать мощность нагревателя. При этом, если жало начнёт остывать, то на паяльник будет подана большая мощность, а если наоборот, то меньшая и он начнёт остывать. Такой прибор и будет описан в этой статье.

По-большому счёту, прибор может управлять не только паяльником, а также термофеном, со встроенным вентилятором. Купить такой можно на aliexpress.

Hot Air Desolder Gun


Он уже содержит внутри термопару К типа, а также вентилятор. Перейдём к требованиям к прибору.

{product id=40}

Постановка задачи и требования к паяльной станции

Основные требования к прибору.

  • Компактный размер

  • Встроенный блок питания на 220В

  • Возможность определения типа нагревателя (2 прибора, паяльник и фен)

  • Цифровая регулировка мощности нагревателя на основе PID регулятора

  • Возможность управления паяльником постоянного напряжения до 24В

  • Возможность управления вентилятором термофена (4 скорости)

  • Управление нагрузкой целыми полуволнами, с учётом перехода через ноль (меньше помех)

  • Программная защита от перегрева нагревателя

  • Индикатор температуры и скорости вентилятора

  • Управление тактовыми кнопками

  • Защита от ложных срабатываний управляющего симистора

  • Максимальный ток нагрузки 3 А, что составляет 600 вт

Подбор компонентов для изготовления прибора своими руками

Компоненты для управления нагрузкой 220В

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

Подберём симистор для управления нагрузкой. Максимальная средняя мощность нагрузки составляет для паяльника около 100Вт, а для паяльного фена на 500 градусах около 400Вт (максимальная мощность около 700Вт, при этом фен достигает 800 градусов). Выберем обычный симистор (не логический), так как он более защищён от самопроизвольного открытия. BT139-800 — выбранный ключ. Из datasheet видно, что он может без радиатора управлять нагрузкой до 400Вт.

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

MOC3041 Schema
Отметим, что на всякий случай, следует не включать в одну розетку электродвигатель и паяльную станцию! Симистор может самопроизвольно открыться. Паяльнику в этом случае ничего не будет. А вот фен паяльный может сгореть.

Блок питания микроконтроллера

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

Отлично подходят готовые блоки питания светодиодных лент на 12В. На выходе они выдают стабилизированное напряжение 12В. Возьмем B2M003ESB мощностью 3Вт (до 250мА) от компании Ecola. Без защитного кожуха его размер составляет всего 18х25х38 мм.

Power module
Разместим такой блок питания прямо в корпусе паяльной станции. В итоге получим компактный прибор без лишних модулей.

Индикатор

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

Цепь измерения температуры с помощью термопары

Для измерения температуры с помощью термопары используем схему аналогичную прибору измеритель уф индекса и температуры. В основе очень точный внешний ADC mcp3421. В дополнение к нему датчик измерения температуры воздуха NCT75 (можно обойтись и без него, в комнате в основном всегда 22-25 градусов, но стоит он недорого, пусть будет).

Управление этими датчиками идёт по шине I2C.

Микроконтроллер

Подойдёт самый простой и дешёвый микроконтроллер — STM8S003F3. Шина I2C — есть, остальные выводы стандартные.

Регулятор питания микроконтроллера

Питание микроконтроллера и датчиков составляет до 5В. Поэтому нужен понижающий регулятор питания с 12В (а лучше с 24В до 5В). Падение напряжение здесь большое, но ток маленький, поэтому отлично подойдёт регулятор серии L78M05. Корпус лучше взять DPAK для лучшего рассеивания тепла.

Максимальное входное напряжение у него составляет до 35В. Но при это значении на нем будет теряться (35В — 5В) * 100 мА = 3Вт тепла. Что конечно очень много. Надо или снижать потребляемый ток или снижать напряжение. Снизим напряжение до 24В — для случая питания всей схемы от блока питания паяльника постоянного тока. 2Вт он выдержит при большой медной площади на плате. Но лучше ещё побороться за потребляемый ток (за счёт динамической индикации).

Силовые разъёмы

Так как мы работаем с 220В, то будем использовать мощные разъёмы серии minifit. Рабочее напряжение до 600В.

MINIFIT R8


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

Корпус

Подберём готовый компактный корпус. Компания Sanhe делает отличные корпуса на защёлках, у них доступно все внутреннее пространство. Подойдёт корпус 20-11. В нем сможет поместиться и блок питания и плата управления. Внешний размер составляет всего 100x60x25мм.

Sanhe 20-11




Составляем схему паяльной станции

Все основные компоненты определены. Можно составлять схему прибора. Как во всех цифровых приборах, делать это совсем не сложно. По сути соединяем модули согласно datasheet на каждую микросхему.

Schema Indicator
Индикатор подключаем также как в приборе кухонный таймер. Чтобы он поярче светился, поставим резисторы 300 Ом. Таким образом, максимальный ток при одном светящемся сегменте в цифре составит около 15мА при 5В питании. На три цифры 45мА. Средний ток можно сильно снизить за счёт программного снижения яркости.

Schema mcp3421 ADC


Датчики подключаем, как обычно, к питанию и к шине I2C. Шина I2C подтянута к питанию через резисторы 10кОм. На цепях питания, как можно ближе к выводам микросхем, керамические конденсаторы.

Schema ADC switchs
Выводов у МК не хватает, поэтому кнопки «повесим» на вход ADC. Тогда все кнопки можно обслужить одним выводом. 4-х кнопок хватит. Резисторы в 10 кОм подойдут.

Schema MOC3041
Управление 220В идёт через оптосимистор, по схеме согласно datasheet. С точки зрения МК это обычный светодиод, ток необходимый для надёжного открытия составляем 15мА, подойдёт резистор 220 Ом.

Schema L78m05


Регулятор питания на 5В подключаем по типовой схеме.


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

Паяльный фен может иметь обычный мотор постоянного тока в качестве надува воздуха, а может иметь маломощный моторчик (как в выбранном варианте) на 12В, который управляется низкочастотным ШИМ ом (до 100Гц). В случае обычного мотора дополнительно нужен диод D2. Для выбранного варианта фена он не нужен.


Так как прибор работает с напряжением 220В, то необходим предохранитель. Прибор может питаться от сети 220в, от встроенного блока питания, а также от внешнего БП постоянного тока паяльника постоянного тока напряжением до 24В. Поэтому необходим диод D1, чтобы в случае питания от БП паяльника ток не уходил в цепи внутреннего блока питания.


На внешний разъем, дополнительно выведем два вывода которые позволят МК определить, что подключено — фен или паяльник. Если выводы mark1 и mark2 замкнуты, то на выводе mark при включённой внутренней подтяжке будет 0, иначе 1. На разъем также выведем питание вентилятора (или паяльника постоянного тока), термопару, и ten1 ten2 — управление 220В.


На отдельный маленький разъем выведем внешнее питание — или 220В или 24В от БП паяльника.

Schema STM8S003F3P
Ну и сам МК. С ним все просто. Цепи питания, резистор 10 кОм на цепь сброса для большей надёжности, для определения типа оборудования будем использовать вывод программирования SWIM. Кнопки выведены на ADC — вывод PC4. ШИМ сигнал и управление симистором на выводы таймеров TIM2 TIM1.

Особенности трассировки печатной платы

Трассировка платы проходит без особенностей, за исключением части 220В.

PCB HomeMade
При трассировке необходимо помнить про расстояния между проводниками. На печатной плате оно должно быть больше 1мм. Рассчитывается оно по пиковому напряжению в сети - 220 * 1,4 = 310В, по следующей таблице:

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

Программа для микроконтроллера

Структура файлов проекта

Программа написана в среде ST Visual develop IDE. Полный проект вы можете скачать с github данного прибора, папка solderstation. В статье мы разберём ключевые моменты работы программы.

Проект создан на основе библиотеки SPL для STM8 от ST. Подробное описание как развернуть проект вы найдёте в этой статье. Вся программа содержится в файле main.c. Остальные файлы остались без изменений.

Общее описание программы

Алгоритм работы программы.

  1. При включении производится настройка всей периферии. На индикаторе отображается подключённое оборудование FFF(фен) или PPP (паяльник), и система переходит в рабочий режим.

  2. Основной цикл. Обработка кнопок

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

    2. Нижний ряд кнопок - регулировка скорости фена

    3. Верхний ряд кнопок — короткое нажатие +\- 10 градусов, долгое нажатие +\- 100 градусов

    4. После изменения режима отображаем 2 сек выбранный режим (заданную температуру или скорость фена от 1 до 4)

  3. Основной цикл. Каждые 300мс. Получаем данные температуры. Вызываем функцию ПИ регулятора и он рассчитывает мощность нагревателя.

  4. Прерывание миллисекундного таймера 4. Управляем нагревателем.

  5. Прерывание таймера 2. Управление индикатором.

  6. Прерывание таймера 1. Управление ШИМ вентилятора.

Инициализация

Как обычно, настраиваем нужную периферию, рабочую частоту микроконтроллера, все выводы.

[code]CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);//2mghэнергосбережение
//индикатор
GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW);
GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW);
GPIO_Init(GPIOC,GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_OUT_PP_HIGH_SLOW);

GPIO_WriteHigh(GPIOC,GPIO_PIN_1);
GPIO_WriteLow(GPIOA,GPIO_PIN_2);

GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);//PWM FAN
GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);//Spiral
[/code]

Кнопки опрашиваются с помощью ADC. Настроим его работу. Вывод как обычный вход. Конвертация в ручном режиме по команде.

[code]GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_IN_FL_NO_IT);//кнопка!
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_2,ADC1_PRESSEL_FCPU_D2, \
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL2,\
DISABLE);
ADC1_Cmd(ENABLE);
[/code]

Таймер 4 — миллисекундный.

[code]TIM4_TimeBaseInit(TIM4_PRESCALER_8, 249);
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4->IER |= (uint8_t)TIM4_IT_UPDATE;
[/code]

Таймер 2 тоже миллисекундный для управления индикатором.

[code]TIM2_TimeBaseInit(TIM2_PRESCALER_8, 249);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
TIM2->IER |= (uint8_t)TIM2_IT_UPDATE;
[/code]

Таймер 1 — для ШИМ сигнала управления вентилятором. Для управления вентилятором нужен ШИМ низкой частоты. 55Гц вполне подойдет.

[code]	TIM1_DeInit();
TIM1_TimeBaseInit(36000, TIM1_COUNTERMODE_UP, MAXPWM, 0);
TIM1_CCPreloadControl(DISABLE);

TIM1_BDTRConfig(TIM1_OSSISTATE_DISABLE,
TIM1_LOCKLEVEL_OFF,
0,
TIM1_BREAK_DISABLE,
TIM1_BREAKPOLARITY_LOW,TIM1_AUTOMATICOUTPUT_DISABLE);
TIM1_OC1Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_DISABLE,TIM1_OUTPUTNSTATE_DISABLE, 0, TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET,TIM1_OCNIDLESTATE_RESET);
/* TIM1 counter enable */
TIM1_CtrlPWMOutputs(DISABLE); //выводы будемпереключать в прерывании
TIM1_Cmd(ENABLE);
TIM1_ITConfig(TIM1_IT_UPDATE|TIM1_IT_CC1, ENABLE);
[/code]

Стандартная настройка для I2C.

[code]I2C_Cmd( ENABLE);
I2C_Init(I2C_MAX_STANDARD_FREQ, (uint8_t)0xA0, I2C_DUTYCYCLE_2,I2C_ACK_CURR, I2C_ADDMODE_7BIT, 7);
[/code]

Инициализируем датчики температуры.

[code]mcpinit();
nctinit();
[/code]

Внешний ADC для термопары настраиваем на максимально точный режим 18 бит 3.75 измерения в секунду и усиление в 8 раз.

[code]	buff[0] = (uint8_t) 0b00011111;
if( ! I2C_writenbyte((uint8_t)MCPaddr, buff, 2,0) )
[/code]

Если подключён фен паяльный — то выводим на индикатор FFF иначе выводим PPP

[code]	if (fan==0) {
ind[0] = 10;//P
ind[1] = 10;//P
ind[2] = 10;//P
} else {
ind[0] = 11;//F
ind[1] = 11;//F
ind[2] = 11;//F
}
[/code]

На этом инициализация заканчивается.

ПИ регулятор

Температура паяльника (или фена) регулируется ПИ регулятором. Более подробно о том, что это такое можно прочитать в этой статье. Здесь разберём конкретную реализацию для этого прибора.

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

[code]s16 PI_Regulator(s16 hReference, s16 hPresentFeedback)
{
s32 wError, wProportional_Term,wIntegral_Term, houtput_32;
s32 wIntegral_sum_temp;

// error computation
wError= (s32)(hReference - hPresentFeedback);

// Proportional term computation
wProportional_Term = hKp_Gain * wError;

// Integral term compuztation
if (hKi_Gain == 0)
{
wIntegral = 0;
}
else
{
wIntegral_Term = hKi_Gain * wError;
wIntegral_sum_temp = wIntegral + wIntegral_Term;

if (wIntegral_sum_temp > 0)
{
if (wIntegral < 0)
{
if (wIntegral_Term < 0)
{
wIntegral_sum_temp = S32_MIN;
}
}
}
else
{
if (wIntegral > 0)
{
if (wIntegral_Term > 0)
{
wIntegral_sum_temp = S32_MAX;
}
}
}

if (wIntegral_sum_temp > wUpper_Limit_Integral)
{
wIntegral = wUpper_Limit_Integral;
}
else if (wIntegral_sum_temp < wLower_Limit_Integral)
{
wIntegral = wLower_Limit_Integral;
}
else
{
wIntegral = wIntegral_sum_temp;
}
}

houtput_32 =(wProportional_Term/hKp_Divisor+wIntegral/hKi_Divisor);

if (houtput_32 > hUpper_Limit_Output)
{
houtput_32 = hUpper_Limit_Output;
}
else if (houtput_32 < hLower_Limit_Output)
{
houtput_32 = hLower_Limit_Output;
}
return((s16)(houtput_32));
}
[/code]

В результате опытной настройки регулятора для паяльного фена мощностью 700Вт получились следующие коэффициенты:

[code]#define hKp_Divisor 512
#define hKi_Divisor 2000

s16 hKp_Gain=230;
s16 hKi_Gain=20;

#define hUpper_Limit_Output (s32)70
#define hLower_Limit_Output (s32)0
[/code]

Регулятор возвращает мощность в интервале от 0 до 70. При максимальной мощности фен паяльный нагревается до 700 градусов (установлено опытным путём). Все эти коэффициенты вы обязательно должны настроить под свой управляемый прибор. Начинать нужно с нулевого iGain и небольшого pGain. Предварительно установив небольшую максимальную мощность.

Управление индикатором

В этой статье не будем разбирать динамическое управление светодиодным индикатором, оно полностью идентично, используемому в приборе Кухонный таймер.

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

[code]	if ((kn[3] == KNONE) || (kn[3] == KNLONG)) {
kn[3]=0;
speedfan++;
if (speedfan>4) speedfan=4;

//hKi_Gain +=1;

timeshownext=2;
showinfo(0);
}
[/code]

При нажатии третьей кнопки увеличиваем скорость вентилятора, устанавливаем время показа информации 2 секунды (переменная timeshownext) и вызываем функцию, которая отображает нужную информацию showinfo().

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

[code]	if (timeshownext==0) {
timeshownext= 1;

showinfo(10);
}
[/code]

Идентификация вида нагревателя — паяльник или паяльный фен

Как проводится идентификация вида нагревателя? На силовом разъёме, которым подключается управляемый прибор, есть два вывода, которые можно замкнуть на стороне паяльника в кабеле (mark1 mark2) и таким образом сообщить прибору, что подключено устройство другого типа.

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

Вывод SWIM по умолчанию имеет подтяжку к HIGH (к линии питании) по datasheet через встроенный резистор номиналом около 40кОм. Поэтому для идентификации используется резистор 10кОм. Есть два варианта:

  1. подтяжка — будет 1 на этом выводе

  2. замыкание вывода на землю через резистор 10 кОм (когда mark1 и mark2 замкнуты), будет гарантированный 0 на выводе.

Таким образом, прочитав состояние данного вывода, можно определить, что мы подключили — паяльный фен или паяльник. Зачем это нужно? Каждое устройство имеет различную мощность и отсюда будет иметь различные коэффициенты ПИ регулятора. Вот их и надо менять при выборе прибора.

Управление мощностью нагревателя

Прибор управляет очень инерционным устройством — нагревателем. Управление осуществляется с помощью полных полуциклов. Минимальный интервал регулирования — 50мс. ПИ регулятор на выходе выдаёт дискретную мощность, и чем большее количество различных значений будет доступно, тем более плавная и точная регулировка температуры будет получена. Опытным путём установлено, что для паяльного фена необходимо минимум 20 градаций мощности. При меньшем количестве регулирование получается дёрганым. Одна градация будет соответствовать 100 мс работы нагревателя. Получается, что при максимальной мощности нагреватель должен работать 2 сек. Получается какое-то несоответствие: ПИ регулятор вызывается каждые 300мс (когда мы получаем новое измерение температуры), мощность нагревателя мы регулируем интервалами по 100 мс и аж до 2 сек. Как же это все работает? Разберём часть программы ответственную за управление мощностью нагревателя.

Управление нагревателем осуществляется в прерывании основного миллисекундного таймера.

[code]if (spiralpower==0) {
//выключаем спираль или паяльник
GPIOA->ODR &= (uint8_t)(~GPIO_PIN_3);
spiraltime=0;
spiralon=0;
[/code]

Если вдруг мощность спирали стала равна нулю, то выключим нагреватель.

[code]	} else {
u16 timeon;
u16 timeoff;

spiraltime++;
[/code]

Переменная spiraltime отражает количество миллисекунд, которое нагреватель был включён или выключен. Поэтому каждое прерывание увеличиваем её на единицу.

[code]		timeon = 2000 * spiralpower/100;
timeoff = 2000 - timeon;
[/code]

Далее, по заданной мощности, которая хранится в переменной spiralpower, вычисляем время включённого состояния нагревателя и время выключенного в интервале 2 секунды. Чем больше мощность, тем больше время включённого нагревателя в течение 2 секунд. На полной мощность прибор будет включён все время.

[code]		if (spiralon) {
//ждем выключения! и если насталовремя выключаем!
if (spiraltime > timeon) {
spiraltime = 0;
GPIOA->ODR &= (uint8_t)(~GPIO_PIN_3);
spiralon = 0;
}
[/code]

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

[code]	} else if (spiraltime > timeoff) {
spiraltime = 0;
GPIOA->ODR |= GPIO_PIN_3;
spiralon = 1;
}
[/code]

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

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

Как же ПИ регулятор, который вызывается раз в 300 мс, может задать такое малое значение включение нагревателя в 100мс? Очень просто, прямой связи между частотой вызова регулятора и частотой управления нагревателем нет! Но эти параметры влияют на скорость реакции регулятора. Конечно, если у нас есть задача получить быстро реагирующий регулятор, то необходимо, чтобы частота управления мощностью была равна или больше частоты самого регулятора. Здесь же в паяльнике или фене в этом нет необходимости. Реакции в рамках двух секунд вполне достаточно.

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

Опрос 4-х кнопок по одному выводу с помощью ADC

Так как в этом приборе все выводы микроконтроллера заняты, а одной кнопки явно мало, то используется приём опроса кнопок с помощью ADC (вольтметра). Кнопки подключены через резисторный делитель и в зависимости от того, какая кнопка нажата на выводе МК будет различное напряжение. Это напряжение будем считывать модулем ADC и сверять с фиксированными значениями.

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

[code]	if (kndtime==0) {
u8 knall=0;
//u16 adcval;
//опрос кнопок редко для избежаниядребезга
kndtime = KNDTIME;
//кнопки на ADC - прочитаем и выяснимкакая кнопка нажата
ADC1_StartConversion();
while( ADC1_GetFlagStatus(ADC1_FLAG_EOC) == RESET);
adcval = ADC1_GetConversionValue();
[/code]

Когда пришло время опросить кнопки, стартуем измерение ADC и ждём пока оно будет завершено. Одно измерение занимает около 5 мкс, так что не влияет на таймер.

[code]		if (adcval < 10 )  {knall |= GPIO_PIN_0;}
else if (adcval < 550 ) {knall |= GPIO_PIN_1;}
else if (adcval < 700 ) {knall |= GPIO_PIN_2;}
else if (adcval < 800 ) {knall |= GPIO_PIN_3;}

knall = ~knall;

knint(0, knall, GPIO_PIN_0);
knint(1, knall, GPIO_PIN_1);
knint(2, knall, GPIO_PIN_2);
knint(3, knall, GPIO_PIN_3);
[/code]

После измерения проверяем какая кнопка нажата и устанавливаем нужный бит в переменной knall (аналог регистра GPIO). И это значение отдаём в процедуру расчёта нажатий кнопок. В итоге опрос ADC сведён к анализу состояния обычного порта.

Сами значения в лесенке измерения проще устанавливать через отладчик. Подключаем, нажимаем кнопку и смотрим чего вышло. Добавляем 5-10 единиц на погрешность и фиксируем в коде.

Как сделать цифровую паяльную станцию своими руками

Делаем плату и все запаиваем

  1. Подготовить или приобрести необходимые инструменты: все для пайки, ST-LINK (будет нужен для программирования и отладки МК)

  2. Внимательно прочитать статьи из раздела Обязательная теория.

  3. Скачать необходимые файлы по данному прибору с github.

  4. Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

  5. Приобрести все необходимые комплектующие.

  6. Запаять все компоненты на плату, смотри наше видео.

  7. Плата готова!

Для программирования лучше припаять (на специальную площадку PRG) провод с разъёмом пин терминал, запаянный в термоусадочную трубку — получится удобный разъем для программирования.

Отладка и настройка прибора

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

На этапе настройки и тестирования лучше не работать с питанием 220В, а все проверить при питании от ST-Link напрямую. Что можно протестировать в этом режиме:

  • работу измерителя термопары

  • работу индикатора

  • работу кнопок

  • работу управляющего оптосимистора — наличие нужного напряжения на управляющих выводах

  • работу аварийного режима — сброс управления в случае превышения температуры

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

220В — ОПАСНОЕ ДЛЯ ЖИЗНИ НАПРЯЖЕНИЕ!

ВСЕ РАБОТЫ ПРОВОДИТЬ ПОД ПРИСМОТРОМ ВЗРОСЛЫХ!

Для начала необходимо проверить вольтметром работу блока питания — он должен выдавать 12В постоянного напряжения. Только после проверки его работоспособности можно припаивать его к плате и устанавливать в корпус!

Далее можно переходить к проверке схемы управления нагревателем. На первом этапе следует подключить вместо нагревателя лампочку. Термопару можно оставить в свободном состоянии — она будет показывать около 25 градусов. При таком режиме работы любая заданная температура больше 30 градусов вызовет работу лампочки на полную мощность, а ниже 20 градусов — её выключение. Если в таком режиме все работает. То можно переходить к управлению нагревателем.

Лучше всего проверять работу прибора на паяльнике! Потому что, даже при постоянном подключении к сети 220В он не достигнет опасной температуры, а также его мощность относительно мала для повреждения симистора. На нем можно отладить все режиме ПИ регулятора и работы паяльной станции.

Только после этих тестов можно переходить к управлению паяльным феном. Имейте в виду, что постоянно включенный фен потребляет около 700 Вт энергии. Это очень много. Температура очень быстро достигнет 800 градусов и ручка может расплавиться. Все это приведёт к выходу из строя прибора и может привести к пожару!

Настройка работы с паяльным феном нужно начинать с управления вентилятором — он должен всегда работать. Включать паяльный фен без работающего вентилятора нельзя! После работы вентилятора необходимо в программе поставить ограничение максимальной мощности и проверить что фен не перегревается в этом режиме. После этого можно уже более точно настраивать ПИ регулятор с помощью кнопок (дописав программу) или в отладчике.

Если у вас есть желание управлять более мощной нагрузкой — обязательно использовать радиатор на симисторе!

Установка в корпус

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


Рядом просверлить 4 отверстия под кнопки. Так как сами кнопки находятся ниже крышки корпуса, то необходимо их удлинить. Это не сложно сделать с помощью пластмассовых прутиков. Соединить их с кнопками можно с помощью изоленты или термоусадки. Дополнительно можно посадить на суперклей. Если будете это делать, то обязательно кнопку переворачивайте ножками вверх, чтобы клей не затёк в механизм кнопки!




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

Прибор готов. На нашем канале вы можете посмотреть его в работе. Удачной пайки!

Приобретённые навыки

Пайка: пайка корпуса TTSOP, пайка корпуса SOT-23-5, пайка выводных компонент, пайка силовых разъёмов minifit.

Схемотехника: светодиодный индикатор, подключение нескольких кнопок одним проводом, управление приборами 220В, измерение температуры термопары.

Программирование: считывание состояния нескольких кнопок с помощью ADC, миллисекундный таймер, ПИД регулятор

Самостоятельная работа

Вы можете самостоятельно доработать функции паяльной станции. Идеи для доработки:

  • Дописать работу прибор с двумя нагревателями — феном и паяльником (в прилагаемых исходных файлах реализовано только управление паяльным феном)

  • Дописать работу прибора в случае управления паяльником постоянного тока 24В с помощью ШИМ модуляции.

]]>
(Super User) Приборы Mon, 11 Sep 2017 09:45:10 +0000
Умный индикатор /index.php/pribory/item/35-umnyj-indikator /index.php/pribory/item/35-umnyj-indikator Умный индикатор

Будем делать свой индикатор, произвольной формы из smd светодиодов. Компактный — минимальный размер 20х20 мм при толщине всего 2 мм. Низкое энергопотребление — 1-10 мА в работе, 5мкА в спящем режиме. Независимое управление каждым светодиодом по одному проводу. Управление яркостью — более 100 градаций яркости. До 100 светодиодов в индикаторе, с произвольным расположением на плате. Возможные конструкции — две шкалы по 8 светодиодов и 4 служебных светодиода; индикация сторон света - 8 светодиодов по кругу и 4 служебных; часы - 12 светодиодов по кругу; матрица 8х8 светодиодов.

{autotoc}

Прежде чем начать

Прежде чем читать эту статью, рекомендуем вам ознакомится со следующей теорией:

Постановка задачи, требования к самодельному индикатору

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

  • низкое энергопотребление в спящем режиме

  • управление одним МК большим количеством светодиодов

  • управление каждым светодиодом независимо

  • управление яркостью

  • минимальное количество компонент — в идеале МК и светодиоды

  • одностороннее размещение на плате — для более тонкого исполнения

  • управление индикатором по одному проводу

  • диапазон питания 3-5в

Таким образом, вы сами сможете расположить светодиоды на плате как вам необходимо. Например, в форме сердечка или ёлочки. Для управления достаточно подключить 3 провода — GND, VDD, и управляющий вывод. Управлять можно будет каждым светодиодом независимо.

{product id=33}

Подбор компонентов

Светодиоды

Будем использовать обычные smd светодиоды различных цветов формата 0603. Его легко паять, он ярко светит, легко купить.

Интерфейс общения

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

Начинается посылка с сигнала RESET. Первый байт — служебный, перевод в спящий режим или задает яркость светодиодов. Далее нужное количество байт, по одному биту на каждый светодиод. Например, для 24 светодиодов, одна посылка занимает 400 мкс + 60мкс * 32 = 2 мс, что вполне достаточно даже для мигания светодиодами.

Микроконтроллер

Продолжаем эксплуатировать STM8. Выбираем исключительно по цене. Индикатор должен быть не дорогим. Конечно хотелось бы больше ног, но в этом случае получается дороже цена. Ну и потом, разместить большое количество светодиодов компактно, на одной стороне — не так просто. Так что, хватит самого простого МК stm8s003. Данный МК дает широкий диапазон питания от 3 до 5В.

Если бороться за энергопотребление, то лучше взять серию stm8l, но цена МК будет в два раза дороже. Также снизится напряжение питания, нельзя будет подключить напрямую от 5В.

Составляем схему

Обвязка МК стандартная. Сам МК, пару конденсаторов и все. А вот со светодиодами будем использовать чуть модернизированную методику чарлиплексинга. Выделим несколько выводов МК как управляющие. Минимум один. Остальные выводы МК рабочие, не больше 20, иначе будет низкая яркость. Каждый управляющий вывод снабдим резистором, рассчитанными на максимальную яркость светодиода из расчёта 5 вольтового питания 220Ом. Между каждым управляющим выводом, после резистора, и рабочим выводом МК разместим по 2 светодиода, навстречу друг другу разной полярностью. Получится такая схема.


Как управлять светодиодами в такой схеме? Чтобы зажечь один светодиод, необходимо на управляющем выводе подать 0, а на рабочем 1. Чтобы зажечь другой светодиод из пары, надо на управляющем подать 1, а на рабочем 0. Чтобы оба погасить, на управляющем может быть любой сигнал, а рабочий надо перевести в такое же состояние или в режим входа. Выводы PB4 и PB5 не могут иметь 1, поэтому там может быть только по одному светодиоду. Вывод PA1 во время сна переводится в input pull-up, это надо иметь ввиду. Одновременно можно зажигать только один светодиод на один управляющий вывод, иначе они могут выйти из строя. У нас 14 выводов. Итого, например, если будет 4 управляющих и 10 рабочих — то будет 80 светодиодов, а если 6 управляющих и 8 рабочих — то 96. Так что, можно считать, что ограничение — это ваше желание паять столько светодиодов и возможность разместить их на плате. Для реальных проектов хватит 20-30 светодиодов.

Вывод PRG будем использовать для управления. Он будет находится в режиме input pull-up. А общаться будем по протоколу 1-wire. Так что, это не будет мешать программированию. При такой схеме — у нас всего 1 резистор на 20 светодиодов. Очень удобно!

Примеры готовых индикаторов

Велокомпьютер

Для нашего прибора велокомпьютер, можно использовать индикатор — две шкалы, и четыре светодиода. Одна шкала красная, отражает скорость, вторая шкала зеленая отражает каденс. На второй шкале можно отражать процент потраченных калорий от запланированных. Информационные светодиоды можно использовать так: один верхний светодиод — синий, показывает состояние блютус; два верхних светодиода — красные — отражают нарушение скорости и каденса. Получается такая плата, ровно под корпус.


А так в корпусе. Под каждый светодиод сверлим отверстие 1.5 - 2 мм. Это очень легко сделать, если к корпусу приклеить распечатку платы, она будет шаблоном для сверления. Можно расточить эти отверстия в одну общую щель. На внутреннюю часть корпуса можно приклеить прозрачный пластик (например от DVD диска). Можно залить щель прозрачной эпоксидкой.

В таком формате можно разместить его на руле и будет отлично видно текущую скорость и каденс. Потребление такого индикатора в дороге будет около 2 мА. В спящем режиме добавит еще 5 мкА.

GPS трекер

Для GPS трекера индикатор будет состоять из 8 ми светодиодов красного цвета по кругу — для обозначения направления. Четыре светодиода сверху будут отображать записанные в память точки и активную точку. Размер 2х2 см. Толщина 2мм. Отлично разместится в таком небольшом корпусе.


А так он будет выглядеть в собранном приборе.

 

Ваш индикатор

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

Примеры индикатора:

  • шкала по кругу для роторного энкодера

  • часы и минуты — два круга светодиодов 24 светодиода

  • несколько шкал громкости на разные каналы

  • отображение уровня жидкости в процентах и различные статусные светодиоды

  • компактное отображение количества подключенных датчиков

  • матрица 8 х 8 из светодиодов — отображаем динамические картинки

  • ваш логотип из светодиодов

Программа

Программу как обычно пишем в среде ST Visual Develop, на основе стандартной библиотеки.

Общая логика работы программы

Для работы программы будем использовать два таймера — один для протокола 1-wire, с минимальной градацией 8 мкс, и второй для динамической индикации, с частотой 1000 Гц и PWM режимом. Сам МК будет работать на частоте 2МГц, от внутреннего генератора.

Для управления светодиодами будем использовать механизм динамической индикации. Каждый рабочий вывод по сути будет сегментом. Итого максимальная яркость, которую мы можем получить, будет равна яркости одного светодиода поделённой на количество всех светодиодов и умноженное на количество управляющих выводов. Например, если у нас 10 светодиодов и один управляющий вывод с резистором, то яркость будет 1/10 от максимальной. Светодиоды светятся довольно ярко, так что для индикатора это вполне достаточная яркость.

Для управления каждым светодиодом создадим массив по числу светодиодов. Единица в этом массиве будет означать, что светодиод горит. Далее все просто. При включении настроим всю периферию и перейдём в спящий режим. По прерыванию, на входе 1-wire, просыпаемся, получаем посылку и начинаем управлять светодиодами. Если получили команду — спать, то выключаем все и спим.

Инициализация

Как обычно, отключим всю периферию и перейдем на частоту 2 МГц. Таймер TIM2 будем использовать для динамической индикации.

[code]	CLK->PCKENR1 = CLK_PCKENR1_TIM4+CLK_PCKENR1_TIM2;
CLK->PCKENR2 = 0b01110011;

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);

TIM2_TimeBaseInit(TIM2_PRESCALER_16, 124);//1000Гц.
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
TIM2->IER |= (uint8_t)TIM2_IT_UPDATE | TIM2_IT_CC1;

TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_DISABLE,124,TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
TIM2_ARRPreloadConfig(ENABLE);
[/code]

Для регулирования яркости будем использовать PWM режим таймера TIM2. Разрешение PWM нам высокое не нужно, сделаем 124 градации яркости. В начале яркость максимальная. Частота таймера 1000 Гц. Прерывания будут задействованы по обновлению таймера и по сравнению со значением PWM скважности.

Для приёма команд по протоколу 1-wire будем использовать таймер TIM4. Его задача будет отсчитать таймаут и определить первый стартовый сигнал RESET. Настраиваем его в одиночный режим, то есть по окончанию отсчёта он остановится и все. Прерывания на нем нам не нужны.

[code]	TIM4_Cmd(DISABLE);//для приема 1-wire
TIM4_TimeBaseInit(TIM4_PRESCALER_16, 200);//8 микросекунды один тик до 1600мкс - как таймаут!
TIM4_SelectOnePulseMode(TIM4_OPMODE_SINGLE);//одиночныйрежим
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4->CNTR=0;
[/code]

Сам таймер пока остановлен, значение счётчика обнулено. Максимальное значение 1600 мкс. Для корректной работы протокола 1-wire необходимо установить срабатывания прерывания на управляющем выводе на FALL_ONLY (по падению сигнала) и установить максимальный приоритет данному прерыванию, чтобы нас ничего не отвлекало при декодировании сигнала.

[code]	EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,EXTI_SENSITIVITY_FALL_ONLY);//самыйвысокий приоритет имеет
ITC_SetSoftwarePriority(ITC_IRQ_TIM2_OVF, ITC_PRIORITYLEVEL_2);
ITC_SetSoftwarePriority(ITC_IRQ_TIM4_OVF, ITC_PRIORITYLEVEL_2);
ITC_SetSoftwarePriority(ITC_IRQ_PORTD, ITC_PRIORITYLEVEL_3);
[/code]

Дальше инициализируем все выводы. Ставим их как PUSH PULL и значение 0. Это самый лучший вариант для сна, наименьшее энергопотребление. Вывод для управления индикатором ставим как PULL_UP с прерываниями (этот вывод SWIM).

[code]	//GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_IN_PU_IT);//приемсигнала! для тестирования!
GPIO_Init(GPIOD,GPIO_PIN_1,GPIO_MODE_IN_PU_IT);//приемсигнала!

sleep();
[/code]

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

[code]void sleep(void) {
stoptim = 1;//чтобы не менять индикацию
//переключаем все выводы на GND
//переходим в спящий режим
GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);
GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_SLOW);
GPIO_Init(GPIOC,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_OUT_PP_LOW_SLOW);
GPIO_Init(GPIOB,GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_OUT_OD_LOW_SLOW);

halt();
stoptim = 0;
}
[/code]

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

Динамическая индикация

С динамической индикацией вы уже умеете работать. Подробно мы её рассматривали в приборе Кухонный таймер. Обработка ведётся в обработчике прерывания TIM2. В данном приборе мы будем использовать возможность данного таймера работать в PWM режиме. Это позволит нам удобно управлять яркостью светодиодов.

Давайте немного посчитаем. Допустим мы решили управлять одним управляющим выводом сразу 20 светодиодами. В случае динамической индикации нам придётся последовательно включать каждый светодиод и так пока не переберём все 20. Если частота таймера у нас будет 1000 Гц, то итоговая частота мигания одного светодиода будет 1000 / 20 = 50 Гц. Этого вполне достаточно, но ниже опускать не стоит — будет заметно мерцание. Если в этом случае поступить как мы делали в кухонном таймере, то есть добавлять пустых циклов, то для управления яркостью надо будет поднять частоту таймера до 10 000 Гц и выше. При нашей частоте процессора в 2 МГц, это становится проблемой. Поэтому самый правильный вариант использовать PWM режим. В этом случае все относительно просто. С частотой в 1000Гц мы перебираем каждый светодиод и включаем его, а потом по прерыванию Capture and Compare, мы выключаем все светодиоды. В таком выбранное максимальное число в таймере ARR = 124 будет служить нам градациями яркости. Стоит отметить, что при нашей не высокой частоте процессора, мы должны успеть обработать логику включения нужного светодиода. Минимальная яркость у нас должна быть больше чем процедура обработки. Можно подобрать опытным путем — для 20 светодиодов, например, это 8 единиц при такой настройке таймера.

Теперь перейдем к обзору самой процедуры.

[code]INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
if (stoptim)
{
TIM2->SR1 = (uint8_t)(~TIM2_IT_UPDATE);
return;
}

//милисекунды
if (timedelay) timedelay--;

//все выкл!
GPIOA->DDR &= (u8) (~ (GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3));
//GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_MODE_IN_FL_NO_IT);
GPIOD->DDR &= (u8) (~(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6) );
//GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_IN_FL_NO_IT);
GPIOC->DDR &= (u8) (~(GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7) );
//GPIO_Init(GPIOC,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_IN_FL_NO_IT);
GPIOB->DDR &= (u8) (~ (GPIO_PIN_4|GPIO_PIN_5) );
//GPIO_Init(GPIOB,GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_IN_FL_NO_IT);
}
[/code]

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

Все будет зависеть от вашей схемы подключения светодиодов. Разберём на примере схемы, приведённой выше (см. раздел Схема). Согласно схеме у нас 2 управляющий вывода и 3 рабочих. Значит одновременно мы можем зажечь 2 светодиода. Таким образом, наши выводы можно разбить на пары (lx_uprx) - (l1_upr1 + l2_upr2), (l1_upr2 + l2_upr1), (l3_upr1+l3_upr2). Каждую пару надо задействовать по два раза меняя полярность. Итого получается общее количество светодиодов поделить на количество управляющих выводов состояний = 6 состояний.

Необходимо в конструкции switch case перебрать их все. Получится такой код.

[code]switch (numind) {	
case 0:
if (ind[0] ) GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_OUT_PP_LOW_SLOW);
if (ind[6]) GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);
GPIO_Init(GPIOD,GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_SLOW);//все управляющие включили на HIGH
break;

case 1:
if (ind[1] ) GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW);
if (ind[7]) GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);

GPIO_Init(GPIOD,GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_SLOW);//все управляющие включили на GND
break;

….. и так далее
}

numind++;
if (numind==6) numind=0;
[/code]

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

Для управления яркостью, просто будем выключать все светодиоды в прерывании TIM2_CAP_COM.

[code]INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
{
GPIOA->DDR &= (u8) (~ (GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3));
//GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_MODE_IN_FL_NO_IT);
GPIOD->DDR &= (u8) (~(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6) );
//GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,GPIO_MODE_IN_FL_NO_IT);
GPIOC->DDR &= (u8) (~(GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7) );
//GPIO_Init(GPIOC,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_IN_FL_NO_IT);
GPIOB->DDR &= (u8) (~ (GPIO_PIN_4|GPIO_PIN_5) );

TIM2->SR1 = (uint8_t)(~TIM2_IT_CC1);
}
[/code]

Вот и все. Важно не запутаться и получается отличная динамическая индикация. Как нумеровать светодиоды вы можете выбрать сами. Например, если это две шкалы по 8 светодиодов, то удобнее одну шкалу с 0 до 7, потом другую с 8 до 15, потом оставшиеся 4 светодиода. Так будет проще управлять. Если у вас часы, то опять же проще 0 1 2 3 — по часовой стрелке с первого часа. Если стороны света, то как часы, по часовой стрелке.

Приём команд по протоколу 1-wire

Протокол 1-wire очень популярен. Он часто используется в приборах. Практически на всех платформах вы можете найти реализацию кода обмена по данному протоколу. Чтобы понять как он работает приведем простую диаграмму из datasheet на датчик температуры DS18B20. Протокол работает на PULL UP линии, которая поднята к VDD. Для общения, управляющий микроконтроллер (мастер) опускает линию на GND.

Для начала работы по данному протоколу требуется специальный сигнал RESET.

Мастер опускает линию на 480 мкс, а потом освобождает и она возвращается на HIGH. Датчик отвечает, что он есть, опуская линию на 240 мкс и ждёт до окончания 480 мкс. Далее идет обмен данными. Каждый бит передаётся используя тайм слот длиной в 70 мкс. Чтобы передать 1, почти весь слот должна быть 1, а чтобы передать 0, то почти весь слот должен быть 0.

Перевод линии в 0 служит начало передачи бита. Если считывать линию в середине тайм слота, то состоянии линии и будет означать 0 или 1. Биты в байте передаются от младшего к старшему. Сам протокол поддерживает адресацию и много различных функций, но мы будем использовать простой режим — один мастер, один индикатор.

Итак в начале обмена, мастер передаёт сигнал RESET. Далее 1 байт операции и далее нужное количество байт состояния светодиодов. Для реализации будем использовать прерывание по переходу в 0 состояния управляющего вывода. Сам вывод будет находится в состоянии PULL UP, так что со стороны управляющего МК можно использовать OPEN DRAIN режим вывода.

[code]INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
u8 zn;
u8 time;

time = TIM4->CNTR;
TIM4->CNTR=0;//сразу начинаем отсчётсначала!
TIM4->CR1 |= (uint8_t)TIM4_CR1_CEN;

if (dataok) return;

if(time > 190) {//190*8 = 1520мкс таймаут и стартпосле прошлого пакета //тут либо 0 либо200 с прошлого раза
waitreset=1;//какая то ошибка
} else if (waitreset==1) {
if (time > 50) {//50*8 = 400мкс //старт!
numbuffind=0;
waitreset=0;
}
}

if (waitreset==0) {
//10мкс - около 20 тактов до этого местаот срабатывания прервания
_delay_us(20);
if (GPIOC->IDR & GPIO_PIN_7) buffind[numbuffind]=1;
else buffind[numbuffind]=0;

if (numbuffind>(NUMIND)) dataok=1;
numbuffind++;
}
}
[/code]

Считываем значение счётчика таймера 4. Обнуляем его и запускаем заново. Если dataok не нулевая, значит мы еще не обработали предыдующие полученные данные, в этом случае ничего не делаем. Если счетчик больше 190 — 1500 мкс, то что- то не так, сбрасываем все в начало — устанавливаем переменную waitreset. Если мы ждем ресет и счетчик меньше 1520 мкс, но больше 400мкс, то дождались — начинаем работать. Так как прерывание у нас срабатывает только по переходу в 0, то мы его получим когда уже пойдет первый бит, поэтому сразу начинаем считывать состояние линии. Необходимо немного подождать — 20 мкс и считать состояние линии. Будет примерно половина тайм слота. МК у нас работает не очень быстро и это время по сути будет немного больше, вместо 20 мкс мы получим около 30мкс, нам это и надо. Далее записываем полученный бит в массив и ждем пока пока не получим команду плюс все данные. После этого ставим в единицу флажок dataok. Дальнейшяя обработка полученных данных идет в основном цикле.

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

[code]#define US(us) ( 2000000.0 / 3000000.0 * us ) //FCPU / 3000
#define MS(ms) US(ms * 1000) // maximum 10ms

#define _delay( loops ) _asm("$N: \n decw X \n jrne $L \nnop", (u16)loops);
#define _delay_us(us) _delay(US(us))
[/code]

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

[code]	if (dataok) {
//обработка данных
u8 i=0;
for (i=0;i<10;i++) {
ind[i] = buffind[i+8];
};

command = 0;
for (i=0;i<8;i++) {
command |= (buffind[i] << i);
}

if (command) {
//первые 7 бит яркость
u8 tyar;

tyar = command & 0b1111111;
if (tyar) TIM2->CCR1L = tyar;

//идем спать!
if (command & 0b1000000) sleep();
}

waitreset=1;
dataok=0;
numbuffind=0;
}
[/code]

Записываем полученные данные в массив индикации. Собираем команду, и если пора спать, то идём спать, а если это яркость — то меняем CCR значение таймера. В конце все готовим к следующей посылке. Вот так можно передавать данные по одному проводу.

Управление индикатором со стороны прибора

На стороне управляющего МК, если у вас нет библиотек, вам надо написать примерно такой код.

 

[code]#define IND_WIRE_1 GPIOC->ODR |=(uint8_t)GPIO_PIN_6//GPIO_WriteHigh(GPIOC,GPIO_PIN_6)
#define IND_WIRE_0 GPIOC->ODR &= (uint8_t)(~GPIO_PIN_6) //GPIO_WriteLow(GPIOC,GPIO_PIN_6)

void sendindicator(void) {
//reset
u32 dd = indicator;

stoptim=1;

IND_WIRE_0;
_delay_us(10);
IND_WIRE_1;
_delay_us(480);

{
u8 i;

for (i=0;i<32;i++) {
if (dd & 1) {
disableInterrupts();
IND_WIRE_0;
_delay_us(10);
IND_WIRE_1;
enableInterrupts();
_delay_us(55);
} else {
IND_WIRE_0;
_delay_us(65);
IND_WIRE_1;
_delay_us(5);
}
dd >>= 1;
}
}

stoptim=0;
}
[/code]

Узкое место передача 1, обязательно надо чтобы в этом момент ничто нас не прерывало. Лучше отключить прерывания. Остальное не так требовательно к точности таймера.

Как изготовить индикатор

Разработка схемы в Kicad и трассировка

Вы можете взять за основу проект Kicad с github проекта. Далее вам необходимо будет доработать схему в Kicad. Потом на плате разместить светодиоды в нужной вам форме, например сердечка. Трассировка закончена.

Делаем плату и все запаиваем

  1. Подготовить или приобрести необходимые инструменты: все для пайки, ST-LINK (будет нужен для программирования и отладки МК)

  2. Внимательно прочитать статьи из раздела Обязательная теория.

  3. Скачать необходимые файлы по данному прибору с github.

  4. Вам необходимо будет подготовить трассировку платы. Доработать схему в Kicad и на плате разместить светодиоды в нужной вам форме, например сердечка.

  5. Изготовить вашу плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

  6. Приобрести все необходимые комплектующие вы можете самостоятельно, или у нас в виде набора из 20 светодиодов, если вам мало 20 светодиодов — то можете заказать больше.

  7. Запаять все компоненты на плату, смотри наше видео. При пайке светодиодов старайтесь сильно их не греть!

  8. Плата готова!

Для программирования, можно сразу подключить питание к ST-Link и SWIM вывод.

Переходим к программированию

Данный прибор достаточно простой в программировании. В этой статье подробно разобран пример программы. Для реального индикатора вам необходимо будет поменять в образце количество светодиодов и схемы их включения. Внимание! Не зажигайте одновременно больше одного светодиода на одном управляющем выводе — это может привести к выходу из строя светодиода.

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

Приобретённые навыки

Пайка: пайка паяльником светодиодов! пайка корпуса TTSOP.

Схемотехника: управление светодиодами.

Программирование: 1-wire протокол в master и slave режимах, динамическая индикация с помощью PWM таймера, спящий режим.

Самостоятельная работа

На github мы выкладываем образец индикатора. На его основе вы можете самостоятельно разработать свой индикатор и использовать его в ваших приборах.

 

]]>
(Super User) Приборы Tue, 28 Nov 2017 09:20:56 +0000
Самодельный сверлильный станок /index.php/pribory/item/43-samodelnyj-sverlilnyj-stanok /index.php/pribory/item/43-samodelnyj-sverlilnyj-stanok Самодельный сверлильный станок

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

{autotoc}

Что вам понадобится

Надо будет купить (или найти на чердаке) следующие детали

  1. Длинный болт 15 см, с неполной резьбой от края 3-4 см. Диаметр болта — 10мм, диаметр гладкой части 8мм (лучше конечно тоже 10мм — но таких нет в продаже). И две гайки к нему, одна или две большие шайбы.


  2. Уголки 2шт с отверстием 10мм (должен плотно входить наш болт) и отверстиями 3-4мм под болт (проушина для замка). Размером 25 х 25 мм. Толщина стали около 2мм.


  3. Стальную пластину — 40 х 100 мм.


  4. Доска 120 х 18 мм


  5. Всякая мелочовка — болтики 3мм, крышки от бутылок, пружинка, шайбочки.

  6. Моторчик и мини патрон (см статью про изготовление плат)


Рассчитываем смещение уголков в программе QCAD

Если уголки имеют отверстие большее чем диаметр гладкой части болта, то надо будет расположить уголки под углом, чтобы не было люфта. Сделать это очень легко в программе QCAD. Надо будет рассчитать угол поворота уголков относительно центра отверстий. Программа бесплатная, скачать можно с офф сайта.




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

Крепим двигатель

Двигатель можно прикрепить стяжками (просто, но не надёжно — двигатель не будет жёстко прикреплён к пластине):




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







Электрическая часть

Остаётся припаять провода, разъем и светодиоды для подсветки. Если питание будет 12в — то можно взять 3 белых светодиода и резистор 400 ом. Если будет 5в, то 3 светодиода просто без резистора, если будет не ярко — то 2 светодиода без резистора. Один светодиод требует около 2 В.

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

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




Само питание подаём на пластину и на второй вывод мотора. С таким расположением очень удобно быстро включать\выключать мотор. И работает он только при сверлении.

Финальный вид станка

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




На болт одеваем уголки, их крепим к пластине и к ней же двигатель. Болт прикручиваем к доскам.


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

Результат работы на станке. Все отверстия сверлятся за 5 минут.




Как работает станок смотрите на небольшом видео. Одной рукой держим плату, другой нажимаем на провод — кнопку и давим на пластину. На таком станке точность сверления отверстий очень высокая, и сверлить плату получается быстро и удобно.



]]>
(Super User) Приборы Mon, 03 Dec 2018 16:33:36 +0000
Контроллер разряда Li-ion аккумулятора /index.php/pribory/item/47-kontroller-razryada-li-ion-akkumulyatora /index.php/pribory/item/47-kontroller-razryada-li-ion-akkumulyatora Контроллер разряда Li-ion аккумулятора

Данный мини прибор необходим для защиты li-ion аккумуляторов от глубокого разряда. Схема автоматически отключает аккумулятор при снижении напряжения на нем ниже 2.9В. Очень низкое потребление тока — всего 500 nA. Максимальный ток потребителя — 2А. Надёжно защит ваш аккумулятор от переразряда. Размер платы — всего 10х6 мм.

{autotoc}

Прежде чем начать

Прежде чем читать эту статью, рекомендуем вам ознакомится со следующей теорией:

Зачем нужен этот прибор?

Li-ion аккумуляторы очень часто используются в качестве источника питания переносных приборов. Например, приборы — велокомпьютер, кухонный таймер и другие, работают на компактных литиевых аккумуляторах. Данные аккумуляторы имеют очень хорошие параметры, но они легко могут выйти из строя. Если аккумулятор разрядить ниже 2.7В и оставить на долгое время в таком состоянии, то он безвозвратно испортится. В таком состоянии происходят необратимые химические изменения в структуре основного носителя. Именно для того, чтобы не допустить данной ситуации, и необходим данная мини плата.

На рынке существуют специальные микросхемы для защиты аккумулятора от переразряда и перезаряда, однако их сложно купить, так как в основном они нужны производителям аккумуляторов (обычно схемы защиты встраиваются сразу в сам аккумулятор). Поэтому в розницу они или не продаются, или дорого стоят. Защищать от перезаряда аккумулятор нет необходимости, если вы заряжаете его нормальными зарядными устройствами, а вот от разряда — есть. Даже если ваш прибор в спящем режиме будет потреблять всего лишь 30 мкА, то за месяц он может вывести из строя аккумулятор небольшой ёмкости. Итак, разберёмся как же можно самостоятельно сделать прибор защиты Li-ion аккумулятора от разряда.

Постановка задачи, требования к прибору

Основные требования к нашему прибору

  • Небольшой размер

  • Ток нагрузки 2А

  • Микропотребление тока

  • Низкая стоимость

  • Доступность компонентов

Подбор компонентов

Для того чтобы защитить аккумулятор, необходима какая-то схема, которая будет контролировать напряжение на аккумуляторе и в случае необходимости отключать с помощью электронного ключа (транзистора) потребитель от аккумулятора.

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

Монитор схемы сброса микроконтроллера

Данный класс микросхем наблюдает за напряжением питания микроконтроллера, и в случае сбоя в питании, который может привести к некорректной работе МК, формирует сигнал сброса (RESET). Микросхемы имеют очень простое подключение — достаточно только подключить питание VDD и GND, и на третьем выводе формируется сигнал RESET.

Различные микросхемы могут формировать как прямой сигнал сброса — логическая единица, так и обратный — логический ноль. Нам нужен такой монитор на напряжение около 3В с очень низким собственным потреблением тока и обратным сигналом RESET. На эту роль отлично подходит микросхема MAX809 в корпусе SOT-23. Вот её упрощённая схема:


На выходе она имеет PUSH-PULL каскад, который в случае напряжения на входе больше 2.9В выдаёт логическую единицу, а в случае если оно меньше 2.9В — то логический ноль. Собственное потребление тока составляет всего 500 nA.

Допустим, что у нас аккумулятор LIR2032 ёмкостью 40мА. Когда его напряжение падает ниже 2.9В, то остаётся около 5% ёмкости, то есть около 2мА. При таком микро потреблении, этого хватит более чем 150 дней. Конечно, как вы видите, даже используя такую схему, аккумулятор все равно необходимо проверять и постоянно заряжать. Поэтому, если вы решили долго не пользоваться прибором, то лучше зарядить аккумулятор до напряжения хранения (около 3.8 В) и отключить совсем от прибора (можно оставить подключённым к схеме контроля).

Подбираем ключевой транзистор — MOSFET

Нам надо коммутировать токи около 2А. Лучше всего использовать N-канальный MOSFET, он будет дешевле при тех же параметрах. Так же, так как у нас напряжение управления будет от 2 до 4 вольт, то нужен логический MOSFET.

Транзистор IRLML6244TRPbF в корпусе SOT-23 отлично справится с этой задачей. Его сопротивление в открытом состоянии составляет максимум 27 мОм.

Рассчитаем какой максимальный ток он сможет коммутировать. Тепловой коэффициент данного корпуса при минимальной площади пайки составляет около 300 градус на Ватт (обратите внимание, что в datasheet указано 100 градусов, при пайке корпуса на 1 кв. дюйме площади меди, а у нас такой площади нет).




Максимально транзистор может нагреться до 150 градусов (при этом его сопротивление будет 27 мОм * 1.5 = 40 мОм). Если принять рабочую температуру прибора до 40 градусов, то значит нагрев надо рассчитывать исходя из 110 градусов (150-40). Таким образом, при выбранном корпусе имеем около 360 мВт мощности (просто делим наши градусы на тепловой коэффициент). При нашем сопротивлении 40 мОм получаем ток 3 А (исходя из формулы P = I*I * R). При реальном расчёте, лучше брать запас мощности около 30% - получается 2.1А.

{product id=37}

Составляем схему

Итак, компоненты мы выбрали. Схема получается совсем простая.


Резистор R1 необходим для ограничения скорости открытия транзистора и снижения нагрузки на управляющий каскад микросхемы. Резистор R2 необходим для защиты базы транзистора, а также для его надёжного закрытия при запуске схемы. Отметим, что резистор R2 даёт лишние 50 мкА потребления тока (при питании от 5 вольт), поэтому слаботочных схемах, когда прибор большую часть времени проводит в спящем режиме его лучше исключить!

Печатная плата используется односторонняя и имеет размер всего 10х6 мм. Ширина силовых дорожек составляет 0.5мм, что вполне достаточно для тока 2А.

Как изготовить данный прибор самостоятельно

Делаем плату и все запаиваем

  1. Подготовить или приобрести необходимые инструменты: все для пайки

  2. Внимательно прочитать статьи из раздела Обязательная теория.

  3. Скачать необходимые файлы по данному прибору с github.

  4. Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

  5. Приобрести все необходимые комплектующие.

  6. Запаять все компоненты на плату, смотри наше видео.

  7. Плата готова!

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

Дополнительные проверки и тесты

Проверить плату очень легко, достаточно подключить потребитель к аккумулятору (например прибор или светодиод) и дождаться когда он сядет. После этого проверить напряжение на нем, оно должно быть около 2.9В.

Приобретённые навыки

Пайка: пайка корпуса SOT-23

Схемотехника: схема защиты Liion аккумулятора от разряда

]]>
(Super User) Приборы Sat, 09 Feb 2019 15:31:08 +0000
Мини зарядное устройство /index.php/pribory/instrumenty-i-izmeritelnye-pribory/item/51-mini-zaryadnoe-ustrojstvo /index.php/pribory/instrumenty-i-izmeritelnye-pribory/item/51-mini-zaryadnoe-ustrojstvo Мини зарядное устройство

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

{autotoc}

Прежде чем начать

Прежде чем читать эту статью, рекомендуем вам ознакомится со следующей теорией:

Зачем нужен этот прибор?

Литиевые (li-ion) аккумуляторы прочно вошли в нашу жизнь. Все чаще они заменяют батарейки в электронных приборах. На рынке продаётся много различных зарядных устройств для аккумуляторов этого вида. Их стоимость как правило незаслуженно велика. Эта мини плата как раз и служит для заряда литиевых аккумуляторов, имеет компактный размер и невысокую цену.

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

Постановка задачи, требования к прибору

Основные требования к нашему прибору

  • Небольшой размер

  • Выбор максимального тока заряда. Возможность заряжать небольшие аккумуляторы LIR2030 и аналогичные

  • Работа по microusb разъёму

  • Защита от неправильной полярности подключённого аккумулятора

Подбор компонентов

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

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

В качестве схемы защиты от неверной полярности используется пара MOSFET транзисторов P и N канального. В этой схеме будут использоваться транзисторы IRLML2502 и IRLML6402, за счёт их небольшого внутреннего сопротивления в открытом состоянии.

Составляем схему

Итак, компоненты мы выбрали. Схема получается совсем простая.


На входе питания установлен резистор R4 в качестве защиты от короткого замыкания. Для этого же в трассировке используется довольно тонкий проводник на плюсовом выводе — 0.3 мм. Джамперы JP1-JP3 позволяют выбрать три варианта тока заряда — 40мА (для небольших аккумуляторов), 120 мА и 600 мА. Несмотря на заявляенный максимальный ток в 1А, лучше так не нагружать данную микросхему. Такой ток потребует дополнительного охлаждения.

Транзисторы используются для защиты микросхемы от неправильной полярности подключённого аккумулятора Работает схема достаточно просто. В случае неправильно подключённого аккумулятора транзистор Q2 через паразитный диод будет проводить ток и это вызовет закрытие транзистора Q1. В итоге аккумулятор окажется отключённым от схемы заряда. Если же аккумулятор подключён верно, то транзистор Q2 откроется от напряжения аккумулятора (он не должен быть сильно разряжен) и в итоге откроется транзистор Q1, что обеспечит свободный заряд аккумулятора.

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

Как изготовить данный прибор самостоятельно

Собирается и паяется данный прибор очень просто. Никаких сложных компонент в нем нет.

Делаем плату и все запаиваем

  1. Подготовить или приобрести необходимые инструменты: все для пайки

  2. Внимательно прочитать статьи из раздела Обязательная теория.

  3. Скачать необходимые файлы по данному прибору с github.

  4. Изготовить плату для прибора самостоятельно (это совсем несложно, в нашей инструкции все подробно описано).

  5. Приобрести все необходимые комплектующие.

  6. Запаять все компоненты на плату, смотри наше видео.

  7. Плата готова!

Приобретённые навыки

Пайка: пайка microusb разъёма, пайка корпуса SOP-8, пайка SMD компонент.

Схемотехника: защита схемы заряда от неверной полярности подключённого аккумулятора

]]>
(Super User) Инструменты и измерительные приборы Thu, 26 Dec 2019 17:51:03 +0000
Тестер радиодеталей на коленке /index.php/blog/item/77-tester-radiodetalej-na-kolenke /index.php/blog/item/77-tester-radiodetalej-na-kolenke

Практически у каждого радиолюбителя есть тестер радиодеталей на базе микроконтроллера ATMEGA. Он позволяет измерять индуктивности, ёмкости, сопротивления, транзисторы и имеет много других функций. Если у тебя его до сих пор ещё нет, то сделай себе такой же без экрана, на базе платы Arduino UNO.

Если кто-то ещё не понял о чем речь, то глядя на это фото все вопросы у вас пропадут.

Я долгое время обходился без него. Но вот пришло время и понадобилось измерить ESR конденсатора и параметры выпаянных индуктивностей. Собирать полный вариант я не стал. В наличии была стандартная Arduino Uno:

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

Вот его и будем делать на плате. Там же выделим место для тестирования smd транзисторов.

Паяем резисторы (я не нашел именно такие, как нужны в схеме, и заменил 470К на 390К — в config.h это все можно учесть), провода, и подсоединяем к

Arduino. Вот что вышло:

Прошивка написана на языке Си, поэтому ее легко модифицировать. В конце статье я выложил модифицированные исходники. Рядом с модифицированными файлами лежат оригиналы (в имени знак «_» в конце). Также в прошивке есть подробный файл README с описанием полного процесса компилирования и прошивки.

В прошивке есть готовый вариант вывода данных на COM порт — используется терминал VT100. В программе PUTTY Выглядит это примерно так:

В настройках config_328.h устанавил нужный вид дисплея. Но этого мало. Вся работа прибора привязана к основной кнопке включения. Программа обрабатывает короткое нажатие, двойное нажатие и долгое нажатие. Я их заменил на цифры 1, 2, 3, нажатые на компьютере в терминале. Также зациклил основной цикл и добавил паузу в 5сек перед основным измерением, чтобы установить щупы на компоненте. Измерения проводятся по цифре 1. Настройка прибора делается через меню — вход в меню по цифре 2. Перемещение по меню — цифра 1. Выбор пункта меню — цифра 2. Цифра 3 используется для выхода из режимов мониторинга (RCL и тд).

В начале работы необходимо провести настройку — пункт Adjustment, потом записать калибровочные параметры — пункт Save. В итоге получилось неплохо.

]]>
(Super User) БЛОГ Sun, 20 Nov 2022 19:11:56 +0000