FreeRTOS. Пример

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

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

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

▌Железо
Ну тут все элементарно. Pinboard II с STM32F103C8T6. Да шаговые драйверы TB6600. У драйверов этих есть сигнал STEP сигнал DIR и сигнал EN. Подаем разрешение на EN, выбираем направление на DIR и гоним тактовые импульсы на STEP. И таких четыре драйвера.

▌Среда
Делаю я все в EmBitz кто то ее в комментариях упомянул. Я попробовал и протащился. Работает НАМНОГО шустрей чем любая монструозная хрень на эклипсе. Так что атолик студио, кокос — все нахер. А внутре у ней тот же GCC.

▌Установка
Как ставить FreeRTOS описывалось в прошлой статье. С тех пор ничего не поменялось. Кинуть файлы в проект и подцепить их в среде. Элементарно. Также бегло пробегитесь по первой статье.

(далее…)

Read More »

Глюки контроллера. Ответ на загадку

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

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

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

(далее…)

Read More »

Глюки контроллера

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

Итак, делюсь :)

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

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

Пока от заказчика не поступило очередное рацпредложение — избавиться от кабеля, который им приходилось крутить своими силами и перейти на что-то стандартное покупное. Выбор пал на обычный USB кабель. Ну, а чего? Дешевый, доступный, жил хватает, экранирован. Чего бы нет? А то, что по нему не USB сигнал пойдет, дак никого волновать не должно. Он все равно внутри будет. Старый разъем я убирать не стал, чуток раздвинул дорожки, чуток подвигал детальки на плате. Да уместил усбешник рядышком. Еще надо было еще пошаманить с алгоритмом отслеживания напряжения и его измерения амплитуды. Тоже все просто и элементарно. Дописать пару функций в код. Код там неплохой, так что это все было легко и просто.

Сделали платы в JLC, смонтировали партию устройств на десяток штук. Собрали и…

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

Read More »

Cоздание минимального проекта под STM32 в Atollic True Studio вручную

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

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

Что делать? Куда бежать? STM, говорят, прикупил Atollic True Studio, вышвырнул оттуда поддержку всех сторонних камней и дал нахаляву. Решил я попробовать это чудо. В конце концов чем оно отличаеться то от CoIDE? Тот же Eclipse…

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

Чтож, онанизм так онанизм. Наши руки не для скуки!
(далее…)

Read More »

Непобедимый

Понадобился тут NN4Z хитрый надфиль. Как обычный, плоский, но только с абразивом только на узких сторонах и с гладкими плоскостями. Чтобы расшаперить торцы узкой щели, не поцарапав края. Ну пошел он по нашим лабазам, купил несколько китайских алмазных надфилей, первые попавшиеся под руку. За 50-100 рублей штука. Думает, приду в лабу, да сточу абразив с широких плоскостей…

Ага, щаз. Вован стер об этот надфиль ДВА диска болгарки. Потом вспомнил, что у нас есть точило:

И минут 10 задрачивал этот надфиль на камнях… Судя по результату, стачивались камни, принимая идеально плоскую форму торцов и становясь гладкими и красивыми. Надфилю же похрену совершенно. Он стал лишь чуточку менее шершавым… Вот он, после всех этих издевательств.

У нас с NN4Z было лишь такое выражение:

Как снести с этого гребаного надфиля абразивную пасту и добраться до металла?

З.Ы.
А если таким составом покрывать двери, дужки замков… То все взломщики с пилами и болгарками соснут жгучую красную банабаку. Почему до этого никто еще не додумался? Нахер там что-то закаливать и упрочнять, если можно нанести состав разрушающий любой режущий инстурмент?

Read More »

MISRA C

MISRA — это Motor Industry Software Reliability Association группа разработавшая стандарт языка Си для ответственных встраиваемых систем. Для таких как автомобильная или авиационная техника, разных опасных производств. Где цена программной ошибки может быть очень высока. Это набор ужесточающих правил для языка Си. Есть версия и для С++, но не суть. Вся прелесть в том, что MISRA C поддерживается некоторыми компиляторами и если добавить соответствующие ключи, то они будут проверять код еще и на соответствие MISRA C, например IAR. Есть и отдельные анализаторы кода на соответствие стандарту.

Ну, а сама суть стандарта в том, чтобы осложнить жизнь разным быдлокодерам и любителям красиво повыебываться в коде :) Там, например, запрещено пихать в заголовок for все кроме стандартных опций жизнеобеспечения цикла. Запрещены стандартные типы вроде char или int которые зависят от архитектуры. Только жестко описанные типы вроде uint8_t. Запрещены switch без default, а case и if/else без заключения содержимого в { } блоки. Запрещена указательная арифметика и все в таком духе. Таких правил там штук под двести. Настоящий концлагерь для кодера, где ничего нельзя :) Зато сделать тупую ошибку становится сложней.

Так вот, к чему я. Недавно наткнулся на хороший перевод правил MISRA C для IAR. От Андрея Шлеенкова. Вот, делюсь :)

Read More »

Чистая земля в EagleCad

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

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

Но можно преградить наводкам путь. Надо высадить контроллер и его критические цепи и окружение, такое как кварц, внешняя память на «чистую землю». Отдельный земляной полигон соединяющийся с грязной землей в одной точке, поближе к источнику питания. Т.е. все говно будет пролетать по земляному полигону вокруг этой чистой земли, а там будет тихая гавань. Соединение двух земель у меня показано стрелкой. Видите там группку переходок? Вот они идут на другую сторону платы и там соединяются с земляным полигоном «грязной земли» на противоположной стороне платы. Вокруг МК с обратной стороны проложен такой же чистый островок, но он несколько меньше размером и все переходные отверстия чистой земли сверху соединяются с чистой же землей снизу. Кроме одной точки, где указывает стрелка, там идет коннект на грязную землю. Прямо возле стабилизатора питания, который ее и питает.

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

Это довольно эффективно подавит помеху.

Ну и как проще всего сделать такую землю в Eagle CAD (в других CAD должно быть аналогично).
(далее…)

Read More »

Инструмент для снятия изоляции Weidmuller Stripax

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

▌Proskit
До этого у меня, конечно же, был стриппер, вот такой:

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

Его мощная стальная конструкция на раз срывает наружную изоляцию какого-нибудь ВВГ-НГ не сильно большого калибра, до шестерки вполне, после кабель по ширине не входит.

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

Read More »

OctoPrint Часть 2. Digital Resistance

Вы спросите где же первая часть? Она в процессе написания. Из-за говнюков из РКН пришлось срочно решать проблему с подключением принтера к Телеге, поэтому я по горячим следам, чирканул эту часть. Скоро выйдет часть первая ,когда я доделаю картинки и описалово фич осьминожки.

Одна из главных фич, ради которого я его прикрутил к своему принтеру это плагин OctoPrint-Telegram, ставится он из интерфейса плагин менеджера OctoPrinta не сложней чем установка софта на смартфон какой. Заходишь в местный маркет, тыкаешь установить. Готово.

А после, мы получаем практически полное управление принтером через месенджер Telegram из любой точки. Можем посмотреть фотку с камеры, можно получать фотки по ходу дела, наблюдая как идет печать. Можно подкорректировать температуру экструдера или силу охлаждения, если видим, что процесс идет не так как нужно. Остановить печать, само собой.
Можно даже начать печать, закачав через тот же телеграм gcode файл. Например, уходя из мастерской я прошу NN4Z когда он закончит свою печать оставить принтер на готове. А уже дома, допилив нужную модель, через Telegram забрасываю ее в OctoPrint и запускаю печать. Удаленно наблюдая, что все идет хорошо. Если же не задалось — останавливаю. Не судьба. Но это бывает редко, процесс у нас поставлен хорошо.

Да, можно управлять и по SSH и как то еще, но у меня интернет через мобильного оператора, серый IP и никакой DYNDNS тут не катит, порты просто не пробросить наружу. Только полноценный VPN кидать. Так что телеграм плагин просто спасает. Да удобней намного. С телефона рулить через SSH это редкостный изврат. А у плагина там вполне удобный интерфейс.

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

Все было хорошо пока не пришли пидорасы и не заблокировали нашу прелесть. И если с клиентами и месенджерами все отлично, они работают :)))) , то вот с плагином все печально. У него изначально не было возможности даже через прокси ходить, не говоря уже про получение через push новых адресов.

Пришлось прикручивать обходные пути.
(далее…)

Read More »

Дао изоленты


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

serkov.su Страница сайта автора, где можно скачать pdf с книжкой Ну и сам его бложек заслуживает внимания.

Read More »

Простой программный таймер для конечных автоматов

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

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

▌Принцип работы и использование
У нас есть глобальная переменная TimeMs которая инкрементируется по прерыванию таймера раз в 1мс. Когда мы хотим поставить выдержку, то просто берем текущее значение TimeMs прибавляем к нему нашу выдержку и запоминаем все это в статичной переменной, пусть будет Delay, которая определена непосредственно в той функции автомата которая эту задержку использует. И при каждом следующем входе в автомат она будет проверять нет ли у нас условия Delay >= TimeMs.

То есть автомат мигалка будет выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void Blink (void)
{
 
// Переменные объявленные как static не исчезают после выхода из функции. А сохраняют свое состояние.
static uint8_t blink_state = 0;     // Переменная состояния конечного автомата
static uint32_t Delay;              // Переменная программного таймера мигалки, время моргания
 
switch (blink_state)
  {
  case 0:                           // Первый вход, инициализация и первый поджиг. 
               {
               Delay = MainTimerSet(1000);   // Ставим задержку на 1000мс
               LED_ON();                     // Зажигаем диодик
               blink_state = 1;              //  Переходим в следующее состояние автомата
               break;                        //  Выход из состояния
               }
 
  case 1:                                    // Первая стадия рабочего цикла (Не горим) 
             {            
             if ( !MainTimerIsExpired(Delay) ) break;      // Если 1с не прошла - сразу выходим
                                                           // Функция MainTimerIsExpired проверяет по
                                                           // таймерной переменной TimeMs не
                                                           // стал ли Delay меньше чем TimeMs
 
             LED_OFF();                                    // Если секунда прошла, то гасим диодик
             Delay = MainTimerSet(500);                    // Запоминаем время выключенной фазы 0.5с
             blink_state = 2;                              // Переключаем автомат во вторую стадию
             break;                                        // Выход из состояния
             }
 
case 2:                                    // Вторая стадия рабочего цикла (Горим) 
             {            
             if ( !MainTimerIsExpired(Delay) ) break;      // Если 0,5с не прошла - сразу выходим
 
             LED_ON();                                     // Если секунда прошла, то зажигаем диодик
             Delay = MainTimerSet(1000);                   // Запоминаем время включенной фазы 1с
             blink_state = 1;                              // Переключаем автомат в первую стадию
             break;                                        // Выход из состояния
             }
 
default: break
  }
}

Ну, а в самом Main вызов автоматов разных задач выглядит как то так:

1
2
3
4
5
6
7
8
9
10
void main (void)
{
while (1)
  {
  KeyScan();       //  Автомат отвечающий за сканирование клавы бла бла бла
  LCD_process();   // Автомат работающий с дисплеем бла бла бла
 
  Blink();         // Наша мигалка
 
  }

Теперь немного о реализации самой библиотечки таймера.
(далее…)

Read More »

Два года с 3D принтером Cheap3D V300

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

▌Объемы печати, статистика
Печатаю я практически каждый день. В среднем принтер работает по 5-6 часов в день. Печатаю все подряд. В основном всякую остнастку, детские игрушки. Вот недавно начал хреначить лего-рельсы для дочки, увлекся и напечатал уже 25 метров пути, но чтобы по всем комнатам квартиры через балкон завершить круг надо почти 40 метров!

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

С недавних пор у меня OctoPrint ведет статистику и за последние три месяца она примерно следующая:

(далее…)

Read More »

Настольный органайзер для инструмента

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

С появлением 3D принтера у меня появилась возможность все это исправить и напечатать себе такой органайзер какой нужен мне. Но было лень, как всегда. Пока я не наткнулся на 3DToday на модельку HexaPuzzle от Filamentarno:

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

Там вот такая вот цельнолитая бобышка

Растягивая или сжимая ее в слайсере по высоте — получаем стаканы и поддончики, главное выключить печать верхних крышек в слайсере и сделать нулевое заполнение. Периметров 2-3 в зависимости от жесткости пластика. Для PLA или ABS хватит и двух. А вот для SBS не меньше трех, а то слишком уж мягкие будут.

А если включить заполнение, то можно напечатать удобную подставку под разные надфили, карандаши и прочие узкие и длинные предметы. Меняя плотность заполнения задаем размер ячеек. Периметров же можно 1-2 на любом пластике.

(далее…)

Read More »

Замер сетевого напряжения

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

▌Измерить толщину сиськи
Изначально в проекте было заложено вот такое решение:

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

Ну, а дальше все просто. У оптопары H11L1M внутри стоит триггер Шмитта, т.е. есть некоторый гистерезис на включение и выключение. Включается он при токе через его светодиод примерно в 1мА, а выключается на токе 0.8мА.

Если посмотреть осциллограмму тока на светодиоде, сняв ее с резистора R35, то увидим такую картину для 220 вольт:


Разрешение 50мВ на деление, триггер стоит на 80мВ по спаду.

Включаться он должен на 100мВ, а выключаться на 80мВ, что будет 1мА и 0.8мА соответственно. Курсорами выделены моменты включения и выключения. Разница по времени, dx = 8.38ms

Если снизить напряжение до 110 вольт, то:

dx уменьшится до 6.94ms т.е. А что такое миллисекунда для микроконтроллера тикающего на мегагерцовых частотах? Да колоссальная величина! Замерить ее точно таймером в режие захвата не составляет проблем. Дальше сунуть в память таблицу соответствия и, казалось бы, все круто? Да, но не совсем…

Решение дешевое, простое. Но не слишком точное. А в ряде случаев его вообще не получится применить.

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

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

Так что 220 вольт от 110 вы еще отличите, а вот о точности хотя бы до 5 вольт можно позабыть. Но в некоторых случаях большего и не требуется.

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

(далее…)

Read More »

Включить-выключить. Схемы управления питанием

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

▌Механическая кнопка
Что может быть проще и надежней сухого контакта, разомкнул и спи спокойно, дорогой друг. Вряд ли батарейку раскачает до того, чтобы пробить миллиметровый воздушный зазор. Урания в них для этого не докладывают. Какой нибудь PSW переключатель то что доктор прописал. Нажал-отжал.

Вот только беда, ток он маленький держит. По паспорту 100мА, а если запараллелить группы, то до 500-800мА без особой потери работоспособности, если конечно не клацать каждые пять секунд на реактивную нагрузку (катушки-кондеры). Но девайс может кушать и поболее и что тогда? Приматывать синей изолентой к своему хипстерскому поделию здоровенный тумблер? Нормальный метод, мой дед всю жизнь так делал и прожил до преклонных лет.

▌Кнопка плюс
Но есть способ лучше. Рубильник можно оставить слабеньким, но усилить его полевым транзистором. Например вот так.

Тут переключатель просто берет и поджимает затвор транзистора к земле. И он открывается. А пропускаемый ток у современных транзисторов очень высокий. Так, например, IRLML5203 имея корпус sot23 легко тащит через себя 3А и не потеет. А что-нибудь в DPACK корпусе может и десяток-два ампер рвануть и не вскипеть. Резистор на 100кОм подтягивает затвор к питанию, обеспечивая строго определенный уровень потенциала на нем, что позволяет держать транзистор закрытым и не давать ему открываться от всяких там наводок.

(далее…)

Read More »

Как сколхозить розетку для мелкого разъема

Иногда надо подключиться к разъему который хрен знает как зовут и не пойми где искать ответную его часть. Ладно если это мама, в гнезда можно и проводков насовать. А если папа? Да еще маленький такой, папа. Вот как этот:

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

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

(далее…)

Read More »

В поисках идеальной отвертки

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

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

(далее…)

Read More »

Заказ плат в JLCPCB


Не так давно я делал обзор на производителя печатных плат EasyEda. И вот они попросили меня написать обзор на другой сервис: JLCPCB.
Вообще EasyEDA и JLCPCB это две разные фабрики, но входящие в один концерн.

Если EasyEDA заточен больше под хобийщиков и малые заказы, то JLCPCB ориентирован больше на крупные заказы. Хотя цены у них сравнимые и оба работают с розницей.

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

Совет всем кто собирается производить платы мелкосерийно. Если у вас планируется много плат разнородных, которые не идут в один девайс комплектом, то не пихайте их все в одну панель. Сэкономите копейки, а потом будут у вас одни платы на исходе, других затар-полный склад. И на маневрах с допечатками просрете всю эту экономию. Лучше в этом случае дробить шаблоны на разные изделия.

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

(далее…)

Read More »

Делаем панель на бортовой комп для Toyota Prius

Пришел ко мне тут в мастерскую товарищ. Захотелось ему вкорячить в свой Prius бортовой комп с дисплеем, навигацией и всей радостью. Мозгами бортового компа будут Raspberry Pi, а экран подобрал он какой то на 7 дюймов. Но вот так вот просто его не вставить в панель машины. Родная магнитола вообще унылая и мало того, что узкая, так еще и кривой формы, что по простому не вкорячишь. Морду магнитолы он отсканировал в Макетире (Данила, превед!) и притащил мне.

(далее…)

Read More »