|
двухтактный ШИМ на STM32 |
|
|
|
Jan 23 2013, 09:11
|
Частый гость
 
Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242

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

Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535

|
Цитата(dimone @ Jan 23 2013, 12:11)  Я предполагал что 6 -канальный ШИМ должен позволять организовать сдвиг фаз между парами, но вупор не догоняю как ( Да, он организовывает сдвиг фаз, но делает он это программно через прерывание таймера! это режим для шаговых движков посмотрите пример из STM32F10x Standard Peripherals Firmware Library посмотрите еще этот документкстати вариант с мастер слейвом лишит вас аппаратного dead time, так что опасно это (( скорее все приготовьтесь менять либо контроллер либо схему.
|
|
|
|
|
Jan 23 2013, 10:53
|
Частый гость
 
Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242

|
Цитата(MK2 @ Jan 23 2013, 14:21)  ... скорее все приготовьтесь менять либо контроллер либо схему. -кошмар, вот так люди и разочаровываются в камнях, меня в sam7 достало, что DMA не имеет циркуляции, теперь в STM оказывается нагородили кучу щита типа 6-канального ШИМ-а а чтоб примитивщину типа скалярного частотника на них сделать и фазы на 120 разнести вариант лишь "софтовый" и надо переписывать состояние всех выходов "in advance" с частотой дискретизации? А если это какой -нибудь несчастный сварочный инвертор, где на мост 40-50 кГц надо, то толку от всей этой перефирии лишь нейтрализация джиттера  теневыми регистрами? Похоже им не только софт индюки делают...
Сообщение отредактировал dimone - Jan 23 2013, 11:20
|
|
|
|
|
Jan 23 2013, 13:52
|
Частый гость
 
Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242

|
Цитата(MK2 @ Jan 23 2013, 16:22)  частотник можно замутить... векторный шим никто не отменял, у ST полно на эту тему апноутов обычный мост тоже можно сделать, фазный наверно только на F3 серии можно. Чегоито я совсем потерялся.. -хотелось разумным аппаратным способом получить два попеременных видеоимпульса с одинаковым периодом повторения и регулируемой длительностью. В подсказанном вами апноте на 7 ст. -как понимаю реализовано аппаратн о, но импульсы выровняны, т.е. не подходит, на ст. 9 -то что нужно, но реализовано с помощью sysTick прерываний , но на частоте в десятки килогерц такой вариант сдается не оптимальным, т.е. сделать можно, это так или еще как-то?
|
|
|
|
|
Jan 23 2013, 16:31
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
А если так (на 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: +---------------+ +---------------+ | | | | --------------+ +---------------------------+ +------------
Сообщение отредактировал maksimp - Jan 23 2013, 16:32
|
|
|
|
|
Jan 23 2013, 19:10
|
Частый гость
 
Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242

|
-вот- вот, и я думал, что не сошелось клином на pwm -моде а d.t.gap -ы можно косвенно оргнизовывать, спасибо всем огромное за помощь  Код 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 - персонально  !
Сообщение отредактировал dimone - Jan 23 2013, 20:56
|
|
|
|
|
Jan 24 2013, 10:44
|
Частый гость
 
Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242

|
Цитата(khach @ Jan 24 2013, 13:16)  Подскажите, как рулить этим PWM при регулировке моста? -Если на моеи реализации, то tauVal -грубо говоря задает частоту, dutVal -характеризует активное состояние ключа. Выдерживая корректное условие dutVal<=tauVal/dT, где (dT-максимально разрешенная доля заполнения от tauVal) вы убережете мост от сквозных токов. Установив -работает аппаратно , а остальное думается относится к вашему алгоритму управления и обртной связи.. п.с. для квазирезонансного варианта по датчику "зеро кросс" можно организовывать синхронный сброс, или регулировать частоту в режиме puls-to-pulse по ошибке между вышупомянутым датчиком и выходным сигналом
Сообщение отредактировал dimone - Jan 24 2013, 11:02
|
|
|
|
|
Jan 24 2013, 11:50
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

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

Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535

|
Цитата(dimone @ Jan 24 2013, 13:44)  Выдерживая корректное условие dutVal<=tauVal/dT, где (dT-максимально разрешенная доля заполнения от tauVal) вы убережете мост от сквозных токов. Установив -работает аппаратно .... п.с. для квазирезонансного варианта по датчику "зеро кросс" можно организовывать синхронный сброс, или регулировать частоту в режиме puls-to-pulse по ошибке между вышупомянутым датчиком и выходным сигналом если я вас правильно понял, как раз в таком режиме вы лишаетесь аппаратного deadtime (он действует в пределах одного канала), и если допустим случится софтварная ошибка(переполнения интегратора или еще что-нить) то сквозные токи обеспечены... но не надолго, поэтому хотя бы на этапе отладки поставьте "исключающие или" это снизит сквозные токи в таком случае. P.S, под "zero cross" вы имеету ввиду датчик тока?! вроде ТТ? не очень понятно если вы делаете по датчику сброс таймеров то ошибки с выходным сигналом быть не должно. И еще квазирезонансный мост это phase shift bridge ? Если да то управление идет там не частотой...
|
|
|
|
|
Jan 24 2013, 17:33
|

Местный
  
Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744

|
Лучше всего по-моему использовать два канала любого таймера, один в режиме ШИМ, второй в TOGGLE Выход первого подключается ко входу SD драйвера типа IR2104, выход второго - ко входу IN Если драйвер не нужен, вместо этого можно использовать любую внешнюю логику, достаточно половинки 74х139, одной 74х138, трёх элементов 74х00 / 74х02 или массы других вариантов. Преимущество такого способа - генерирование происходит аппаратно, без использования DMA, ширина импульсов одинакова (если не происходит изменения), изменение скважности происходит записью только в один регистр, изменение частоты повторения также только одним регистром. Если где-то будете использовать, особенно в публикациях, не забывайте правильно упоминать авторство
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|