0

Блок питания на stm32

Введение

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

Железо

Так уж случилось, что силовые платы разводить приходится с завидным постоянством, поэтому немного думая, использую компоненты, которых было навалом от старых проектов, была собрана простенькая отладочная плата для проверки расчетов и подготовке к «большому проекту». Схема предоставлена на рис.1, разводка платы на рис.2, и получившийся внешний вид на рис.3.

Рис.1. Схемотехническое описание отладочной платы

Рис.2. Разводка печатной отладочной платы

Рис.3. Трёхмерная модель отладочной платы

Плата была изготовлена методом ЛУТ. В ней нет ничего сложного и необычного, кроме, пожалуй, рабочих частот: фронт сигнала в менее 0.3 мкс при рабочей частоте в 24 кГц. Для импульсного блока питания это крошечная величина, но автору вполне хватало. Радиаторы для полевых транзисторов IRFZ44N так и не потребовались, так как в схеме будут значительно быстрее перегреваться диоды.

Честно признаюсь, что данная плата у меня сгорела при нагрузке всего 80 Вт. Так что если захотите до мелочей повторить со своими разработками, то будьте аккуратнее. А на самом деле предельный ток в данном устройстве в 10 ампер потребовал наличия небольшого радиатора на транзисторах, впрочем как и снижения частоты (нагрузка на диоды).

Управляющий контроллер

Подключалось это всё к собственной отладочной плате на базе STM32F103C8T6. Конечно, можно использовать китайские аналоги, но так как я много работаю на данных чипах, потребовалась плата для отточки схемотехники подключения данного чипа + требовалась приличная разводка аналоговой части, которой обычно лишены китайские братья. Внешний вид платы приведён на рис.4.

Рис.4. Отладочная плата на базе STM32F103 собственной разработки

Силовая часть подключалась к РВ0 и РВ1, которые являются выводами 3-го таймера. Это таймер общего назначения. Самый обычный таймер. Выбран был просто из-за удобства расположения на плате. То, что описано далее можно с лёгкостью провернуть на любом другом таймере, вплоть до TIM1 (Advanced-control timer).

Программирование

Для начала пришлось разогнать контроллер до 48 МГц. Это делалось следующим куском кода:

Конечно, можно расписать, что значит каждая приведённая строчка, но этим просто завалены отечественные сайты, уделим время более уникальным вещам. Заметим, для тех кому лень лезть по форумам и «обучающим сайтам», что основная регулировка производится настройкой RCC_CFGR_PLLMULL(Х) .

Далее встала следующая, и собственно основная проблема, довольно слабо описанная в отечественном интернете: создание импульсов формы, показанной на Рис.5.

Рис.5. Требуемая форма импульсов для push-pull преобразователя.

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

  1. Делать ногодрыг для управления силовой частью не хотелось (подразумевается повесить на контроллер неплохую математику для обработки параметров)
  2. Общественные примеры использования таймеров в режиме PWM делать нужные формы импульсов не позволяют, если конечно каждый раз не перенастраивать таймер.

В результате открыли manual по PWM, и нашли следующую чудесную вещь: синхронизация импульсов PWM центру. Это ровно то, что нужно, так как позволяет делать импульсы следующим образом + регулировка производится очень удобно (см рис.6). При правильной настройке правда придётся держать две настройки PWM каналов, так как один канал должен быть прямым, а другой инверсным. Это конечно потребует памяти, но немного.

Рис.6. Форма импульсов при синхронизации по центру импульса. Заштрихованы области, которые добавляются при увеличении времени импульса.

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

Реализация

Вся реализация разбилась на две функции и константы:

  1. Две выделенных константы типа TIM_OCInitTypeDef и TIM_OCInitTypeDef2.
  2. Инициализация со стоповыми параметрами. Это делается для того, чтобы после инициализации блок питания блок питания не начал работать. Запуск инициируется установкой функции на нужное значение скважности.
  3. Функция регулировки скважности. Важно, чтобы значение скважности были ниже, чем 0.45.

Всё реализовано с помощью библиотек SPL. У меня конечно в планах переписать потом под CMSIS, но пока по старинке решил набросать под SPL.

Инициализация с комментариями:

И простенькая функция регулировки:

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

Результаты

Фотографии силового модуля:

Плата силового модуля, вид сверху

Модуль в сборе с трансформатором

В результате получилось запустить Push-Pull преобразователь с приличным коэффициентом регулирования по напряжению(100 уровней). В настоящее время планируется:

  1. Разработка блока питания с 500-ми уровнями напряжения.
  2. Разработка и сборка приличной платы с возможностью создания блока питания мощностью до 1000Вт по данной схеме, с питанием по первичке 400В.
  3. Борьба с самим трансформатором и компонентами выходной схемы. Дело в том, что трансформатор на выходе выдаёт максимальное напряжение в 800В. Это накладывает кучу ограничений и желаний уменьшить обмотки, увеличив частоту. Но это будет отдельная статья.
  4. Разработка 1 МГц блока питания по схеме Push-pull с низковольтным питанием.

Через какое-то время данные задачи будут решены, а пока у вас появился пример кода для программирования двухтактного преобразователя.

В статье приведено описание блока управления питанием 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрена его архитектура, состав регистров, а также приведены описания функций для работы с этим блоком.

Рис. 1. Структурная схема питания
микроконтроллера

Введение
В современных условиях к микроконтроллерам предъявляются требования пониженного энергопотребления и малого тепловыделения. Выполнение таких требований обеспечивается, в первую очередь, снижением питающего напряжения ядра микроконтроллера и введением специальных режимов энергосбережения. Микроконтроллеры серии STM32 [1] включают в свой состав специальный блок управления питанием, благодаря которому полностью удовлетворяют изложенным выше требованиям. Блок управления питанием STM32 состоит из набора регуляторов напряжения и логики управления режимами работы. В первоисточнике этот блок носит название «Power Control» или сокращённо – PWR.

Регуляторы напряжения
Для нормальной работы микроконтроллеру серии STM32 необходимо питающее напряжение от 2,0 до 3,6 В, подаваемое на выводы цепей питания VDD. Встроенный в микроконтроллер регулятор напряжения обеспечивает формирование из внешнего питающего напряжения 1,8 В для питания ядра. Часы реального времени RTC и регистры для резервного сохранения информации могут быть запитаны отдельно от вывода VBAT и сохраняют свою работоспособность даже при отключённом питании на выводе VDD. Структурная схема питания микроконтроллера приведена на рисунке 1. Цепи VDDA и VSSA предназначены для питания аналоговых блоков микроконтроллера. Они должны быть гальванически связаны с цепями VDD и VSS, соответственно.

Питание АЦП и ЦАП
Чтобы обеспечить точность преобразования, блоки АЦП и ЦАП имеют отдельную цепь питания VDDA и цепь нулевого потенциала VSSA, которые необходимо дополнительно отфильтровать от помех и экранировать при разводке печатной платы. Вывод для опорного напряжения VREF+ может быть подключён к цепи VDDA. Для повышения точности преобразования при малых максимальных уровнях напряжения на выводах АЦП и ЦАП, можно подключить вывод VREF+ к внеш- нему источнику опорного напряжения. Напряжение на выводе VREF+ определяет напряжение, которое соответствует максимальному значению преобразованного сигнала в АЦП и ЦАП. Напряжение на вход VREF+ может подаваться в диапазоне от 2,4 В до уровня напряжения питания VDDA.

Резервные источники питания
Для обеспечения сохранности содержимого резервных регистров (Backup) и нормального функционирования RTC в случае, когда вывод VDD отключён от источника питания, у микроконтроллера имеется вывод VBAT, который может быть подключён к резервному источнику питания, например, в виде автономного эле- мента питания. От вывода VBAT питаются: блок RTC, LSE-генератор и выводы PC13…PC15, обеспечивающие функционирование часов реального времени даже при отключённом питании на выводе VDD. Подключением питания от VBAT управляет блок сброса при пропадании питания PDR (Power Down Reset), который встроен в общий блок сброса. В течение времени между моментом, когда напряжение VDD равно VPOR, и выходом контроллера из режима сброса, именуемым tRSTTEMPO, или после того, как был обнаружен сигнал PDR, переключатель между VDD и VBAT остаётся подключённым к VBAT. Во время запуска микроконтроллера, в случае если время подачи питания на VDD меньше времени tRSTTEMPO и напряжение VDD больше VBAT +0,6 В, напряжение VDD может быть приложено к цепи VBAT через внутренний диод. Если источник питания, подключённый к VBAT, слаботочный и не способен выдерживать ток, потребляемый через вывод VDD, то необходимо предусмотреть в схеме питания микроконтроллера установку внеш- него диода с низким падением напряжения между источником питания и входом VBAT. Если не планируется использовать источник резервного питания, то рекомендуется подключить между вывода- ми VBAT и VDD керамический конденсатор ёмкостью 0,1 мкФ. Когда на блок Backup подаётся напряжения от VDD, появляются следующие возможности:
● PC14 и PC15 используются как обычные выводы GPIO или LSE;
● PC13 может использоваться как GPIO, вывод TAMPER, калибрующий сигнал RTC или будильник RTC.
Если же на него подаётся напряжение от VBAT, то доступны следующие возможности:
● PC14 и PC15 используются только как выводы LSE;
● PC13 может использоваться как вывод TAMPER, будильник RTC.

Регулятор напряжения
Регулятор напряжения микроконтроллера самостоятельно активируется после сброса. В зависимости от режима работы микроконтроллера, регулятор напряжения функционирует следующим образом:
● в рабочем режиме микроконтроллера регулятор обеспечивает питанием блоки, работающие от напряжения 1,8 В, такие как ядро, память и цифровая периферия;
● в режиме приостановки микроконтроллера регулятор снабжает пониженным питанием блоки, работающие от напряжения 1,8 В, при этом содержимое регистров и SRAM сохраняется;
● в режиме ожидания микроконтроллера регулятор выключается. Содержимое регистров и SRAM теряется, за исключением блоков Standby и BKP.

Супервизор подачи питания
Для обеспечения стабильного запуска и работы контроллера микроконтроллеры серии STM32 имеют в своём составе встроенный супервизор подачи питания в виде схем: POR (Power On Reset – сброс при подаче питания) и PDR (Power Down Reset – сброс при снижении питания). Микроконтроллер будет находиться в режиме сброса, пока напряжение питания на выводе VDD не достигнет установленного порога POR. При снижении напряжения питания ниже порога PDR микроконтроллер вновь будет переведён в состояние сброса. На рисунке 2 приведена временна′я диаграмма работы супервизора.

Читайте также:  В приложении браузер произошла ошибка андроид

Рис. 2. Временная диаграмма работы супервизора

Программируемый детектор напряжения
Для контроля напряжения питания микроконтроллер имеет программируемый детектор напряжения PVD (Programmable Voltage Detector), который сравнивает напряжение питания VDD с порогом, заданным разрядами PLS[2:0] в регистре управления питанием PWR_CR. Разрешение работы PVD устанавливается битом PVDE. Флаг PVDO, доступный в регистре PWR_CSR, указывает превышение напряжения VDD над заданным для PVD порогом. Это событие внутри микроконтроллера связано с линией 16 EXTI и может генерировать прерывание, если оно разрешено в EXTI-регистрах. Прерывание от PVD может быть сгенерировано, когда напряжение VDD станет ниже или выше порога PVD, в зависимости от конфигурации перепада (фронт или срез) на линии 16 EXTI. На программу обработчика прерывания можно возложить выполнение некоторых задач при аварийном завершении задачи. Например, сохранение важных вычисленных значений в энергонезависимой памяти. Временная диаграмма работы PVD приведена на рисунке 3.

Рис. 3. Временная диаграмма работы PVD

Режимы пониженного энергопотребления
По умолчанию после сброса микроконтроллер серии STM32 работает в режиме нормального энергопотребления. Режимы пониженного энергопотребления предназначены для снижения потребления энергии контроллером, когда нет необходимости в его функционировании. Например, при ожидании внешнего события. Микроконтроллер может работать в следующих режимах пониженного энергопотребления:
● спящий режим – тактирование ядра остановлено, периферия, в том числе и ядро, работают;
● режим останова – тактирование всех устройств отключено;
● режим ожидания – отключён блок 1,8 В.

Снижение энергопотребления может быть осуществлено путём замедления тактирования системы и отключением тактирования периферии на шинах APB и AHB, когда они не используются. В обычном режиме значения таких системных частот, как SYSCLK, HCLK, PCLK1 и PCLK2 могут быть программно уменьшены с помощью предвари- тельных делителей частоты. Предвари- тельные делители частоты могут также использоваться для замедления периферии перед переходом микроконтроллера в спящий режим. В режиме нормального энергопотребления сигналы синхронизации HCLK и PCLKx для периферии и внешних запоминающих устройств могут быть отключены в любой момент для снижения потребления тока микроконтроллером.

Спящий Режим
Вход в спящий режим осуществляется с помощью инструкций WFI (Wait for Interrupt) или WFE (Wait for Event). Есть возможность выбора механизма входа в спящий режим в зависимости от бита SLEEPONEXIT. Если бит SLEEPONEXIT сброшен, то устройство уходит в спящий режим, как только была вызвана инструкция WFI или WFE. Если бит SLEEPONEXIT установлен, то устройство входит в спящий режим, как только произойдёт выход из обработчика прерывания. В спящем режиме все цепи ввода- вывода микроконтроллера сохраняют своё состояние. Если для входа в спящий режим была задействована инструкция WFI, то выход контроллера из спящего режима может быть осуществлён вызовом любого прерывания от периферии. Если для входа в спящий режим была задействована инструкция WFE, то выход контроллера из спящего режима осуществляется, как только происходит какое-либо событие. Это событие может быть сгенерировано следующим образом:
● включением прерывания в регистре управления периферией, но не в NVIC;
● установкой бита SEVONPEND в регистре управления ядром;
● конфигурированием внешнего или внутреннего прерывания EXTI в режиме событий.

Режим останова
Режим останова базируется на режиме глубокой спячки ядра. В этом режиме останавливаются все генераторы тактовой частоты в блоке 1,8 В, а также отключаются узлы PLL, HSI и HSE RC. В режиме останова все цепи ввода- вывода сохраняют своё состояние. Вход в режим останова может быть осуществлён вызовом инструкций WFI или WFE, пока:
● установлен бит SLEEPDEEP;
● очищен бит PDDS в регистре PWR_CR;
● выбран режим регулятора напряжения битом LPDS в регистре PWR_CR.
Если во время перехода устройства в спящий режим происходит программирование флэш-памяти, то переход откладывается до завершения процесса программирования. В режиме останова можно включить независимый сторожевой тай- мер IWDT, часы реального времени RTC, внутренний тактирующий генератор LSI RC и внешний генератор LSE OSC, путём изменения соответствующих конфигурационных бит. Независимый сторожевой таймер IWDT может быть запущен с помощью своего регистра. После этого его оста- нов возможен только вводом контроллера в режим сброса. Часы реального времени RTC включаются с помощью бита RTCEC в своём регистре управления. Внутренний тактирующий генератор LSI RC запускается с помощью бита LSION. Внешний генератор LSE OSC на 32,768 кГц активируется с помощью бита LSEON. Выход из режима останова зависит от вхождения в этот режим. Если вход был инициирован с помощью WFI, то выход возможен с помощью любой линии EXTI, сконфигурированной в режиме прерывания. Если вход был выполнен с помощью WFE, то выход производится с помощью любой линии EXTI, сконфигурированной в режиме события. Во время выхода из режима останова генератор HSI RC выбран как основное системное тактирующее устройство.

Режим ожидания
Режим ожидания является режимом с минимальным энергопотреблением. Он основан на режиме глубокого сна микроконтроллера вместе с отключённым регулятором питания. В этом режиме блок 1,8 В отключается вместе с генераторами PLL, HSI и HSE. Содержимое памяти SRAM и всех регистров, за исключением резервных, теряется. Вход в режим ожидания возможен вызовом инструкций WFI или WFE, пока:
● установлен бит SLEEPDEEP;
●установлен бит PDDS в регистре PWR_CR;
● сброшен бит WUF в регистре PWR_CSR.

В режиме ожидания можно включить независимый сторожевой тай- мер IWDT, часы реального времени RTC, внутренний тактирующий генератор LSI RC и внешний генератор LSE OSC, так же, как в режиме останова. Выход из режима ожидания может быть осуществлён с помощью:
● нарастающего фронта на выводе WKUP;
● нарастающего фронта будильника RTC;
● внешнего сигнала на выводе NRST;
● сброса от IWGT.

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

Автоматический выход из режима пониженного энергопотребления
Для пробуждения микроконтроллера из режима с низким потреблением можно использовать блок часов реального времени RTC, который позволяет программировать интервал времени для периодического пробуждения из режима останова или ожидания. С помощью битов RTCSEL[1:0] регистра RCC_BDCR, для этой цели можно выбрать любой из следующих источников тактового сигнала для RTC:
● генератор LSE OSC от внешнего кварца на 32,768 кГц;
● внутренний RC генератор LSI RC. Чтобы вывести микроконтроллер из режима останова с помощью события от будильника RTC необходимо выполнить следующие операции:
● настроить линию 17 EXTI на возрастающий фронт;
● настроить RTC на генерацию сигнала тревоги (будильника). Для пробуждения микроконтроллера из режима ожидания конфигурировать линию 17 EXTI не требуется.

Описание регистров
Блок управления питанием включает в свой состав всего два регистра. Карта размещения данных регистров в пространстве памяти и их значения после сброса представлены в таблице.

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

На этой карте представлены относительные адреса регистров. Рассмотрим подробнее назначение всех разрядов этих регистров. Регистр управления питанием PWR_CR имеет нулевое смещение адреса и обнуляется при пробуждении из режима ожидания. Биты 31…9 данного регистра зарезервированы и всегда читаются как нулевые данные. Бит 8 DBP позволяет отключить защиту от записи блока BKP. После сброса микроконтроллера регистры блока RTC и BKP защищены от доступа на запись. Чтобы разрешить запись в эти регистры нужно установить этот бит в единичное состояние. Если для тактирования блока RTC используется сигнал от HSE, поделённый на 128, то бит DBP всегда должен быть установлен в единичное состояние. Биты 7…5 PLS[2:0] служат для выбора уровня порога срабатывания цепи PVD (Power Voltage Detector). Они устанавливаются программно и могут принимать следующие значения, соответствующие пороговому напряжению:
● 000 – 2,2 В;
● 001 – 2,3 В;
● 010 – 2,4 В;
● 011 – 2,5 В;
● 100 – 2,6 В;
● 101 – 2,7 В;
● 110 – 2,8 В;
● 111 – 2,9 В.

Бит 4 PVDE отключает и включает цепь PVD. При нулевом состоянии бита цепь PVD отключается, а при единичном – включается. Бит 3 CSBF служит для очистки флага SBF нахождения микроконтроллера в режиме ожидания. Этот бит всегда читается как нулевой. При записи в него единицы – очищается флаг SBF-регистра состояния PWR_CSR. Бит 2 CWUF позволяет очистить флаг пробуждения WUF микроконтроллера. Данный бит всегда читается как нулевой. При записи в него единицы – очищается флаг WUF регистра состояния PWR_CSR через два тактовых цикла. Бит 1 PDDS определяет режим микроконтроллера для глубокого сна. Данный бит устанавливается и очищается программно. Он работает совместно с нулевым битом LPDS регистра PWR_CR. Нулевое значение это- го бита переключает микроконтроллер в режим останова. Состояние регулятора напряжения зависит от бита LPDS. Единичное значение бита включает режим ожидания. Бит 0 LPDS управляет режимом регулятора напряжения. Он устанавливается и очищается программно и работает совместно с битом PDDS. Нулевое значение этого бита переключает регулятор напряжения в режим приостановки, а единичное – включён регулятор напряжения в режим малого потребления. Регистр управления и статуса PWR_CSR с адресом смещения 0×004 не сбрасывается при пробуждении из режима ожидания. Для чтения этого регистра требуются дополнительные циклы шины APB. Биты 31…9 данного регистра зарезервированы и всегда читаются как нулевые данные. Бит 8 EWUP управляет выводом WKUP. Этот бит устанавливается и очищается программно. Нулевое значение этого бита настраивает вывод WKUP, как вывод общего назначения. Событие на этом выводе не пробуждает устройство из режима ожидания. Единичное значение этого бита определяет, что вывод WKUP используется для пробуждения из режима ожидания и принудительно устанавливается в режим входа, притянутого к земле. Данный бит сбрасывается во время общего сброса микроконтроллера. Биты 7…3 зарезервированы и читаются как нулевые данные. Бит 2 PVDO : PVD output (Выход детектора PVD). Этот бит ставится и очищается программно. Он работа- ет только при разрешённом PVD битом PVDE. 0: Напряжение на VDD/VDDA выше, чем порог, выбранный битами PLS[2:0]. 1: Напряжение на VDD/VDDA ниже, чем порог, выбранный битами PLS[2:0]. Работа детектора PVD останавливается в режиме ожидания. По этой при- чине этот бит равен 0 после выхода из режима ожидания или после сброса и остаётся в этом состоянии, пока не будет поставлен бит PVDE. Бит 1 SBF является флагом нахождения микроконтроллера в режиме ожидания. Этот бит устанавливается аппаратно и очищается при сбросе микроконтроллера или установкой бита CSBF в регистре PWR_CR. Бит 0 WUF служит флагом события пробуждения. Этот бит устанавливается аппаратно и очищается при сбросе микроконтроллера или установкой бита CWUF в регистре PWR_CR. Нулевое состояние бита означает отсутствие события пробуждения, а единичное состояние означает факт события пробуждения на выводе WKUP или от сигнала тревоги RTC. Кроме того, флаг детектирует дополнительное событие пробуждения, если разрешён вывод WKUP с помощью установки бита EWUP, во время высокого уровня на этом выводе.

Читайте также:  Заказать звонки на телефон

Программирование блока управления питанием
Существует набор готовых функций для работы с блоком управления питанием микроконтроллера. Рассмотрим их синтаксис и назначение. Функция: void PWR_BackupAccessCmd (FunctionalState NewState). Назначение: включает или отключает доступ к резервным регистрам и регистрам RTC. Вход: NewState – состояние разрешения доступа. Может принимать значение ENABLE или DISABLE. Выход: значения не возвращает. Функция: void PWR_ClearFlag (uint32_t PWR_FLAG). Назначение: очищает указанный флаг PWR_FLAG. Вход: PWR_FLAG – флаг, который необходимо сбросить. Может принимать следующие значения: PWR_FLAG_ WU (Wake up Flag) и PWR_FLAG_SB (Standby Flag). Выход: значения не возвращает. Функция: void PWR_DeInit (void). Назначение: сбрасывает значения регистров PWR к их первоначальному значению. Вход: параметров нет. Выход: значения не возвращает. Функция: void PWR_EnterSTANDBYMode (void). Назначение: переводит микроконтроллер в режим ожидания. Вход: параметров нет. Выход: значения не возвращает. Функция: void PWR_EnterSTOPMode (uint32_t PWR_Regulator, uint8_t PWR_ STOPEntry). Назначение: переводит микроконтроллер в режим останова. Вход: PWR_Regulator – устанавливает состояние регулятора при входе в режим останова. Принимает следующие значения: PWR_Regulator_ON (регулятор включён) и PWR_Regulator_ LowPower (регулятор находится в режиме пониженного энергопотребления). PWR_STOPEntry – устанавливает тип инструкции (WFE или WFI), с которой должен быть осуществлён вход в режим останова. Принимает следующие значения: PWR_STOPEntry_WFI и PPWR_ STOPEntry_WFE. Выход: значения не возвращает. Функция: FlagStatus PWR_GetFlagStatus (uint32_t PWR_FLAG). Назначение: возвращает состояние указанного флага (установлен или нет). Вход: PWR_FLAG – указывает флаг, состояние которого надо проверить. Принимает следующие значения: PWR_ FLAG_WU (Wake up Flag), PWR_FLAG_ SB (Standby Flag) и PWR_FLAG_PVDO (PVD Output). Выход: состояние флага. Варианты: SET или RESET. Функция: void PWR_PVDCmd (FunctionalState NewState). Назначение: включает или отключает детектор напряжения. Вход: NewState – статус детектора напряжения. Принимает следующие значения: ENABLE, DISABLE (Standby Flag) и PWR_FLAG_PVDO (PVD Output). Выход: значения не возвращает. Функция: void PWR_PVDLevelConfig (uint32_t PWR_PVDLevel). Назначение: устанавливает порог срабатывания детектора напряжения. Вход: PWR_PVDLevel – значение напряжения порога. Принимает следующие значения: от PWR_PVDLevel_2V2 (2,2 В) до PWR_PVDLevel_2V9 (2,9 В) с шагом 0,1 В. Выход: значения не возвращает. Функция: void PWR_WakeUpPinCmd (FunctionalState NewState). Назначение: устанавливает возможность пробуждения контроллера по сигналу на пробуждающем пине. Вход: NewState – состояние возможности пробуждения. Принимает следующие значения: ENABLE и DISABLE. Выход: значения не возвращает. Используя данные функции, можно изменять режим работы микроконтроллера в соответствии с алгоритмом функционирования разрабатываемого устройства.

Источник: современная электроника ◆ № 9 2015

Время движется вперед. На смену традиционным контроллерам спешат новые ARM Cortex. Обновленная atmega8a стоит 62 руб. (8 бит, 16 Мегагерц, 8к флеш, 1к ОЗУ, 512 байт EEPROM, 2 8 бит таймера, 1 16 бит таймер, 8 канальный АЦП 10 бит, USART, SPI, 23 I/O). Младшенький из ARM Cortex-M3 – stm32f100c4 стоит 37 рублей (32 бит, 24Мегагерц, 16к флеш, 4к ОЗУ, 6 таймеров 16 бит из которых 3 очень гибкие, 16 канальный АЦП 12 бит, 2 ЦАП 12 бит, USART, USART, I2C, SPI, 37 I/O). Экономическая выгода очевидна. Сдерживает широкое применение ARM несколько факторов. Прежде всего – это отсутствие документации на русском языке. Второй сдерживающий фактор – это корпус с 0,5 мм шагом. Третий – ограниченность знакомой с ними аудитории. Четвертый – устройства для программирования.

Данная статья является иллюстрацией, что со вторым фактором можно бороться, и применять эти контроллеры обычными радиолюбителями. Все, что было сделано – сделано дома с применением ЛУТ(никто не говорил, что получилось с первого раза).

Для программирования можно собрать простой преобразователь уровней RS232. Для прошивки этого хватит. Но для полноценнй отладки нужен хотя бы самый дешевый SWD программатор( ST32VLDISCOVERY стоит порядка 700 руб). С другой стороны многие живут без внутрисхемной отладки – и ничего.

После прочтения статьи, я надеюсь, расширится аудитория заинтерисованная ARM.

К статье приложены исходники, которые могут послужить служить иллюстрацией программирования этих контроллеров. Исходники расчитаны на arm-gcc или keil.

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

  1. само наличие подстроечного резистора, как одной из самых ненадежных деталей
  2. некоторые преобразователи (например ОУ) имеют постоянное напряжение смещение, которое вносит ошибку в измеряемое/устанавливаемое значение параметра
  3. фиксированный выходной и выходной диапазон требуют изменения программы

Если значение АЦП линейно зависит от величины входного сигнала, то значение измеренного параметра можно представить линейной зависимостью

Здесь x – результат преобразования АЦП, y – отображаемое значение, a – коэффициент пропорциональности, b учитывает все постоянные смещения. Если будут известны a и b , то по значению x (результат АЦП), можно получить значение y (напряжение или ток).

То же самое можно сказать про ЦАП. Зная его коэффициенты, по необходимому выходному напряжению/току можно рассчитать значение, которое нужно передать на ЦАП.

Для получения значений коэффициентов a и b необходима процедура калибровки. Для этого получают значение y и x в двух точках, обычно в начале и конце диапазона. На основании значений в этих точках расчитываются коэффициенты. После расчета их можно сохранить в энергонезависимой памяти.

Наличие калибровки позволяет отказаться от применения подстроечных резисторов. Конечно, нельзя будет установить точное максимальное значение напряжения или тока. Но часто не важно, будет источник выдавать максимум 30 вольт или 30,5 вольт. Важно, что выходной параметр будет равен точно установленному, а измеренная величина параметра соответствовать реальной величине. Устраняется влияние смещения ОУ на измерение малых значений параметров. Одна и та же программа (схема) может быть применена для различных источников без доработок (с минимальными доработками). Поскольку все параметры настраиваются, то непринципиально, будет ли выходное напряжение меняться в диапазоне 0-30 вольт или это будет диапазон 0-1000 вольт. Изменение диапазона напряжений и токов потребует соответствующего изменения входных делителей и выходных усилителей.

Схема реализует управление током и напряжением на выходе лабораторного источника, а также их измерение. Результаты отображаются на графическом LCD от телефона nokia 3310 с разрешающей способностью 4 знака. Все управление осуществляется при помощи системы меню энкодером с кнопкой. Предыдущие значения напряжения и тока сохраняются при отключении питания. Сохранение может быть выполнено как во встроенной flash памяти так и во встроенных, подпитываемых от батареи регистрах. Устройство позволяет настроить и использовать до 12 предустановленных значений напряжения или тока. Предустановленные значения выбираются из меню. Опционально устройство управления реализует также функцию часов с автоматическим расчетом подстройки хода.

Автором устройство было применено для управления силовой частью источника питания 0-30 вольт 0-0,5 ампер http://radiokot.ru/circuit/power/supply/21

Земли силовой части и аналоговая земля схемы управления должны быть соединены вместе (клемма AGND ). Питание +-6 вольт подается с силовой схемы на клеммы PWR + и PWR – . Из PWR + стабилизатором LP 2950 формируется напряжение питание контроллера 3,3 вольта. Поскольку в данной схеме принципиальна стабильность именно аналогового питания, которое служит опорой для ЦАП и АЦП стабилизатор подключен напрямую именно к аналогому выводу питания микроконтроллера. Цифровое питание подается через дроссель L 1. Цифровое питание используется для контроллера и индикатора. Источник также имеет раздельную цифровую и аналоговую землю. Они должны быть соединены вблизи вывода аналоговой земли микроконтроллера.

Сердцем схемы является самый младший из семейства ARM микроконтроллеров фирмы ST microelectronics : STM 32 F 100 C 4. К нему подключаются входной и выходной преобразователь уровней, индикатор, энкодер. Микроконтроллер имеет встроенные ЦАП и АЦП.

С выходов ЦАП (14 и 15 ноги) задающие напряжения, имеющие диапазон изменения от 0 до 3,3 вольт, поступают на выходной преобразователь уровней, выполненный на операционных усилителях DA 3.1, DA 3.2. В данном случае задающий сигнал напряжения проходит через повторитель, а задающий сигнал тока ослабляется примерно в 6 раз (до максимального значения 0,5 вольта). Задающие напряжения снимаются с клемм VOUT и IOUT и подаются на силовую часть источника питания. Задающие напряжения используются вместо переменных резисторов и подаются на силовую часть в точку, куда ранее подключались скользящие контакты переменных резисторов. На схеме точки подключения подписаны и указаны стрелочками. Всего 5 точек + 2 точки питания.

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

Входное напряжение с отрицательной клеммы источника подается на клемму VIN управляющей схемы. Операционный усилитель DA 2.1 в инвертирующем включении преобразует диапазон напряжения 0 – -30 вольт в 0-3 вольта. Напряжение с шунта подается на неинвертирующий усилитель на ОУ DA 2.2. Усилитель преобразует диапазон сигнала токового датчика (шунта) от 0-0,5 вольта до 0-3 вольта. Преобразованные сигналы измеряются двумя каналами АЦП контроллера. При разработке собственных входных преобразователей нужно обеспечить изменение напряжения на входе АЦП от 0 до 3-3,2 вольт в полном диапазоне токов и напряжений.

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

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

Читайте также:  Бесплатные приложения для смарт тв сони

К клеммам, начинающимся с LCD , подключен графический индикатор от телефона nokia 3310.

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

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

Клеммы USART …, SWD … и перемычка j 1 используются при программировании контроллера.

Непосредственно после первого включения устройство переходит в режим калибровки. Калибровка осуществляется по 4 токам: 2 для тока и 2 для напряжения. После установки желаемой величины должны быть введены измеренные значения тока или напряжения. По результатам измерения рассчитываются коэффициенты линейной зависимости и сохраняются в flash память.

При следующих включениях источник готов к работе сразу. Вращением ручки энкодера устанавливается необходимое значение тока или напряжения или выбор одного из предустановленных значений. Для обеспечения одновременно и быстрой и точной установки параметров применено динамическое изменение величины шага энкодера. При медленном вращении обеспечивается максимальная точность подстройки(1 разряд ЦАП – 1/4096 часть максимального значения). При относительно высокой скорости вращения на один шаг энкодера приходится уже несколько разрядов ЦАП. Причем величина шага при высокой скорости вращения энкодера увеличивается, при медленной – снижается. Таким образом достигается также и высокая скорость изменения параметра: весь диапазон может быть пройден за 2-3 оборота ручки энкодера.

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

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

Если ни один из параметров не изменялся, то долгое нажатие на кнопку приводит к временному отключению выходного напряжения. Значения ЦАП тока и напряжения устанавливаются при этом в 0. Повторное долгое нажатие приводит к включению ранее установленных значений выходного напряжения и тока.

Непосредственно после включения выход источника отключен как после долгого нажатия. Подача установленного до выключения напряжения и тока осуществляется по долгому нажатию кнопки.

На индикаторе в обычном режиме отображаются актуальные и установленные значения тока и напряжения, а также часы (если включены). Обновление результатов измерения производится 5 раз в секунду.

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

Конструкция и детали

В качестве микроконтроллера применен самый дешевый из контроллеров семейства, но может быть использован любой из серии STM 32 F 100 C . Их отличие – большие объемы памяти. Можно также использовать более дорогой контроллер в 64 или 100 выводном корпусе ( STM 32 F 100 R STM 32 F 100 V ) с изменением схемы.

Все резисторы и керамические конденсаторы типоразмера 0805, электролитические конденсаторы – алюминиевые или танталовые. Дроссель – покупной индуктивностью 100 uH . Операционный усилитель может быть заменен на практически любой сдвоенный (например TL 082, TL072, LM358). Стабилизатор также может быть применен практически любой на 3,3 вольта. Необходимо только учитывать, что от его стабильности зависит стабильность источника в целом. Энкодер применен с 20 шагами на оборот и совмещеной кнопкой. Батарея – литиевая или 2 соляные или 2 щелочные любого типа, главное, что бы ее напряжение составляло порядка 3 вольт.

Индикатор от телефона nokia 3310. При покупке необходимо обращать внимание на выводы. Выпускают 2 типа индикаторов – с контактами на стекле под прижим и с приклеенной печатной платой с контактами. Второй вариант предпочтительнее, так как позволяет припаять проводники. Распиновка индикатора показана на рисунке.

Особое внимание необходимо уделить кварцевому резонатору. Он должен быть с емкостью 6 пикофарад. 12 пикофарадные резонаторы не подходят. С этими резонаторами часы либо совсем не заводятся, либо работают очень нестабильно.

Устройство управления собрано на двусторонней печатной плате, сделанной по ЛУТ. Плата имеет порядка 20 межслойных перемычек, часть из которых размещается под SMD элементами. Перемычки выполняются проводом диаметром примерно 0,4мм. После вставки провода в отверстие, он надрезается ножом, так что бы длина провода была на несколько десятых миллиметра больше толщины платы, и обламывается. После вставки всех перемычек, они расплющиваются молотком для фиксации в отверстии. Здесь важно, что бы провод входил в отверстие с некоторым усилием, иначе при ударах молотка могут вылететь соседние перемычки. Если провод входит слишком туго – можно обработать наждачной бумагой провод для уменьшения его толщины.

На печатной плате имеются следующие неточности и изменения:

  1. Добавлен резистор-перемычка, соединяющий цифровую и аналоговую землю.
  2. Отсутствует конденсатор C 14. Впоследствии smd конденсатор на 10 вольт был припаян прямо на проводники.
  3. Отсутствует конденсатор C 15. Предполагалось, что можно будет использовать керамический емкостью 2,2 микрофарады, напаянный непосредственно на индикатор. Но это оказалось неосуществимо. Конденсатор припаян на земляной полигон и соединен проводником с индикатором.
  4. Вывод индикатора CS соединен с землей прямо на индикаторе.
  5. Конденсаторы C 1 и C 10 оставлены на длинных выводах, что бы их можно было пропаять с двух сторон.
  6. R 19 не впаян.

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

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

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

При первом включении снова проверяются питания контроллера и операционных усилителей, наличие напряжения примерно 1,2 – 1,5 вольта на делителе R 17, R 11. В случае необходимости выполняется подбор резисторов делителя.

Подключение индикатора необходимо производить после программирования.

Программирование выполняется с использованием программатора ST-LINK . Это может быть либо отдельный программатор, либо STM 32 VLDISCOVERY . Из софта применяется ST – Link Utility , либо среда программирования. В последнем случае программирование выполняется автоматически при активизации отладки. Для программирования используются клеммы SWD …

Программирование может быть осуществлено также через USART . Для этих целей должен быть собран преобразователь уровней из 3,3 вольт в RS 232 ( st 3232, max 3232). Первую свою программу автор записывал именно таким образом. Данный проект с размером кода порядка 16к записать без ошибок уже не удалось. Возможно, влияет излишняя длина проводников, или преобразователь уровней вышел из строя, или интерфейс в компьютере испортился. Для тех, кто будет использовать данный, метод далее приводится описание процедуры программирования полностью.

Выход USART подключается к входу преобразователя уровней и наоборот. В данном корпусе выход USART – это вывод 30, вход – вывод 31 (согласно Table 4 datash e et на stm32f100c4). Питание на преобразователь можно подавать как отдельно, так и с платы. Загрузчик активизируется путем подтяжки Boot 1 (вывод 20) к земле, а Boot 0 (вывод 44) – к питанию (замыкание J 1) перед подачей питания.

Для программирования используется утилита STMFlashLoader (документ UM0462), консольная версия. В каталоге map данной утилиты создается файл с именем STM32_Low-density-value_16K. Stmap как копия файла STM32_Low-density_16K.Stmap. Заголовок этого файла замещается на следующий:

Возможно, что к этому времени утилита загрузки поддерживает STM 32 F 100 C 4, но полгода назад (начало 2011) это было не так.

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

STMFlashLoader.exe -c –br 9600 -i STM32_Low-density-value_16K -d –fn D:PATHTOHEXmain.hex –v

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

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

STMFlashLoader . exe – c — br 9600 – i STM 32_ Low – density – value _16 K – e – all

После программирования снимается перемычка J 1, подключается индикатор, и при включении питания начинает работать программа. Сразу же после включения прибор переходит в режим установки контрастности. После установки контрастности выполняется калибровка в 2 точках по напряжению и в 2 точках по току. Результаты калибровки сохраняются в flash памяти, после этого можно устанавливать требуемые выходные напряжения и токи. Калибровке посвящен отдельный документ (User guide).

После калибровки могут быть проверены диапазоны изменения выходных и входных напряжений. Выходной диапазон может быть изменен подбором усиления ( R 19, R 16) или ослабления ( R 20, R 21), либо соответствующей настройкой силовой части.

Максимальный сигнал, поступающий на АЦП после преобразования входных сигналов, должен быть порядка 2,9-3,2 вольта. В случае необходимости также может быть осуществлена подборка соответствующих сопротивлений ( R 2, R 4 для тока, R 9, R 14 для напряжения). При любом изменении сопротивлений резисторов необходима повторная калибровка.

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

Индикатор показывает, что установлено напряжение 15 вольт, на выводах – 15,01 вольта, ограничение тока – 100 мА, ток в нагрузке – 15,1 мА, время – 21:44. Ручка энкодера служит для управления источником. Красная кнопка включает триггерную защиту. Светодиод индицирует включение. В режиме ограничения тока он горит красным цветом. К выходным клеммам подключена нагрузка.

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

0

Блок питания на stm32

Введение

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

Железо

Так уж случилось, что силовые платы разводить приходится с завидным постоянством, поэтому немного думая, использую компоненты, которых было навалом от старых проектов, была собрана простенькая отладочная плата для проверки расчетов и подготовке к «большому проекту». Схема предоставлена на рис.1, разводка платы на рис.2, и получившийся внешний вид на рис.3.

Рис.1. Схемотехническое описание отладочной платы

Рис.2. Разводка печатной отладочной платы

Рис.3. Трёхмерная модель отладочной платы

Плата была изготовлена методом ЛУТ. В ней нет ничего сложного и необычного, кроме, пожалуй, рабочих частот: фронт сигнала в менее 0.3 мкс при рабочей частоте в 24 кГц. Для импульсного блока питания это крошечная величина, но автору вполне хватало. Радиаторы для полевых транзисторов IRFZ44N так и не потребовались, так как в схеме будут значительно быстрее перегреваться диоды.

Честно признаюсь, что данная плата у меня сгорела при нагрузке всего 80 Вт. Так что если захотите до мелочей повторить со своими разработками, то будьте аккуратнее. А на самом деле предельный ток в данном устройстве в 10 ампер потребовал наличия небольшого радиатора на транзисторах, впрочем как и снижения частоты (нагрузка на диоды).

Управляющий контроллер

Подключалось это всё к собственной отладочной плате на базе STM32F103C8T6. Конечно, можно использовать китайские аналоги, но так как я много работаю на данных чипах, потребовалась плата для отточки схемотехники подключения данного чипа + требовалась приличная разводка аналоговой части, которой обычно лишены китайские братья. Внешний вид платы приведён на рис.4.

Рис.4. Отладочная плата на базе STM32F103 собственной разработки

Силовая часть подключалась к РВ0 и РВ1, которые являются выводами 3-го таймера. Это таймер общего назначения. Самый обычный таймер. Выбран был просто из-за удобства расположения на плате. То, что описано далее можно с лёгкостью провернуть на любом другом таймере, вплоть до TIM1 (Advanced-control timer).

Программирование

Для начала пришлось разогнать контроллер до 48 МГц. Это делалось следующим куском кода:

Конечно, можно расписать, что значит каждая приведённая строчка, но этим просто завалены отечественные сайты, уделим время более уникальным вещам. Заметим, для тех кому лень лезть по форумам и «обучающим сайтам», что основная регулировка производится настройкой RCC_CFGR_PLLMULL(Х) .

Далее встала следующая, и собственно основная проблема, довольно слабо описанная в отечественном интернете: создание импульсов формы, показанной на Рис.5.

Рис.5. Требуемая форма импульсов для push-pull преобразователя.

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

  1. Делать ногодрыг для управления силовой частью не хотелось (подразумевается повесить на контроллер неплохую математику для обработки параметров)
  2. Общественные примеры использования таймеров в режиме PWM делать нужные формы импульсов не позволяют, если конечно каждый раз не перенастраивать таймер.

В результате открыли manual по PWM, и нашли следующую чудесную вещь: синхронизация импульсов PWM центру. Это ровно то, что нужно, так как позволяет делать импульсы следующим образом + регулировка производится очень удобно (см рис.6). При правильной настройке правда придётся держать две настройки PWM каналов, так как один канал должен быть прямым, а другой инверсным. Это конечно потребует памяти, но немного.

Рис.6. Форма импульсов при синхронизации по центру импульса. Заштрихованы области, которые добавляются при увеличении времени импульса.

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

Реализация

Вся реализация разбилась на две функции и константы:

  1. Две выделенных константы типа TIM_OCInitTypeDef и TIM_OCInitTypeDef2.
  2. Инициализация со стоповыми параметрами. Это делается для того, чтобы после инициализации блок питания блок питания не начал работать. Запуск инициируется установкой функции на нужное значение скважности.
  3. Функция регулировки скважности. Важно, чтобы значение скважности были ниже, чем 0.45.

Всё реализовано с помощью библиотек SPL. У меня конечно в планах переписать потом под CMSIS, но пока по старинке решил набросать под SPL.

Инициализация с комментариями:

И простенькая функция регулировки:

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

Результаты

Фотографии силового модуля:

Плата силового модуля, вид сверху

Модуль в сборе с трансформатором

В результате получилось запустить Push-Pull преобразователь с приличным коэффициентом регулирования по напряжению(100 уровней). В настоящее время планируется:

  1. Разработка блока питания с 500-ми уровнями напряжения.
  2. Разработка и сборка приличной платы с возможностью создания блока питания мощностью до 1000Вт по данной схеме, с питанием по первичке 400В.
  3. Борьба с самим трансформатором и компонентами выходной схемы. Дело в том, что трансформатор на выходе выдаёт максимальное напряжение в 800В. Это накладывает кучу ограничений и желаний уменьшить обмотки, увеличив частоту. Но это будет отдельная статья.
  4. Разработка 1 МГц блока питания по схеме Push-pull с низковольтным питанием.

Через какое-то время данные задачи будут решены, а пока у вас появился пример кода для программирования двухтактного преобразователя.

В статье приведено описание блока управления питанием 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрена его архитектура, состав регистров, а также приведены описания функций для работы с этим блоком.

Рис. 1. Структурная схема питания
микроконтроллера

Введение
В современных условиях к микроконтроллерам предъявляются требования пониженного энергопотребления и малого тепловыделения. Выполнение таких требований обеспечивается, в первую очередь, снижением питающего напряжения ядра микроконтроллера и введением специальных режимов энергосбережения. Микроконтроллеры серии STM32 [1] включают в свой состав специальный блок управления питанием, благодаря которому полностью удовлетворяют изложенным выше требованиям. Блок управления питанием STM32 состоит из набора регуляторов напряжения и логики управления режимами работы. В первоисточнике этот блок носит название «Power Control» или сокращённо – PWR.

Регуляторы напряжения
Для нормальной работы микроконтроллеру серии STM32 необходимо питающее напряжение от 2,0 до 3,6 В, подаваемое на выводы цепей питания VDD. Встроенный в микроконтроллер регулятор напряжения обеспечивает формирование из внешнего питающего напряжения 1,8 В для питания ядра. Часы реального времени RTC и регистры для резервного сохранения информации могут быть запитаны отдельно от вывода VBAT и сохраняют свою работоспособность даже при отключённом питании на выводе VDD. Структурная схема питания микроконтроллера приведена на рисунке 1. Цепи VDDA и VSSA предназначены для питания аналоговых блоков микроконтроллера. Они должны быть гальванически связаны с цепями VDD и VSS, соответственно.

Питание АЦП и ЦАП
Чтобы обеспечить точность преобразования, блоки АЦП и ЦАП имеют отдельную цепь питания VDDA и цепь нулевого потенциала VSSA, которые необходимо дополнительно отфильтровать от помех и экранировать при разводке печатной платы. Вывод для опорного напряжения VREF+ может быть подключён к цепи VDDA. Для повышения точности преобразования при малых максимальных уровнях напряжения на выводах АЦП и ЦАП, можно подключить вывод VREF+ к внеш- нему источнику опорного напряжения. Напряжение на выводе VREF+ определяет напряжение, которое соответствует максимальному значению преобразованного сигнала в АЦП и ЦАП. Напряжение на вход VREF+ может подаваться в диапазоне от 2,4 В до уровня напряжения питания VDDA.

Резервные источники питания
Для обеспечения сохранности содержимого резервных регистров (Backup) и нормального функционирования RTC в случае, когда вывод VDD отключён от источника питания, у микроконтроллера имеется вывод VBAT, который может быть подключён к резервному источнику питания, например, в виде автономного эле- мента питания. От вывода VBAT питаются: блок RTC, LSE-генератор и выводы PC13…PC15, обеспечивающие функционирование часов реального времени даже при отключённом питании на выводе VDD. Подключением питания от VBAT управляет блок сброса при пропадании питания PDR (Power Down Reset), который встроен в общий блок сброса. В течение времени между моментом, когда напряжение VDD равно VPOR, и выходом контроллера из режима сброса, именуемым tRSTTEMPO, или после того, как был обнаружен сигнал PDR, переключатель между VDD и VBAT остаётся подключённым к VBAT. Во время запуска микроконтроллера, в случае если время подачи питания на VDD меньше времени tRSTTEMPO и напряжение VDD больше VBAT +0,6 В, напряжение VDD может быть приложено к цепи VBAT через внутренний диод. Если источник питания, подключённый к VBAT, слаботочный и не способен выдерживать ток, потребляемый через вывод VDD, то необходимо предусмотреть в схеме питания микроконтроллера установку внеш- него диода с низким падением напряжения между источником питания и входом VBAT. Если не планируется использовать источник резервного питания, то рекомендуется подключить между вывода- ми VBAT и VDD керамический конденсатор ёмкостью 0,1 мкФ. Когда на блок Backup подаётся напряжения от VDD, появляются следующие возможности:
● PC14 и PC15 используются как обычные выводы GPIO или LSE;
● PC13 может использоваться как GPIO, вывод TAMPER, калибрующий сигнал RTC или будильник RTC.
Если же на него подаётся напряжение от VBAT, то доступны следующие возможности:
● PC14 и PC15 используются только как выводы LSE;
● PC13 может использоваться как вывод TAMPER, будильник RTC.

Регулятор напряжения
Регулятор напряжения микроконтроллера самостоятельно активируется после сброса. В зависимости от режима работы микроконтроллера, регулятор напряжения функционирует следующим образом:
● в рабочем режиме микроконтроллера регулятор обеспечивает питанием блоки, работающие от напряжения 1,8 В, такие как ядро, память и цифровая периферия;
● в режиме приостановки микроконтроллера регулятор снабжает пониженным питанием блоки, работающие от напряжения 1,8 В, при этом содержимое регистров и SRAM сохраняется;
● в режиме ожидания микроконтроллера регулятор выключается. Содержимое регистров и SRAM теряется, за исключением блоков Standby и BKP.

Супервизор подачи питания
Для обеспечения стабильного запуска и работы контроллера микроконтроллеры серии STM32 имеют в своём составе встроенный супервизор подачи питания в виде схем: POR (Power On Reset – сброс при подаче питания) и PDR (Power Down Reset – сброс при снижении питания). Микроконтроллер будет находиться в режиме сброса, пока напряжение питания на выводе VDD не достигнет установленного порога POR. При снижении напряжения питания ниже порога PDR микроконтроллер вновь будет переведён в состояние сброса. На рисунке 2 приведена временна′я диаграмма работы супервизора.

Читайте также:  Бюджетные усилители для авто

Рис. 2. Временная диаграмма работы супервизора

Программируемый детектор напряжения
Для контроля напряжения питания микроконтроллер имеет программируемый детектор напряжения PVD (Programmable Voltage Detector), который сравнивает напряжение питания VDD с порогом, заданным разрядами PLS[2:0] в регистре управления питанием PWR_CR. Разрешение работы PVD устанавливается битом PVDE. Флаг PVDO, доступный в регистре PWR_CSR, указывает превышение напряжения VDD над заданным для PVD порогом. Это событие внутри микроконтроллера связано с линией 16 EXTI и может генерировать прерывание, если оно разрешено в EXTI-регистрах. Прерывание от PVD может быть сгенерировано, когда напряжение VDD станет ниже или выше порога PVD, в зависимости от конфигурации перепада (фронт или срез) на линии 16 EXTI. На программу обработчика прерывания можно возложить выполнение некоторых задач при аварийном завершении задачи. Например, сохранение важных вычисленных значений в энергонезависимой памяти. Временная диаграмма работы PVD приведена на рисунке 3.

Рис. 3. Временная диаграмма работы PVD

Режимы пониженного энергопотребления
По умолчанию после сброса микроконтроллер серии STM32 работает в режиме нормального энергопотребления. Режимы пониженного энергопотребления предназначены для снижения потребления энергии контроллером, когда нет необходимости в его функционировании. Например, при ожидании внешнего события. Микроконтроллер может работать в следующих режимах пониженного энергопотребления:
● спящий режим – тактирование ядра остановлено, периферия, в том числе и ядро, работают;
● режим останова – тактирование всех устройств отключено;
● режим ожидания – отключён блок 1,8 В.

Снижение энергопотребления может быть осуществлено путём замедления тактирования системы и отключением тактирования периферии на шинах APB и AHB, когда они не используются. В обычном режиме значения таких системных частот, как SYSCLK, HCLK, PCLK1 и PCLK2 могут быть программно уменьшены с помощью предвари- тельных делителей частоты. Предвари- тельные делители частоты могут также использоваться для замедления периферии перед переходом микроконтроллера в спящий режим. В режиме нормального энергопотребления сигналы синхронизации HCLK и PCLKx для периферии и внешних запоминающих устройств могут быть отключены в любой момент для снижения потребления тока микроконтроллером.

Спящий Режим
Вход в спящий режим осуществляется с помощью инструкций WFI (Wait for Interrupt) или WFE (Wait for Event). Есть возможность выбора механизма входа в спящий режим в зависимости от бита SLEEPONEXIT. Если бит SLEEPONEXIT сброшен, то устройство уходит в спящий режим, как только была вызвана инструкция WFI или WFE. Если бит SLEEPONEXIT установлен, то устройство входит в спящий режим, как только произойдёт выход из обработчика прерывания. В спящем режиме все цепи ввода- вывода микроконтроллера сохраняют своё состояние. Если для входа в спящий режим была задействована инструкция WFI, то выход контроллера из спящего режима может быть осуществлён вызовом любого прерывания от периферии. Если для входа в спящий режим была задействована инструкция WFE, то выход контроллера из спящего режима осуществляется, как только происходит какое-либо событие. Это событие может быть сгенерировано следующим образом:
● включением прерывания в регистре управления периферией, но не в NVIC;
● установкой бита SEVONPEND в регистре управления ядром;
● конфигурированием внешнего или внутреннего прерывания EXTI в режиме событий.

Режим останова
Режим останова базируется на режиме глубокой спячки ядра. В этом режиме останавливаются все генераторы тактовой частоты в блоке 1,8 В, а также отключаются узлы PLL, HSI и HSE RC. В режиме останова все цепи ввода- вывода сохраняют своё состояние. Вход в режим останова может быть осуществлён вызовом инструкций WFI или WFE, пока:
● установлен бит SLEEPDEEP;
● очищен бит PDDS в регистре PWR_CR;
● выбран режим регулятора напряжения битом LPDS в регистре PWR_CR.
Если во время перехода устройства в спящий режим происходит программирование флэш-памяти, то переход откладывается до завершения процесса программирования. В режиме останова можно включить независимый сторожевой тай- мер IWDT, часы реального времени RTC, внутренний тактирующий генератор LSI RC и внешний генератор LSE OSC, путём изменения соответствующих конфигурационных бит. Независимый сторожевой таймер IWDT может быть запущен с помощью своего регистра. После этого его оста- нов возможен только вводом контроллера в режим сброса. Часы реального времени RTC включаются с помощью бита RTCEC в своём регистре управления. Внутренний тактирующий генератор LSI RC запускается с помощью бита LSION. Внешний генератор LSE OSC на 32,768 кГц активируется с помощью бита LSEON. Выход из режима останова зависит от вхождения в этот режим. Если вход был инициирован с помощью WFI, то выход возможен с помощью любой линии EXTI, сконфигурированной в режиме прерывания. Если вход был выполнен с помощью WFE, то выход производится с помощью любой линии EXTI, сконфигурированной в режиме события. Во время выхода из режима останова генератор HSI RC выбран как основное системное тактирующее устройство.

Режим ожидания
Режим ожидания является режимом с минимальным энергопотреблением. Он основан на режиме глубокого сна микроконтроллера вместе с отключённым регулятором питания. В этом режиме блок 1,8 В отключается вместе с генераторами PLL, HSI и HSE. Содержимое памяти SRAM и всех регистров, за исключением резервных, теряется. Вход в режим ожидания возможен вызовом инструкций WFI или WFE, пока:
● установлен бит SLEEPDEEP;
●установлен бит PDDS в регистре PWR_CR;
● сброшен бит WUF в регистре PWR_CSR.

В режиме ожидания можно включить независимый сторожевой тай- мер IWDT, часы реального времени RTC, внутренний тактирующий генератор LSI RC и внешний генератор LSE OSC, так же, как в режиме останова. Выход из режима ожидания может быть осуществлён с помощью:
● нарастающего фронта на выводе WKUP;
● нарастающего фронта будильника RTC;
● внешнего сигнала на выводе NRST;
● сброса от IWGT.

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

Автоматический выход из режима пониженного энергопотребления
Для пробуждения микроконтроллера из режима с низким потреблением можно использовать блок часов реального времени RTC, который позволяет программировать интервал времени для периодического пробуждения из режима останова или ожидания. С помощью битов RTCSEL[1:0] регистра RCC_BDCR, для этой цели можно выбрать любой из следующих источников тактового сигнала для RTC:
● генератор LSE OSC от внешнего кварца на 32,768 кГц;
● внутренний RC генератор LSI RC. Чтобы вывести микроконтроллер из режима останова с помощью события от будильника RTC необходимо выполнить следующие операции:
● настроить линию 17 EXTI на возрастающий фронт;
● настроить RTC на генерацию сигнала тревоги (будильника). Для пробуждения микроконтроллера из режима ожидания конфигурировать линию 17 EXTI не требуется.

Описание регистров
Блок управления питанием включает в свой состав всего два регистра. Карта размещения данных регистров в пространстве памяти и их значения после сброса представлены в таблице.

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

На этой карте представлены относительные адреса регистров. Рассмотрим подробнее назначение всех разрядов этих регистров. Регистр управления питанием PWR_CR имеет нулевое смещение адреса и обнуляется при пробуждении из режима ожидания. Биты 31…9 данного регистра зарезервированы и всегда читаются как нулевые данные. Бит 8 DBP позволяет отключить защиту от записи блока BKP. После сброса микроконтроллера регистры блока RTC и BKP защищены от доступа на запись. Чтобы разрешить запись в эти регистры нужно установить этот бит в единичное состояние. Если для тактирования блока RTC используется сигнал от HSE, поделённый на 128, то бит DBP всегда должен быть установлен в единичное состояние. Биты 7…5 PLS[2:0] служат для выбора уровня порога срабатывания цепи PVD (Power Voltage Detector). Они устанавливаются программно и могут принимать следующие значения, соответствующие пороговому напряжению:
● 000 – 2,2 В;
● 001 – 2,3 В;
● 010 – 2,4 В;
● 011 – 2,5 В;
● 100 – 2,6 В;
● 101 – 2,7 В;
● 110 – 2,8 В;
● 111 – 2,9 В.

Бит 4 PVDE отключает и включает цепь PVD. При нулевом состоянии бита цепь PVD отключается, а при единичном – включается. Бит 3 CSBF служит для очистки флага SBF нахождения микроконтроллера в режиме ожидания. Этот бит всегда читается как нулевой. При записи в него единицы – очищается флаг SBF-регистра состояния PWR_CSR. Бит 2 CWUF позволяет очистить флаг пробуждения WUF микроконтроллера. Данный бит всегда читается как нулевой. При записи в него единицы – очищается флаг WUF регистра состояния PWR_CSR через два тактовых цикла. Бит 1 PDDS определяет режим микроконтроллера для глубокого сна. Данный бит устанавливается и очищается программно. Он работает совместно с нулевым битом LPDS регистра PWR_CR. Нулевое значение это- го бита переключает микроконтроллер в режим останова. Состояние регулятора напряжения зависит от бита LPDS. Единичное значение бита включает режим ожидания. Бит 0 LPDS управляет режимом регулятора напряжения. Он устанавливается и очищается программно и работает совместно с битом PDDS. Нулевое значение этого бита переключает регулятор напряжения в режим приостановки, а единичное – включён регулятор напряжения в режим малого потребления. Регистр управления и статуса PWR_CSR с адресом смещения 0×004 не сбрасывается при пробуждении из режима ожидания. Для чтения этого регистра требуются дополнительные циклы шины APB. Биты 31…9 данного регистра зарезервированы и всегда читаются как нулевые данные. Бит 8 EWUP управляет выводом WKUP. Этот бит устанавливается и очищается программно. Нулевое значение этого бита настраивает вывод WKUP, как вывод общего назначения. Событие на этом выводе не пробуждает устройство из режима ожидания. Единичное значение этого бита определяет, что вывод WKUP используется для пробуждения из режима ожидания и принудительно устанавливается в режим входа, притянутого к земле. Данный бит сбрасывается во время общего сброса микроконтроллера. Биты 7…3 зарезервированы и читаются как нулевые данные. Бит 2 PVDO : PVD output (Выход детектора PVD). Этот бит ставится и очищается программно. Он работа- ет только при разрешённом PVD битом PVDE. 0: Напряжение на VDD/VDDA выше, чем порог, выбранный битами PLS[2:0]. 1: Напряжение на VDD/VDDA ниже, чем порог, выбранный битами PLS[2:0]. Работа детектора PVD останавливается в режиме ожидания. По этой при- чине этот бит равен 0 после выхода из режима ожидания или после сброса и остаётся в этом состоянии, пока не будет поставлен бит PVDE. Бит 1 SBF является флагом нахождения микроконтроллера в режиме ожидания. Этот бит устанавливается аппаратно и очищается при сбросе микроконтроллера или установкой бита CSBF в регистре PWR_CR. Бит 0 WUF служит флагом события пробуждения. Этот бит устанавливается аппаратно и очищается при сбросе микроконтроллера или установкой бита CWUF в регистре PWR_CR. Нулевое состояние бита означает отсутствие события пробуждения, а единичное состояние означает факт события пробуждения на выводе WKUP или от сигнала тревоги RTC. Кроме того, флаг детектирует дополнительное событие пробуждения, если разрешён вывод WKUP с помощью установки бита EWUP, во время высокого уровня на этом выводе.

Читайте также:  Бесплатные приложения для смарт тв сони

Программирование блока управления питанием
Существует набор готовых функций для работы с блоком управления питанием микроконтроллера. Рассмотрим их синтаксис и назначение. Функция: void PWR_BackupAccessCmd (FunctionalState NewState). Назначение: включает или отключает доступ к резервным регистрам и регистрам RTC. Вход: NewState – состояние разрешения доступа. Может принимать значение ENABLE или DISABLE. Выход: значения не возвращает. Функция: void PWR_ClearFlag (uint32_t PWR_FLAG). Назначение: очищает указанный флаг PWR_FLAG. Вход: PWR_FLAG – флаг, который необходимо сбросить. Может принимать следующие значения: PWR_FLAG_ WU (Wake up Flag) и PWR_FLAG_SB (Standby Flag). Выход: значения не возвращает. Функция: void PWR_DeInit (void). Назначение: сбрасывает значения регистров PWR к их первоначальному значению. Вход: параметров нет. Выход: значения не возвращает. Функция: void PWR_EnterSTANDBYMode (void). Назначение: переводит микроконтроллер в режим ожидания. Вход: параметров нет. Выход: значения не возвращает. Функция: void PWR_EnterSTOPMode (uint32_t PWR_Regulator, uint8_t PWR_ STOPEntry). Назначение: переводит микроконтроллер в режим останова. Вход: PWR_Regulator – устанавливает состояние регулятора при входе в режим останова. Принимает следующие значения: PWR_Regulator_ON (регулятор включён) и PWR_Regulator_ LowPower (регулятор находится в режиме пониженного энергопотребления). PWR_STOPEntry – устанавливает тип инструкции (WFE или WFI), с которой должен быть осуществлён вход в режим останова. Принимает следующие значения: PWR_STOPEntry_WFI и PPWR_ STOPEntry_WFE. Выход: значения не возвращает. Функция: FlagStatus PWR_GetFlagStatus (uint32_t PWR_FLAG). Назначение: возвращает состояние указанного флага (установлен или нет). Вход: PWR_FLAG – указывает флаг, состояние которого надо проверить. Принимает следующие значения: PWR_ FLAG_WU (Wake up Flag), PWR_FLAG_ SB (Standby Flag) и PWR_FLAG_PVDO (PVD Output). Выход: состояние флага. Варианты: SET или RESET. Функция: void PWR_PVDCmd (FunctionalState NewState). Назначение: включает или отключает детектор напряжения. Вход: NewState – статус детектора напряжения. Принимает следующие значения: ENABLE, DISABLE (Standby Flag) и PWR_FLAG_PVDO (PVD Output). Выход: значения не возвращает. Функция: void PWR_PVDLevelConfig (uint32_t PWR_PVDLevel). Назначение: устанавливает порог срабатывания детектора напряжения. Вход: PWR_PVDLevel – значение напряжения порога. Принимает следующие значения: от PWR_PVDLevel_2V2 (2,2 В) до PWR_PVDLevel_2V9 (2,9 В) с шагом 0,1 В. Выход: значения не возвращает. Функция: void PWR_WakeUpPinCmd (FunctionalState NewState). Назначение: устанавливает возможность пробуждения контроллера по сигналу на пробуждающем пине. Вход: NewState – состояние возможности пробуждения. Принимает следующие значения: ENABLE и DISABLE. Выход: значения не возвращает. Используя данные функции, можно изменять режим работы микроконтроллера в соответствии с алгоритмом функционирования разрабатываемого устройства.

Источник: современная электроника ◆ № 9 2015

Время движется вперед. На смену традиционным контроллерам спешат новые ARM Cortex. Обновленная atmega8a стоит 62 руб. (8 бит, 16 Мегагерц, 8к флеш, 1к ОЗУ, 512 байт EEPROM, 2 8 бит таймера, 1 16 бит таймер, 8 канальный АЦП 10 бит, USART, SPI, 23 I/O). Младшенький из ARM Cortex-M3 – stm32f100c4 стоит 37 рублей (32 бит, 24Мегагерц, 16к флеш, 4к ОЗУ, 6 таймеров 16 бит из которых 3 очень гибкие, 16 канальный АЦП 12 бит, 2 ЦАП 12 бит, USART, USART, I2C, SPI, 37 I/O). Экономическая выгода очевидна. Сдерживает широкое применение ARM несколько факторов. Прежде всего – это отсутствие документации на русском языке. Второй сдерживающий фактор – это корпус с 0,5 мм шагом. Третий – ограниченность знакомой с ними аудитории. Четвертый – устройства для программирования.

Данная статья является иллюстрацией, что со вторым фактором можно бороться, и применять эти контроллеры обычными радиолюбителями. Все, что было сделано – сделано дома с применением ЛУТ(никто не говорил, что получилось с первого раза).

Для программирования можно собрать простой преобразователь уровней RS232. Для прошивки этого хватит. Но для полноценнй отладки нужен хотя бы самый дешевый SWD программатор( ST32VLDISCOVERY стоит порядка 700 руб). С другой стороны многие живут без внутрисхемной отладки – и ничего.

После прочтения статьи, я надеюсь, расширится аудитория заинтерисованная ARM.

К статье приложены исходники, которые могут послужить служить иллюстрацией программирования этих контроллеров. Исходники расчитаны на arm-gcc или keil.

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

  1. само наличие подстроечного резистора, как одной из самых ненадежных деталей
  2. некоторые преобразователи (например ОУ) имеют постоянное напряжение смещение, которое вносит ошибку в измеряемое/устанавливаемое значение параметра
  3. фиксированный выходной и выходной диапазон требуют изменения программы

Если значение АЦП линейно зависит от величины входного сигнала, то значение измеренного параметра можно представить линейной зависимостью

Здесь x – результат преобразования АЦП, y – отображаемое значение, a – коэффициент пропорциональности, b учитывает все постоянные смещения. Если будут известны a и b , то по значению x (результат АЦП), можно получить значение y (напряжение или ток).

То же самое можно сказать про ЦАП. Зная его коэффициенты, по необходимому выходному напряжению/току можно рассчитать значение, которое нужно передать на ЦАП.

Для получения значений коэффициентов a и b необходима процедура калибровки. Для этого получают значение y и x в двух точках, обычно в начале и конце диапазона. На основании значений в этих точках расчитываются коэффициенты. После расчета их можно сохранить в энергонезависимой памяти.

Наличие калибровки позволяет отказаться от применения подстроечных резисторов. Конечно, нельзя будет установить точное максимальное значение напряжения или тока. Но часто не важно, будет источник выдавать максимум 30 вольт или 30,5 вольт. Важно, что выходной параметр будет равен точно установленному, а измеренная величина параметра соответствовать реальной величине. Устраняется влияние смещения ОУ на измерение малых значений параметров. Одна и та же программа (схема) может быть применена для различных источников без доработок (с минимальными доработками). Поскольку все параметры настраиваются, то непринципиально, будет ли выходное напряжение меняться в диапазоне 0-30 вольт или это будет диапазон 0-1000 вольт. Изменение диапазона напряжений и токов потребует соответствующего изменения входных делителей и выходных усилителей.

Схема реализует управление током и напряжением на выходе лабораторного источника, а также их измерение. Результаты отображаются на графическом LCD от телефона nokia 3310 с разрешающей способностью 4 знака. Все управление осуществляется при помощи системы меню энкодером с кнопкой. Предыдущие значения напряжения и тока сохраняются при отключении питания. Сохранение может быть выполнено как во встроенной flash памяти так и во встроенных, подпитываемых от батареи регистрах. Устройство позволяет настроить и использовать до 12 предустановленных значений напряжения или тока. Предустановленные значения выбираются из меню. Опционально устройство управления реализует также функцию часов с автоматическим расчетом подстройки хода.

Автором устройство было применено для управления силовой частью источника питания 0-30 вольт 0-0,5 ампер http://radiokot.ru/circuit/power/supply/21

Земли силовой части и аналоговая земля схемы управления должны быть соединены вместе (клемма AGND ). Питание +-6 вольт подается с силовой схемы на клеммы PWR + и PWR – . Из PWR + стабилизатором LP 2950 формируется напряжение питание контроллера 3,3 вольта. Поскольку в данной схеме принципиальна стабильность именно аналогового питания, которое служит опорой для ЦАП и АЦП стабилизатор подключен напрямую именно к аналогому выводу питания микроконтроллера. Цифровое питание подается через дроссель L 1. Цифровое питание используется для контроллера и индикатора. Источник также имеет раздельную цифровую и аналоговую землю. Они должны быть соединены вблизи вывода аналоговой земли микроконтроллера.

Сердцем схемы является самый младший из семейства ARM микроконтроллеров фирмы ST microelectronics : STM 32 F 100 C 4. К нему подключаются входной и выходной преобразователь уровней, индикатор, энкодер. Микроконтроллер имеет встроенные ЦАП и АЦП.

С выходов ЦАП (14 и 15 ноги) задающие напряжения, имеющие диапазон изменения от 0 до 3,3 вольт, поступают на выходной преобразователь уровней, выполненный на операционных усилителях DA 3.1, DA 3.2. В данном случае задающий сигнал напряжения проходит через повторитель, а задающий сигнал тока ослабляется примерно в 6 раз (до максимального значения 0,5 вольта). Задающие напряжения снимаются с клемм VOUT и IOUT и подаются на силовую часть источника питания. Задающие напряжения используются вместо переменных резисторов и подаются на силовую часть в точку, куда ранее подключались скользящие контакты переменных резисторов. На схеме точки подключения подписаны и указаны стрелочками. Всего 5 точек + 2 точки питания.

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

Входное напряжение с отрицательной клеммы источника подается на клемму VIN управляющей схемы. Операционный усилитель DA 2.1 в инвертирующем включении преобразует диапазон напряжения 0 – -30 вольт в 0-3 вольта. Напряжение с шунта подается на неинвертирующий усилитель на ОУ DA 2.2. Усилитель преобразует диапазон сигнала токового датчика (шунта) от 0-0,5 вольта до 0-3 вольта. Преобразованные сигналы измеряются двумя каналами АЦП контроллера. При разработке собственных входных преобразователей нужно обеспечить изменение напряжения на входе АЦП от 0 до 3-3,2 вольт в полном диапазоне токов и напряжений.

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

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

Читайте также:  Выгодные тарифы на мегафоне

К клеммам, начинающимся с LCD , подключен графический индикатор от телефона nokia 3310.

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

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

Клеммы USART …, SWD … и перемычка j 1 используются при программировании контроллера.

Непосредственно после первого включения устройство переходит в режим калибровки. Калибровка осуществляется по 4 токам: 2 для тока и 2 для напряжения. После установки желаемой величины должны быть введены измеренные значения тока или напряжения. По результатам измерения рассчитываются коэффициенты линейной зависимости и сохраняются в flash память.

При следующих включениях источник готов к работе сразу. Вращением ручки энкодера устанавливается необходимое значение тока или напряжения или выбор одного из предустановленных значений. Для обеспечения одновременно и быстрой и точной установки параметров применено динамическое изменение величины шага энкодера. При медленном вращении обеспечивается максимальная точность подстройки(1 разряд ЦАП – 1/4096 часть максимального значения). При относительно высокой скорости вращения на один шаг энкодера приходится уже несколько разрядов ЦАП. Причем величина шага при высокой скорости вращения энкодера увеличивается, при медленной – снижается. Таким образом достигается также и высокая скорость изменения параметра: весь диапазон может быть пройден за 2-3 оборота ручки энкодера.

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

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

Если ни один из параметров не изменялся, то долгое нажатие на кнопку приводит к временному отключению выходного напряжения. Значения ЦАП тока и напряжения устанавливаются при этом в 0. Повторное долгое нажатие приводит к включению ранее установленных значений выходного напряжения и тока.

Непосредственно после включения выход источника отключен как после долгого нажатия. Подача установленного до выключения напряжения и тока осуществляется по долгому нажатию кнопки.

На индикаторе в обычном режиме отображаются актуальные и установленные значения тока и напряжения, а также часы (если включены). Обновление результатов измерения производится 5 раз в секунду.

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

Конструкция и детали

В качестве микроконтроллера применен самый дешевый из контроллеров семейства, но может быть использован любой из серии STM 32 F 100 C . Их отличие – большие объемы памяти. Можно также использовать более дорогой контроллер в 64 или 100 выводном корпусе ( STM 32 F 100 R STM 32 F 100 V ) с изменением схемы.

Все резисторы и керамические конденсаторы типоразмера 0805, электролитические конденсаторы – алюминиевые или танталовые. Дроссель – покупной индуктивностью 100 uH . Операционный усилитель может быть заменен на практически любой сдвоенный (например TL 082, TL072, LM358). Стабилизатор также может быть применен практически любой на 3,3 вольта. Необходимо только учитывать, что от его стабильности зависит стабильность источника в целом. Энкодер применен с 20 шагами на оборот и совмещеной кнопкой. Батарея – литиевая или 2 соляные или 2 щелочные любого типа, главное, что бы ее напряжение составляло порядка 3 вольт.

Индикатор от телефона nokia 3310. При покупке необходимо обращать внимание на выводы. Выпускают 2 типа индикаторов – с контактами на стекле под прижим и с приклеенной печатной платой с контактами. Второй вариант предпочтительнее, так как позволяет припаять проводники. Распиновка индикатора показана на рисунке.

Особое внимание необходимо уделить кварцевому резонатору. Он должен быть с емкостью 6 пикофарад. 12 пикофарадные резонаторы не подходят. С этими резонаторами часы либо совсем не заводятся, либо работают очень нестабильно.

Устройство управления собрано на двусторонней печатной плате, сделанной по ЛУТ. Плата имеет порядка 20 межслойных перемычек, часть из которых размещается под SMD элементами. Перемычки выполняются проводом диаметром примерно 0,4мм. После вставки провода в отверстие, он надрезается ножом, так что бы длина провода была на несколько десятых миллиметра больше толщины платы, и обламывается. После вставки всех перемычек, они расплющиваются молотком для фиксации в отверстии. Здесь важно, что бы провод входил в отверстие с некоторым усилием, иначе при ударах молотка могут вылететь соседние перемычки. Если провод входит слишком туго – можно обработать наждачной бумагой провод для уменьшения его толщины.

На печатной плате имеются следующие неточности и изменения:

  1. Добавлен резистор-перемычка, соединяющий цифровую и аналоговую землю.
  2. Отсутствует конденсатор C 14. Впоследствии smd конденсатор на 10 вольт был припаян прямо на проводники.
  3. Отсутствует конденсатор C 15. Предполагалось, что можно будет использовать керамический емкостью 2,2 микрофарады, напаянный непосредственно на индикатор. Но это оказалось неосуществимо. Конденсатор припаян на земляной полигон и соединен проводником с индикатором.
  4. Вывод индикатора CS соединен с землей прямо на индикаторе.
  5. Конденсаторы C 1 и C 10 оставлены на длинных выводах, что бы их можно было пропаять с двух сторон.
  6. R 19 не впаян.

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

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

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

При первом включении снова проверяются питания контроллера и операционных усилителей, наличие напряжения примерно 1,2 – 1,5 вольта на делителе R 17, R 11. В случае необходимости выполняется подбор резисторов делителя.

Подключение индикатора необходимо производить после программирования.

Программирование выполняется с использованием программатора ST-LINK . Это может быть либо отдельный программатор, либо STM 32 VLDISCOVERY . Из софта применяется ST – Link Utility , либо среда программирования. В последнем случае программирование выполняется автоматически при активизации отладки. Для программирования используются клеммы SWD …

Программирование может быть осуществлено также через USART . Для этих целей должен быть собран преобразователь уровней из 3,3 вольт в RS 232 ( st 3232, max 3232). Первую свою программу автор записывал именно таким образом. Данный проект с размером кода порядка 16к записать без ошибок уже не удалось. Возможно, влияет излишняя длина проводников, или преобразователь уровней вышел из строя, или интерфейс в компьютере испортился. Для тех, кто будет использовать данный, метод далее приводится описание процедуры программирования полностью.

Выход USART подключается к входу преобразователя уровней и наоборот. В данном корпусе выход USART – это вывод 30, вход – вывод 31 (согласно Table 4 datash e et на stm32f100c4). Питание на преобразователь можно подавать как отдельно, так и с платы. Загрузчик активизируется путем подтяжки Boot 1 (вывод 20) к земле, а Boot 0 (вывод 44) – к питанию (замыкание J 1) перед подачей питания.

Для программирования используется утилита STMFlashLoader (документ UM0462), консольная версия. В каталоге map данной утилиты создается файл с именем STM32_Low-density-value_16K. Stmap как копия файла STM32_Low-density_16K.Stmap. Заголовок этого файла замещается на следующий:

Возможно, что к этому времени утилита загрузки поддерживает STM 32 F 100 C 4, но полгода назад (начало 2011) это было не так.

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

STMFlashLoader.exe -c –br 9600 -i STM32_Low-density-value_16K -d –fn D:PATHTOHEXmain.hex –v

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

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

STMFlashLoader . exe – c — br 9600 – i STM 32_ Low – density – value _16 K – e – all

После программирования снимается перемычка J 1, подключается индикатор, и при включении питания начинает работать программа. Сразу же после включения прибор переходит в режим установки контрастности. После установки контрастности выполняется калибровка в 2 точках по напряжению и в 2 точках по току. Результаты калибровки сохраняются в flash памяти, после этого можно устанавливать требуемые выходные напряжения и токи. Калибровке посвящен отдельный документ (User guide).

После калибровки могут быть проверены диапазоны изменения выходных и входных напряжений. Выходной диапазон может быть изменен подбором усиления ( R 19, R 16) или ослабления ( R 20, R 21), либо соответствующей настройкой силовой части.

Максимальный сигнал, поступающий на АЦП после преобразования входных сигналов, должен быть порядка 2,9-3,2 вольта. В случае необходимости также может быть осуществлена подборка соответствующих сопротивлений ( R 2, R 4 для тока, R 9, R 14 для напряжения). При любом изменении сопротивлений резисторов необходима повторная калибровка.

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

Индикатор показывает, что установлено напряжение 15 вольт, на выводах – 15,01 вольта, ограничение тока – 100 мА, ток в нагрузке – 15,1 мА, время – 21:44. Ручка энкодера служит для управления источником. Красная кнопка включает триггерную защиту. Светодиод индицирует включение. В режиме ограничения тока он горит красным цветом. К выходным клеммам подключена нагрузка.

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *