All posts by DI HALT

Гальваническая развязка аналогового сигнала

Порой приходится делать гальваническое разделение аналогового сигнала. Например, чтобы отделить АЦП контроллера от высоковольтной части. И если с передачей дискретных сигналов все более менее понятно, там можно обойтись обычным оптроном, работающим в режиме вкл-выкл, то что делать с аналоговым сигналом?

Первое что приходит на ум, так это взять какую-нибудь оптопару и попробовать питать ее светодиод не номинальным напряжением, а нашим аналоговым сигналом. Ведь если напряжение на входе меньше, то светодиод горит тусклее и у фотодиода или фототранзистора на выходе будет совсем другое открытие. Если посмотреть даташит на какую-нибудь оптрон, вроде дешевого и популярного LTV817, то да, можно увидеть вполне характерную зависимость тока выхода (IC от тока входящего в светодиод (IF):

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

Read More »

Простая работа с биполярным сигналом датчика

Работая с разными аналоговыми датчиками часто натыкаешься на то, что у датчика сигнал биполярный. Ну то есть он не 0…5 вольт, а, например, -2.5…+2.5. И вот ради такой фигни городить двуполярное питание ну совсем не хочется, добавлять ОУ, чтобы сместить уровень до съедобного для АЦП тоже. Если точность позволяет, то есть такое вот простое и ультрадешевое решение:

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

Ну, а считается он элементарно. Скажем, минимальное напряжение сигнала -2 вольта. Ток в АЦП не течет, значит весь ток идет только по ветке In — R2 — R1 — 5V При -2 вольтах на входе, разница потенциалов с питанием будет 7 вольт. По закону Ома 7V / 20kOhm = 0.00035A. Падение на резисторе R1 будет 3.5 вольта. А значит на средней точке делителя будет 5-3,5 = 1.5 вольта.

Если же на входе 2 вольта, то точно также: Разница напряжений 3V, ток в ветви 3V / 20kOhm = 0.00015A. Падение на резисторе R1 будет 1.5 вольта, а значит на средней точке делителя будет 5-1.5 = 3.5 вольта.

Понятно, что у данного решения хватает минусов. Например то, что плаванье питания непременно скажется на амплитуде выходного сигнал нашего датчика. Можно, конечно, застабилизировать его каким-нибудь LOW-DROP стабилизатором, выведя на отдельную ветку от основного. Но тут надо смотреть, чтобы стабилизатор не стал дороже нормального решения на ОУ :) Также мы теряем в размахе сигнала. На входе был размах в 4 вольта (-2…2), а на выходе получили всего 2 (1.5…3.5) вольта.

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

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

Read More »

Торцовочная пила Proxxon KGS-80

▌Прецезионна пальцерезка
Я последнее время частенько мастерю разную умную и, порой, всратую механику для вендинговых автоматов, которые делают странное. Например, убивают людей кучей разных изощренных способов :) А под это дело постоянно приходится отпиливать разные валы, конструкционный профиль, отпиливать кусочки от кругляка с последующей токаркой. И делать это с достаточной точностью. Ну чтобы попасть хотя бы в треть миллиметра.

Второй, решающий для меня, критерий — это минимальный вес и размер. Т.к. места под все это добро у меня ограничено, несмотря на мастерскую, а пригождается она не очень часто, чтобы выделять под нее отдельную рабочую зону. Отпилил и убрал в шкаф. Поэтому Proxxon тут оказался единственным вариантом, хотя решение довольно спорное, по ряду критериев.
(далее…)

Read More »

Объединение JLCPCB и EasyEDA

Недавно две дружественные конторы JLCPCB и EasyEDA слились в одну. Теперь это единая экосистема из облачного САПРа и производителя плат. Собственно оно уже давно так, видать теперь это как то юридически произошло. Ждем когда в эту же когорту окончательно войдет еще и LCSC, чтобы уже официально. И тогда можно будет в один тык отправлять сразу на производство готового изделия.

Но на всю эту корпоративную возню как бы наплевать, если бы они под этот повод не выдавали купоны на 10 баксов под новый заказ. Выдают их тут. Я правда не понял можно ли им оплатить сразу весь заказ или только часть. А если часть, то какую. Кто попробует — напишите в комментах. Если не получится, то тоже напишите :)

Read More »

Гальваническое разделение. Часть 1

▌А зачем?
Порой приходится работать с системами где крайне нежелательно, чтобы была электрическая связь между блоками устройства. Скажем между блоком датчиков, линиями ввода-вывода и блоком управления. Обычно это связано с тем, что линии IO находятся на горячей стороне с высоким напряжением, а цепи управления мало того, что работают на низком напряжении, так еще до них может дотянуться своими шаловливыми ручонками человек и убиться об них если что-то пойдет не так. Разделение часто делают, чтобы отрезать крайне шумную часть от нежных мозгов сложной логики, вроде контроллера, чтобы ему не прилетело в голову какой-нибудь высоковольтной помехой. Также гальваническую развязку делают в том случае если есть проблема с объединением земель между блоками из-за блуждающих токов, наводок и прочих бед.

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

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

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

Я обычно использую три типа преобразователей в своей практике и держу их в запасе.

MeanWell NSD15-12S5

Это преобразователь 12 в 5 вольт. Но у MeanWell есть и другие номиналы похожего питальника. Ток у него до 3А. Я про него писал уже как то раз отдельную статью, несколько лет назад. Отличная штука. Надежная, дубовая. Работает как часы. Громоздкая только немного.

Aimtec AM1D-Z
Для меньшей мощности применяю блок от Aimtec AM1D-Z. Линейка преобразователей у Аймтека довольно большая, я обычно использую и держу в наличии всегда AM1D-0505SZ. Он принимает на входе 5 вольт и отдает 5 вольт, но уже гальванически отвязанные. И ток около 200мА, чего достаточно, чтобы запитать интерфейсные микросхемы, да микроконтроллер какой. КПД порядка 80%

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

Габариты у него совсем небольшие. А цена около 150-200р, не текущий момент.

(далее…)

Read More »

STM32. Контроллер внешней параллельной памяти FSMC

У микроконтроллеров собственной памяти мало, даже если говорить о каком-нибудь жирном прежирном Corteх, все равно: как волка ни корми, а у медведя, т.е. полноценного компьютера, толще. Поэтому практически все микроконтроллеры, в своем жирном исполнении так или иначе позволяют подцеплять к себе внешнюю параллельную память. Даже древний, как говно мамонта, АТ89С51 это умел. Что уж говорить про AVR и STM32.

▌Параллельная память

Для такой памяти характерны две черты: наличие двух шин: адреса и данных, и разных там стробов. На чтение, запись, тактовых и прочих. А вся суть работы с ними предельно простая. Чтение — мы выставляем на ногах адресной шины (коих обычно от 16 до 32) адрес нужной ячейки, отдельной ногой указываем, что у нас чтение, дергаем стробом и на шине данных (8 или 16 бит, обычно) появляется желанные байты. Запись похожим образом, только тут на шину данных мы выкладываем то, что хотим записать, на адресную шину кладем адрес куда надо записать, расставляем контрольную линию в режим записи и дергаем стробом. Опа, данные в памяти. Поскольку тут не требуется совершать сложных логических действий, то это все работает очень быстро, а реализовать можно даже на логике рассыпной. Естественно, что в разных МК такие интерфейсы были всегда.
(далее…)

Read More »

Электроника шаг за шагом. Переиздание

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

Это не репринт, издание немного было переработано под редакцией Юрия Всеволодовича Ревича, автора многих книг по микроконтроллерам и электронике. Часть устаревшего материала убрали. Где-то добавили пояснений. Практикум приведен в соответствие с современной элементной базой.

Издательство ДМК Пресс. Предзаказ там же. Ждем с нетерпением.

А, еще есть промокод. «Svoren_Di_Halt» Дает скидку 25% при покупке в предзаказ.

Read More »

Операционный усилитель. Примеры схем с описанием работы ч. 3

▌Антилогарифический усилитель

Если переставить диод в логарифмическом усилителе, то получим антилогарифмический, с экспоненциальным усилением. Работает точно также, ток, ничем не ограниченный, течет в виртуальное заземление, увеличиваясь примерно по экспоненте, как это принято у pn перехода. Ну, а поскольку это тот же ток, что течет в ООС, то помноженный на сопротивление резистора он даст нам выходное напряжение увеличивающееся по экспоненте. Все просто :))) Правда вместо диода лучше использовать транзистор. Используя его БЭ переход в качестве диодного pn перехода, а база при этом заземляется. У него характеристика лучше. Или, вообще специализированные усилители с готовой характеристикой.

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

▌Умножитель и делитель
Как упростить умножение? Заменить его сложением логарифмов. Ln(A*B) = Ln(A) + Ln(B). А деление это, соответственно Ln(A/B) = Ln(A)-Ln(B). Проще некуда, лол. Но так на самом деле выходит сильно проще :) Т.е. если нам надо помножить два аналоговых сигнала, то мы сначала прогоняем их через логарифмирующие усилители, потом загоняем в сумматор с коэффициентом усиления 1, а дальше прогоном через антилогарифмический усилитель достаем из под логарифма.

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

Для таких задач есть специальные микросхемы, вроде AD633 (умножитель) или AD734 (умножитель/делитель), тысячи их.

(далее…)

Read More »

Операционный усилитель. Примеры схем с описанием работы ч. 2

▌Преобразователь тока в напряжение

Некоторые виды датчиков имеют токовый выход, т.е. их сигнал в виде тока, в зависимости от измеряемой величины. А нам этот ток надо оцифровать, например, через АЦП. Как это сделать? Простейшее решение это пропустить ток через резистор и снять падение напряжения:

Вот так. Но у данного метода есть боольшой недостаток — высокое входное сопротивление. Т.е. нам, чтобы получить напряжение надо наш ток умножить на сопротивление, ну по закону Ома U=I*R. А если ток маленький? Скажем, дает датчик 0…1мА? А нам снять для АЦП нам надо хотя бы несколько вольт. Первое что приходит в голову это просто поставить резистор побольше, скажем на 5кОм. Получим, в максимуме, 5 вольт на выходе. Ага… По идее, и то если источник тока, которым является наш некий датчик, будет обладать достаточно высоким внутренним сопротивлением, чтобы развить на выходе такое напряжение, чтобы через эти 5кОм продавить 1мА. А это далеко не всегда так. Датчик может быть хиленьким и дохленьким и от нашего нагрузочного сопротивления просто сдуется и не даст своего тока.

В таком случае надо датчик нагрузить на КЗ и снимать непосредственно ток уходящий в это КЗ. Но чтобы КЗ как бы и не было, чтобы было откуда брать падение… Ну, в общем, вы поняли к чему я клоню ;)


(далее…)

Read More »

Изготовление плат в PcbWay

Несколько месяцев назад написали мне товарищи из PcbWay, мол а напишите про нас, а? Ну напишите, мы очень просим. А давайте сотрудничать? Ну дааваайте. И все в таком духе. Спамили наверное несколько дней меня. В общем я кого попало не пиарю и попросил мне что-нибудь сделать на пробу. А там я напишу обзор на ваш сервис как есть, по факту.

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

Потом я у них платы и за свои деньги делал, удобно было с формой оплаты, обычно я в JLCPCB делаю, а тут надо было webmoney сбросить, а JLC их не принимают, потому сделал в PcbWay. Но о приколах с оплатой ниже будет. Ну и раз обещал, запилю таки обзор их сервиса, описав процесс заказа.

▌Заказ
Итак, надо нам печатную плату. Идем на www.pcbway.com и регистрируемся. Вообще регистрация вроде бы не обязательная, но в таких вещах крайне полезная. Т.к. позволяет держать под контролем все через личный кабинет, появляется история заказов и прочие радости.

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

Рекомендую сразу ткнуть влева сверху на ссылку Quick-order PCB ⇒(only 1 min) и там можно сразу подгрузить гербер файл, по крайней мере не придется вручную вписывать размеры платы, они определятся автоматически. Остальное же остается таким же.


(далее…)

Read More »

Маленькая хитрость

Я думаю многие сталкивались с тем, что подключаешь программатор к девайсу, а он из системы пропадает. И надо его перетыкать. Особенно если речь идет о каком-нибудь ST-Link или USBASP/AVRISP за копейки с Алиэкспресса. Схемотехника там говеная, чего уж там. Все по минимуму.

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

Берем да вкорячиваем в разрез питания нашего кабеля конденсатор и дроссель. Кондер берем микрофарад так на 470, нехай подавится, скотина. А дроссель на максимальную индуктивность, какую не жалко и чтобы ток держал рабочий. Хотя бы миллиампер на 500. У меня это дроссель на 220мкГн и 1А. CW68-221K. Задача дросселя не дать броску тока заряда конденсатора при включении программатора в USB что-нибудь спалить. А при включении программатора в девайс этот же дроссель не позволит броску тока дать по рогам контроллеру программатора.

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

Ну и парочку супрессоров на напряжение линии уж тогда до кучи. Вначале и в конце. Можно прям к разъему припаять.

Делов на пять минут, а польза неимоверная. Сделайте уже и не матюкайтесь :)

Да, про ST-Link… Знаете какая самая частая причина выгорания этого свистка?

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

И еще один прикол с ним же. У него распиновка может отличаться от версии к версии. Причем даже в одной партии, купленной у одного и того же китайца. Это вообще веселое западло :) Я уже три разных версии распиновки видел. А разъем то тот же самый. Берешь и втыкаешь не глядя, а тут опа… Самая жопа когда оно вроде бы работает (на паразитном питании через порты, ага), но глючит адово и сидишь и не понимаешь, то ли ты олень, то ли лыжи не едут и вообще вчера все работало.

Read More »

Операционный усилитель. Примеры схем с описанием работы

Продолжение статьи «Операционный усилитель. На пальцах. Для самых маленьких»

Разберем еще пару схем, чтобы было понятно что и как. Как обычно, усилитель у нас идеальный.

▌Преобразователь напряжения в ток
Иногда надо получить источник тока. Это такой источник энергии который обеспечит протекание нужного тока через любое сопротивление. Вот есть у нас источник на 10мА и если мы его замкнем накоротко, то будет через точку КЗ течь ток в 10мА, а если мы оборвем его, то через обрыв … будет течь ток в 10мА, для этого источник тока загонит свое выходное напряжение до такого уровня, что заряды побегут через воздух, образовав пробой. Ну это в идеальном случае конечно. В реале источник тока при обрыве просто выставит свое максимально возможное напряжение.

Зачем нужно такое? Ну… по разным причинам. Светодиоды питать, например. Или есть линии связи на токовой петле. Когда у нас по проводу передается сигнал не напряжением, а током. Это очень удобно — от длины линии и роста ее сопротивления сигнал не меняется, всегда можно детектировать состояние линии — обрыв это нулевой ток, КЗ это ток выше лимита.

Я как то уже писал про токовую петлю 4-20мА. И вот там был пример применения ОУ для создания преобразователя напряжение-ток. Вот его схемотехника:

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

И можно смело вычислить ток I который будет, просто по закону Ома, равен как I = Uвх/R3. Но так как на самом деле никакого КЗ нет и, более того, во входы ОУ ничего не течет из-за его бесконечного сопротивления, то Ioс = 0. А раз Iос равна нулю, то ток I = Iout и жестко задается ТОЛЬКО входным напряжением и значением R3. Как бы не менялось побочное сопротивление линии R1 ток останется неизменным. Ну, конечно, при условии, что источник питания U может это обеспечить должным напряжением.
(далее…)

Read More »

Удобная работа с GPIO на STM32

Долгое время работая с STM32 все никак не мог определиться как же удобней мне обращаться с портами GPIO. Всякие SPL методы мне категорически не прикалывают, как то громоздко, хотя и читаемо. Опять же помнить как там параметры эти зовутся. Вручную порты тасовать можно, но опять же громоздко выходит. В дефайны оборачивать… тоже чет не то. Пока в одном из проектов не увидел годную реализацию, немного ее усовершенствовал и теперь с удовольствием использую.

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

В общем, суть такова:
(далее…)

Read More »

Набор для детей GeeGrow лаборатория гика. Базовый курс.

Недавно, общаясь с одним из поставщиков, с Димкой Снежинским, он упомянул, что дескать начали пилить свой собственный обучающий набор для детей на базе Arduino и уже давненько его продают. На мой вопрос, мол, чего мне не закинул на обзор, как бы сотрудничаем давно, я бы подтолкнул тему. Он как то засмущался, мол у меня тут злые дяди, придут обосрут, скажут arduino фу отстой. Не та аудитория.

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

▌GeeGrow. Базовый курс
Итак, что у них получилось. Вроде как очередной ардуиновский конструктор, тысячи их. Но тут есть ряд приятных моментов которые мне понравились и которых нет у других.
(далее…)

Read More »

Пищит

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

Ну не суть. Сама электроника тупейшая. Контроллер, какой было не жалко и чтобы на коленке если что не парясь сделать — Мега8, пара драйверов сенсорных кнопок TTP223, чтоль. Ну и полевичок, чтобы лентой светодиодной дергать. Собрал Дима прототип, прошил, как то отладил и отдал заказчику на тестирование.
Заказчик жалуется — пищит, говорит. В некоторых режимах слегка пищит.

Хм… Приносит. И вправду пищит. На слух где-то на 4кГц. На частоте ШИМ. Казалось бы, ничего удивительного. Вот только… ТАМ НЕЧЕМУ ПИЩАТЬ! Ни одного дросселя нет, лента тупо управляется полевиком. Даже больших конденсаторов нет. Электролиты мы не впаивали. Стоит везде керамика на 100nF. Пищит. Не, как убрать писк понятно — чуть меняешь частоту ШИМ и он пропадает, видимо из резонанса выходит. Но чем оно пищит?

Думали светодиодной лентой, ну там сила Ампера, длинные дорожки, тонкая подложка платы, хоть ток и небольшой, но качать может. Отключили ленту. Пищит. Чуть тише, но все равно. При этом никакой нагрузки нет вообще. Вывод контроллера, через резистор дергает ногу ненагруженного ни на что полевика в sot-23 корпусе и это как то пищит. Прижимаешь пальцем корпус контроллера, тон чуть меняется. Чем. Оно. Пищит?

UPD
Это не конденсаторы. Мы выпаяли их ВСЕ. Вообще все. Ну кроме времязадающих на сенсорных кнопках. Плата стала пищать тише, но пищит. O_o

Read More »

Взлом PLC Master-K3P от LG Electronics

Когда то давно, лет так 10 назад, на заказ взламывал некий PLC от LG. Это был какой то Master-K. Синенький такой:

Каждый раз вызывать корейцев на настройку линии было дороговато, а пароль они не дали. В результате была куплена бошка от такого же PLC которую мне прислали на разборки. В общем, на «взлом» ушло около часа из которых большую часть времени я колхозил кабель. Пароль шлется из PLC в софтину, открытым текстом и сравнивается в ней. *рукалицо* И такая дичь там (в проме) повсеместно :))))). А чего я это вспомнил вдруг. Сегодня рылся в файлопомойке нашел картинку на которой я заказчику показывал как пароль вынести :)

Может еще пригодится кому :)

Read More »

Операционный усилитель. На пальцах. Для самых маленьких.

Я когда то уже писал статью про операционные усилители. Но она была унылым говном, спустя какое-то время я кажись понял КАК надо раскрыть и повернуть тему, чтобы данная деталька о 5 ногах стала понятна даже школьнику, но все никак не мог собраться выложить. И так прошло дохрена лет и я, наконец то, созрел написать это :)

▌Что это ваще?
Операционный усилитель, далее ОУ это краеугольный камень аналоговой электроники. Такая микросхемка с помощью которой можно сделать кучу интересных вещей. Вы не смотрите, что ее зовут усилитель. Это только принцип, а вот если его применять по разному, то с его помощью можно складывать, вычитать, умножать, интегрировать и дифференцировать аналоговые сигналы. С его помощью можно сделать генератор или регулятор. Любой: П, И, ПИ, ПД, ПИД. На нем можно сделать фильтр частот, да черт знает еще что. Очень функциональная девайсина.

▌Немного теории
Идеальный операционный усилитель обладает тремя свойствами.

  1. У него БЕСКОНЕЧНО БОЛЬШОЕ сопротивление входов. Т.е. ток в его входы не течет вообще.
  2. У него БЕСКОНЕЧНО БОЛЬШОЙ коэффициент усиления. Т.е. любой ничтожный сигнал превращается в бесконечно большое значение.
  3. У него два дифференциальных входа и один выход. Дифференциальные входы означают то, что из напряжения пришедшего в прямой вход мы вычитаем напряжение пришедшее по инверсному входу, а результат этого вычисления умножаем на бесконечность, согласно пункту 2.

Во всей статье будут рассматриваться ТОЛЬКО ИДЕАЛЬНЫЕ ОУ. Чисто теоретическая абстракция.

(далее…)

Read More »

Самодельный трафарет для реболинга BGA из текстолита.

Есть у нас тут внизу какая то автомастерская. И там у них есть автоэлектрик. В общем, запороли они чей то ЭБУ при прошивке. Синдром Даннига-Крюгера в действии. Да там все легко, все херня… Да мы сто раз это делали. Ой… А чего он отзываться перестал? А чего из него дым идет? В общем, мы с Ветром поржали над ним, но решили помочь, по крайней мере перекатать чип, благо они его где-то нашли. Видимо сняли с донора. Как и чем я хз. Но чип был, без шаров. Живой не живой хз.

Надо отреболить. Проблема только, трафарета под него нет. Димка метнулся кабанчиком по ближайшим магазинам для ремонтников, а там такого нет. Есть примерно похожий, но все равно не тот. Больше чем нужно. На али он есть за тыщу, но ждать две-три недели никому не улыбалось. Тут пришла мысль, а чего бы нам трафарет самим не сделать? Из говна и палок!

Надо только пластину найти, которая бы хорошо и точно сверлилась, а еще была жесткой. Подумали, что можно сделать из текстолита. Обожаю этот материал! Его что фрезеровать, что сверлить одно удовольствие. А тонкий, 0.4мм, текстолит у меня есть. Дело за малым. В Eagle CAD накидать матрицу шаров, с выбранным шагом. Благо даташит на чип мы нашли и измерять ничего не пришлось. А дальше вывод сверловки в exellon, конвертация во Flat CAM, его в G-код и вперед.

Наклеил на столик текстолит. Просверлил.

Сверлил я советскими сверлами ВК6М на 0.7мм, которых где то нарыл NN4Z. Тот еще экстрим. Словно стеклянные. Малейший косой взгляд — ломаются. Сколько мы их переломали просто случайно задев пальцем или чуть толкнув станок в процессе… Ой, штук десять наверное, не меньше. Жесткость у моей ЧПУшки так себе, даром что из металла. Но если сверло в материале, то банальный щелбан по корпусу шпинделя приводит к поломке сверла. Это капец. С китайскими сверлами под 3.175 хвостовик в сотни раз проще. Но их не было ни одной. Поэтому ВК6М и поможет нам Мегатрон! Да, 15000 оборотов для этих сверл крайне мало. Так что запускаем прогу, пылесос не включаем, отходим от станка и не дышим. Зато как сверлит… Песня! Ни заусенки! Дырочка к дырочке!

(далее…)

Read More »

Контроллер прямого доступа к памяти (DMA) контроллера STM32

Работа с контроллером DMA

▌Что это?
Есть в современных контроллерах такой блок DMA — контроллер прямого доступа к памяти (ПДП). Штука очень простая, несмотря на умное название. Вся ее суть заключается в том, чтобы по команде от периферии или ядра взять и скопировать кусок памяти с одного места на другой.

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

Что с этим можно делать? Ой да много чего. Можно, задать в качестве источника адрес какой-либо периферии, скажем выходной регистр АЦП, а в качестве приемника адрес массива в ОЗУ, дать приказ DMA по команде завершения оцифровки АЦП хватать результат и пихать в массив. При этом DMA сам скопирует, сам увеличит адрес, а как заполнит буфер, то обнулится и начнет его переписывать по кругу заново.

И вот у нас, автоматически, без работы проца вообще, образуется циклический буфер приема данных с АЦП, которые мы можем тут же прогнать через любую цифровую обработку, да хоть через усреднение, и получить отфильтрованные уже данные. Или то же самое сделать с UART и заставить DMA аккуратно складывать входящие данные в кольцевой буфер.

А можно сделать и наоборот. Сказать DMA что мол вот тебе буфер, там лежит пара сотен байт, возьми и запихай их все в жерло UART и пойти по своим делам, а DMA трудолюбиво отправит в передачу весь буфер.
(далее…)

Read More »

Реализация функции задержки меньше 1мс на FreeRTOS с помощью таймера и Task Notification

Есть в FreeRTOS встроенная функция vTaskDelay которая на N тиков системного таймера отдает управление другим задачам. В результате можно делать тупые циклы с ожиданием чего-либо и не париться по поводу процессорного времени. Очень удобно. Но есть проблема, минимальное время которая эта задержка может организовать составляет 1 тик системного таймера. Обычно это около 1 миллисекунда. Но иногда требуются задержки меньше. Да, можно повысить скорость тиков системного таймера. Даже в 10 или 100 раз, при 72 Мегагерцах какого-нибудь STM32 это вполне себе работает. Правда на переключение контекста будет уходить больше процессорного времени. Впрочем, всегда можно работать в кооперативном режиме, а не вытесняющем. Тут в принципе нет вытеснения, а управление передаешь вручную через функцию taskYIELD или любую другую с ожиданием. Те же Delay, Очереди, Семафоры и мало ли что еще.

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

Таймер взял самый бомжовскйи. На STM32F103C8T6 нет, к сожалению, Basic Timers ТIM6 и ТIM7 — это самые простые, самые примитивные считалки. В них нет ни завата, ни регистров сравнения для ШИМ и их не жалко отдать под такое дело, но они есть либо в самых жирных, либо в самых нищих вариация серии F10x. В моей нету. Ну окей, возьмем другой таймер. Общего назначения. Я взял Timer 2.

Настраиваются таймеры элеменатрно, тут не нужны даже никакие библиотеки. Главное понять откуда берется тактирование, какая величина и что надо включить. Смотрим в RM0008 структуру тактирования таймера 2. Раздел 7.2 Clocks

У меня в системе предделители обычно настроены на максимальную частоту и на этой шине 36 мегагерц. Тактирование нашего дополнительного таймера я хочу видеть с частотой 10 килогерц. Та что делим 36 мегагерц на 36, а потом еще на 100. И получим искомое.

(далее…)

Read More »