Ничего не ждите.
И вы никогда не будете разочарованы...

Меню навигации для мобильных

Показометр на STM32 для блока питания

Автор zenon, 22 Март, 2024, 18:44

« предыдущая - следующая »

zenon

Соберу все-же показометр.
Схема с ОУ из старого проекта. Vref нет, отталкиваться надо от AVDD.
Перенесу из тини кнопку и вентилятор сюда.
↓ спойлер ↓
avf0-01.jpg
[свернуть]
https://github.com/minamonra/

Slabovik

AVDD - это так себе. Для показометра наверное хватит. Основная проблема будет - дрейф показаний в зависимости от температуры. Дрейфовать будет TL431. Способ уменьшения дрейфа - установка более прецизионного регулятора. Например, поискать TL431 с буквой 'B', но на деле там ещё нюансы есть, типа параметра "Load regulation" и подобное...
Также было бы недурно Vcc и Led индикатора (особенно Led) развести от другого регулятора, чтобы на регулятор на U1 была нагрузка поменьше. Но это может быть вторым шагом, сразу не обязательно делать)

Я смотрю, что-то T2 ничего не коммутирует. "Сопротивление бесполезно" :)

А вот L1 я бы не ставил. Рядом за стенкой силовой транс с большими токами и полями, и L1 будет весело ловить от его "на водку". Лучше резистор на несколько Ом. Впрочем, если L1 будет экранированной (с замкнутым магнитным полем), то проблема не возникнет.

Ещё круче на AVDD привинтить какой-нибудь REF, например REF196 (доставаем вроде). Надо только убедиться, что потребление по AVDD не превысит его возможности - тут понадобится что-нибудь помощнее, а я не помню, что там на 3.3 вольта есть...

У операционников коэффициент усиления надо посчитать. Там ещё обязательно надо выдержать R11=R12, R10=R16, R14=R15, R13=R17, при этом сразу надо бы озаботиться, чтобы резисторы эти не хуже 1% были. При этом желательно тонкоплёночные (Thick Film) - у них температурных уход меньше.

Коэффициент усиления надо посчитать, какой необходим. Пока забъём на напряжение питания...

На входе АЦП надо 3,3 вольта при максимальном напряжении/токе. Я смотрю, максимальное определено как 40 вольт. Я бы сделал 40,95 вольта :) для удобства целочисленной математики. При этом один разряд АЦП будет в точности равен 10 мВ.

На выходе подстроечный делитель R18/(0,5*R20+R21)
Значит, на выходе ОУ надо получить: 3,3*(R18+0,5*R20+R21)/(0,5*R20+R21) = 3,64138 вольта

40,96 соотносится с 3,64138 как 11,2457 - именно таков должен быть коэффициент усиления ОУ по напряжению. Надо, чтобы R11 R12 соотносились с R10 R16 на это число. Например 2,4к и 27к (соответственно, 24к и 270к но с высокими сопротивлениями опять надо смотреть, то там с токами на входах ОУ - могут быть сюрпризы).

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

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

Расчёт усилителя с током аналогичен. Надо выбрать предел, желательно чтобы 4096 отсчётов ложились нацело на диапазон. Например, можно 1,5 мА на отсчёт принять - будет предел 6,1 ампера.
И тут уже нужно потщательнее регулировку на выходе посчитать - чтобы отклонения токоизмерительных резисторов можно быть гарантированно компенсировать.

Также надо выбрать ОУ. R2R при таком питании - однозначно. Но надо ещё и минимизировать напряжение смещения. У этих ОУ, что на схеме, оно весьма велико. Целых 3,5 мВ (примерно). Это значит, что это напряжение смещения будет усилено согласно заданного резисторами коэффициента усиления и будет подано на выход. Если для усилителя в канале напряжения это ещё как-то пофиг, то в усилителе канала тока это критично, т.к. коэффициент усиления большой. Щас глянул - какой-нибудь OPA333 наверное неплохо пойдёт.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Да, T2 я круто подключил-с. :)
Тут я не буду добиваться супер точности, из ОУ есть либо тот, что указан, либо 6002 (у него input offset max 4,5), оба заявлены как R2R.
Про OPA333 буду иметь ввиду, но собираю из того, что есть.
Разобрался сейчас с выбором канала АЦП, вот тут есть от чего оттолкнуться (https://github.com/tkcheng/stm32f030-discovery/tree/master/), но "из коробки" не заработало, надо переделать немножко.
Тут ещё вот какая штука с резисторами подстроечными, в таком формате (smd мелкие 3х3 мм) есть только 5 кОм, и они уже на плате.

На фото один канал в воздухе, другой замкнул на землю, "сырые" данные с АЦП.
↓ спойлер ↓
1711442942749.jpg
[свернуть]
https://github.com/minamonra/

Slabovik

Да, делитель у TL431 тоже как-то неправильно номиналы стоят.
Отношение верхнего к нижнему должно быть

R4=(3,3*R5/2,495)-R5

Хорошо подходит пара R5=62кОм, R4=20 кОм. Естетственно, точность должна быть.
Конденсатор C1 надо подобрать минимальной ёмкости при гарантированном отсутствии возбуждения TL431
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

На выходе БП, перед вольтметром ставлю обычно нагрузочный резистор 2-х ваттный, тут такое решение не очень подходит, может на транзисторе источник тока сообразить?
https://github.com/minamonra/

Slabovik

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

zenon

А как ты считаешь, если напряжение питания 3,3 но учитываешь на выходе 3,6 с копейками вольт?
Или верх "срежется" делителем?
Так-то с натяжкой и 100k/9,1k тоже подходит 10,99 кус получается, вполне можно попасть в диапазон, или делитель 8,6k поставить, на выходе подстроить.
https://github.com/minamonra/

Slabovik

#7
Питание ОУ должно быть от входящих 5 вольт. Тут без вариантов. Можно пофильтровать через RC, потребление маленькое. Качество питания, в отличие от опорника АЦП,тут второстепенно.

По-хорошему, надо бы для ОУ и отрицательное питание, вольта в полтора. Тогда проблемы с R2R снимаются и выбор ОУ становится много шире. Проблемы в том, что у R2R "притягиваение" выходов к шинам питания у них в любом случае идёт неохотно на последних милливольтах и это тоже будет искажать показания.

А напряжение на выходе ОУ =\= напряжению на входе АЦП - ты же сам туда делитель поставил  ;)

Если хочешь оставить Ку 100/9.1 - пожалуйста, но надо уточнить делитель на выходе ОУ. При расчёте учитывать половину сопротивления подстроечника, а пределы регулировки по нулевому и полному его сопротивлению. Регулировка должна перекрывать возможные отклонения опорника (2%) и коэффициента усиления ОУ (та же пара процентов). В итоге +/- процентов пять должно быть. Более 10 тоже не рекомендовал бы, ибо а) подстроечники не стабильны б) будет чрезмерной острота настройки.

зы: для приведения коэффициента усиления, параллельно 9,1 кОм можно подпаять 390 кОм - будет тютя-в-тютю.
Также можно слегка пересчитать делитель на выходе. Я бы предпочёл делитель, т.к. я его не считал - взял твои данные. Мне видится сопротивление на выходе ОУ в 1,5 кОм слишком маленьким. Хотя... надо ещё частотку прикинуть... А R24 R25 зачем?

зызы: цены на SMD подстроечники какие-то запредельные...

Вот, что получается с имеющимися номиналами

table.png

В регулировку попал, но с 100/9.1 кОм, полагаю, будет мимо. Проверим

Табля.png

Ну, да, мимо. Чтобы было нормально, надо R18 1,8 кОм ставить, с 1,5 кОм получается завышено.
А глянь первый вариант. Фишка такая, что при увеличении R18 увеличивается диапазон регулировки. Плюс-минус три процента должно с лихвой перекрывать неточности и ещё не быть слишком большим. Правда, там получается верхнее напряжение на выходе ОУ опять близко к верхнему рейлу, но десятая вольта для R2R ещё нормально.

Вот прикольно

Табля-оптима.png

Но тут R11 R12 из двух последовательно составлены. Чувствуешь, какая необходимость в точности? Резисторы с допуском 5% однозначно не проходят, не вырулить с ними...

Да, кстати, ICL7660 легко сделает из +5 минус 5 - будет двуполярка для питания ОУ.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Резисторы 1% есть, много, но китайские :)
Сейчас на напряжение поставил 27/2,4 - без делителя на выходе, вывожу сырые данные, без пересчёта, питание ОУ пока не перекидывал на 5 вольт, линейность какая-то должна быть? Те, примерно поставил 10 вольт, отнял от показаний АЦП X, чтобы 10 = 1000 было, так вот внизу уплывает вниз, вверху вверх...
ы. Да, smd подстроечники у нас продают по каким-то странным ценам, на али брал за недорого.
https://github.com/minamonra/

Slabovik

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

zenon

Мы тут чистыми показаниями почти попали в занчения  напряжения, вопрос в линейности их, а так да, конечно умножать/делить.
https://github.com/minamonra/

Slabovik

Они не почти. Они - ровно то, что надо.
Не, конечно если надо другой диапазон - тогда будет неровно, а сейчас 10 мв на отсчёт - это очень удобно.

Погрешность дают:
отклонение Uref внутри TL431 - 1%
отклонения резисторов делителя TL431 - сам посчитай :)
отклонения резисторов обвязки ОУ - даже при 1% резисторах всё грустно
напряжение смещения и входные токи (ну тут славненько - они микроскопические) ОУ

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

Ну и плюсом - отклонения твоего измерительного прибора. Надеюсь, ты не думаешь, что при показаниях 10.00 на приборе реальное значение именно такое  ;)  Увы. Для настройки измериловки надо иметь ещё более точную измериловку... замкнутый круг...

Повысить точность можно применением прецизионных компонент, например инструментальных ОУ с "Zero Drift", прецизионного источника опорного напряжения. Инструментальные ОУ удобны тем, что по факту там три ОУ внутри, но все нужные резисторы внутри и очень точны, токи же по обоим входам минимальные (нет торчащего наружу делителя ООС). Коэф усиления задаётся тоже одним резистором. Минусы - коэф усиления меньше 1 не получается - надо делить входной сигнал снаружи резисторами, следовательно, точность падает из-за них.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Цитата: SlabovikНадеюсь, ты не думаешь, что при показаниях 10.00
Вроде не первый год знакомы, а так плохо думаешь обо мне... :(
Всё хотел какую-нибудь точную опору в хозяйство взять, да что-то никак, ну или аппу какую-нибудь, но дорогие они...
Цитата: SlabovikОни - ровно то, что надо.
Воот, а у меня в середине попали, а внизу и вверху уехали очень сильно.
https://github.com/minamonra/

Slabovik

#13
Это я не думаю плохо, а пользы для на всякий случай (нас читают и уверенные обязательно есть, к бабке можно не ходить  :-\ ). Бывает, что и сам попадаюсь. Никому верить нельзя  ;)

Уехали - это потому что отнимал. Если у тебя показывает 120, а надо 100 и ты вдруг от 100 отнимешь 20, чтобы было 100, то когда будет ожидаться 50 вдруг окажется, что показывает 40 (60-20), а когда будет ожидаться 200, покажет 220 (240-20). По-моему так.

Очень сильно - это сколько? При установке на входе нужного напряжения надо проконтролировать, что там на выходе ОУ согласно его коэффициента усиления. Вдруг там что-то не правильно?

Настраивать надо по двум точкам, по верху и по нулю. По верху даём строго выверенное напряжение, не обязательно 40,95, но в районе 35-40 и выставляем подстроечником показания на АЦП. По низу убеждаемся, что при нуле показывает ноль или рядом. Никакой нелинейности у ОУ нет, если туда в цепи не введены нелинейные элементы. А они не введены.

А что со стабилизатором? Выдаёт стабильно то, что надо (3,30), не возбуждается? ОУ таки переключи на питание от 5 вольт.

Пересчитал с уточнением обвязку для TL431. В общем, десятки кОм наверное не стоит ставить. Из-за тока в вывод Ref слегка начинает повышать. Получается, что оптимальны 2,0 кОм и 6,2 кОм
Табля-расчёт-TL431.png

И для такого расклада наиболее примемлемой (покрывающей разброс возможностью регулировки) получается вот такая обвязка ОУ
Табля-расчёт-ОУ_по_V.png
105,6 - это два последовательно включенных 100к и 5,6к
Осталось посчитать усилитель для показаний тока. Диапазон какой брать? 10 ампер не слишком ли?  Будет 2,5 мА на отсчёт. Если взять 2 мА на отсчёт, будет 8 ампер.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

#14
Так, запутаюсь сейчас, схема от которой дальше отталкиваюсь.
↓ спойлер ↓
avf0-02.jpg
[свернуть]
Переделал ещё немного плату, не айс конечно, но более-менее, четыре кнопки, две из них на коннекторы, I2C наружу, датчик температуры и PWM тоже, вывод пина на вкл/выкл БП, сведодиодов пару, чтобы были.
Думал пинов много, на самом деле остались свободными только два...
↓ спойлер ↓
avf0-03.jpg
[свернуть]
Вчера прицепил делитель на 431 20k/62k, конденсатор 1 нан, на транзиторе показывает 3,302, а на AVCC чуть-чуть меньше, 3,298 увидел.
Мне тоже показались великоваты резисторы.
Припаял делитель на выход ОУ напряжения (такой как сейчас на схеме) 680/(5k+2k), вот после этого почти точные показания стали, вверху немного уплыли, я думаю из-за питания 3,3, на новой плате питание уже от 5 вольт будет.
ы. Ток пусть 8 ампер будет, а файликами расчетов не поделишься?
https://github.com/minamonra/

Slabovik

Показания поверху конечно уплывут - выход ОУ просто упрётся в шину своего питания.

Давай сразу покрутим косяки.
R1 3кОм - это многовато. 5,1-(3,3+0,6)=1,2 вольта. Миллиампера полтора в базу транзистора и чтоб TL ещё осталось... Надо Ом так 470 поставить.

R6 R7 - да, наверное стоит уменьшить на порядок. Там дело ещё в том, что ток Ref слегка зависит, а на R6 он вызывает лишнее падение, которое суммируется с выходным напряжением. Пусть будет меньше. Поэтому 2,0к и 6,2к. Напряжение маленькое, ток небольшой - нормально.

Кстати, измеряя падение на R36 (лучше осциллографом, чтобы колебания видеть), можно узнать, сколько АЦП потребляет. Это на перспективу поставить туда REF196.

Уменьшение R28 R31 повышает частоту среза фильтра с C16. Она получается в районе 1 кГц. imho высоковато. Мне кажется, был метод тыка, не? Фиг с ней, типа нелинейностью АЦП, а ручками сам выход ОУ напрямую промерял?

Есть предположение. Проверь конфигурацию выводов АЦП. Не осталось ли там к ним подключено чего не надо? Я имею в виду настройки внутри чипа. И да, напомни, каково входное сопротивление АЦП?

R15 R16 R17 - это местные резисторы? В блоке же есть нужное. Или это из блока?
Я к тому, что местные ставить не надо, это плохо. Надо использовать те, которые уже в блоке есть. По схеме я смотрел, там их 10 шт параллельно. Какое там сопротивление?

Таки предусмотри либо параллельное включение из двух резисторов на места R19 R26 либо последовательное на места R20 R21. То же самое можно сделать для канала по току.

Вот расчёт усилителя для тока

Табля-расчёт-ОУ_по_I.png

Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Сопротивление входное у него указано 50 кОм.
И вот такая картинка есть, которую пока не совсем понял. :)
↓ спойлер ↓
avf0-03_stm32f030_Rain.jpg
[свернуть]
Шунты местные, в блоке не всё так просто, там навесом всё, я ж плату делал шунтов таких ещё не было, и настройка тока там по месту, надо думать... :)
ЦитатаМне кажется, был метод тыка, не?
Да, он самый.
Цитатавыход ОУ напрямую промерял?
:-\
Цитатапредусмотри либо параллельное включение из двух резисторов на места R19 R26
Уже только бутербродом.
https://github.com/minamonra/

Slabovik

@$%  :-[

Ну её нафиг, эту STM... Дурацкие регистры, дурацкие частоты. Гоняем те же 8 бит только в 32-разрядных регистрах и 32-разрядными командами. Сказать "неудобно" - это как ничего не сказать. Забиваем те же гвозди, но микроскопом...

MCP320x - и вперёд! Да-здравствует отвязка от проца!

Давай копнём на тему АЦП. Надо документ поднять, как он устроен. Во-первых, его входное, получается, зависит от частоты выборок. Чем чаще - тем меньше. Можно думать, что это он разряжает конденсатор выборки-хранения перед взятием очередного значения. Метод борьбы - снизить количество выборок в секунду. Даже 1000 выборок в секунду для измерителя вполне достаточно и ещё останется. Это позволит ёмкость на выходе ОУ полностью восстанавливать. Но не ясно, эти 50 кОм всё время подключены, или только на время выборки для хранения - вот в чём вопрос.
Во-вторых, если выясняются плохие новости, то схему с ОУ надо выкидывать и ставить нормальный инструментальный без всякого делителя - выход прямо на АЦП. Либо просто повторитель на ещё одном ОУ (который добавит ещё и своё смещение). Иначе такое входное низкое никак не побороть.

Теперь контрольный вопрос: каков режим работы АЦП сейчас?

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

zenon

Ну, я уже свыкся с стм-ками, да бесит многое, но что есть - то есть, брать в руки avr уже нет почему-то желания.
ЦитатаMCP320x - и вперёд! Да-здравствует отвязка от проца!
Вот, лежит уже очень давно, руки никак не дойдут, даже не распечатал:
↓ спойлер ↓
1711533812758.jpg
[свернуть]
Сейчас опрашиваю АЦП медленно, раз в 50 мсек выбрал канал, получил значение...
https://github.com/minamonra/

Slabovik

#19
Мне пока что неясно такое
ЦитатаТут есть один (или не один?) весьма странный и не очевидный момент: Калибровку надо запускать до включения АЦП установкой бита ADC_CR2_ADON. Почему так сделано не совсем понятно. Кстати калибровка должна производиться всякий раз когда АЦП включается.
Документы по STM разбросаны, пока найдёшь нужное...

Получается, это "время выборки" - время, на которое подключается входное 'устройство выборки-хранения', которое считывает уровень с физической ноги и хранит его на время преобразования. Значит, надо поставить побольше. Чисто логически могу предположить, что когда выборка не производится, потребления по ноге тоже нет. Значит, мысль об ограничении количества преобразований правильная. И низкое сопротивление (получается, по переменному току) обеспечивает конденсатор на ноге.

Вот здесь годные уроки на русском: http://mypractic.ru/urok-26-acp-stm32-obshhie-svedeniya-rezhimy-ustanovka-konfiguracii-cherez-registry-cmsis.html

Всё-таки, зачем R34 R35? Мы такое как-то ставили для введения дизера (imho успешно, по крайней мере у меня было так). Здесь это лишнее. С16 и С17 должны быть подключены непосредственно между своими входами и выводом аналоговой земли (если есть), либо Gnd. Не "где-то там на землю", а прямо вот рядышком, кратчайшим путём.

зы: мне тоже импонирует Segger, но работа с железом через Си и абстракции - это какое-то издевательство...

А во ещё: MCP3221 : интерфейс i2c (отвязан от питания процессора), питается от Reference, потребление микроскопическое, пятивыводный SOT23... А то мне вот реально неприятно, когда аналоговая земля там же, где и цифровая...
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Да, R34 R35 рудементом подтянулись.
Уроки эти видел, хорошие, надо повникать, да ещё и примеры на cmsis, hal терпеть не могу, код превращается в такую непотребщену... ужас.
Проблема только в том, что всё в основном для F1, а у меня F0, но многое одинаково, ну почти.
Про I2C АЦП я выше писал, INA226 пара модулей приехать скоро должны, для возможности их подключения и вывел квадратную шину наружу. Сам модуль на плату БП по хорошему поставить.
https://aliexpi.com/1yIU

ы. Сделал другую платку...
https://github.com/minamonra/

Slabovik

Даже пока не знаю.
Вообще, порядок действий должен быть таков.
Первое - расчёт. Делается в любой табличке (Ёкселе или Кальке). Тот, что я показывал - он спонтанный, там нет ничего, что надо было бы сохранять. Формулы униерсальны - из забиваешь, располагая как считаешь удобным. И, подставляя значения и ориентируясь на результаты, получаешь желаемое.

Второе - поузловое тестирование. Умалчивается обычно, но самое первое, что надо тестировать - это питание. Далее - узлы по отдельности. Обычно начинают с тех, которые "ближе" к выходу, но на деле не обязательно. Здесь фактически три узла. Узел ЦП-Индикатор считаем протестированным, остаются два: узел приведения измеряемой величины (это наши ОУ) и узел АЦП.

Узел приведения - подаём на вход напряжени - смотрим напряжение на выходе, сопоставляем, проверяем соответствие расчёту.

Узел АЦП - также подаём на вход - смотрим, что он там напреобразовывал. Проверяем.

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

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

zenon

#22
Вчера вечером добрался до новой платки, SPI отказался работать, хоть тресни, пришлось решить кардинально, перепаял процик. :)
Вообще феном он был гретый уже раза четыре точно...
Последовательно резисторы в усилители я точно не поставлю, только параллельно. 105,6 кОм подобрать не получается.
Оставил пока 27k/2k4.
Для тока ставлю 47k/1k. (хотя мне кажется лучше 33k/1k с делителем на выходе 1k/5k+10k.
В твоих считалках первые R1 R2(1/2) R3 что это, не пойму?
https://github.com/minamonra/

Slabovik

Это делитель на выходе. Номера просто по порядку сверху вниз. Первый - верхнее плечо, второй и третий - постоянный и подстроечный.

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

zenon

Цитататоропишься ты платки делать
Я работаю над этим, сейчас уже лучше. :)
https://github.com/minamonra/

zenon

Код для прерывания сообразил.
void adc_init_42(void)
{
  RCC->APB2ENR |= RCC_APB2RSTR_ADCRST; // Enable ADC clock 
  ADC1->CR &= ~ADC_CR_ADEN;            // turn off ADC: 0
  
  ADC1->CR |= ADC_CR_ADCAL;             // start ADC calibration
  while (ADC1->CR & ADC_CR_ADCAL)   {}; // ждем когда откалибруется
  ADC1->CR |= ADC_CR_ADEN;              // power up ADC
  while (ADC1->ISR & ADC_ISR_ADRDY) {}; // wait until ADC ready
  
  ADC1->CFGR1 |= ADC_CFGR1_CONT; // Continuous conversion ADC_CFGR1_SCANDIR;

  ADC1->SMPR |= ADC_SMPR_SMP_0 | ADC_SMPR_SMP_1 | ADC_SMPR_SMP_2; // Время выборки (Select a sampling mode of 111 i.e. 239.5 ADC clk to be greater than 17.1us)  

  ADC1->CHSELR = ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL6;
 
  ADC1->IER |= ADC_IER_EOCIE;     // Enable ADC interrupts
  NVIC_EnableIRQ(ADC1_COMP_IRQn); // Enable IRQ on NVIC
  ADC1->CR |= ADC_CR_ADSTART;
}
И само прерывание (если отселектили два канала, то поочереди в прерывании появляются значения);
uint8_t curr_adc_channel = 0;
// ADC1_IRQHandler
extern void ADC1_COMP_IRQHandler(void)
{
 if(((ADC1->ISR) & ADC_ISR_EOC) != 0)
 {
 ADC1->ISR |= ADC_ISR_EOC;
 if (curr_adc_channel == 0) current = (uint16_t) ADC1->DR;
 if (curr_adc_channel == 1) voltage = (uint16_t) ADC1->DR;
 curr_adc_channel++;
 if (curr_adc_channel > 1) curr_adc_channel = 0; 
 }
}
https://github.com/minamonra/

Slabovik

Цитата: Slabovik от 28 Март, 2024, 10:31INA226 - хорошее решение. Но...
'но' - оно очень толстое. Не может INA226 стоить столько, сколько по той ссылке на Aliexpress: https://www.findchips.com/search/ina226
Вывод: на Ali продаётся подделка. Какого она качества - вопрос открытый...
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Тут я согласен...
//офф: недавно разглядывал IGBT "толстые" и дорогие, пришли в закупке, взгляд упал на ноги, каково же было удивление, что ноги приварены контактное сваркой, а сами транзисторы были с распая... Приварены были кстати плохо - у некоторых отваливались при первом сгибе.
https://github.com/minamonra/