Пролог
Всем добрый день и это последняя часть цикла посвященная не силовой части устройства. Возможно вы подумаете, что я нарочно затягиваю силовые модули, но это не так. Просто мне хотелось бы сначала закончить со всеми побочными модулями, которые являются от части «декоративными», но без которых наш ИБП превращается в груду плохо работающего железа с непонятным назначением.
Поэтому в данном статье будет подробно рассмотрена реализация измерения напряжений, токов в узлах, а так же контроль температуры и защита от перегрева. И конечно же — индикация, куда нам без нее! Ведь без нее достаточно проблематично понять что творится с нашим прибором, насколько правильно он работает и работает ли вообще.
Еще несколько заявлений перед началом:
1) В промышленном варианте плата была разведена в 4-х слоях для реализации качественной трассировки платы, с гальванической развязкой и минимальными шумами, но в данной статье я приведу два вида трассировки и оба для «радиолюбителей»! Один вид — двухсторонняя плата, другой вариант — односторонний. Могу сразу отметить, что даже эти варианты обладают более чем достаточными шумовыми свойствами для надежной работы, а гальваническая развязка была убрана с целью удешевления изготовления, т.к. данный узел не является ответственным и в случае его неисправности прибор продолжит работать и сигнализировать о случившейся аварии.
Конечно же перед тем, как выложить их в статью я изготовил прототип, усиленно его погонял и оценил более чем пригодную живучесть. Так же проверил возможность изготовления данных плат с помощью ЛУТа и фоторезиста — шаг 0.3 мм достигается без проблем.
2) Всем кто захочет повторить данный блок или ИБП целиком я готов выслать запрограммированный микроконтроллер STM32, если его присутствие вас отпугнет. Цена будет: стоимость МК + пересылка, исключительно с целью помочь, а не заработать.
Некоторую ясность вроде бы внес, тогда поехали разбираться в схеме…
Общая схемотехника и описание функций модуля
И так общая схема модуля о котором сегодня пойдет речь, перечертил ее специально для этой статьи по модулям, чтобы новичкам было проще понять общий принцип работы и какой «кусок» за что отвечает в конечном функционале:
Рисунок 1 — Принципиальная схема блока индикации и управления на STM32F103RBT6
Теперь мы смотрим на схему и может примерное представить, что она умеет:
1) первым делом бросается в глаза «прямоугольник» с надписью ILI9341. Это цветной TFT экран с разрешением 240х320 точек и диагональю 2,4". Практически вся информация об измерениях будет выводиться именно на него.
2) так же видим надпись около одного из разъемов «Шунт», что думаю наводит на мысль об измерение тока с хорошей точностью. Это как раз и оправдывает использование токового шунта в данной схеме, а не трансформатора тока. Последние используются в силовых модулях для защиты от короткого замыкания (КЗ)
3) видим так же пару разъемов с надписями "+360V" и "+48V" — это контроль напряжения на DC шине (в том числе на АКБ) и измерение напряжения выхода. Просто для снижения постоянной времени цепи измерения проводить решил их в высоковольтной DC цепи, ибо напряжение на выходе (АС) линейно зависит от него, поэтому не составит труда пересчитать постоянку в переменное напряжение на выходе ИБП
4) те, кто работали с датчиком DS18B20 сразу обратят внимание на разъем J1, именно туда мы подключим наш термодатчик
5) датчик является цепью обратной связи для куллеров охлаждения, которые подключаются к разъему J8
6) есть магический разъем J3, который около себя имеет кучу одинаковых резисторов и надписи LED, наверное все догадались, что сюда подключается та самая светодиодная индикация, что вы могли наблюдать на лицевой панели ИБП
Общие возможности схемы вроде обговорили, тебе необходимо разобрать как работает каждый блок.
Принципы работы функциональных блоков и программное управление
1) Начнем с самого важно — с питания ведь режим питания нарушать нельзя. Если кто-то вдруг забыл предыдущую статью — дежурное питание у нас имеет напряжение 15В, нам необходимо запитать все наше добро от этого напряжения с учетом того, что микроконтроллер питается от 3,3В.
Рисунок 2 — Цепи стабилизации питания
Стабилизаторы все линейные, т.к. ток по цепи +3.3В у нас не будет превышать 0,25А. Есть один принципиальный момент — наличие вроде бы лишнего стабилизатора LM7805. На самом деле я как-то попал в такую ситуацию, что мой стабилизатор на AMS1117-3.3 горел как муха, а все потому, что я привык к 7805, 7815 и подобным — у них максимальное входное напряжение до 40В. У AMS1117 входное напряжение максимальное 12В. Поэтому если мы дадим 15В на него — сгорит, чтобы этого не произошло мы сначала снижаем наши 15В в 5В и затем 5В в 3.3В.
Вроде бы мелочь, а я из-за невнимательности и привычки как-то в одном проекте попал на убитый камень STM32F407VET и кучу SDRAM. Светодиод VD2 — просто сигнализирует нам о наличии в линии питания напряжения.
2) Теперь необходимо наше стабилизированное питание подать на МК — у нас будет использоваться доступный камень STM32F103RBT6. О причинах его выбора будет в следующем пункте. И так главное правило разводки — много конденсаторов в цепях питания не бывает. Как минимум должен быть 1 конденсатор 0,1 мкФ на каждую пару ног Vcc — Vss. Конечно цепь питания аналоговой части Vdda должна быть разведена иначе — должен быть отдельный электролит, дроссель… Это все классно, но для потребительских задач и при не особо высокой точности хватит и обычного конденсатора как в остальных цепях.
Идеальный вариант схемы питания можно глянуть в даташите на любой STM.
Рисунок 3 — Цепь питания микроконтроллера
Мы еще видим yогу Vbat — она служит для контроля питания в линии, при его снижение она может увести МК в спящий режим или режим экономии. В нашей задаче это не актуально, т.к. используется в системах, где батарейное питание, например в плеере или телефоне.
Для чего нужны конденсаторы в цепи — чтобы отфильтровать помехи и выбросы по питанию, исключить наводки. Особенно это актуально для цепи питания аналоговой части, ибо от этого будет зависеть точность измерения.
3) Тут я хотел бы объяснить почему именно STM32F103RBT6. Серия F10x очень похожа между собой, первый МК который я попробовал у ST был STM32F100RBT6, который стоит на отладочной плате STM32VL-Discovey. Он практически идентичен нашему и обкатывал работу с дисплеем я именно на нем, но есть один недостаток. Наш дисплей на ILI9341 работает через аппаратный SPI, а значит его скорость зависит от частоты МК. У F100 — это 24 МГц, достаточно солидно, учитывая стоимость на уровне ATmega8, но при такой частоте скорости SPI не хватало чтобы обновлять картинку на TFT с частотой незаметной человеческому глазу. Поэтому решил взять старшего товарища и выбор пал на STM32F103RBT6. Как я выше писал камни почти не отличаются, цоколевка ног у них совпадает, грубо говоря — полный аналог. Вот только тактовая частота у него уже 72 МГц! Запредельная для любой AVR-ки и так необходимая нам! На такой частоте время полного обновления экрана при «голом» SPI составляет 780 мс, что еще заметно глазу. Хотя если обновлять не весь экран, а надписи на нем — то ничего не заметно уже. Конечно нам больше и не надо, но т.к. проект будет открытый, то может кто-то решит добавить функцию просмотра порно разветвленного (древовидного) меню или еще чего с кучей графики. Поэтому было решено использовать очень классную часть переферии - DMA, работа связки SPI + DMA позволила уменьшить время обновления до 120 мс, чего достаточно для отличной работы с графическим меню и прочим.
Рисунок 4 — Общий вид микроконтроллера STM32F103RBT6 в корпусе LQFP-64
4) Так как наше устройство является силовым и в нем есть чему греться — необходимо реализовать функция контроля температуры. Она выполнена на легендарном датчике DS18B20, который работает на «разжеванном» в интернете и книгах интерфейсе 1-Wire. Чем он хорош? Он выполняет 2 наших требования: может измерять с точность +-0.5 оС и прост в использовании. В промышленном исполнение стоит все тот же датчик, просто их аж 3 штуки, но это избыточно для обывателей, хотя никто не запретит вам так же применить 3 штуки для каждого радиатора.
Рисунок 5 — Подключение датчика DS18B20 к микроконтроллеру по интерфейсу 1-Wire
Как видите — все до безумия просто! Никаких сложностей, сверх требований по разводки платы и прочее. Из схемы следует, что наш датчик подключается через разъем, т.к. сам он прикреплен к радиаторам — основному источнику тепла. Датчик сам в корпусе TO-92. Как с ним работать программно мы разберем дальше.
5) Интерфейс для программирования STM32 — это простейший Serial-Wire, интерфейс аж из 3-х проводов: земля + тактовая частота (CLK) + данные (DIO).
Рисунок 6 — Интерфейс программирования микроконтроллера
Я добавил вывод +3.3V чтобы при программирование не подавать основное питание, а использовать питание с отладочной платы STM32VL-Discovery. Думаю тут все понятно и ясно, на всякий случай приложу фото отладки:
Рисунок 7 — Общий вид отладочной платы STM32VL-Discovery с камнем STM32F100RBT6 и программатором ST-link v1.0 на борту
Если вы планируете дальше изучать мои проекты и схемы, а их будет много от сварочников до КВ трансиверов, то настоятельно советую купить вам отладочку плату, можно любую — по вашему бюджету. Если хотите крутых проектов и глубокого изучения — покупайте STM32F429-Disco. Эта плата покроет 95% ваших потребностей, правда цена около 2,5 — 3 тыс. руб.
6) Измерение рабочих напряжений реализовано на двух канал АЦП, у данной STM-ки таких каналов 16 штук, поэтому возможностей еще море. Нас же интересует 2 значение: низковольтной DC шины 48В и высоковольтной DC шины с 360-400В. Схемотехника простейшая: делитель напряжения на резисторах, один из которых подстроечный и им выполняется настройка напряжения, путем изменения коэф. деления.
Рисунок 8 — Входные цепи АЦП для измерения напряжений
Формула для расчета коэффициента деления:
Формула зависимости напряжения на АЦП от напряжения входа (измеряемого):
АЦП у STM может измерять напряжения от 0 до +3.3В, наша задача так подобрать коэф. деления, чтобы после делителя напряжения 400В и 48В попали в данный диапазон. Желательно, чтобы номинальное измеряемое напряжение попало примерно на уровень в 2В на АЦП, то есть чуть больше середины. Это позволит измерить и меньшие и больше напряжения.
Конденсатор шунтирующий — спасет нас от пульсаций и неправильного счета АЦП, а стабилитрон защитит вход АЦП МК от повышенного напряжения и пульсаций если таковые имеются.
7) Измерение тока реализовано с помощью стандартных шунтов с номинальным падением 75 мВ на 150А. Такое низкое напряжение АЦП измерить может, но точность и дискретизация будет низкая. Для решения данной проблемы необходимо применить операционный усилитель (ОУ). Он усилит нам наши 75 мВ в 20 раз и мы получим 1,5В при номинальной нагрузки. Запас «сверху» выбран для контроля пусковых и перегрузочных токов. Ведь у нас есть заявленная характеристика 200% перегруз в течение 20 минут, а это создаст на АЦП напряжение 3В.
Рисунок 9 — Реализация цепи измерения тока на ОУ LM358
Коэффициент усиления регулируется делителем на R13 и R15, путем его изменения (подстройкой R15) мы можем настроить показания значения тока. Схема включения ОУ в общем-то стандартная. Единственный критичный момент, который у меня возник — нестабильная работа от +3.3В. С чем это связано примерно понял, но в документации это как-то поверхностно упомянули, советую прочитать даташит. Поэтому было решено запитать ОУ от +15В, которые у нас имеются от дежурных источников.
8) Последний модуль — это управление системой охлаждения. Выполнена она на 2-х куллерах, обратная связь для их управления выполнена на упомянутом выше DS18B20. Управление нагрузкой осуществляется силовым полевиком IRLML0030. Хорош он тем, что может спокойно коммутировать ток в 3-4А, а буква «L» в маркировки означает возможность работы от низкого логического уровня, то есть от +3.3В. Это позволяет нам напрямую от МК управлять ключом. Управляется частота вращения куллеров с помощью ШИМ. Он в STM32 аппаратный, по 4 канала у каждого таймера, а таймеров там много… так что простор для творчества)
Я посадил оба куллера на один канал, т.к. это просто проще и в данном случае нет смысла реализации многоканального управления. Обратная связь «скважность — температура» позволяют поддерживать температуру нормальную для работы, а так же повысить (сохранить) ресурс работы куллеров.
Рисунок 10 — Схема силовой цепи управления куллером с помощью ШИМ
Резистор R17 выбирается в пределах 100 — 1000 Ом, хоть полевой транзистор и открывается напряжением и в идеале не потребляет ток, но все таки его затвор обладает емкостью. Она в свою очередь будет стремиться зарядиться бесконечно большим током за бесконечно малое время, это конечно все в идеальной модели. В реалиях емкость затвора будет заряжать достаточно большим током, а следовательно его надо ограничить, чтобы не убить МК. Вывод STM может отдать около 10-15 мА или 50-80 мА на весь порт, но камень у нас не силовой, а значит перегружать его не следует. Поэтому мы идем по самому простому пути — ставим токоограничивающий резистор.
Номинал его я описал выше, меньше 100 Ом лучше не ставить — резистор будет греться и ток потребляемый с МК будет большой. Больше 1 кОм ставить не желательно, т.к. ток будет сильно ограничен, затвор будет заряжаться долго и форма ШИМа исказится, а это не очень хорошо. Надеюсь этот момент я достаточно подробно объяснил.
Платы для модуля индикации
Вариант изготовления двухсторонней платы под ЛУТ:
Рисунок 11 — Верхний слой платы
Рисунок 12 — Нижний слой платы
Общий вид платы в одностороннем исполнение
Это самый простой вариант платы, он для самых новичков, но работает не хуже остальных и свой функционал выполняет!
Рисунок 13 — Вид платы со стороны проводников (снизу)
Рисунок 14 — Вид сверху без TFT, тут спрятаны кварц, разъем программирования и подстроечные резисторы делителей
Рисунок 15 — Вид сверху с TFT экраном, все «крутилки» спрятаны и случайным образом вы не собьете настройки
Рисунок 16 — Вся часть данной статьи была посвящена именно этой индикации
Эпилог
В принципе это все что я хотел рассказать в данной части — именно схемотехнику и общий принцип работы модуля. И конечно же файл с платой приложил. Код к данному устройству будет отдельной частью, т.к. это весьма глобальная часть устройства и лучше ей посвятить отдельную статью.
Тут я хотел бы узнать мнение читателей: стоит ли разбирать код? Есть ли смысл выкладывать исходники и разбирать их? Возможно достаточно приложить готовую прошивку .hex и все? И самое главное — нужна ли статья по программной части? Я могу просто приложить исходник к данной статье для самостоятельного разбора, либо же разжевать в отдельной части, например «Часть 4.2»
Всем читателям спасибо, с нетерпением жду вашего мнения по поводу дальнейшего движения.
Автор: R4ABI