Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Fast PWM mode
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ARV
Уважаемые коллеги!

Я тут встал в тупик, то ли заблудился в трех соснах, то ли просто туплю неподецки. Включаем режим Fast PWM для таймера AVR-ки, допустим, 8-битный. пишем в регистр OCR1A ноль - что будет на выходе OC1A? в даташите написано, что при сбросе устанавливается в 1, а при совпадении сброс происходит в следующем цикле счета, т.е. я так понимаю, чистого нуля на выходе получить нельзя? если я пишу 255 в регистр OCR1A - чистая единица на выходе получается, верно? т.е. получить коэффициент заполнения 0% невозможно в принципе? или я не прав?

осциллографа пока временно лишен, поэтому и вопрошаю... протеус показывает, что я прав, но можно ли ему верить? если на самом деле все именно так, как посоветуете побороть проблему? нужно именно нолик стабильный получать в режиме ШИМ.

bob1
Можно сделать 0 на выходе. OCR0=0xFF. COMn1=1. COMn0=1
ARV
но тогда получается, что МАКСИМАЛЬНОМУ значению в OCRx соответствует МИНИМАЛЬНОЕ значение коэффициента заполнения... а ведь вроде как в остальном диапазоне значений OCRx было иначе... что-то я не пойму ничего sad.gif
_Артём_
Цитата(ARV @ Dec 2 2012, 17:52) *
но тогда получается, что МАКСИМАЛЬНОМУ значению в OCRx соответствует МИНИМАЛЬНОЕ значение коэффициента заполнения... а ведь вроде как в остальном диапазоне значений OCRx было иначе... что-то я не пойму ничего sad.gif

Может поэтому он и называется инвертированный ШИМ-сигнал.
ARV
Цитата(_Артём_ @ Dec 2 2012, 19:58) *
Может поэтому он и называется инвертированный ШИМ-сигнал.
может быть, но что делать, если нужен ПРЯМОЙ сигнал с возможностью задать нулевой коэффициент заполнения?!
_Артём_
Цитата(ARV @ Dec 2 2012, 18:15) *
может быть, но что делать, если нужен ПРЯМОЙ сигнал с возможностью задать нулевой коэффициент заполнения?!

Преобразовать никак?
Палыч
Цитата(ARV @ Dec 2 2012, 20:15) *
... с возможностью задать нулевой коэффициент заполнения?!

Что мешает "отключить" ногу от таймера и выставить на ней нужный уровень ?
ARV
Цитата(Палыч @ Dec 2 2012, 21:35) *
Что мешает "отключить" ногу от таймера и выставить на ней нужный уровень ?

да принципиально ничто не мешает вообще потавить какой-нибудь DAC, но вопрос все-таки ставится иначе... делается некий регулятор, в нем все просто: вычислили коэффициент заполнения и выставили его в регистр. но если мы вычисляем 0, на самом деле на выходе получается далеко не ноль и регулятор не работает. попытки отслеживать всякие варианты и устанавливать уровни вручную приводят к усложнению и замедлению алгоритма регулятора, джиттеру ШИМ и т.п. неприятностям, поэтому очень хочется от всего этого уйти.
demiurg_spb
Большого замедления не будет (всего-то 1-2 такта): OCR = 0xFF-PWM;
ARV
Цитата(demiurg_spb @ Dec 3 2012, 09:26) *
Большого замедления не будет (всего-то 1-2 такта): OCR = 0xFF-PWM;
спасибо, до этого варианта я уже и сам додумался sm.gif я так понимаю, это для режима инверсного выхода?
demiurg_spb
Да.
ARV
увы, не выходит каменный цветок sad.gif
если делать OCR=255-PWM получается крайне неприятная вещь: было PWM=1, шли короткие иголки ШИМа, потом делаем PWM=0, в итоге отрабатывается один период ШИМа с единицей на выходе, а после этого устанавливается чистый 0. представьте себе работу регулятра в этом случае: уменьшали-уменьшали воздействие, компенсируя ошибку регулирования, и вот в момент, когда ошибка стала равна нулю, воздействие кратковременно становится 100%... само собой, регулятор болтает, как бакен в шторм...

P.S. в отсутствие осциллографа моделирую в протеусе... в реальности это так или нет?!
_Артём_
Цитата(ARV @ Dec 3 2012, 19:14) *
если делать OCR=255-PWM получается крайне неприятная вещь: было PWM=1, шли короткие иголки ШИМа, потом делаем PWM=0, в итоге отрабатывается один период ШИМа с единицей на выходе, а после этого устанавливается чистый 0. представьте себе работу регулятра в этом случае: уменьшали-уменьшали воздействие, компенсируя ошибку регулирования, и вот в момент, когда ошибка стала равна нулю, воздействие кратковременно становится 100%... само собой, регулятор болтает, как бакен в шторм...

OCR1A - двух байтовый, поэтому может так:
Код
OCR=0x100-PWM;

?
При PWM=0 OCR1A станет равен 0x100 и единицы не будет.
ARV
для 8-битного ШИМ OCR=0xFF дает ноль на выходе. но вот перед тем, как этот ноль появляется, в протеусе я вижу один цикл ШИМа с единичкой на выходе...
Палыч
Цитата(ARV @ Dec 3 2012, 21:55) *
для 8-битного ШИМ OCR=0xFF дает ноль на выходе. но вот перед тем, как этот ноль появляется, в протеусе я вижу один цикл ШИМа с единичкой на выходе...
Верятно, причина в этом:
Цитата
The OCR Register is double buffered when using any of the Pulse Width Modulation
(PWM) modes. For the normal and Clear Timer on Compare (CTC) modes of operation,
the double buffering is disabled. The double buffering synchronizes the update of the
OCR Compare Register to either top or bottom of the counting sequence. The synchronization
prevents the occurrence of odd-length, non-symmetrical PWM pulses, thereby
making the output glitch-free.
ARV
причина, возможно, и в этом... но вопрос-то был не про причину, а про борьбу с ней. выходит, что польза от данного аппаратного ШИМа в регуляторах всьма сомнительна... пока борюсь самым нерациональным способом - выключая режм ШИМ при pwm==0 и включая в противном случае... но ведь это же костыль к очкам... неужели никто не делал никаких регуляторов на AVR с ШИМом?!
Палыч
Цитата(ARV @ Dec 4 2012, 10:43) *
выходит, что польза от данного аппаратного ШИМа в регуляторах всьма сомнительна... пока борюсь самым нерациональным способом - выключая режм ШИМ при pwm==0 и включая в противном случае... но ведь это же костыль к очкам... неужели никто не делал никаких регуляторов на AVR с ШИМом?!

ШИМ вместо ЦАП - это, по большому счету, - тот же костыль. Применять, имхо, можно при точности - "плюс-минус пол-лаптя", например, при регулировке яркости "чего-то там" до "комфортной" и т.п. Или, например, при дилемме - "точность vs миниатюрность"...
Tanya
Цитата(ARV @ Dec 4 2012, 10:43) *
... но ведь это же костыль к очкам... неужели никто не делал никаких регуляторов на AVR с ШИМом?!

Какая разница, какой контроллер. Таким способом можно управлять чем-то значительно более инерционным, чем период ШИМа. Можно несколько улучшить прореживая - т.е вместо 11110000 подавать 10101010. Но теряется преимущество аппаратного ШИМа.
demiurg_spb
Цитата(Палыч @ Dec 4 2012, 12:15) *
ШИМ вместо ЦАП - это, по большому счету, - тот же костыль. Применять, имхо, можно при точности - "плюс-минус пол-лаптя", например, при регулировке яркости "чего-то там" до "комфортной" и т.п. Или, например, при дилемме - "точность vs миниатюрность"...
Да ладно вам. У меня в приборах сделаны гальваноизолированные аналоговые выходы 4-20 мА именно на ШИМ и именно на AVR.
И внесены в госреестр с классом точности ЦАП 0.5.
Ничего не мешает сделать их с классом 0.25 и даже 0.1. Вопрос кому это надо и вопрос себестоимости.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.