Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: двухтактный ШИМ на STM32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
dimone
Подскажите, как оптимально генерировать ШИМ на STM для полумостового преобразователя, как это делает tl494. Не нашел очевидного варианта..Заработал вариант на основе PWM6 при скважности 0.5 управлять дедтаймом sm.gif, следущий вариант делать связку таймеров мастер -слейв, вершина -табличный синтез черз DMA
MK2
по-другому кроме как через dead time и не придумаешь и при этом учтите в точке сброса-конца счета мы этот самый дедтайм и теряем. посмотрите в сторону F3 там таймеры имеют навороты.
вариант мастер-слейв пересчетов придется делать дофига как бы тоже не очень практично. гимор.
табличный синтез мне кажется тоже бесполезен как вы в таком случае обеспечите синхронизацию таймеров?
недавно для ИП тоже непростая задача встала для таймеров, и решили на стм не делать попробывать TMS320f28027 там хоть компараторы есть
dimone
Цитата(MK2 @ Jan 23 2013, 12:56) *
...
табличный синтез мне кажется тоже бесполезен как вы в таком случае обеспечите синхронизацию таймеров?

-тут совсем не обязательно использовать таймера... wink.gif Уйдет туча памяти и цап-ы, зато траекторию переключения можно синтезировать, что нафиг не надо;
Вариант мастер -слейв тоже некошерный -два отдельных таймера..
Я предполагал что 6 -канальный ШИМ должен позволять организовать сдвиг фаз между парами, но вупор не догоняю как (
MK2
Цитата(dimone @ Jan 23 2013, 12:11) *
Я предполагал что 6 -канальный ШИМ должен позволять организовать сдвиг фаз между парами, но вупор не догоняю как (

Да, он организовывает сдвиг фаз, но делает он это программно через прерывание таймера! это режим для шаговых движков посмотрите пример из STM32F10x Standard Peripherals Firmware Library
посмотрите еще этот документ
кстати вариант с мастер слейвом лишит вас аппаратного dead time, так что опасно это ((
скорее все приготовьтесь менять либо контроллер либо схему.

dimone
Цитата(MK2 @ Jan 23 2013, 14:21) *
...
скорее все приготовьтесь менять либо контроллер либо схему.

-кошмар, вот так люди и разочаровываются в камнях, меня в sam7 достало, что DMA не имеет циркуляции,
теперь в STM оказывается нагородили кучу щита типа 6-канального ШИМ-а а чтоб примитивщину типа
скалярного частотника на них сделать и фазы на 120 разнести вариант лишь "софтовый" и надо переписывать состояние всех выходов "in advance"
с частотой дискретизации? А если это какой -нибудь несчастный сварочный инвертор, где на мост 40-50 кГц надо,
то толку от всей этой перефирии лишь нейтрализация джиттера sm.gif теневыми регистрами? Похоже им не только софт
индюки делают...
MK2
частотник можно замутить... векторный шим никто не отменял, у ST полно на эту тему апноутов
обычный мост тоже можно сделать, фазный наверно только на F3 серии можно.
индусы врятли тут участвовали им самим поменьше работы было бы... тут уже маркетологи пытаются накрутить "силовую категорию" что бы пропихнуть везде
dimone
Цитата(MK2 @ Jan 23 2013, 16:22) *
частотник можно замутить... векторный шим никто не отменял, у ST полно на эту тему апноутов
обычный мост тоже можно сделать, фазный наверно только на F3 серии можно.

Чегоито я совсем потерялся.. -хотелось разумным аппаратным способом получить два попеременных
видеоимпульса с одинаковым периодом повторения и регулируемой длительностью. В подсказанном вами апноте
на 7 ст. -как понимаю реализовано аппаратн о, но импульсы выровняны, т.е. не подходит,
на ст. 9 -то что нужно, но реализовано с помощью sysTick прерываний , но на частоте в десятки килогерц такой
вариант сдается не оптимальным, т.е. сделать можно, это так или еще как-то?
maksimp
А если так (на stm32f10x):
Ставите таймер в Center-aligned mode (up/down counting).
Ставите два канала сравнения с выходами.
Один, с меньшим значением регистра сравнения, с выдачей выхода если текущее значение меньше уставки.
Другой, с большим значением регистра сравнения, с выдачей выхода если текущее значение больше уставки.
То есть например:

TIM2_CR1: CMS=0b11 CEN=1
TIM2_ARR=300;
TIM2_CCR1=100;
TIM2_CCR2=200;
TIM2_CCER: CC1P=0 CC1E=1 CC2P=0 CC2E=1
TIM2_CCMR1: CC1S=0 CC2S=0 OC1M=0b110 OC2M=0b111

Код
счётчик
0    100     200    300      200    100     0    100     200    300      200    100
выход 1:
------+                              +------------+                              +-----
      |                              |            |                              |
      +------------------------------+            +------------------------------+
выход 2:
              +---------------+                           +---------------+
              |               |                           |               |
--------------+               +---------------------------+               +------------
dimone
-вот- вот, и я думал, что не сошелось клином на pwm -моде а d.t.gap -ы можно косвенно оргнизовывать, спасибо всем огромное за помощь beer.gif

Код
uint16_t tauVal;
uint16_t dutVal;

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OCInitStructure.TIM_Pulse = dutVal>>1;
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
    
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    
  TIM_OCInitStructure.TIM_Pulse = (tauVal-(dutVal>>1));
  TIM_OC4Init(TIM3, &TIM_OCInitStructure);
  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);


-получилось супер, если dutVal=tauVal -выходит чистый меандр, dutVal<tauVal появляется зазор для (полу)мостов,
если dutVal>tauVal то позволяет перекрывать импльсы, бывает полезно когда отдельные первички на ключ,
а потенцальная возможность отдельно управляя каналами бороть ДС -подмагничивание наверно очевидна...
maksimp - персонально a14.gif !
khach
Подскажите, как рулить этим PWM при регулировке моста? Т.е какой параметр отвечает за мощность и какие ограничения надо проверять в цикле регулировки, чтобы не взорвать силовой мост?
И второй вопрос- все тоже самое, но мост квазирезонансный, и рулить надо частотой. Как организовать процесс управления, чтобы никакое несчастное прерывание не сбило симметрию моста и не устроило вейерверк из 10 квт инвертора?
dimone
Цитата(khach @ Jan 24 2013, 13:16) *
Подскажите, как рулить этим PWM при регулировке моста?

-Если на моеи реализации, то tauVal -грубо говоря задает частоту, dutVal -характеризует активное состояние ключа. Выдерживая корректное условие dutVal<=tauVal/dT, где (dT-максимально разрешенная доля заполнения от tauVal) вы убережете мост от сквозных токов. Установив -работает аппаратно , а остальное думается относится к вашему алгоритму управления и обртной связи..
п.с. для квазирезонансного варианта по датчику "зеро кросс" можно организовывать синхронный сброс, или регулировать частоту в режиме puls-to-pulse по ошибке между вышупомянутым датчиком и выходным сигналом
khach
Цитата(dimone @ Jan 24 2013, 12:44) *
-Если на моеи реализации, то tauVal -грубо говоря задает частоту, dutVal -характеризует активное состояние ключа. Выдерживая корректное условие dutVal<=tauVal/dT, где (dT-максимально разрешенная доля заполнения от tauVal) вы убережете мост от сквозных токов. Установив -работает аппаратно , а остальное думается относится к вашему алгоритму управления и обртной связи..
п.с. для квазирезонансного варианта по датчику "зеро кросс" можно организовывать синхронный сброс, или регулировать частоту в режиме puls-to-pulse по ошибке между вышупомянутым датчиком и выходным сигналом

Это понятно. Интересовали готовые куски кода, ответственные за изменение параметров управляющей цепи. С обсуждением, что менять, насколько можно менять за один шаг, Какую быструю, простую и безопасную математику использовать, какие условия проверять для безопасности процесса управления, как грузить регистры таймеров приготовленными данными чтобы было безопасно, как избежать несимметрии силового моста. Есть кое-кикие наработки по этому поводу, но хотелось бы начать публичное обсуждение, а не навязывать свою точку зрения.
Можно для начала что-нибудь простенькое, типа сварочного инвертора обсудить. Как раз хороший макет для отработки алгоритмов управления и всем доступен и недорог, если взорвется.
Зато куча интересных режимов управления возможна= ХХ, поджиг (возможно резонансный), стабилизация напряжения, тока, мощности дуги, КЗ, ограничения по скорости изменения мощности, иначе трансформатор можно перемагнитить из-за ассиметрии управления.
ЗЫ STM подало аппликацию на патент на таймер с триггерами US20120112814- значит скоро конец мучений.
MK2
Цитата(dimone @ Jan 24 2013, 13:44) *
Выдерживая корректное условие dutVal<=tauVal/dT, где (dT-максимально разрешенная доля заполнения от tauVal) вы убережете мост от сквозных токов. Установив -работает аппаратно
....
п.с. для квазирезонансного варианта по датчику "зеро кросс" можно организовывать синхронный сброс, или регулировать частоту в режиме puls-to-pulse по ошибке между вышупомянутым датчиком и выходным сигналом

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

P.S, под "zero cross" вы имеету ввиду датчик тока?! вроде ТТ? не очень понятно если вы делаете по датчику сброс таймеров то ошибки с выходным сигналом быть не должно. И еще квазирезонансный мост это phase shift bridge ? Если да то управление идет там не частотой...
koyodza
Лучше всего по-моему использовать два канала любого таймера, один в режиме ШИМ, второй в TOGGLE
Выход первого подключается ко входу SD драйвера типа IR2104, выход второго - ко входу IN
Если драйвер не нужен, вместо этого можно использовать любую внешнюю логику, достаточно половинки 74х139, одной 74х138, трёх элементов 74х00 / 74х02 или массы других вариантов.
Преимущество такого способа - генерирование происходит аппаратно, без использования DMA, ширина импульсов одинакова (если не происходит изменения), изменение скважности происходит записью только в один регистр, изменение частоты повторения также только одним регистром.
Если где-то будете использовать, особенно в публикациях, не забывайте правильно упоминать авторство wink.gif
khach
Цитата(MK2 @ Jan 24 2013, 18:47) *
И еще квазирезонансный мост это phase shift bridge ? Если да то управление идет там не частотой...

Нет, не фазосдвиговый мост. Квазирезонансный мост у меня- это инвертор для индукционного нагрева. В этих инверторах доботность контура достигает 10 и более. Если первичке при этом мощность 10-20 квт, то во вторичке циркулирует 200 КВАр. И при потере управления инвертором все это выделяется в транзисторах. Транзисторы работают на пределе по току, поэтому жесткая коммутация для них недопустима. Только режим ZVS-ZVC. Но тут еще одна ловушка- частота резонанса меняется в зависимости от того, что вставлено в индуктор нагревателя. А нагрузка меняется и во времени - работчий деталь вставил-вынул или нагрели выше точки Кюри- индуктивность изменилась почти скачком. Т.е необходма глубокая регулировка по частоте, как минимум в 2 раза.
dimone
Цитата(MK2 @ Jan 24 2013, 18:47) *
P.S, под "zero cross" вы имеету ввиду датчик тока?! вроде ТТ? не очень понятно если вы делаете по датчику сброс таймеров то ошибки с выходным сигналом быть не должно. И еще квазирезонансный мост это phase shift bridge ? Если да то управление идет там не частотой...

-Можно и датчик тока.. Ошибки дискриминатора быть не должно для установившегося процесса, а при изменении условий резонанса -появится, соответственно должна имется ОС. Конечно сброс -решение скорее подходящее для Ipeak ограничения . Для достжения квазирезонанса можно регулировать непосредственно частоту с помощью упомянутой ОС, правда нужно будет учитывать передаточную характеристику всей петли, что-б стабильно работало. Если это типовой сварочник,то дроссель в это время будет работать в режиме рассеяния защищая от перегруза, пока не наступит всеобщий резонанс. Для регулировки мощности все еще чуток усложнится.
п.с. не совсем понял насчет "квазирезонансный мост"...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.