PG_HAZEL : Анализ IO с помощью vmstat(b, wa)
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Задача
Провести статистический анализ результатов нагрузочного тестирования для оценки состояния IO.
Предыдущие работы по теме
Нагрузочное тестирования виртуальной машины - 06
Операционная скорость
Чек-лист IO - OK
Нагрузочное тестирования виртуальной машины - 12
Операционная скорость
Чек-лист IO - ALARM
Технологии: "PHANTEKS AMP GH 1000W" обзор основных показателей
Премиальная серия блоков питания AMP GH от компании Phanteks появилась на рынке год назад и в сети даже можно найти несколько обзоров этой модели. Речь идет о модели мощностью 1000 Вт, которой хватит практически для любого игрового ПК.
Тем не менее, в процессе исследования образца оказалось, что производитель заменил начинку устройства, оставив все остальное без изменения. Так что можно сказать, что перед вами обзор абсолютно новой модели.
Из отличительных особенностей блока питания стоит отметить высокую эффективность, тихую работу, модульную конструкцию, наличие большого количества удобных для укладки кабелей.
Комплектация и внешний вид
Коробка у блока питания довольно большая и тяжелая. Раза в полтора больше обычного размера. Так что сразу видно, что перед нами топовая модель. Не последнюю роль тут сыграло, конечно, наличие большого количества кабелей питания и их толщина.
На лицевой стороне можно заметить значок сертификата 80+ Platinum, также указана поддержка ATX 3.1.
С обратной стороны производитель перечислил чуть больше характеристик. Тут и вентилятор с гидродинамическим подшипником, скорость которого зависит от температуры, и четыре отдельных кабеля питания видеокарт с разъемами 6+2.
Здесь также находится график скорости вентилятора, на котором показано, что при нагрузке менее 50% он будет останавливаться. Также есть график КПД, на котором мало что можно увидеть.
По комплекту поставки видно, что производитель хотел, чтобы все выглядело дорого-богато. Корпус блока и кабели спрятаны в тканевые мешочки.
Кроме самого блока и кабелей тут есть:
сетевой кабель 3х1.0 кв.мм. (сечение тут чуть больше обычного);
инструкция;
стяжки (много стяжек);
винты крепления;
скобы для укладки и выравнивания проводов;
фирменные «липучки».
Специальные скобы состоят из двух частей и ими можно фиксировать по 4 провода.
Не уверен, что это вообще необходимо, но, если нужно сделать вид более аккуратным, они могут пригодиться. На основном кабеле питания материнской платы и кабеле 12V-2×6 также установлено несколько таких скоб (только более широких), что позволит придать более аккуратный вид системному блоку.
Различных кабелей питания много. Тут есть два кабеля питания CPU, четыре (!) стандартных кабеля для питания видеокарт, кабель 12V-2×6, три кабеля питания периферийных устройств.
Маркировки на проводах нет. Кроме того, они разной толщины. Кабель 12V-2×6 состоит из немного более жестких и относительно тонких проводов, хотя здесь должны применяться самые толстые провода марки 16AWG.
Кабели питания видеокарты состоят из шести толстых (я бы даже сказал «жирных») и мягких проводов и двух более тонких и жестких (примерно как в кабеле 12V-2×6).
Кабели питания процессора целиком состоят из толстых и мягких проводов, а кабели питания периферии - из более тонких и чуть более жестких. Думаю, на фото ниже можно увидеть, что провода везде разные, при этом непонятно, где именно больше меди.
Сам блок питания обычных размеров. Вентиляционная решетка состоит из довольно широких прямоугольных отверстий, расположением напоминающих кирпичную стену. На задней стенке есть выключатель, но нет кнопки включения полупассивного режима.
Сбоку находятся разъемы для подключения кабелей, здесь их целых три ряда. Разъем 12V-2×6 производитель решил не выделять цветом.
У старой ревизии блока есть в наличии всего два ряда разъемов. Именно так их проще всего отличить.
На блоке также есть наклейка с указанием токов и мощности по каждой линии. Код модели (PH-P1000GH_02) здесь имеет цифры 02 на конце, что также указывает на вторую ревизию.
Далее посмотрим на начинку блока.
Внутреннее устройство блока питания
Разбираем блок, открутив четыре винта. Вентилятор подключен через разъем, так что корпус можно без проблем разъединить.
Вентилятор тут используется от Hong-Hua (HA1225M12F-Z), с гидродинамическим подшипником, размеры 120 мм. Максимальный потребляемый ток до 0.45А. Это та же модель вентилятора, которая отлично себя показала в блоке питания от DeepCool. Топология плат у этих двух моделей также немного похожа.
На плате установлено целых 4 радиатора (которые выглядят по-разному), так что за охлаждение можно не переживать.
Входной фильтр типовой. На входном разъеме один X- и два Y-конденсатора. На X-конденсаторе можно заметить распаянные SMD-элементы, необходимые для разрядки конденсаторов.
На проводах, отходящих от сетевого разъема, висит ферритовое кольцо, обтянутое термоусадкой. На плате распаяны два больших дросселя, под одним из которых спрятался X-конденсатор.
На отдельном небольшом радиаторе закреплено два диодных моста (маркировку не видно).
Около радиатора стоит большой дроссель APFC, а около него - длинный радиатор с закрепленными элементами APFC и главного преобразователя.
При этом два транзистора APFC закреплены на основном радиаторе (маркировку не видно), а диод – на отдельном небольшом радиаторе (да, целый радиатор для одного диода).
Два транзистора основного преобразователя имеют маркировку OSG60R099FT3 (30A, 650V).
Судя по всему, тут применяется схема полумостового преобразователя, плюс LLC-резонатор, плюс DC-DC преобразователи – стандартный набор для современных качественных блоков питания.
Около радиатора можно заметить пару микросхем. Это CM6500UNX – контроллер APFC, и CM6901T6X – контроллер основного преобразователя (спрятан под платой с выходными разъемами).
Основной конденсатор выпрямителя от Nippon Chemi-Con имеет ёмкость 820 мкФ. Неплохо.
Для получения напряжения 12В здесь используется синхронный выпрямитель, состоящий из шести мосфетов HYG009N04 (40 В, 200А), которые расположены вокруг трансформатора. Для их охлаждения тут используется довольно тонкий П-образный радиатор, впаянный в плату.
Для получения напряжений 3.3В и 5В используются преобразователи, расположенные на небольших отдельных платах. В основе контроллеры APW7073 и пара мосфетов с маркировкой 3212T (200V, 10A) и 3214T (200V, 10A).
За дежурное напряжение отвечает контроллер EM8569C (на фото внизу справа).
Для фильтрации выходных напряжения тут используются электролитические конденсаторы от Nippon Chemi-Con (коричневого цвета, 3300 и 2200 мкФ) и Rubycon (черные), а также на плате установлено некоторое количество твердотельных конденсаторов.
Технические характеристики
Также информация есть на сайте производителя. Однако, там есть фотографии только первой ревизии с двумя рядами разъемов.
Все нужные защиты у блока питания есть. Могу предположить, что данный блок питания построен на платформе Helly Technology, так как схема ну очень похожа на DEEPCOOL PQ850G.
Наличие сертификата 80+ Platinum предполагает высокий КПД, что я далее попытаюсь проверить.
Тестирование
В качестве нагрузки, как обычно, выступят лампы накаливания на 50 и 35 ватт и несколько керамических резисторов.
По линиям 3.3В и 5В нагрузка составляет около 28Вт, что очень примерно соответствует максимальному потреблению обычного ПК. Вся остальная нагрузка была по линии 12В. Максимальное энергопотребление стенда составило 983 Вт.
Стабильность напряжений
Напряжения по всем линиям у данной модели изначально немного выше номинала. При увеличении нагрузки напряжения также растут.
Максимальные отклонения напряжений от номинала составили: 3.3В – 2.27%, 5В – 2.54%, 12В – 2.1%. Хороший результат.
Работа APFC
По стандарту 80+ Platinum данный коэффициент мощности должен быть выше 0,94 при нагрузке в 50%, фактическое значение составило 0.99.
Коэффициент мощности увеличивается довольно быстро с ростом нагрузки. При нагрузке выше 600 Вт он становится равен единице. В этом моменте у блока все отлично.
КПД
Блок питания показывает хорошую эффективность. Наибольший КПД достигается в диапазоне 250 – 700 Вт, поднимаясь до уровня 94 – 95%. В требования стандарта 80+ блок укладывается.
Отмечу локальный максимум КПД в районе 500 Вт. Именно в этом месте начинает включаться вентилятор. У меня даже промелькнула мысль о том, что производитель специально выбрал полупассивный режим работы для того, чтобы слегка повысить КПД и втиснуться в требования стандарта. Другой причины такого подхода я не нахожу.
Толщина проводов
Штатные провода у блока разные, есть мягкие (CPU), есть потвёрже (12V-2×6). Проверю сопротивления путем измерения падения напряжения в проводах. Данные измерений в таблице ниже.
Так как маркировки на проводах нет, укажу просто конкретный кабель питания, сопротивление которого я измерял. Нужно иметь в виду, что провода в кабелях питания CPU и GPU, как правило, имеют толщину 18AWG, а в кабеле 12V-2×6 – 16AWG.
Полученные данные, в целом, совпали с ожиданиями. Провода в кабеле 12V-2×6 имеют большее сечение проводника, хоть и выглядят более тонкими. Сопротивление получилось выше нормы, но не слишком. Провода хорошие, производитель на них не экономил.
Работа вентилятора и нагрев
Вот здесь, пожалуй, скрыта наиболее интересная особенность блока. Производителем заявлен полупассивный режим работы устройства. Включения вентилятора, если верить графикам, стоит ожидать при нагрузке в 500Вт и выше.
И действительно, пока полезная нагрузка не превышала 500Вт, вентилятор стоял на месте. Затем начал периодически включаться и охлаждать начинку, раскручиваясь примерно до 1050 оборотов с постепенным замедлением. И только после 800Вт нагрузки вентилятор стал работать постоянно.
Так как охлаждение происходило на довольно высоких оборотах, вентилятор был хорошо слышен. Особенно на контрасте с бесшумной работой до включения.
Полупассивный режим работы вентилятора плох тем, что начинка блока неплохо так нагревается. При первых включениях выдуваемый воздух был нагрет до 43 градусов, что позволяет предположить, что температура отдельных элементов блока еще выше – градусов 55-60.
При максимальной нагрузке поток воздуха нагревался до 50 градусов. Но даже в этом случае вентилятор работал на умеренных оборотах.
Выбранный производителем режим работы, на мой взгляд, довольно спорный.
Выводы
Итак, что в итоге. Блок питания PHANTEKS AMP GH 1000W почти всем хорош, но есть один нюанс.
Сначала о том, что понравилось:
высокая мощность, хватит для всего;
высокий КПД;
абсолютно бесшумная работа вплоть до 500 Вт нагрузки;
модульная конструкция;
кабелей много и они достаточно мягкие для комфортной укладки.
Единственная вещь, которая мне не понравилась – это невозможность отключить полупассивный режима работы вентилятора. Я бы предпочел, чтобы вентилятор всегда работал, пусть и с минимальной скоростью. Тем более, что тут применяется довольно удачная модель вентилятора с гидродинамическим подшипником, практически бесшумная на низких оборотах. На рынке есть много моделей, где эта возможность реализована.
Постоянные включения/отключения вентилятора при нагрузке выше среднего заметны и могут вызвать раздражение.
Чтение мыслей стало реальностью
Нейроимплант, который может превратить внутренний монолог в текст. Точность распознавания доходит до 74%, словарь до 125 000 слов, а скорость - до 62 слов в минуту.
Особенно необычная находка исследователей - защита мыслепаролем. Чтобы запустить декодирование, человек должен мысленно произнести заранее выбранное слово. Никто не хочет, чтобы его мысли случайно или специально «подслушали».
• Имплант использует микроэлектроды, установленные в моторной коре.
• Алгоритмы машинного обучения извлекают из сигналов фонемы, а затем собирают из них слова и целые предложения.
• Система уверенно различает внутреннюю речь и разговоры вслух.
• Проверено на четырех добровольцах с параличом - результаты стабильные и готовы к клиническим применениям.
• Словарь модели масштабируемый до 125 тысяч слов, такое раньше было недостижимым.
• Авторы подчеркивают: этика и приватность стоят в центре проекта. Именно поэтому вокруг работы сразу собрали команду не только из инженеров и врачей, но и из специалистов по этике.
• Уже обсуждаются неинвазивные варианты, чтобы отойти от хирургии и сделать технологию доступнее.
На практике это значит следующее. Раньше подобные системы требовали, чтобы человек пытался шевелить языком или губами, а они читали эти сигналы. Сейчас речь идет о чистой внутренней речи - гораздо быстрее и удобнее.
PG_HAZEL : Корреляционный анализ значений CS (переключения контекста-VMSTAT)
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Задача
Провести статистический анализ результатов нагрузочного тестирования для оценки ресурсов CPU.
Предыдущие работы по теме
Нагрузочное тестирования виртуальной машины - 06
Операционная скорость
Чек-лист CPU - ALARM
Нагрузочное тестирования виртуальной машины - 12
Операционная скорость
Чек-лист CPU - OK
Как бесплатно получить: Speechify Premium на 7 дней?
💁🏻♂️ Speechify [ iOS / Android ] — это сервис на базе ИИ для преобразования текста в речь (Text-to-Speech), которое позволяет загружать статьи, документы, книги и слушать их в аудиоформате с разными голосами и скоростью чтения. Поддерживается русский язык, но работает не совсем идеально.
— Как получить доступ бесплатно?
1. Переходи по этой ссылке.
╚ Вводи почту и пароль (см. ниже):
— Почта: duw3yiu@tempblockchain.com
— Пароль: Te1egram@freehvb
2. Готово, тестируй бесплатно сервис 7 дней.
🔥 Скопировано здесь: t.me/freehvb/6949
Контроль напряжения над блоком питания на STM32: Подход к энергоэффективности и защите
Автономные системы становятся все более востребованными - от портативных приборов до сложных промышленных комплексов - надежное управление напряжением питания превращается в ключевой фактор их долговечности и эффективности. Сердце любой такой системы - аккумулятор, а его безопасность и срок службы, напрямую зависит от контроля напряжения.
В данной статье будет представлен пример контроля напряжения, над блоком питания - внутри которого (никель-металлгидридная аккумуляторная сборка NiMH 14.4В/12 банок по 1.2В(1.4В- при полной зарядке)).
В блоке питания уже есть палата управления над аккумулятором, которая выполняет задачи:
Работа с кнопкой;
Работа со светодиодом;
Работа с пъезоэлектрическим излучателем(звуковая индикация);
Контроль заряда/разряда аккумулятора(дает звуковой сигнал при напряжении менее 9 вольт и более 14).
В процессе анализа и статистики использования оборудования стало очевидно, что многие пользователи часто забывают своевременно отключать блоки питания. В результате аккумуляторные сборки продолжают разряжаться даже при отсутствии необходимости, напряжение падает до критических значений, и аккумулятор быстро теряет свою емкость, становясь непригодным для дальнейшей эксплуатации.
Помимо этого, подключенная система оказывается в неопределенном состоянии, на плату управления и различные датчики по-прежнему подается питание, что приводит к избыточной нагрузке. В качестве этого сокращается ресурс электронных компонентов и снижается надежность всего устройства.
Для решения данной проблемы я продемонстрирую пример системы контроля напряжения блока питания, в качестве микроконтроллера выбран STM32F103С8T6, который выполняет следующие задачи:
Непрерывный мониторинг напряжения аккумуляторной сборки, измерение производится через АЦП с использованием DMA;
Оповещение пользователя о низком заряде, при падении напряжения ниже установленного порога (в данном примере - 9.0В) система активизирует звуковой сигнал, время работы оповещения ограничено - звуковая индикация будет длится 5 минут;
Переход в энергосберегающий режим, если напряжение остается ниже порога и пользователь не предпринял действий в течении заданного времени, микроконтроллер переводит систему в режим сна, это сопровождается отключением тактирования и всей периферии, что минимизирует и предотвращает глубокий разряд аккумулятора.
Схема подключения NiMH АКБ, делителя напряжения к АЦП МК, кнопки вкл/выкл и пъезо-излучателя
Перечень компонентов
Объяснение схемы
Узел[1]
Входной силовой ключ, исток подключен к +12V, сток идет к блоку питания(+12_АКК) через предохранители, а затвор подтянут к земле, применение (защищенная подача напряжения питания с аккумуляторного блока);
Узел[2]
Вторичный силовой ключ, обеспечивает управляемое включение/отключение напряжения питания основной нагрузки системы, управление происходит через МК, сигнал PWR_ON, после включения данного узла, на стоке напряжение питания +12ВК активизируется и передает напряжение другим частям схемы, в моем примере это (узел[4]-Звуковая индикация и узел[5]-lделитель напряжения), но также можно использовать данный узел и на включение преобразователей напряжения;
Узел[3]
Данный узел обеспечивает логику взаимодействия с кнопкой включения/выключения, кнопка sa2, при нажатии формирует управляющий сигнал, диод АD4 и конденсатор С1 обеспечивают фильтрацию и антидребезг;
Узел[4]
Данный узел обеспечивает звуковую индикацию, сигнал BEEP подключается к МК;
Узел[5]
Данный узел является делителем напряжения, делит напряжение до уровня, подходящего для измерения АЦП МК (обычно до 3.3V), подстроечный резистор R8, выставлен на 1.7кОм.
Настройка микроконтроллера STM32F103 в CubeIDE
Конфигурация TIM1(PA11)
Таймер TIM1 выполняет роль генератора для звуковой индикации.
Настройка таймера:
Предделитель (Prescaler) и период (Auto-Reload) выбраны так, чтобы на выходе формировался сигнал с частотой в диапазоне, воспринимаемом слухом (обычно 1–5 кГц);
Режим работы – PWM (широтно-импульсная модуляция);
Коэффициент заполнения (Pulse) определяет громкость и характер звучания.
Принцип работы:
Таймер генерирует ШИМ-сигнал, который подаётся на транзисторный ключ. Транзистор управляет пьезоизлучателем или динамиком. В результате получается слышимый звук.
Преимущества такого решения:
Микроконтроллеру не нужно вручную формировать частоту – этим занимается таймер;
Легко изменять тональность: достаточно переписать значения ARR/PSC;
Можно реализовать разные звуковые эффекты (короткие сигналы, мелодии) простым управлением таймером из программы.
Конфигурация ADC(PA1)
В проекте используется многоканальный режим работы АЦП с двумя каналами в последовательности (Regular conversion sequence).
Rank 1 – внешний канал (ADC Channel 1).
Этот вход подключён к делителю напряжения и используется для измерения напряжения аккумулятора.
Благодаря этому микроконтроллер может в реальном времени контролировать состояние питания устройства.
Rank 2 – внутренний канал (Vrefint).
Это встроенный источник опорного напряжения микроконтроллера. Он служит для автоматической калибровки и компенсации возможных изменений питающего напряжения. С его помощью можно более точно измерять значение внешних сигналов, в том числе напряжение аккумулятора.
Для повышения эффективности задействован DMA: результаты обоих измерений (Rank 1 и Rank 2) автоматически передаются в память, а процессор получает только готовые данные.
Для правильной настройки ADC я воспользовался данной информацией, там подробно расписано как работать с ADC МК-STM32.
Конфигурация пина для работы с кнопкой
Для работы с кнопкой выбран вывод PB11, сконфигурированный в режиме:
GPIO_EXTI – внешний прерывающий вход. Это значит, что нажатие кнопки обрабатывается не опросом в цикле, а через аппаратное прерывание;
Mode - External interrupt, Falling edge trigger – прерывание срабатывает по спаду сигнала (при замыкании кнопки на землю);
Pull-up – включен внутренний подтягивающий резистор, который удерживает вход в состоянии логической «1», пока кнопка не нажата.
Кнопка подключена так, что в обычном состоянии на входе PB11 присутствует логическая «1» благодаря встроенному подтягивающему резистору (Pull-up). При нажатии контакт замыкается на землю, формируется логический «0» и происходит спад сигнала. Этот спад фиксируется модулем EXTI, который вызывает прерывание.
Конфигурация пина для работы с сигналом PWR_ON
Сигнал PWR_ON играет роль электронного «выключателя питания».
В исходном состоянии (Low) нагрузка обесточена.
При активации (перевод вывода в High) силовой MOSFET открывается, и напряжение +12ВК подаётся на остальные узлы системы.
В примере данная линия питает:
узел [4] – звуковую индикацию,
узел [5] – делитель напряжения для мониторинга питания.
Аналогично этот узел можно использовать и для включения DC/DC-преобразователей или других модулей, требующих управляемого питания.
Конфигурация Clock
Реализация программного кода
Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код - Adc_VoltageControl_STM32F103C8T6]
Заголовочный файл keys.h (работа с кнопками)
В данном файле определены:
Функции работы с кнопками;
Битовые маски состояний;
константы для различных сценариев нажатий.
keys.h
Реализация модуля keys.c (работа с кнопками)
Данный модуль включает в себя задачи:
Устранение дребезга контактов;
Различие между коротким и долгим нажатием;
Отслеживание событий нажатия, удержания и отпускания.
keysDrv_Handler()
Вызывается постоянно в основном цикле или из системного таймера.
Нажатие кнопки (первичное событие)
2. if(gl_kDrv_key1_blockEvent == 0 && ON_OFFB_state == KEY_PRESS) {
3. gl_kDrv_key1_blockEvent = 1;
4. gl_kDrv_time_key1_press = ms;
5. }
Сохраняется время нажатия, дальнейшие события блокируются до отпускания
Фильтр дребезга
else if(gl_kDrv_key1_blockEvent == 1 &&
&&
gl_kDrv_key1_short_state==0 &&
(ms - gl_kDrv_time_key1_press) > DELAY4TIMER){
//прошло время защиты от дребезга, кнопка нажата
gl_kDrv_key1_short_state=1;
keyState &= ~KEY1Release_Drv;//снимаем бит отпускания кнопки
keyState |= KEY1_Drv;
}
Если прошло больше DELAY4TIMER, считаем кнопку реально нажатой.
Определение удержания
else if(gl_kDrv_key1_blockEvent == 1 &&
ON_OFFB_state==KEY_PRESS &&
gl_kDrv_key1_short_state==1 &&
(ms - gl_kDrv_time_key1_press) > DELAY_HOLD_TIMER){
keyState |= KEY1Hold_Drv;
}
Если прошло больше DELAY_HOLD_TIMER, выставляем бит удержания.
Отпускание кнопки
else if(gl_kDrv_key1_blockEvent == 1 && && gl_kDrv_key1_short_state==1){
gl_kDrv_key1_blockEvent=0;
gl_kDrv_key1_short_state=0;
keyState |= KEY1Release_Drv;
keyState &= ~KEY1_Drv;//снимаем бит нажатия кнопки
keyState &= ~KEY1Hold_Drv;//снимаем бит удержания кнопки
}
При отпускании кнопки сбрасываются флаги удержания и нажатия, выставляется бит отпускания.
getKeyState()
Возвращает текущее состояние кнопок в виде битовой маски
Позволяет определить, была ли кнопка нажата, удержана или отпущена;
После считывания некоторые флаги (например, отпускание) сбрасываются ,чтобы событие не повторялось.
getKeyPinState_AtNow()
Возвращает моментальное состояние ножек GPIO, без учета дребезга
Полезно для отладки или когда нужно мгновенно узнать, нажата ли кнопка прямо сейчас
keys.c
Реализация модуля ADC_Calc.c (работа с АЦП)
Данный модуль реализует контроль напряжения питания через АЦП микроконтроллера STM32F103C8T6, измерения выполняются с использованием:
DMA (циклическая запись данных в буфер);
Встроенного опорного напряжения Vrefint;
Собственного делителя напряжения на входе.
ADC_Calc_Handler() - главный обработчик вычислений
Проверяет, заполнена ли первая или вторая половина DMA-буфера;
Усредняет значения для канала измерения и Vrefint;
Конвертирует результат в напряжение вызовом adc_calcVoltage();
Если напряжение ниже порога critical_stress → возвращает команду отключения питания (FORCE_POWER_OFF);
Производит фильтрацию значений по диапазону 750 < val_input < 2800 (защита от шумов и выбросов).
HAL_ADC_ConvCpltCallback()
Вызывается по прерыванию DMA Transfer Complete → устанавливает флаг adcIRFullDone
HAL_ADC_ConvHalfCpltCallback()
Вызывается по прерыванию DMA Half Transfer Complete → устанавливает флаг adcIRHalfDone
adc_init()
Сброс флагов и буфера.
adc_start()
Запускает АЦП в режиме DMA, далее происходит циклическое заполнение adcDMAbuf без участия процессора
adc_stop()
Останавливает АЦП и DMA;
Сбрасывает флаги готовности
adc_calcVoltage()
Ключевая функция — переводит «сырые» значения АЦП в напряжение
adc_GetVoltage()
Геттер для получения последнего значения рассчитанного напряжения
Общий алгоритм работы:
DMA заполняет буфер парами значений (input, Vrefint);
При заполнении половины буфера → срабатывает прерывание, ставится флаг;
ADC_Calc_Handler считывает данные, фильтрует и усредняет;
Вызывается adc_calcVoltage, которая переводит вольты;
Значение доступно через adc_GetVoltage();
Если напряжение меньше 9 В (по critical_stress) → отрабатывает аварийное выключение.
ADC_Calk.c
Пояснение к функции adc_calcVoltage()
Расчет VDDA, где:
VREFINT_TYP - калибровочное значение 1.20, взято из datasheet, у других МК на заводе производитель прошивает калибровочное значение в ПЗУ при изготовлении, пример получения значения с МК STM32F030CCTx [0x1FFFF7BA];
4095 - когда измеряется источник встроенным АЦП, результат выражается в единицах квантования, максимум которых равен 4095, поэтому в формуле используется множитель 4095 - это нормализация значения, чтобы связать измеренный АЦП с напряжением VDDA.
ADC_vref - значение встроенного источника опорного напряжения
Перевод значения канала в напряжение
ADC_in - напряжение измеренное с делителя напряжения (узел[5])
Коррекция через делитель напряжения
Вход подключен через делитель R1=221кОм и R2 = 27кОм, переводим в Ом,
добавил смещение (-0.5) для подстройки измерений.
Таблица замеров напряжения от 14.5 вольт до 7 вольт.
Прикладываю видео-тестирования прохода по спаду напряжения, а также видео-тестирования, сброс напряжения и уход в сон микроконтроллера при низком напряжении ссылка [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_тестирование_ Adc_VoltageControl]
Реализация модуля proj_main.c (Главный метод)
Данный модуль объединяет несколько подсистем:
Кнопка управления (одиночное и двойное нажатие);
Контроль напряжения питания через АЦП;
Звуковая индикация состояния;
Автоматический переход в сон при низком напряжении.
proj_main.c
Вывод
Данная система контроля над блоком питания реализует:
Обработку кнопок с фильтрацией дребезга, с поддержкой короткого/долгого/двойного нажатия и отпускания;
Мониторинг напряжения через АЦП с защитой от просадок и автоматическим отключением при критическом низком уровне;
Звуковая индикация (короткие, двойные сигналы) для информирования пользователя о событиях;
Энергосбережение переход в режим STOP и пробуждение по прерыванию.
Систему можно использовать как основу для портативных приборов, автономных устройств и встраиваемых систем, где важно одновременно удобное управление и защита электроники.
Если статья показалась Вам интересной, буду рад выпустить для Вас еще множество статей исследований по всевозможным видам устройств, так что, если не хотите их пропустить – буду благодарен за подписку на мой ТГ-канал: https://t.me/ChipCraft.
PG_HAZEL : Чек-лист проверки инфраструктуры по результатам нагрузочного тестирования СУБД - VMSTAT
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Задача
Подготовить список стандартных проверок на соответствие инфраструктуры заданным нагрузкам в ходе нагрузочного тестирования СУБД, по результатам анализа показателей vmstat:
IO
CPU
RAM