Доброе утро, в мостовых или полу мостовых ключах основная проблема в том, что время отключения силовых элементов(* от нс до ~1 микросекунды) после того как управляющий сигнал будет снят с управляющего электрода. Если пренебречь этим, то фейерверк от встречного включения испортит настроение и будут финансовые потери от таких экспериментов. Гарантированная пауза или "мёртвое время" между переключениями верхних и нижних ключей- просто необходимы (те самые 100 нс ...1 мкс) в зависимости от типа ключевых элементов. Спасибо за вашу работу по созданию роликов, с уважением к вашей работе. Есть ещё некоторые проблемки, но их можно минимизировать схемотехническими решениями.
@@VladimirMedintsev Здравствуйте, возможно этот вопрос уже задавался: при настройке таймера в кубе, в настройках каналов есть такой пункт Output compare no output и pwm generation no output. Я так понимаю, в этих режимах будут просто вызываться соответствующие прерывания? И если с Output compare no output ещё более менее понятно (вызываем прерывание при совпадении и делаем что-то), то смысл второго режима мне не понятен совсем: Зачем генерировать шим без вывода его "наружу"? В reference manual и даташите не нашел об этом внятной информации, а в интернете только на форумах такие же вопросы без ответов.
@@dmitriibannikovasx Это чтобы сделать просто обработчик прерывания. Мы никакой шим никуда не выводим а просто получаем вызов прерывания и там творим что хотим.
Владимир, спасибо за видео. Все очень понятно, доступно и наглядно. Хотелось бы увидеть процесс воплощения в железе. С вашим умением рассказать просто о сложном это был бы лучший цикл о силовой электронике.
@@VladimirMedintsev пусть это будет не про устройство, но по крайней мере хотелось бы увидеть ваше видение схемотехники с ее подводными камнями, и вопросы разводки печатной платы. Но в любом случае спасибо.
Огромнейшее спасибо. У меня верхние ключи управлял драйвером 50Гц, а нижние шим. и раскачка на транзисторах. посмотрев Ваше видео - решил вернуться и доделать (12в - 220в).
Отличное видео для начинающих. Недавно использовал в таком режиме, пришлось самому додумывать) еще бы раскрыть тему работы такого преобразователя на индуктивную нагрузку... О снабберах видимо и прочем
И что дальше? захочится частотник а там скалярное управление, и нужно еще и амплитудой рулить, а для этого нужен уже отдельный "DC/DC" если не хотим терять разрешение по управлению.
@@jetbrain9115 я с автором согласен, ведь и так уже все понятно.. я частотник уже на 103 делал, и это скорее все как повторение. Не вижу проблемы, включаете еще два выхода шима тактируете настриваете. В прирывании прописываете из тогоже масива коэф. Но только со сдвигом на фазу 120градусов. Тобищь если в масиве 500 точек то на (i+166)/500 или же i+332 для 3 фазы.. и все если вы не понали ход мысли то смотрите еще видео пока не поймете.
Спасибо, ранее я не курил нижние ключи или верхние а теперь всё ясно благодаря вам теперь я в теме хоть давно не щупал затворы так как сам затворник! Очень классно у вас получается описывать весь процесс а особенно на примерах! Хороший вы человек (делиющийся) своим опытом и практикам с остальными не достаточно опытными.... Можете пояснить работу BLCD двигателя в будущих роликах или упомянуть о них, как они работают в режиме генератора, как они генерят синус и как он получается из постоянных магнитов ещё и на 3 фазы, как правильно и каким ваттметром мерить правильно ток фазы а вернее фазный ток? И вообще реально ли получить из двигателя BLDC полноценные 3 фазы с частотой пригодной чтоб запитать 3х фазный мотор 220в 50гц.?
1. Большинство осциллографов позволяют цепляться синхронизацией за импульс заданной длины. 2. Синус можно выплюнуть через DMA и в прерывании по окончанию передачи переключить фазу. 3. Можно вообще обойтись без прерываний, правда памяти потребуется побольше. Для этого нужно загуглить регистр TIMx->DMAR и его управляющий регистр, который позволяет творить удивительные вещи, если включить смекалку. В качестве примера - можно определить характер генерации импульсов на всех четырех выходах таймера простым массивом структур в памяти. Структура содержит несколько полей int32_t, отражающие содержимое интересующих регистров. Далее, настраиваем ДМА. Адрес памяти указываем на начало массива структур. А в качестве адреса периферии указываем регистр TIMx->DMAR. В управляющем регистре указываем количество обновляемых регистров и смещение относительно первого регистра таймера. В качестве события DMA можно указать переполнение таймера. Если мы задали 4 регистра, то таймер по событию сгенерит сразу 4 запроса DMA и раскидает данные по четырём регистрам.
Один таймер, два канала, 4 комплектарных выхода. "Выключать" канал записью числа выше диапазона счёта. Если хочется всё через дма - то у таймера есть аппаратное управление каналом дма. Где можно указать количество "ударов" срабатываний дма на инвент, указать начальный адрес - куда нужно натравить дма, указать смещение в байтах на вторую и последующие записи, и разрешить для дма циклический режим. Таблица немного вырастет в размере, и будет выглядеть иначе - в первой половине шим0-овер-шим1-овер-шим2..., во второй половине овер-шим0-овер-шим1-овер-шим2... В случае с тремя фазами таблица растёт ещё больше, но полная автономность остаётся. После старта всё будет колбасится совершенно автономно, без нагрузки на процессор. Так-же для дма желательно разрешить использование fifo, а для таймера режим фоновой загрузки. И реализовать физически контроль по превышению тока - аппаратный внешний триггер (на паре транзисторов или компараторе) , с подключением на линию ETR таймера - отключать все выходы. Это чтоб не сгорело.
4:45 А вот в этом месте я порадовался, что в своё время купился на рекламу и приобрёл сей девайс (ну ладно, ещё раньше), ибо лезть на Али и узнавать, "обо что оно встанет" сейчас без корвалола не рискну...
К таблице можно добавить линейную интерполяцию, вообще хорошо получается, гладкий синус даже при сотне ключевых опорных точек. Из математики только одно умножение добавляется.
Очень познавательно как всегда! Уважаемый автор, Вы сделали все верно, заранее вычислив и поместив значения sin(n) в таблицу. Это гармоническая симметричная функция поэтому таблицу можно еще раз сократить, т.е. Вы уже ее уменьшили с 960 до 480 значений, взяв положительную полуволну... Предлагаю Вам уменьшить ее до четверть периода (240 значений), например, до поместив значения в таблицу, соответствующие диапазону sin(n) принадлежащим [0, pi/2]. Этого вполне достаточно чтобы построить необходимое количество периодов функции sin(n) и при этом сэкономить память микроконтроллера.
А зачем нам экономить память? Если я сокращу до четверти волны то сразу получу весьма неприятные последствия. Или лишний if в каждом вызове прерывания таймера 6. Или необходимость пересчета таблицы при использовании DMA. На мой взгляд экономия памяти этого не стоит.
@@VladimirMedintsev пересчет таблицы не потребуется. Все что нужно будет сделать это в точке sin(x)==pi/2 начать читать таблицу значений в обратном направлении.
Stm32g4 лучше подходит для преобразователей, тк обычно нужна ещё и обратная связь по напряжению и иногда по току. Всеми необходимыми блоками он обладает. Если конкретно это Hi Resolution PWM, dac, adc, opamp. 3p3z
Спасибо за видос, помогли с быстрым стартом по шиму! Пару вопросов если не сложно: 1. Если мы захотим менять частоту модулирующей НЧ (которая в табличке) нам можно прескаллером таймера это делать на ходу? 3. Для трехканального шим нужно использовать три таймера, один мастер и два со смещением?
Запись в регистр сравнения CCR можно делать при помощи макросов define HAL, я обычно так и делаю. Или они тоже долго выполняются? Для таких вещей f3 самая пушка, если, конечно, не нужен Ethernet на борту кристалла. В комментариях уже отметили. Таймер 6 можно исключить. DMA на таймер 2, оно там как нибудь само будет работать отлично)). В прерывании DMA можно пересчитать таблицу синуса для скалярного управления. Спасибо за то что делитесь опытом. Данные тонкие разделы знаний разработчики и фирмы уже стараются держать внутри избы.
Добрый день большое спасибо за проделанную роботу на вашем примере я прекрасно понял что такое модифицированный синус и действительно практично то 2 транзистор пары просто открытый надёжность в простоте но очень интересна модель вашего осцилографа, чтобы знать куда смотреть при выборе спасибо за ранние
48 кГц мало? Думаю тут все же стоит учитывать , что мы строим на этих мосфетах. Вот например для силовых выпрямителей (зарядки для ЕВ) на мощности 30квт - 200квт игбт транзисторы делаются с рабочей частотой максимум 20кгц. Недавно (ну относительно) в эту область начали внедрять SiC мосфеты, и у них у же частота рабочая свыше 20кгц, в кратце это крайне перспективная разработка. В общем частота ШИМ от многих параметров зависит, и в основном от параметров транзисторов
В частотниках и того меньше, максимум килогерц 10 обычно а по умолчанию 2-3 кГц стоит. Ведь дело не только в ключах, а и в нагрузке. Железо в двигателе аж никак не предназначено для работы на высоких частотах.
Доводилось делать управление силовым асинхронником на XE169. Позже когда изучал STMы сравнивал возможности их PWMов с контроллерами семейства XE166. Есть конечно недостатки у STMов. Из того что тут вспомнилось, мёртвое время формируется не тактами таймера в отличие от XE166. Для мёртвого времени свой делитель и такты его получаются из входной частоты таймера. Ещё припоминаю вроде нет прямого управления выходным сигналом.
В подтверждение, один из примеров www.digikey.com/en/maker/projects/getting-started-with-stm32-timers-and-timer-interrupts/d08e6493cefa486fb1e79c43c0b08cc6
Спасибо! ЕМНИП есть драйвера полумостов, которые верхний ключ открывают энергией из бустрапного конденсатора. так для зарядки этого конденсатора нужно замыкать нижний ключ. поэтому логично разбивать не левые и правые, а нижние и верхние. при этом нижние шимовать. так же сохранится логика при переходе на трехфазный инвертор.
Еще раз. В электронике есть сотни путей получения необходимого результата. Они все правильные. Вы можете выбрать тот вариант который подходит вам под ваше железо но это не значит что логично делать вот так и только так.
Спасибо большое за ваши видео! Всегда что-нибудь, но новое из них подчерпнешь! Можете ли будущих видео осветить управление шаговыми двигателями с помощью A4988 и one pulse mode? Почему-то данный режим через hal так и не удалось запустить...
Здравствуйте Владимир, спасибо большое за обясняюший ролик, хотель спросить а обязательно чтобы у всех таймеров был одинаковые шаги, может можно один из них сделат больше или менше шагов ?
Владимир, а как по поводу того, что шимировать лучше нижние ключи. А верхние использовать как реле. Именно так микросхемы драйверов полумоста и делают - шимировать от 0В до 9В намного легче и надежней чем от 24В до 31В (если батарейка 24В)
Ну это все от драйверов зависит. Никто же не говорит что надо делать только так и никак иначе. Хотите, подавайте PWM на нижние ключи, суть от этого не меняется.
@@VladimirMedintsev я практик. и делал и так и так. Если шимировать верхние ключи - они греются мама дорогая....(возможно не у спевают перезаряжаться конденсаторы затворов). А если в тех же условиях (схема ,частоты, плата, компоненты) шимировать нижние - радиатор не нужен - достаточно пада на плате.. Спасибо за ответ. И, если позволите вопрос (просьба) - пояснить как менять firmware stm32 через порт (UART? USB etc). может сделаете такое видео....
@@serhiiplys4588 По поводу замены прошивки есть на канале видео где очень подробно про это рассказано - ua-cam.com/video/FuuPoJVqfGk/v-deo.html Тут на канале много видео... Что касается верхних и нижних ключей. А вот как вы поступите если надо преобразовывать 400 вольт? А почему вверху нельзя применить нижний ключ? Нижний и дешевле. Ну как бы будет когда-нибудь про это видео на канале.
@@VladimirMedintsev увидел видео! благодарю. как раз сейчас такая задача у меня стоит. По поводу построения силовой части интерторов - до сих пор копья ломаются))) значит и мы продолжим попозже)) Благодарю за видео!
Супер :) Спасибо. Я совсем новичок, многое не до конца понятно, но суть ясна. У меня вопрос немного не по теме. Заглядываюсь на осциллограф ADS1013D . И мне очень интересно, годится ли он для исследования подобных сигналов как в этом видео. Буду очень благодарен за ответ.
@@VladimirMedintsev а еще удобнее делать полную таблицу синуса для нескольких плеч моста со смещением фазы и обновлять все нужные регистры через дма бурст. Получается универсальное решение под 2х и 3х фазные схемы.
@@AE-systems Дело в том, что видео это ну должна быть серьезная тема. А тема DMA + TIM это реально 2 строки кода. 30 секунд, и я не могу придумать чем остальное время ролика занимать. Люди же смотреть приходят.
@@philkulibin2602 Да как угодно можно эту таблицу строить, хоть на четверть волны, хоть на полуволну. Ну нету никаких требований на эту тему. Построите на четверть - получите лишний if в коде. Для обьяснений и работы DMA проще делать на полуволну.
ИИ предлагает вариант - ... float amplitude = 0.5; // Пример: начальная амплитуда равна 0.5 (50%) Здесь переменная amplitude представляет собой значение амплитуды в диапазоне от 0.0 до 1.0. В обработчике прерывания TIM6_DAC_IRQHandler используйте переменную amplitude для установки значений заполнения (Pulse) с учетом амплитуды. Замените строки, устанавливающие значения на каналах TIM2, следующим образом: if (phase == 0) TIM2->CCR1 = amplitude * stbl[step]; if (phase == 1) TIM2->CCR2 = amplitude * stbl[step]; Это умножение amplitude * stbl[step] изменяет амплитуду сигнала. Значения из таблицы stbl умножаются на переменную амплитуды. ... Будет ли так работать правильно?
Жаль что с индуктивной нагрузкой все будет существенно сложнее. С индуктивной лучше использовать специализированные микросхемы. Я для схожей задачи сделал сначала грубую таблицу, а потом добавил алгоритм высчитывания величины с на отрезках между точками. В итоге не пришлось долго считать, а отклонение от идеала было порядка 0.05-0.1% . Особенно помогло с натуральными логарифмами, которые нужно было высчитывать каждые 20 мкс.
Спасибо огромное!!! Делитанский вопрос: таблица синусов нужна, так как вычисление синуса микроконтроллером займет слишком много времени. Верно? (Просто я на электронной бумаге круглые часы синусом рисовал, и теперь сомневаюсь, числятся ли на мне преступления кроме негуманного расхода памяти)?
Нет, вполне таблицу синуса можно рассчитывать и налету. Можно вообще у камня на котором я демонстрировал работу накрутить тактовую частоту и синус вычислять непосредственно перед использованием.
@@VladimirMedintsev я говорю о сигналах, показанных на 13:32. Так понимаю что они заводятся на затворы левой стойки. И они зачем-то комплиментарные. Вот и интересно зачем?
Добрый вечер, можете дать ссылку на схему полу мостового модуля, который был на сайте ХАБР, а то удалили статью по его модулю, мне нужна версия 1.01, так как заказал платы а схемы не оказалось, только старая.
И получить сложности с использованием DMA которая тут так и просится, а если и не использовать DMA, то лишний IF в прерывании. И стоят 300 байт памяти того?
@@VladimirMedintsev 300 байт. Зависит от приоритетов в выполняемой задаче в целом. Ели просто 50 гц синуса. С фиксированной амплитудой. Пофиг. И на IF в том числе. Иначе DMA однозначно. Ну и решение с DMA поестественней так сказать.
Лучше PWM-ить высокой частотой транзисторы, которые истоками к земле. Так проблемма с питанием драйверов верхних плечей решится сама. Иначе бустрепная подпитка не сможет обеспечить энергии на переключение верхнего плеча много-много раз за такт. А лепить дополнительные питания, да ещë и раздельные для верхних плеч тоже не очень прикольно. Можно конечно и трансформаторное управление затворами мотать, но тоже зачем если есть опторазвязанные драйвера.
В. Мединцев, Вами вводится некий управляющий таймер прерывания timer 6 "15:44 организовывать переключение и всю вот работу с этой штукой" на 48 кГц, чтобы "порождать прерывание" . Я не разобрался с Вашим объяснением, потому что оно для меня прозвучало коряво, из-за того что сам я - не программист. А про микроконтроллеры и среду разработки в которой Вы пишите я только слышал. В чем прелесть дополнительного таймера на 48 кГц? Почему трудно использовать таймер прерывания на 100 Гц и не вообще трогать ( *-не трогать-* ) святые Хал или ЦМСИС (СM Sys) моими немытыми руками? Таймер прерывания делает состояние управляющих выводов высокоимпедансным?
Задача этого таймера последовательно, одно за другим, подставлять значения из таблицы синуса в таймер 2, который будет формировать импульсы с определенной скважностью. Тем самым мы и получим синус.
Для изучения таких вещей полезно иметь логический анализатор. Мне что то подсказывает что это все можно провернуть на чисто аппаратных возможностях контроллера. К стати вы заметили как взлетели цены на STM32 микроконтроллеры? Когда то заказывал F103RET6 за ~1.5$, сейчас 10 (!!!)...просто капец какой то... Отладочные платы тоже в раза два подорожали....будем надеяться что временно.
На логическом анализаторе крайне неудобно показывать такие вещи. Особенно нарушение синхронизации как на последних минутах видео. Логический анализатор он все-таки для другого. А для таких вещей хорошо иметь 4х лучевой осцилограф. Но для дома дорого, хороший только на работе.
@@VladimirMedintsev У меня есть двухлучевой осцыл и мне пришлось покупать анализатор. Не совсем было удобно анализировать синус ШИМ. При генерации ШИМ с помощью DMA на осциллографе синус был не симетричен и разглядеть проблему не получалось. С анализатором все стало на свои места , как по мне , очень удобно.И рассинхронизацию можно анализировать без проблем увеличив время захвата.
Владимир, Вы написали свой код в обработчике прерываний от 6 таймера, а за ним идет вызов функции HAL_TIM_IRQHandler(&htim6), может стоило перед этим вызовом поставить return; ? Вы же сами говорите что скорости HAL тут недостаточно.
Мы же не гадалки на рынке. Вы вполне можете заглянуть в эту функцию и оценить необходимость ее модификации или оптимизации. Ну потому, что когда я говорил о скорости HAL я имел в виду не сломать систему прерываний, а не использовать функции HAL для загрузки данных в регистры таймеров.
Владимир, а зачем синус задавать таблицей? Cortex-M4 ее сам бы посчитал довольно быстро. У меня STM32G431 (тоже Cortex-M4) посчитал около 20000 синусов за секунду на вашей частоте (48 МГц). Формула там была такая: sinus[i] = 1000 * sin(3.14159 * a). Т.е. с приведением синуса к 1000 и с распределением аргумента по полупериоду. Это означает, что 500 синусов посчиталось бы всего за 25 мс (по 50 мкс на синус). И было бы нагляднее, чем таблица. Еще можно считать меньше синусов, а промежуточные точки посчитать линейной аппроксимацией (если приложение не позволяет тратить на подготовку 25 мс и/или повышать частоту процессора)
Можно конечно и расчитать. Тем более что функцию вычисления синуса можно взять из CMSIS библиотеки DSP там гораздо быстрее. Нет в программировании единственного правильного решения.
PS. А еще есть compile-time function execution. Видимо, должно позволить вычислить всю таблицу во время компиляции. Но я с такой конструкцией не знаком, попробую сегодня!
25 мс на вычисление - это, конечно, не много. Но если этот инвертор будет частью UPS-а и питание на МК будет подаваться не постоянно, а только при необходимости генерации - то и это время может иметь значение.
В полный рост столкнулся с задачей обеспечить защиту от переполюсовки при рабочем токе 3A. Понятно, что диод Шотки не годится из-за большого тепловыделения. В интернете полно схем с использование MOSFETов и в верхнем и в нижнем плече и есть мосты из 4-х MOSFETов, позволяющие подключать питание любой полярности. И люди утверждают, что всё оно работает. Но меня терзают смутные сомнения из-за паразитного (или защитного ?) диода внутри MOSFETа. По моему - всё что работать не должно. Можете хоть как-то прокоментировать этот вопрос ?
Там (на Хабре) была хорошая статья на эту тему. Называлась "Прекращаем ставить диод 2". В настоящее время она не доступна. Но по сути ее куски есть в интернете.
@@VladimirMedintsev Да и мощностей много. Вот вопрос а хватит производительности если нашу синусойду модулировать по внешнему сигналу? Например если у нас есть feed back от тока нагрузки и мы захотим ещё фазу подвигать. Например PWM = sin(t + k * ADC() / 1023).... Пока писал примерно и ответ прикинул это около 100 комманд т.е. при 96 Мгц примерно 1мкс, т.е. для 50 Гц вообще не критично.
@@VladimirMedintsev Тогда пожалуйста снимите видео про это, плюс с изменением частоты на ходу . Чтоб можно было взять за основу для построения частотника. А то годного контента на эту тему нет.
Ну я все равно не рискнул бы это делать без спецдрайвера ибо вроде как в МК таймеры и аппаратные, но все равно доверия к ним нет и время задержки в 1 мкС может и по каким-то причинам и улетучится и тогда погорит все. И вообще не понятно как автор будет управлять верхними ключами ибо там на затвор нужно подавать напряжение не относительно земли, а относительно средней точки, а там каких-то 200 вольт - драйвера то это умеют делать, также они умеют и время задержки самостоятельно установить.
@@НиколайПр-з3в Есть такой драйвер 816g, их пары можно подключить так чтоб они друг друга блокировали, плюс у этого драйвера есть защита от кз причем полностью независимая .
Кстати для формирования синуса достаточно расчитывать только четверть(0-90градусов) периода.. Вам не было лень перенабирать коеффициенты? почему не написали функцию для заполнения массива в самом коде до запуска прирываний..
Перенабирать не пришлось я просто скопировал данные из таблицы. Они даже запятыми уже были разделены. По поводу четверти волны, ну я не вижу тут каких-то значимых преимуществ. В видео показана одна из возможных реализаций. Она не хуже и не лучше других возможных вариантов. Все остальное это уже дело фантазии.
а если timer 1 сделать мастер а timer 2 slave по режиму gate? проста как то не доверяю мк) и другое 50гц*480*2 = 48кгц а ШИМ на вашем случее 48кгц это получается 1 ШИМ импулс на один sine[pwm] значение а это теоретически а в практике какие то sine[pwm] не успеют там быть
Не вижу тут проблему, можно вастоты изменить как угодно. Хоть один, хоть 2, да хоть три импульса на одну точку генерации сигнала. На аина счет доверия к МК, никто в них верить и не заставляет. Сделайте несколько аппаратных защит. Ну и пожалуй ради справедливости, много ли вы видели МК зависших или засбоивших без причины? Уверен что ни одного. Значит это недоверие не МК, это недоверие к своей способности развести плату так, чтобы обеспечить хорошее питание единственного ответственного потребителя.
@@VladimirMedintsev ну а если просто сделать так как описаль и не надо какие то защити и высокие требование к помех плати делать? ну это хоть и к лучшему ну это ваш выбор а я за простату и надежность
Я очень извиняюсь, что значит и не надо никаких защит? Вы уж определитесь или вы доверяете МК или ставите защиты. Увы без защит не бывает. Хотя ну вот честно, ваше полное право делать как вам удобно. Я не буду спорить.
@@VladimirMedintsev Понятно.. Ну а на работу мы закупали только чистый синус, никакого псевдо, дорогая фирма. Синус по-другому формируется кстати в них..
driver for laser Посмотрите у меня . stm выдает логику ttl . а не отрицательную полярность. Я преднамеренно завожу на землю через диод. PNP не открываются минусом как везде впаривают. На этих драйверах у меня 2 лазерных гравера. Так же делал ультразвук выпариватель на антенне от радио . Моно и клавесин забабахать на пищалке . 2 запараллеленных мосфета от esc самоката , корректно пропускают до 60 khz Ну то есть ключ на мосветы нужно заводить из полумоста из npn pnp bipolar
А зачем использовать отдельный таймер, если лучше исапользовать тот, который ШИМ и генерит? ua-cam.com/video/dCZPALHqXg0/v-deo.html , тем более что он будет синхронно запускаться (при обнулении счетчика или срабатывании с установленным значением) та и вообще, зачем тратить таймер на переключение 50 Гц, если лучше тогда сделать это программно в прерывании при обновлении таймера синусоиды
А вы эти таймеры для чего-то особого бережете? Или их дефицит? Нет, правда, я бы понял будь у нас дефицит этих таймеров. Но взять к примеру ту же G серию, ну их куда девать? Ладно, пусть еще один на FreeRTOS и еще один импульсы от энкодера считать. Но еще как минимум 2-4 штуки останется свободными....
@@VladimirMedintsev Да хоть куда , к примеру два разных временных интервала , плюс еще нужно время соблюдать , и уже не хватка , а когда просят МК за 200 рублей , так вообще волосы рвать на себе начинаешь
@@VladimirMedintsev Вот сейчас у меня проектик , 8 шим каналов + 1 энкодер + 2 разных временных интервала , и еще считаем время без часов реального времени , и уже приходиться выкоеживаться , и еще сейчас делаю что один таймер переключает приоритет между каналами шим , камень 103
@@Shinsei75 В контексте данного видео это именно докапывается. Есть общепринятые термины, понятные всем, и pwm- один из них. Хочется блеснуть знаниями языка - вперёд на форум лингвистов
@@ImSashOk1977 надо уважать свой язык, может сейчас Вас и учили в институте такому, но раньше этого не было. ШИМ он и был ШИМом и если переводили с иностранного, то не писали pwm, а писали ШИМ. Для технарь уважение родного языка также нормальное явление как и у лингвиста. Используете pwm так и пишите по английски весь текст
По ходу сами STM-щики так же изрядные ламеры в силовой, да и вообще дискретной электронике - схема висящая в начале ролика - мост из p-канальных мосфетов с плюсом питания сверху - это лишь всегда открытый мост из внутренних паразитных диодов. До слез!
Я так смотрю вас не смутило, что это изображение моста с первого попавшегося сайта не руководство к действию ю, а всего лишь изображение моста. Да не смутило конечно. Ведь судя по всему единственный доступный способ самоутвердиться это назвать кого-либо ламером. Ну не проблема, самоутверждайтесь. С гнильцой народ пошел.
@@VladimirMedintsev в кратце 32f103c8, надо два ШИМ, с дидтаймом, на первый взгляд да легко один с hi,второй low полярностью, но есть тонкость, длительность второго ШИМ должна быть такой же как у первого
@@VladimirMedintsev спросите гугль на тему "частота Найквиста". А так же гляньте, какой "синус" выдают обычные ИБП и народ на это, в основном, не жалуется.
Очень интересно. Хотелось бы подробно и с тремя фазами( BLDC ) в следующем уроке. Ещё раз спасибо, люблю такие видео.
Доброе утро, в мостовых или полу мостовых ключах основная проблема в том, что время отключения силовых элементов(* от нс до ~1 микросекунды) после того как управляющий сигнал будет снят с управляющего электрода. Если пренебречь этим, то фейерверк от встречного включения испортит настроение и будут финансовые потери от таких экспериментов. Гарантированная пауза или "мёртвое время" между переключениями верхних и нижних ключей- просто необходимы (те самые 100 нс ...1 мкс) в зависимости от типа ключевых элементов. Спасибо за вашу работу по созданию роликов, с уважением к вашей работе.
Есть ещё некоторые проблемки, но их можно минимизировать схемотехническими решениями.
Спасибо за видео!
8:18 я когда-то по незнанию наткнулся на эти грабли. Долго не мог понять почему вылетают мосфеты...
Спасибо! Предлагаю сделать три фазы для управления электродвигателем
Ну да, тоже можно.
@@VladimirMedintsev Здравствуйте, возможно этот вопрос уже задавался: при настройке таймера в кубе, в настройках каналов есть такой пункт Output compare no output и pwm generation no output. Я так понимаю, в этих режимах будут просто вызываться соответствующие прерывания? И если с Output compare no output ещё более менее понятно (вызываем прерывание при совпадении и делаем что-то), то смысл второго режима мне не понятен совсем: Зачем генерировать шим без вывода его "наружу"? В reference manual и даташите не нашел об этом внятной информации, а в интернете только на форумах такие же вопросы без ответов.
@@dmitriibannikovasx Это чтобы сделать просто обработчик прерывания. Мы никакой шим никуда не выводим а просто получаем вызов прерывания и там творим что хотим.
@@VladimirMedintsev Спасибо большое)
Делал на xe169.
Спасибо огромное ! Как здорово что есть такой канал !
Спасибо вам за просветительскую деятельность.
Владимир, спасибо за видео. Все очень понятно, доступно и наглядно. Хотелось бы увидеть процесс воплощения в железе. С вашим умением рассказать просто о сложном это был бы лучший цикл о силовой электронике.
Ну обычно устройства для заказчиков я не показываю, но еще пара видео на эту тему скорее всего будет.
@@VladimirMedintsev пусть это будет не про устройство, но по крайней мере хотелось бы увидеть ваше видение схемотехники с ее подводными камнями, и вопросы разводки печатной платы. Но в любом случае спасибо.
Спасибо за грамотное и интересное повествование.
Сколько времени бы мне сэкономило это видео, выйди бы оно на лет 5 раньше)) Огромное спасибо, надеюсь будет продолжение
Огромнейшее спасибо. У меня верхние ключи управлял драйвером 50Гц, а нижние шим. и раскачка на транзисторах.
посмотрев Ваше видео - решил вернуться и доделать (12в - 220в).
+
Всегда жду ваши видео. Особенно полезны заметки..
Спасибо.
Отличное видео для начинающих. Недавно использовал в таком режиме, пришлось самому додумывать) еще бы раскрыть тему работы такого преобразователя на индуктивную нагрузку... О снабберах видимо и прочем
Спасибо, очень понятно разжевали!
Благодарю. Вот по таким маленьким крупицам и приобретается опыт.
Супер! До трех фаз довести было бы замечательно.
И что дальше? захочится частотник а там скалярное управление, и нужно еще и амплитудой рулить, а для этого нужен уже отдельный "DC/DC" если не хотим терять разрешение по управлению.
Поддерживаю 3 фазы нужно. хотя бы основы того как тоже таймеры настроить, и потом как еще и частотой выходной рулить
@@denisyegorov5109 Супер. Теперь только осталось определиться, кто из вас троих оставивших комментарии с "поддерживаю" сделает ролик про 3 фазы.
@@IgorPshynyk видите, он читает), а вы заднюю включили уже, если тема будет бомбить, он по любому запилит нечто.
@@jetbrain9115 я с автором согласен, ведь и так уже все понятно.. я частотник уже на 103 делал, и это скорее все как повторение. Не вижу проблемы, включаете еще два выхода шима тактируете настриваете. В прирывании прописываете из тогоже масива коэф. Но только со сдвигом на фазу 120градусов. Тобищь если в масиве 500 точек то на (i+166)/500 или же i+332 для 3 фазы.. и все если вы не понали ход мысли то смотрите еще видео пока не поймете.
Спасибо, ранее я не курил нижние ключи или верхние а теперь всё ясно благодаря вам теперь я в теме хоть давно не щупал затворы так как сам затворник!
Очень классно у вас получается описывать весь процесс а особенно на примерах!
Хороший вы человек (делиющийся) своим опытом и практикам с остальными не достаточно опытными....
Можете пояснить работу BLCD двигателя в будущих роликах или упомянуть о них, как они работают в режиме генератора, как они генерят синус и как он получается из постоянных магнитов ещё и на 3 фазы, как правильно и каким ваттметром мерить правильно ток фазы а вернее фазный ток?
И вообще реально ли получить из двигателя BLDC полноценные 3 фазы с частотой пригодной чтоб запитать 3х фазный мотор 220в 50гц.?
И огромнейшее спасибо вам. Подробно и без навязывания. : )
Спасибо, очень познавательно!
Хочу так же написать - огромное спасибо за видео!!!
Отличный урок, спасибо!
Спасибо тебе, добрый человек! Просто и понятно)
Крайне интересно, благодарю!
1. Большинство осциллографов позволяют цепляться синхронизацией за импульс заданной длины.
2. Синус можно выплюнуть через DMA и в прерывании по окончанию передачи переключить фазу.
3. Можно вообще обойтись без прерываний, правда памяти потребуется побольше. Для этого нужно загуглить регистр TIMx->DMAR и его управляющий регистр, который позволяет творить удивительные вещи, если включить смекалку. В качестве примера - можно определить характер генерации импульсов на всех четырех выходах таймера простым массивом структур в памяти. Структура содержит несколько полей int32_t, отражающие содержимое интересующих регистров. Далее, настраиваем ДМА. Адрес памяти указываем на начало массива структур. А в качестве адреса периферии указываем регистр TIMx->DMAR. В управляющем регистре указываем количество обновляемых регистров и смещение относительно первого регистра таймера. В качестве события DMA можно указать переполнение таймера. Если мы задали 4 регистра, то таймер по событию сгенерит сразу 4 запроса DMA и раскидает данные по четырём регистрам.
спасибо, как раз заинтересовался grid tie инверторами
Один таймер, два канала, 4 комплектарных выхода. "Выключать" канал записью числа выше диапазона счёта. Если хочется всё через дма - то у таймера есть аппаратное управление каналом дма. Где можно указать количество "ударов" срабатываний дма на инвент, указать начальный адрес - куда нужно натравить дма, указать смещение в байтах на вторую и последующие записи, и разрешить для дма циклический режим. Таблица немного вырастет в размере, и будет выглядеть иначе - в первой половине шим0-овер-шим1-овер-шим2..., во второй половине овер-шим0-овер-шим1-овер-шим2... В случае с тремя фазами таблица растёт ещё больше, но полная автономность остаётся.
После старта всё будет колбасится совершенно автономно, без нагрузки на процессор. Так-же для дма желательно разрешить использование fifo, а для таймера режим фоновой загрузки. И реализовать физически контроль по превышению тока - аппаратный внешний триггер (на паре транзисторов или компараторе) , с подключением на линию ETR таймера - отключать все выходы. Это чтоб не сгорело.
Я бы добавил плавкий предохранитель в общую цепь стоков.
4:45 А вот в этом месте я порадовался, что в своё время купился на рекламу и приобрёл сей девайс (ну ладно, ещё раньше), ибо лезть на Али и узнавать, "обо что оно встанет" сейчас без корвалола не рискну...
К таблице можно добавить линейную интерполяцию, вообще хорошо получается, гладкий синус даже при сотне ключевых опорных точек. Из математики только одно умножение добавляется.
Спасибо, было очень познавательно
Очень познавательно как всегда!
Уважаемый автор, Вы сделали все верно, заранее вычислив и поместив значения sin(n) в таблицу. Это гармоническая симметричная функция поэтому таблицу можно еще раз сократить, т.е. Вы уже ее уменьшили с 960 до 480 значений, взяв положительную полуволну... Предлагаю Вам уменьшить ее до четверть периода (240 значений), например, до поместив значения в таблицу, соответствующие диапазону sin(n) принадлежащим [0, pi/2]. Этого вполне достаточно чтобы построить необходимое количество периодов функции sin(n) и при этом сэкономить память микроконтроллера.
А зачем нам экономить память? Если я сокращу до четверти волны то сразу получу весьма неприятные последствия. Или лишний if в каждом вызове прерывания таймера 6. Или необходимость пересчета таблицы при использовании DMA. На мой взгляд экономия памяти этого не стоит.
@@VladimirMedintsev пересчет таблицы не потребуется. Все что нужно будет сделать это в точке sin(x)==pi/2 начать читать таблицу значений в обратном направлении.
интересно получается. Начну пробовать какую-то периферию, и выходит ролик на эту тему.
Очень красиво. Спасибо.
Stm32g4 лучше подходит для преобразователей, тк обычно нужна ещё и обратная связь по напряжению и иногда по току. Всеми необходимыми блоками он обладает. Если конкретно это Hi Resolution PWM, dac, adc, opamp. 3p3z
Очень интересно. 👍
Отличное видео!
Огромное спасибо и Вам!
Спасибо за видос, помогли с быстрым стартом по шиму!
Пару вопросов если не сложно:
1. Если мы захотим менять частоту модулирующей НЧ (которая в табличке) нам можно прескаллером таймера это делать на ходу?
3. Для трехканального шим нужно использовать три таймера, один мастер и два со смещением?
Спасибо. Красивое решение.
Удивительно! У меня проект как раз похожий, хочу выдавать разные формы сигналов высокого напряжения. Даже не знал о таком режиме Н моста
Никому не рассказывайте.
@@VladimirMedintsev ладно....
Запись в регистр сравнения CCR можно делать при помощи макросов define HAL, я обычно так и делаю. Или они тоже долго выполняются?
Для таких вещей f3 самая пушка, если, конечно, не нужен Ethernet на борту кристалла.
В комментариях уже отметили. Таймер 6 можно исключить. DMA на таймер 2, оно там как нибудь само будет работать отлично)).
В прерывании DMA можно пересчитать таблицу синуса для скалярного управления.
Спасибо за то что делитесь опытом. Данные тонкие разделы знаний разработчики и фирмы уже стараются держать внутри избы.
Отлично, а как можно регулировать амплитуду полупериода?
Большое спасибо. Очень интересно! А вы будете доводить это до железа? Мне как очень начинающему не хватает таких полных циклов.
Финального железа вы не увидите, потому, что оно создается под конкретного заказчика, а вот один из предварительных этапов я еще наверное покажу.
@@VladimirMedintsev жаль. Но спасибо.
Спасибо очень интересно
Спасибо 👍
Добрый день большое спасибо за проделанную роботу на вашем примере я прекрасно понял что такое модифицированный синус и действительно практично то 2 транзистор пары просто открытый надёжность в простоте
но очень интересна модель вашего осцилографа, чтобы знать куда смотреть при выборе
спасибо за ранние
Владимир, хотелось бы от Вас разбор hrtim-а увидеть...
Очень хотелось бы. Спасибо.
48 кГц мало? Думаю тут все же стоит учитывать , что мы строим на этих мосфетах. Вот например для силовых выпрямителей (зарядки для ЕВ) на мощности 30квт - 200квт игбт транзисторы делаются с рабочей частотой максимум 20кгц. Недавно (ну относительно) в эту область начали внедрять SiC мосфеты, и у них у же частота рабочая свыше 20кгц, в кратце это крайне перспективная разработка. В общем частота ШИМ от многих параметров зависит, и в основном от параметров транзисторов
В частотниках и того меньше, максимум килогерц 10 обычно а по умолчанию 2-3 кГц стоит. Ведь дело не только в ключах, а и в нагрузке. Железо в двигателе аж никак не предназначено для работы на высоких частотах.
Пожелание! Более подробно рассказать про пвм сигнал и таблицу!
Ну есть же видео на канале про генерацию PWM сигнала. Там все подробно рассказано.
@@VladimirMedintsev спасибо!
Да, можно было вставить формулу для расчета точек таблицы.
Доводилось делать управление силовым асинхронником на XE169. Позже когда изучал STMы сравнивал возможности их PWMов с контроллерами семейства XE166. Есть конечно недостатки у STMов. Из того что тут вспомнилось, мёртвое время формируется не тактами таймера в отличие от XE166. Для мёртвого времени свой делитель и такты его получаются из входной частоты таймера. Ещё припоминаю вроде нет прямого управления выходным сигналом.
Из Counter Period(AutoReload) тоже необходимо вычитать единицу.
В подтверждение, один из примеров
www.digikey.com/en/maker/projects/getting-started-with-stm32-timers-and-timer-interrupts/d08e6493cefa486fb1e79c43c0b08cc6
@@andrey7530 Так а dead time там уже есть. Нули в начале и в конце таблицы.
Спасибо! ЕМНИП есть драйвера полумостов, которые верхний ключ открывают энергией из бустрапного конденсатора. так для зарядки этого конденсатора нужно замыкать нижний ключ. поэтому логично разбивать не левые и правые, а нижние и верхние. при этом нижние шимовать. так же сохранится логика при переходе на трехфазный инвертор.
Еще раз. В электронике есть сотни путей получения необходимого результата. Они все правильные. Вы можете выбрать тот вариант который подходит вам под ваше железо но это не значит что логично делать вот так и только так.
@@VladimirMedintsev да, потом уже увидел несколько коментариев и ответов на них.
Спасибо большое за ваши видео! Всегда что-нибудь, но новое из них подчерпнешь! Можете ли будущих видео осветить управление шаговыми двигателями с помощью A4988 и one pulse mode? Почему-то данный режим через hal так и не удалось запустить...
Здравствуйте Владимир, спасибо большое за обясняюший ролик, хотель спросить а обязательно чтобы у всех таймеров был одинаковые шаги, может можно один из них сделат больше или менше шагов ?
Владимир, а как по поводу того, что шимировать лучше нижние ключи. А верхние использовать как реле. Именно так микросхемы драйверов полумоста и делают - шимировать от 0В до 9В намного легче и надежней чем от 24В до 31В (если батарейка 24В)
Ну это все от драйверов зависит. Никто же не говорит что надо делать только так и никак иначе. Хотите, подавайте PWM на нижние ключи, суть от этого не меняется.
@@VladimirMedintsev я практик. и делал и так и так. Если шимировать верхние ключи - они греются мама дорогая....(возможно не у спевают перезаряжаться конденсаторы затворов). А если в тех же условиях (схема ,частоты, плата, компоненты) шимировать нижние - радиатор не нужен - достаточно пада на плате.. Спасибо за ответ. И, если позволите вопрос (просьба) - пояснить как менять firmware stm32 через порт (UART? USB etc). может сделаете такое видео....
@@serhiiplys4588 По поводу замены прошивки есть на канале видео где очень подробно про это рассказано - ua-cam.com/video/FuuPoJVqfGk/v-deo.html
Тут на канале много видео...
Что касается верхних и нижних ключей. А вот как вы поступите если надо преобразовывать 400 вольт? А почему вверху нельзя применить нижний ключ? Нижний и дешевле. Ну как бы будет когда-нибудь про это видео на канале.
@@VladimirMedintsev увидел видео! благодарю. как раз сейчас такая задача у меня стоит. По поводу построения силовой части интерторов - до сих пор копья ломаются))) значит и мы продолжим попозже)) Благодарю за видео!
Супер :) Спасибо. Я совсем новичок, многое не до конца понятно, но суть ясна. У меня вопрос немного не по теме. Заглядываюсь на осциллограф ADS1013D . И мне очень интересно, годится ли он для исследования подобных сигналов как в этом видео. Буду очень благодарен за ответ.
Для BLDC ещё интересно
А нельзя при построении синуса задействовать DMA, не используя CPU и прерывания?
Конечно можно, даже нужно использовать DMA. Тут ему самое место и главное красивее все будет.
@@VladimirMedintsev а еще удобнее делать полную таблицу синуса для нескольких плеч моста со смещением фазы и обновлять все нужные регистры через дма бурст. Получается универсальное решение под 2х и 3х фазные схемы.
@@VladimirMedintsev Добрый день, а будет ли видео по работе ШИМ с DMA?
@@AE-systems Дело в том, что видео это ну должна быть серьезная тема. А тема DMA + TIM это реально 2 строки кода. 30 секунд, и я не могу придумать чем остальное время ролика занимать. Люди же смотреть приходят.
@@VladimirMedintsev так можно и ПИД регулятор прикрутить, чтобы понятно было как обратная связь будет работать с дма
А как сделать стабилизацию выходного напряжения после мосфетов. Подсовывать другую таблицу или менять значение которое посылается таймеру.
Владимир, спасибо за отличное видео. Скажите а почему 480 точек в таблице? Например 64 точки будет не достаточно ?
Вполне достаточно, и 128 точек за глаза. По факту мне было просто интересно.
@@VladimirMedintsev спасибо, понял
@@VladimirMedintsev но зачем таблица на 480 если у Вас все равно stbl[ 479 - i ] == stbl[ i ] . 240 элементов повторяются
@@philkulibin2602 Да как угодно можно эту таблицу строить, хоть на четверть волны, хоть на полуволну. Ну нету никаких требований на эту тему. Построите на четверть - получите лишний if в коде. Для обьяснений и работы DMA проще делать на полуволну.
👍👍👍
Благодарю Владимир за Ваше время и информацию - вопрос как изменять на лету амплитуду сигнала при неизменной частоте ?
Очевидно же за счет изменения коэффициента заполнения PWM сигнала.
можно пожалуйста подробнее как реализовать в коде?
Отлично, как-нибудь сниму видео на эту тему
ИИ предлагает вариант - ... float amplitude = 0.5; // Пример: начальная амплитуда равна 0.5 (50%)
Здесь переменная amplitude представляет собой значение амплитуды в диапазоне от 0.0 до 1.0.
В обработчике прерывания TIM6_DAC_IRQHandler используйте переменную amplitude для установки значений заполнения (Pulse) с учетом амплитуды. Замените строки, устанавливающие значения на каналах TIM2, следующим образом:
if (phase == 0) TIM2->CCR1 = amplitude * stbl[step];
if (phase == 1) TIM2->CCR2 = amplitude * stbl[step];
Это умножение amplitude * stbl[step] изменяет амплитуду сигнала. Значения из таблицы stbl умножаются на переменную амплитуды. ... Будет ли так работать правильно?
Еще можно обратную связь сделать с множителем на данные синусоиды с массива
👍
Жаль что с индуктивной нагрузкой все будет существенно сложнее. С индуктивной лучше использовать специализированные микросхемы.
Я для схожей задачи сделал сначала грубую таблицу, а потом добавил алгоритм высчитывания величины с на отрезках между точками. В итоге не пришлось долго считать, а отклонение от идеала было порядка 0.05-0.1% . Особенно помогло с натуральными логарифмами, которые нужно было высчитывать каждые 20 мкс.
Переменное напряжение генерируется, а как же ток? Не нужно ли при переходе через ноль открывать два нижних ключа?
Спасибо огромное!!!
Делитанский вопрос: таблица синусов нужна, так как вычисление синуса микроконтроллером займет слишком много времени. Верно? (Просто я на электронной бумаге круглые часы синусом рисовал, и теперь сомневаюсь, числятся ли на мне преступления кроме негуманного расхода памяти)?
Нет, вполне таблицу синуса можно рассчитывать и налету. Можно вообще у камня на котором я демонстрировал работу накрутить тактовую частоту и синус вычислять непосредственно перед использованием.
@@VladimirMedintsev спасибо!
Владимир, а почему в противофазе формируются сигналы 48 кГц ( Таймер 2) для левой стойки? Просто интересно.
Не понял я вопроса.
@@VladimirMedintsev я говорю о сигналах, показанных на 13:32. Так понимаю что они заводятся на затворы левой стойки. И они зачем-то комплиментарные. Вот и интересно зачем?
Добрый вечер, можете дать ссылку на схему полу мостового модуля, который был на сайте ХАБР, а то удалили статью по его модулю, мне нужна версия 1.01, так как заказал платы а схемы не оказалось, только старая.
Можно использовать массив в 1/4 периода. Ну типа для экономии памяти. Счетчик по массиву сначала увеличивать потом уменьшать соответственно.
И получить сложности с использованием DMA которая тут так и просится, а если и не использовать DMA, то лишний IF в прерывании. И стоят 300 байт памяти того?
@@VladimirMedintsev 300 байт. Зависит от приоритетов в выполняемой задаче в целом. Ели просто 50 гц синуса. С фиксированной амплитудой. Пофиг. И на IF в том числе. Иначе DMA однозначно. Ну и решение с DMA поестественней так сказать.
Лучше PWM-ить высокой частотой транзисторы, которые истоками к земле. Так проблемма с питанием драйверов верхних плечей решится сама. Иначе бустрепная подпитка не сможет обеспечить энергии на переключение верхнего плеча много-много раз за такт. А лепить дополнительные питания, да ещë и раздельные для верхних плеч тоже не очень прикольно. Можно конечно и трансформаторное управление затворами мотать, но тоже зачем если есть опторазвязанные драйвера.
Про то, что нужно вычитать единицу из предделителя, это я знаю. Но нужно ли вычитать единицу из значения периода?
Нужно. Оба считают до нуля.
В. Мединцев, Вами вводится некий управляющий таймер прерывания timer 6
"15:44 организовывать переключение и всю вот работу с этой штукой" на 48 кГц, чтобы "порождать прерывание" .
Я не разобрался с Вашим объяснением, потому что оно для меня прозвучало коряво, из-за того что сам я - не программист. А про микроконтроллеры и среду разработки в которой Вы пишите я только слышал.
В чем прелесть дополнительного таймера на 48 кГц?
Почему трудно использовать таймер прерывания на 100 Гц и не вообще трогать ( *-не трогать-* ) святые Хал или ЦМСИС (СM Sys) моими немытыми руками?
Таймер прерывания делает состояние управляющих выводов высокоимпедансным?
Задача этого таймера последовательно, одно за другим, подставлять значения из таблицы синуса в таймер 2, который будет формировать импульсы с определенной скважностью. Тем самым мы и получим синус.
@@VladimirMedintsev благодарю Вас
Для изучения таких вещей полезно иметь логический анализатор.
Мне что то подсказывает что это все можно провернуть на чисто аппаратных возможностях контроллера.
К стати вы заметили как взлетели цены на STM32 микроконтроллеры?
Когда то заказывал F103RET6 за ~1.5$, сейчас 10 (!!!)...просто капец какой то...
Отладочные платы тоже в раза два подорожали....будем надеяться что временно.
На логическом анализаторе крайне неудобно показывать такие вещи. Особенно нарушение синхронизации как на последних минутах видео. Логический анализатор он все-таки для другого. А для таких вещей хорошо иметь 4х лучевой осцилограф. Но для дома дорого, хороший только на работе.
@@VladimirMedintsev
У меня есть двухлучевой осцыл и мне пришлось покупать анализатор. Не совсем было удобно анализировать синус ШИМ.
При генерации ШИМ с помощью DMA на осциллографе синус был не симетричен и разглядеть проблему не получалось.
С анализатором все стало на свои места , как по мне , очень удобно.И рассинхронизацию можно анализировать без проблем увеличив время захвата.
@@andrey7530
И?
@@olexkov4643 Одно из двух, или хвастается или торгует.
@@andrey7530
Я STM32 упоминал а не STM8, или нет?
Владимир, Вы написали свой код в обработчике прерываний от 6 таймера, а за ним идет вызов функции HAL_TIM_IRQHandler(&htim6), может стоило перед этим вызовом поставить return; ? Вы же сами говорите что скорости HAL тут недостаточно.
Мы же не гадалки на рынке. Вы вполне можете заглянуть в эту функцию и оценить необходимость ее модификации или оптимизации. Ну потому, что когда я говорил о скорости HAL я имел в виду не сломать систему прерываний, а не использовать функции HAL для загрузки данных в регистры таймеров.
Владимир, а зачем синус задавать таблицей?
Cortex-M4 ее сам бы посчитал довольно быстро.
У меня STM32G431 (тоже Cortex-M4) посчитал около 20000 синусов за секунду на вашей частоте (48 МГц). Формула там была такая: sinus[i] = 1000 * sin(3.14159 * a). Т.е. с приведением синуса к 1000 и с распределением аргумента по полупериоду.
Это означает, что 500 синусов посчиталось бы всего за 25 мс (по 50 мкс на синус). И было бы нагляднее, чем таблица.
Еще можно считать меньше синусов, а промежуточные точки посчитать линейной аппроксимацией (если приложение не позволяет тратить на подготовку 25 мс и/или повышать частоту процессора)
Можно конечно и расчитать. Тем более что функцию вычисления синуса можно взять из CMSIS библиотеки DSP там гораздо быстрее.
Нет в программировании единственного правильного решения.
PS. А еще есть compile-time function execution. Видимо, должно позволить вычислить всю таблицу во время компиляции. Но я с такой конструкцией не знаком, попробую сегодня!
Да, да, есть такое. Не использовал, но интересно.
25 мс на вычисление - это, конечно, не много. Но если этот инвертор будет частью UPS-а и питание на МК будет подаваться не постоянно, а только при необходимости генерации - то и это время может иметь значение.
В полный рост столкнулся с задачей обеспечить защиту от переполюсовки при рабочем токе 3A. Понятно, что диод Шотки не годится из-за большого тепловыделения. В интернете полно схем с использование MOSFETов и в верхнем и в нижнем плече и есть мосты из 4-х MOSFETов, позволяющие подключать питание любой полярности. И люди утверждают, что всё оно работает. Но меня терзают смутные сомнения из-за паразитного (или защитного ?) диода внутри MOSFETа. По моему - всё что работать не должно. Можете хоть как-то прокоментировать этот вопрос ?
Там (на Хабре) была хорошая статья на эту тему. Называлась "Прекращаем ставить диод 2". В настоящее время она не доступна. Но по сути ее куски есть в интернете.
В целях экономии памяти пользуемся четвертью синусоиды ))
А нам не надо память экономить у нас ее вагон и девать некуда. Ее хватит Maximus BBS запустить.
@@VladimirMedintsev Да и мощностей много. Вот вопрос а хватит производительности если нашу синусойду модулировать по внешнему сигналу?
Например если у нас есть feed back от тока нагрузки и мы захотим ещё фазу подвигать. Например PWM = sin(t + k * ADC() / 1023)....
Пока писал примерно и ответ прикинул это около 100 комманд т.е. при 96 Мгц примерно 1мкс, т.е. для 50 Гц вообще не критично.
Хватит. Очень хватит. Это очень быстрые процы.
да!
Интересно было бы через DMA, чтоб синус был аппаратным.
Ну разумеется, такие вещи и нужно делать через DMA, иначе это на детский сад похоже и микроконтроллер только и занят обработкой прерываний.
@@VladimirMedintsev Тогда пожалуйста снимите видео про это, плюс с изменением частоты на ходу . Чтоб можно было взять за основу для построения частотника. А то годного контента на эту тему нет.
Ну я все равно не рискнул бы это делать без спецдрайвера ибо вроде как в МК таймеры и аппаратные, но все равно доверия к ним нет и время задержки в 1 мкС может и по каким-то причинам и улетучится и тогда погорит все. И вообще не понятно как автор будет управлять верхними ключами ибо там на затвор нужно подавать напряжение не относительно земли, а относительно средней точки, а там каких-то 200 вольт - драйвера то это умеют делать, также они умеют и время задержки самостоятельно установить.
@@НиколайПр-з3в Есть такой драйвер 816g, их пары можно подключить так чтоб они друг друга блокировали, плюс у этого драйвера есть защита от кз причем полностью независимая .
Владимир, добрый день! Подскажите, в каком вузе учат программистов микроконтроллеров?
Откуда мне знать. А нет, знаю. Я преподаю в ГикБрэйнс.
@@VladimirMedintsev спасибо за ответ, но как правило работодатель спрашивает профильное образование, а не курсы
Вы много встречали работодателей желающих вас нанять как программиста микроконтроллеров? Мне просто интересно.
@@VladimirMedintsev 3 из 3))) и все по stm32
В Бауманском точно учат по STM. Долго, дорого, хорошо)
На верхней шум. Забабахаете как я написал ниже ,получите чистый синус . Клавесин моно делать.
мосфеты 3 и 2 , вы защитили задержкой, мосфеты 1 и 4 пробьет
Они работают инвестировано. Задержка есть и там и там.
Нет не пробьет, задержка есть и в таблице синуса. Нули в начале и в конце таблицы...
Кстати для формирования синуса достаточно расчитывать только четверть(0-90градусов) периода.. Вам не было лень перенабирать коеффициенты? почему не написали функцию для заполнения массива в самом коде до запуска прирываний..
Перенабирать не пришлось я просто скопировал данные из таблицы. Они даже запятыми уже были разделены. По поводу четверти волны, ну я не вижу тут каких-то значимых преимуществ. В видео показана одна из возможных реализаций. Она не хуже и не лучше других возможных вариантов. Все остальное это уже дело фантазии.
А как через DMA такое сделать ? Ну , прямо очень в тему тут DMA, чтоб прерывания всё время не гонять
Как-нибудь сделаю видео. Там легко
@@VladimirMedintsev был бы очень благодарен , тема актуальная
Почему в массиве число 1000 повторяется? Читерство?
А почему оно не должно повторяться? Постройте таблицу в экселе и после округления сами увидите.
для чего делать половину? достаточно и четверти.
А с четвертью как потом DMA использовать?
а если timer 1 сделать мастер а timer 2 slave по режиму gate? проста как то не доверяю мк) и другое 50гц*480*2 = 48кгц а ШИМ на вашем случее 48кгц это получается 1 ШИМ импулс на один sine[pwm] значение а это теоретически а в практике какие то sine[pwm] не успеют там быть
Не вижу тут проблему, можно вастоты изменить как угодно. Хоть один, хоть 2, да хоть три импульса на одну точку генерации сигнала.
На аина счет доверия к МК, никто в них верить и не заставляет. Сделайте несколько аппаратных защит.
Ну и пожалуй ради справедливости, много ли вы видели МК зависших или засбоивших без причины? Уверен что ни одного. Значит это недоверие не МК, это недоверие к своей способности развести плату так, чтобы обеспечить хорошее питание единственного ответственного потребителя.
@@VladimirMedintsev ну а если просто сделать так как описаль и не надо какие то защити и высокие требование к помех плати делать? ну это хоть и к лучшему ну это ваш выбор а я за простату и надежность
Я очень извиняюсь, что значит и не надо никаких защит? Вы уж определитесь или вы доверяете МК или ставите защиты. Увы без защит не бывает.
Хотя ну вот честно, ваше полное право делать как вам удобно. Я не буду спорить.
А мертвая зона в 1 мкс хватит? Мосфеты разные бывают с емкостью в затворе.
Ну и псевдосинус - это не очень хорошо, фильтр надо ставить и то не факт...
Для моих мосфетов хватит :-))) ну было же сказано, что настраивать необходимо и подбирать.
Так а фильтр всегда ставится...
@@VladimirMedintsev Понятно.. Ну а на работу мы закупали только чистый синус, никакого псевдо, дорогая фирма. Синус по-другому формируется кстати в них..
Я понял, к видео это какое отношение имеет? Это пример того, как и что можно реализовать без особой конкретики.
@@VladimirMedintsev Ну просто псевдосинус на максимальном токе опять превращается в меандр, не в обиду будет сказано тебе.
Хорошо, я не буду философствовать про нарастание тока в индуктивной нагрузке и прочих вещах. Мы проверим это утверждение в каком-нибудь видео.
driver for laser Посмотрите у меня .
stm выдает логику ttl . а не отрицательную полярность. Я преднамеренно завожу на землю через диод. PNP не открываются минусом как везде впаривают. На этих драйверах у меня 2 лазерных гравера. Так же делал ультразвук выпариватель на антенне от радио . Моно и клавесин забабахать на пищалке . 2 запараллеленных мосфета от esc самоката , корректно пропускают до 60 khz
Ну то есть ключ на мосветы нужно заводить из полумоста из npn pnp bipolar
А зачем использовать отдельный таймер, если лучше исапользовать тот, который ШИМ и генерит? ua-cam.com/video/dCZPALHqXg0/v-deo.html , тем более что он будет синхронно запускаться (при обнулении счетчика или срабатывании с установленным значением) та и вообще, зачем тратить таймер на переключение 50 Гц, если лучше тогда сделать это программно в прерывании при обновлении таймера синусоиды
Блин 3 таймера в расход , это жестко
да еще и один по прерыванию , где приоритеты этих прерываний
А вы эти таймеры для чего-то особого бережете? Или их дефицит? Нет, правда, я бы понял будь у нас дефицит этих таймеров. Но взять к примеру ту же G серию, ну их куда девать? Ладно, пусть еще один на FreeRTOS и еще один импульсы от энкодера считать. Но еще как минимум 2-4 штуки останется свободными....
@@VladimirMedintsev Да хоть куда , к примеру два разных временных интервала , плюс еще нужно время соблюдать , и уже не хватка , а когда просят МК за 200 рублей , так вообще волосы рвать на себе начинаешь
@@VladimirMedintsev Вот сейчас у меня проектик , 8 шим каналов + 1 энкодер + 2 разных временных интервала , и еще считаем время без часов реального времени , и уже приходиться выкоеживаться , и еще сейчас делаю что один таймер переключает приоритет между каналами шим , камень 103
Ну просто я F1 серию вообще никогда не использовал. В принципе.
Мне казалось комментов будет меньше раз в 10.
Ну а почему, тема же интересная.
Я бы на DMA повесил ШИМ.
"Пэ-вэ-эм"... "ШИМ" - пожалуй, единственная аббревиатура, ещё сохранившая русский язык.
Больше не к чему докопаться?
@@ImSashOk1977 а он не докапывается, а правильно говорит. Говоришь по русски, говори правильно.
@@ImSashOk1977 а он не докапывается, а правильно говорит. Говоришь по русски, говори правильно.
@@Shinsei75 В контексте данного видео это именно докапывается. Есть общепринятые термины, понятные всем, и pwm- один из них. Хочется блеснуть знаниями языка - вперёд на форум лингвистов
@@ImSashOk1977 надо уважать свой язык, может сейчас Вас и учили в институте такому, но раньше этого не было. ШИМ он и был ШИМом и если переводили с иностранного, то не писали pwm, а писали ШИМ. Для технарь уважение родного языка также нормальное явление как и у лингвиста. Используете pwm так и пишите по английски весь текст
По ходу сами STM-щики так же изрядные ламеры в силовой, да и вообще дискретной электронике - схема висящая в начале ролика - мост из p-канальных мосфетов с плюсом питания сверху - это лишь всегда открытый мост из внутренних паразитных диодов. До слез!
Я так смотрю вас не смутило, что это изображение моста с первого попавшегося сайта не руководство к действию ю, а всего лишь изображение моста. Да не смутило конечно. Ведь судя по всему единственный доступный способ самоутвердиться это назвать кого-либо ламером. Ну не проблема, самоутверждайтесь. С гнильцой народ пошел.
@@VladimirMedintsev Надписи на заборах меня тоже не смущают. Но это не повод их цитировать.
Это разве сложный шим. Вот как сделать один за другим и между ними мертвое время.
Это достаточно просто.
@@VladimirMedintsev оказывается нет, при счете 0-2000, на канале надо высокий сигнал от 500 до 1000, аппаратно такого нет
@@hybridinnovate Я специально даже учебный курс на эту тему сделал.
@@VladimirMedintsev в кратце 32f103c8, надо два ШИМ, с дидтаймом, на первый взгляд да легко один с hi,второй low полярностью, но есть тонкость, длительность второго ШИМ должна быть такой же как у первого
А не проще нижние ключи ШИМить, а верхние только переключать?
Вроде как драйвера нижних попроще и побыстрее за те же деньги...
Так вроде они все не сильно дорогие, но так управление проще.
@@VladimirMedintsev Не понял в чём проще управление.
Ну хотя бы в том, что легче автоматически вставляется пауза в переключении.
@@VladimirMedintsev Ясно. Действительно легче.
12:20
48кГц для синуса частотой 50Гц это уже перебор более чем на порядок. Зачем вам сотни килогерц на ШИМ?
Ну это как бы пример. Он для демонстрации. Да и в современных преобразователях и побольше частоты используются.
@@VladimirMedintsev больше частота - больше потери на переключения. Высокие частоты, более х10 от формируемой не имеют смысла.
@@TioNisla Т.е. по вашей логике если мы хотим генерировать синус с частотой 50 Гц то частота PWM у нас должна быть 500 Гц. Я вас правильно понял???
@@VladimirMedintsev спросите гугль на тему "частота Найквиста". А так же гляньте, какой "синус" выдают обычные ИБП и народ на это, в основном, не жалуется.
Вы не ответили на прямой вопрос
Очень познавательно. Спасибо
Спасибо. Отличное видео.