Реверс-инжиниринг и ремонт платы зарядного устройства
Волею случая у меня в руках оказались две неисправные платы от зарядного устройства тяговых аккумуляторов LiFePo. Параметры платы вызывают уважение — она выдает в номинале 48 В при токе до 60 А, то есть мощность платы порядка 3 кВт. Плата подключается к однофазной сети 220/230В. Всего в зарядном устройстве стоит несколько таких плат, они все подключаются параллельно и работают на общую нагрузку. Выпускаются варианты таких зарядных устройств с разным числом плат, соответственно, на разный зарядный ток. Например, как на фото ниже — 3 платы, 180 А.
Если в зарядном устройстве стоит несколько плат, тогда устройство питается уже от трехфазной сети и каждая плата подключается на свою фазу для более равномерной загрузки сети. Платы последовательно связаны сигнальными шлейфами. С крайней платы идет шлейф на блок индикации и управления на передней панели устройства. Блок индикации и управления может настраиваться по шине CAN с помощью фирменного блока преобразователя USB — CAN и фирменного ПО. В настройках можно задать работу с разным количеством плат, указать разные уровни ограничения тока и напряжения, различные схемы зарядки для разных типов аккумуляторов.
Платы исполнены достаточно качественно, на них применены не самые дешевые компоненты известных зарубежных фирм. Снаружи платы покрыты влагозащитным покрытием, которое, однако, легко смывается обычным спиртом, давая свободный доступ к демонтажу/монтажу компонентов.
Обе платы имеют одинаковую неисправность — выход из строя выходного синхронного выпрямителя на полевых транзисторах. Причем, вышло из строя только одно из двух плеч выпрямителя. Быстрый ремонт в виде простой замены транзисторов результата не дал — при включении заряда плата снова бахнула. При этом, вышли из строя уже оба плеча и на плате образовалась дыра на месте медного полигона. Значит, нужно копать глубже.
Никакой документации на плату, кроме инструкции по ее замене целиком в сборе, производитель не предоставляет. Поэтому для понимания работы платы пришлось немного заняться ее реверс инжинирингом. Это не представляет большой сложности. По маркировке микросхем скачиваются их даташиты и примерно определяется, какие компоненты на плате за что отвечают. Как правило, микросхемы используются в типовом включении или весьма близком к нему. По назначению выводов микросхем легко понять назначение элементов их обвязки.
Номиналы резисторов легко считываются из маркировки. Номиналы конденсаторов и дросселей можно узнать, измерив их прибором после выпаивания. Но, вообще говоря, это делать и не обязательно. Для понимания работы схемы достаточно знать общую схемотехнику устройства.
Наиболее пострадавшую плату было решено пустить на разбор, чтобы под снятыми компонентами было проще разглядеть разводку. По разводке печатной платы восстанавливается схема соединений между компонентами. Снятые детали предполагается использовать для восстановления работоспособности оставшейся платы.
В итоге была составлена такая схема.
Она неполная, показаны только основные места, важные для понимания принципа работы и ремонта.
На входе платы стоит солидный двузвенный фильтр ЭМС. После него напряжение сети поступает на маломощный вторичный источник питания (ВИП) через отдельные маломощные выпрямительные диоды. Источник питания обеспечивает низковольтное питание схемы напряжениями 5, 12 и 15 В. Напряжения 5 и 15 В гальванически связаны с сетью и питают контроллеры ШИМ (PWM) и ККМ (PFC) на «горячей» стороне. Напряжением 12 В питается схема управления на микроконтроллере STM и блок индикации. Это напряжение снимается с отдельной обмотки и гальванически развязано с сетью.
Питание на силовую часть идет через терморезистор, очевидно для плавного заряда электролитических конденсаторов, которых здесь 3 банки по 560 мкФ. После того как напряжение на этих банках вырастет выше определенного уровня, терморезистор шунтируется с помощью реле. Реле управляется схемой на двух компараторах микросхемы LM2901. На других двух компараторах этой же микросхемы собрана похожая схема, управляющая разрешением запуска микросхемы контроллера PWM UCC28951.
Контроллер PFC UCC28070 (корректор коэффициента мощности, ККМ) обеспечивает такой ток потребления преобразователя как у активной нагрузки, что повышает коэффициент мощности, равномернее нагружает сеть, уменьшает импульсные помехи и искажение синусоиды сетевого напряжения. Корректор должен присутствовать во всех сетевых источниках питания мощностью выше 300 Вт. На плате мощностью порядка 3 кВт он просто жизненно необходим, в противном случае импульсные токи зарядки буферных емкостей получаются просто космическими и потери на выпрямительных диодах были бы чрезмерно велики. Грубо говоря, для простоты понимания, PFC контроллер можно представить как повышающий преобразователь напряжения, но на входе которого присутствует не постоянный ток, а выпрямленная полуволна сетевого напряжения.
Итак, устройство стартует следующим образом. Сначала через терморезистор и открытые диоды VD4, VD5 плавно заряжаются электролитические конденсаторы до напряжения примерно 300 В. Если управляющий микроконтроллер выдал лог. 1 на оптрон U2, стартует ККМ. Напряжение повышается примерно до 400 В. Затем, при достижении этого напряжения, терморезистор шунтируется с помощью реле и разрешается работа контроллера PWM.
Контроллер PWM (ШИМ) запускается при следующих условиях: если напряжение на конденсаторах достигло определенного уровня и микроконтроллер разрешил его работу, подав лог. 1 на оптрон U1. Контроллер ШИМ включен по типовой схеме и управляет H-мостом на 4 транзисторах. Транзисторы коммутируют силовой трансформатор TV3. На схеме для упрощения подробно показана только половина моста. На комплементарных парах в цепи затвора собрана схема, ускоряющая перезаряд затворной емкости силовых транзисторов. Гальваническая развязка затворов плеч обеспечивается трансформаторами. Первичная обмотка трансформатора управления питается драйвером UCC27254A. Драйвер управляется непосредственно микросхемой ШИМ.
Этот же контроллер управляет и синхронным выпрямителем через микросхему гальванической развязки ADUM1285, которая дает сигнал на 6-амперные драйверы MIC4420YM, по одному на каждое плечо, а в каждом плече стоят по два силовых транзистора, включенных параллельно.
Внимательный анализ драйверов MIC4420YM выявил неисправность одного из них, вызванную, очевидно, пробоем силовых ключей. Однако, эта неисправность никак не выявляется прозвонкой и даже есть сигнал на ее выходе, который вполне себе похож на прямоугольный. Микросхему можно забраковать только при сравнении ее с заведомо исправной, проводя измерения на макетной плате с резистивной нагрузкой на выходе и подавая на вход сигнал с внешнего генератора. Неисправная микросхема сильнее греется и выдает искаженный сигнал под нагрузкой.
Как и у любого прямоходового преобразователя, на выходе выпрямителя стоят дроссели. Дроссели шунтируются мощными снабберными цепями. На выходе стоят конденсаторы фильтра. Их емкость и размеры подозрительно малы для платы такой мощности. Вероятно, предполагается что основной сглаживающей емкостью будет сама заряжаемая аккумуляторная батарея.
Далее выпрямленное напряжение идет плюсовым проводом через предохранители (которые, ожидаемо, были перегоревшие), коих здесь было 2 шт в параллель, а минусовым проводом через датчик тока. Датчик тока выполнен из шунта и микросхемы — усилителя напряжения этого шунта INA240. Напряжение с выхода этой микросхемы идет куда то на микроконтроллер, очевидно, на один из входов АЦП. Кроме того, на микроконтроллер идет и напряжение с резистивного делителя напряжения. Таким образом микроконтроллером контролируется выходное напряжение и выходной ток платы.
С микросхемы усилителя датчика тока напряжение также поступает на цепь обратной связи на ОУ DA6.2 TS272C. на второй вход этого ОУ подается опорное напряжение с ЦАП микроконтроллера, который таким образом задает величину ограничения тока заряда. С выхода этого ОУ напряжение через оптрон управляет ШИМ-контроллером.
Таким образом, микроконтроллер управляет платой всего тремя сигналами — два из которых дискретные — «включить ККМ», «включить ШИМ», а один — аналоговый — «порог ограничения тока». Подавая вручную эти сигналы можно заставить плату включиться и выдать ток в нагрузку. Подавая эти сигналы, следует внимательно отнестись к выбору точки подключения общего провода. Поначалу я выбрал для этого силовую минусовую клемму, но, как оказалось, из-за большого протекающего тока ее потенциал начинает отличаться от потенциала минуса около микроконтроллера. Также в процессе я пару раз умудрился спалить оптроны и один раз — ОУ TS272C. Запасные детали были взяты с разобранной платы.
В результате проделанной работы аппаратная часть платы была отремонтирована. Однако причина выхода ее из строя осталась неизвестной. Возможно, первопричиной был частичный выход из строя драйвера MIC4420YM. То есть, сначала вышел из строя драйвер, а уже потом транзисторы, а не наоборот, как я предположил. Возможно также, что изначально вышел из строя ОУ TS272C (то есть он был неисправен еще до того, как я его «спалил»). В этом случае плата остается без ограничения по току и выдает на выход максимум, на что способна, при этом, разумеется, горит предохранитель и синхронный выпрямитель.
Без блока управления и индикации плата включается, зажигает светодиодик и на этом все. Далее я попытался проанализировать управляющую часть на микроконтроллере чтобы попытаться запустить плату автономно. Проще всего начать с анализа назначения контактов на разъемах шлейфов управления. Поскольку плата управляется по шине CAN, легче всего было найти эти контакты, проследив дорожки от микросхемы преобразователя интерфейса CAN MAX13053ASA. Шина CAN идет через все разъемы платы. С остальными контактами сложнее, однако, судя по тому, что они имеют одинаковую схемотехнику, можно сделать вывод об их одинаковом предназначении. Большая фильтрующая емкость в цепи этих сигналов говорит о том, что это дискретный сигнал. А первое что приходит в голову о предназначении этих дискретных сигналов — что это сигналы адреса. Поскольку три таких сигнала приходят от одной соседней платы и три уходят на другую соседнюю, можно предположить, что плата получает свой адрес от одной платы, увеличивает его на единицу и передает следующей. И, к моему удивлению, так оно и оказалось! За одним исключением, адрес далее передается не на единицу бОльший, а на единицу меньший. Подключив к этим контактам 3 микропереключателя и задав адрес можно в этом убедиться, плата инициализируется. Если задать адрес 000, то инициализации не происходит. Таким образом, блок управления может изменять количество проинициализированных (и участвующих в работе) плат, даже если физически их больше, последние платы, получив адрес 000 и передав его дальше, просто не включатся.
Еще один дискретный сигнал проходит через все платы. Очевидно, это или общий сигнал включения или общий сигнал аварийного отключения.
Разгадав этот момент, дело дальше, однако, не продвинулось. Проинициализированная плата на запросы от фирменного ПО не отвечала. Вероятно, на внешние запросы отвечает только блок управления, а платы только шлют ему свое текущее состояние и телеметрию.
Анализ данных на шине CAN также не дал никакой дополнительной информации. Протокол не похож на стандартный ни по длине, ни по назначению бит. Вероятно, там от CAN используется только физическая среда передачи, протокол намеренно сделан отличающимся, чтобы эти пакеты не ловили устройства снаружи, ведь шина CAN у них одна, общая.
Жаль, конечно, что полностью исправная плата без блока управления превращается в кирпич.
Что же можно с ней сделать чтобы ее оживить? Можно запаять туда свой микроконтроллер и написать свое ПО. Вряд ли можно ожидать, что из имеющегося микроконтроллера получится считать прошивку, обычно там все бывает залочено. Да и наверняка написать свое ПО выйдет быстрее, чем дизассемблировать и разбираться в имеющимся. Опять же, с этим могут быть проблемы и юридического характера.
Алгоритм зарядки аккумулятора несложен. При включении, если микроконтроллер не видит напряжения на клеммах, делается вывод, что аккумулятор отключен и нужно ожидать подключения. Затем, после подключения, нужно проверить, в допустимых ли пределах это напряжение. Если оно сильно выше, значит подключена неправильная батарея, нужно помигать красным светодиодиком. Если оно сильно ниже — аналогично. Если оно ниже, но не сильно — возможно, батарея просто глубоко разряжена. Ее нужно попытаться начать заряжать слабым током, например, 1/10 от номинального. Если напряжение достаточно быстро вырастет до минимального для этой батареи, тогда уже можно включить и полный ток. Если же этого не произошло, то по таймауту нужно завершиться и зажечь красный светодиод ошибки.
После старта заряда необходимо заряжать батарею стабильным током, численно равным примерно 1/10 емкости и по времени не менее 10 ч. За это время напряжение должно достигнуть максимального значения для этой батареи. Если этого не произошло, например, из-за одной замкнутой банки, то по таймауту необходимо остановить процесс. На этом этапе аккумулятор набирает примерно 80% заряда. Остальные 20% аккумулятор добирает заряжаясь постоянным напряжением. Ток, при этом, постепенно уменьшается. В идеале — почти до нуля. В реале можно отключаться при снижении тока, например, до 30% от номинала или по таймауту, например, 2–3 часа. Смотря, что произойдет ранее. После этого устройство зажигает зеленый светодиод, сигнализирующий об окончании зарядки и переходит в режим ожидания.
В некоторых моделях зарядных устройств после окончания зарядки и простое более некоторого времени автоматически включается режим балансировки батареи — батарея заряжается малым током (порядка четверти от номинального тока заряда). При этом недозаряженные банки добирают необходимый заряд, а уже заряженные банки не так сильно перегреваются и не так сильно кипят (если батарея свинцово-кислотная).
Попробуем пойти по этому пути, а для этого необходимо сделать реверс-инжиниринг схемы управления. Причем, в отличие от силовой части, эту часть схемы необходимо исследовать более подробно, вплоть до точных номиналов деталей, ведь под нее придется писать ПО.
Схема получилась не очень сложная:
Слева на схеме располагаются 6 дискретных адресных входов/выходов. Поскольку в нашем случае использовать плату совместно с другими не предполагается, на эти входы/выходы можно повесить светодиоды индикации состояния, причем светодиоды можно подключать напрямую — токоограничительные резисторы уже есть в этих цепях.
Нужно отметить, что на этих адресных разъемах отсутствуют контакты общего провода. Это сделано для того, чтобы силовой ток зарядки не шел через шлейфы управления между платами. Контакт общего провода есть только на разъеме для подключения блока управления. Туда и следует подключать общие катоды светодиодов индикации.
Преобразователь интерфейса CAN на микросхеме MAX13053ASA собран по типовой схеме и на микроконтроллере подключается к выводам, у которых дополнительная функция — это линии CAN, все логично и ожидаемо. На схеме не показано, но нагрузочный резистор 120 Ом на шине можно отключать с помощью перемычки (обычный джампер).
Разъем Х4 — для программирования контроллера. На плате он представлен в виде контактных площадок под пружинящие контакты. На него выводятся стандартные линии программирования контроллеров семейства STM32 — SWCLK, SWDIO, а также общий провод. Сигналы RESET и VCC тоже подходят, но резисторы (на схеме перечеркнутые крестом) не установлены. Видимо, все работает и без них.
Контроллер тактируется внешним кварцевым резонатором на 30 МГц. Частота выбрана почти на пределе возможностей микроконтроллера (32 МГц), но допустима.
Цепочка из двух резисторов на входе BOOT0 задает режим загрузки из встроенной flash памяти. Аналогичные цепочки на выводах PA15, PB6, PB7, PB8 говорят контроллеру на какой плате его распаяли. Поскольку алгоритм зарядки всех типов аккумуляторов практически одинаков и различается только деталями — напряжением, током, временем, дополнительными датчиками, то логичнее написать одно-единственное ПО для всех подобных плат. По логическому коду на этих выводах контроллер понимает, на какой плате он установлен и соответствующе настраивает свои выводы и интерфейсы. Мы же эти выводы будем просто игнорировать. Выводы PA8 — PA10 никуда не идут и оканчиваются тестовыми площадками на плате. Очевидно, на эти выводы выводится отладочная информация. Они пригодятся и нам.
Выход с ЦАП микроконтроллера поступает на буферный ОУ, с выхода которого идет на схему обратной связи контроллера ШИМ (ограничение по току). На ЦАП необходимо будет выводить некий уровень, пропорционально которому будет расти выходной ток.
Рассмотрим входы АЦП.
Ко входам PA5 и PB1 подключены одинакового вида цепочки с терморезисторами. Один терморезистор стоит просто на плате, второй — непосредственно под радиатором транзисторов синхронного выпрямителя. Странно, но почему-то температура радиатора транзисторов ШИМ и ККМ не контролируется.
Ко входу PA3 подключен сигнал с микросхемы-усилителя датчика тока. Таким образом микроконтроллер узнает текущий ток заряда. На вход PA2 подается напряжение с делителя выходного напряжения — контроллер измеряет текущее напряжение на выходе платы.
На вход PA1 подается напряжение с еще одного делителя напряжения с выхода платы. Коэффициент деления, однако маленький — всего примерно 1:3. Очевидно, функцией этого входа является простое определение наличия/отсутствия напряжения на выходе платы. Этот вход может даже не подключаться к АЦП, а быть обычным дискретным входом микроконтроллера.
На PA0 подается напряжение с датчика тока вентилятора. Возможно, вентилятор управляется плавно с помощью ШИМ, хотя по работе исправной платы я этого не заметил. При старте заряда плата немедленно взвывает вентилятором, хотя какого-либо существенного нагрева еще нет. Возможно, по току просто контролируется исправность вентилятора — отсутствие обрыва либо короткого замыкания в цепи. Вентилятор управляется с выхода PB9 через силовой каскад на транзисторе.
Вышеперечисленные аналоговые входы защищены диодными сборками, на катод которых подается ограничивающее напряжение на 1/11 часть меньше напряжения 3,3 В. Сложность такой реализации ограничителя не совсем понятна. Можно было бы ограничиться обычными стабилитронами или супрессорами. Вероятно, разработчик просто решил чем-то полезным занять неиспользуемую половину микросхемы операционного усилителя TS272C.
На PB0 подается напряжение с делителя контроля напряжения питания 12 В. PB3, PB4 управляют сигнальными светодиодами на плате.
Общий управляющий сигнал, идущий через все 10-е контакты разъемов Х1 — Х3 действительно связан с аварийным отключением. Этот сигнал, пройдя через каскад на транзисторе, поступает непосредственно на входы логических элементов ИЛИ-НЕ, через которые идут сигналы на включение контроллеров ШИМ и ККМ. Таким образом, отсутствие этого сигнала аппаратно отключает всю плату целиком, вне зависимости от управляющих сигналов с микроконтроллера. Этот сигнал можно использовать для подключения кнопки аварийного отключения. Сигнал с порта PB15 микроконтроллера включает контроллер ККМ, а вот с включением контроллера ШИМ схема немного интереснее. Включается он сигналом с порта PB14, но дополнительно на логический элемент поступают блокирующие сигналы с порта PB5 и через резистор 100 Ом с PA6. Зачем так было сделано — непонятно, возможно это часть другой схемы, которую планировалось реализовать. На плате есть некоторое количество незапаянных компонентов. И, как раз проводник от точки соединения PB5 и входа логического элемента ИЛИ-НЕ идет на такие пустые площадки, на которых подразумеваются резисторы. Далее эти резисторы идут на микросхему компаратора. Интересно, что микросхема компаратора на плату запаяна, но в работе никак не участвует, поскольку часть ее обвязки отсутствует. Почему не стали запаивать копеечные резисторы и конденсаторы, но оставили на плате более дорогостоящую микросхему — также непонятно. Может быть, задумывалась какая то хитрая схема защиты, от которой в последний момент отказались. Попробуем проанализировать этот момент поподробнее.
Вывод микроконтроллера PA6 может иметь следующие альтернативные функции: SPI1_MISO, I2S1_MCK, TIM3_CH1, TIM1_BKIN, TSC_G2_IO3, USART3_CTS, TIM16_CH1, EVENTOUT, COMP1_OUT. Интерфейсы SPI, I2S, TSC и USART вряд ли имеют какое-либо отношение к схеме защиты, их исключаем. EVENTOUT тоже. Остаются таймеры и компаратор. На таймере можно, например, организовать своего рода вотчдог, который если не сбрасывать с определенной периодичностью будет аппаратно отключать плату. Да, прочитав описание на таймеры, можно сделать вывод, что такой вариант возможен. Вариант с компаратором тоже возможен. Компаратор 1 подключается ко входу PA1, а как раз туда приходит сигнал подключена или нет батарея. Таким образом, схему можно настроить так, чтобы без подключенной батареи ШИМ контроллер никогда не запустится. В качестве опорного напряжения для компаратора можно выбрать или выходы ЦАП или различные уровни встроенного опорного напряжения. Скорее всего — второй вариант, он выглядит логичнее, ЦАП использовать для этого уже перебор, хотя второй канал ничем не занят.
Вывод микроконтроллера PB5 может иметь следующие функции SPI1_MOSI, I2S1_SD, TIM3_CH2, TIM16_BKIN, I2C1_SMBA. Здесь также возможен вариант схемы защиты с таймером.
Версия схемы защиты с компаратором мне кажется наиболее правдоподобной, а PB5 используется просто как вход для контроля текущего состояния этого компаратора. Именно такой вариант мы и реализуем.
Напряжения питания 5 В и 3,3 В обеспечиваются линейными стабилизаторами. На микросхеме MAX6003EUR собран источник опорного напряжения 3 В, который идет только на вход PA7 микроконтроллера и более нигде не используется. Очевидно, это напряжение оцифровывается АЦП и используется в качестве образцового.
Для оперативного контроля реальных напряжения и тока удобно использовать обычный китайский ампервольтметр. Питание и вольтметр подключаются напрямую. Питание — непосредственно к 12 В, которые идут на питание блока управления, вход вольтметра — напрямую к силовому выходу платы. Поскольку вольтметр рассчитан на 100 В, проблем быть не должно. А вот амперметр необходимо немного доработать. Встроенного шунта на 10 А будет явно недостаточно, поэтому будем брать сигнал с шунта на плате. Точнее, не с шунта, а с выхода микросхемы усилителя напряжения этого шунта — INA240. У китайского же амперметра необходимо удалить встроенный шунт, ОУ со всеми цепями и вместо них смонтировать простой делитель в цепи АЦП. Делитель необходимо рассчитать таким образом, чтобы показания амперметра соответствовали реальному значению протекающего тока, но в то же время, чтобы он не сильно нагружал выход микросхемы INA240. В моем случае оказалось, что необходим делитель примерно 1:2. Да, еще необходимо переместить на соседнее знакоместо десятичную точку. Для этого я просто откусил вывод десятичной точки от платы индикатора и подключил его напрямую к напряжению питания +3,3 В через резистор 330 Ом.
В результате зажглись все 3 точки, лишние две я просто закрасил перманентным маркером. Таким образом, диапазон индицируемых токов получился 0 — 99,9 А.
До этого времени с семейством микроконтроллеров Cortex я не работал, не было необходимости и данная задача оказалась прекрасным поводом подробнее изучить его. Как раз к этому моменту пришел из Китая заказанный программатор STLINK V2 и новый микроконтроллер STM32F072RB.
Сначала я попытался подключиться к уже имеющемуся микроконтроллеру, однако это не удалось и я подумал что микроконтроллер залочен и надо впаивать свой. Однако и после впайки нового микроконтроллера подключиться не удалось. Как оказалось, все дело было в настройках программы STM32 ST-LINK UTILITY — нужно было выбрать пункт «Software System Reset» в меню «Reset Mode». Не могу сказать, что это было очевидно, догадаться помог только интернет. Следующим шагом было — помигать светодиодиком, 2 шт которых как раз присутствуют на плате. Немного помучавшись с поиском необходимого заголовочного файла, это тоже удалось. А вот включить прерывания так просто не получилось. Как оказалось, в заголовочнике STM32, в отличие от AVR, вектора прерываний не прописываются. Чтобы их прописать необходимо подключить и скомпилировать ассемблерный файл startup_stm32xxxxxx.s и, до кучи еще и system_stm32xxxx.c. С поиском этих файлов также возникли сложности, без проблем можно было найти только файлы для STM32F103C8T6 для BluePill. Также, проблем добавило то, что файлы, скачанные из разных мест были несовместимы друг с другом. В конце концов, я скачал STM32CubeF0 MCU Firmware Package непосредственно с сайта ST, откуда и взял все необходимые файлы, причем рабочие и совместимые друг с другом. С ними все скомпилировалось и заработало, после чего можно было, наконец, заняться написанием самого алгоритма программы.
Чтобы выводить отладочную информацию пригодились упомянутые ранее выводы PA9, PA10. На них весьма удачно расположились выходы RX и TX встроенного контроллера USART. Подпаявшись к ним проводами с микросхемой MAX232 получилось вывести информацию на старенький ноутбук по COM-порту в режиме терминала (использована известная программа PuTTY). В обратную же сторону, нажимая определенные клавиши на клавиатуре ноутбука, можно посылать команды управления для включения/выключения, ручного управления регистрами.
Однако, когда основные алгоритмы ПО были написаны и стало возможным запускать плату программно, выявилась серьезная аппаратная проблема — нестабильная работа контроллера ШИМ, а именно цепи обратной связи. При этом плата начинает издавать слышимые звуки, всячески пищать и верещать. Сигналы управления начинают хаотично изменяться. Длительная работа в таком режиме не допускается, поскольку силовые элементы и цепи управления из-за беспорядочных переключений начинают перегреваться и могут выйти из строя. А выход из строя мощного источника питания (~3 кВт) может сопровождаться небезопасным выделением энергии. Нестабильность импульсного источника питания может встречаться, например, при переделках промышленных блоков питания, когда в схему вносятся существенные изменения, или в самодельных импульсных преобразователях, если разработчики подошли к расчету цепи обратной связи спустя рукава. Особенно сложно побороть эту проблему, если цепь обратной связи длинная и включает в себя несколько компонентов. При этом, каждый компонент вносит неизвестное значение фазовой задержки, что может привести к превышению запаса по фазе цепи регулирования. В нашем случае сигнал обратной связи проходит через микросхему усилителя датчика тока, операционный усилитель, каскад на двух транзисторах, оптопару, какие то RC-цепи, внутренний усилитель ошибки микросхемы ШИМ-контроллера.
Поиск причины нестабильной работы не увенчался успехом. Казалось бы, все компоненты в цепи ОС работают исправно. Не найдя проблем в цепи обратной связи, я начал проверять цепи управления затворами мощных полевых транзисторов. Там были найдены пара неисправных компонентов, но проблемы это не решило. В процессе поиска неисправности при очередном включении плата внезапно бахнула. Весь комплект силовых транзисторов H-моста вышел из строя. Также вышли из строя транзисторы в одном из плеч синхронного выпрямителя. Хорошо, что последних был небольшой запас с другой платы. Силовые же транзисторы пришлось заказывать и ждать новые. Не очень приятно, ведь эти транзисторы весьма недешевы. Чтобы немного сэкономить я заказал другие, китайской фирмы с немного лучшими параметрами и чуть дешевле.
Перепахав все цепи управления силовыми транзисторами и впаяв комплект новых я… снова получил такую же нестабильную работу! В процессе дальнейшего копания в схеме у меня опять сгорела пара силовых транзисторов, причем это была пара, находящаяся на одной стороне H-моста. По непонятной причине через транзисторы потек сквозной ток. Тогда я начал пристальнее присматриваться к контроллеру, его обвязке и режиму его работы. С обвязкой все было в порядке, но вот величина «мертвого времени», которую он выдавал, не соответствовала той, что должна была быть по даташиту (графики ниже).
Она была в несколько раз меньше, хоть и с большим запасом относительно времени выключения транзистора. Больше мне грешить было не на что, поэтому я заказал новый контроллер UCC28951. Заказывать новые силовые транзисторы не стал. После всех экспериментов, со всех плат у меня осталось их ровно 4 шт — один комплект, правда, по паре разных.
Получив и впаяв новый контроллер, я снова снял осциллограмму величины «мертвого времени». И оно при той же обвязке и в том же режиме стало намного больше! Примерно столько, как и должно быть по даташиту.
До:
После:
Значит, все-таки, оказался виноват контроллер. Он каким-то образом вышел из строя, но не до конца. Пострадала только та часть, которая отвечает за формирование необходимых таймингов мертвого времени. Крайне неочевидная неисправность.
Впаяв последний комплект транзисторов, я, наконец, оживил плату. Теперь плата перестала «верещать», а осциллограммы управляющих сигналов стали намного стабильнее.
Теперь можно до конца отладить свое ПО и окончательно собрать работающее устройство. Плата была помещена в металлический корпус от системного блока компьютера.
Фальшпанель была сделана и первого попавшегося куска диэлектрического материала.
Также был добавлен разъем DB9 для оперативного подключения средств диагностики и отладки.
Как было выяснено позднее — подобный выход из строя для этой платы не редкость. Многие эксплуатанты аналогичного оборудования сообщают о подобных проблемах. Причем, по сообщениям, плата чаще всего выходила из строя если присутствовали те или иные проблемы с сетью электропитания, просадки или провалы напряжения. Иногда для предупреждения таких ситуаций применялись мощные трехфазные стабилизаторы напряжения. Сложно сказать, насколько оправдан данный подход, поскольку непонятен механизм выхода из строя устройства. Мной был проверен источник вторичного электропитания на плате. Он сохраняет работоспособность при уменьшении сетевого напряжения вплоть до 100 В. Очевидно, выход из строя контроллера ШИМ не связан с питанием, оно на него приходит стабильно. Вся обвязка, окружающая контроллер — низковольтная, отвязана от силовой части драйверами, трансформаторами и оптопарами. Единственная цепь, на которую пало мое подозрение — цепь контроля тока на трансформаторе тока. Теоретически, при большом импульсе тока через первичную обмотку, во вторичной может «чего-нибудь такого» навестись. И это «что-нибудь такое» может попасть на вход CS микросхемы контроллера ШИМ, а этот вход как раз таки управляет частью схемы, отвечающей за формирование необходимого интервала «мертвого» времени. Поэтому, на всякий случай, параллельно резисторам датчика тока я добавил пару обычных диодов, включенных последовательно, которые будут ограничивать напряжение в этой цепи на уровне 1,4 — 1,5 В. Под это дело на плате есть неиспользованные контактные площадки.
Вот такой вот интересный случай. Вопросы и замечания прошу писать в комментариях.