AVR131 използва високоскоростна PWM, avr, програмиране
Бележката за приложениетоAVR131 се занимава с генериране на сигнал с помощта наPWM, високоскоростни тактови режими на брояча на таймера с помощта на предскалер. Абревиатурата PWM означава Широчинно-импулсна модулация (широчинно-импулсна модулация,PWM ). Такъв хардуерен модулатор има в някои AVR микроконтролери. Предоставени са примери за асемблиращ код, показващи използването на бърза ШИМ (бърза ШИМ, високоскоростна ШИМ) на микроконтролера ATtiny26. Малкият микроконтролер ATtiny15 също има таймер с възможност за ШИМ.
Бързият PWM режим се използва за генериране на импулсна последователност с променлив работен цикъл на щифта на микроконтролера OC1A (изходен порт PB1). Аналогов филтър (LPF) може да се използва за изглаждане на импулсите и получаване на обвивката на сигнала. По този начин можете да генерирате звуци, например синусоидална форма.
Предимството на високоскоростната ШИМ е увеличената честотна лента на генерирания аналогов изходен сигнал и опростяването на нискочестотния филтър поради високата честота на ШИМ - можете да използвате резистори и кондензатори за нискочестотен филтър с по-ниска стойност и по-малък размер.
[Малко теория: как работи ]
PWM, комбиниран с аналогов филтър, може да се използва за генериране на синтезирани аналогови изходни сигнали, което води до цифрово-аналогов преобразувател (DAC). Сигналът под формата на цифрови импулси 0 и 1 се генерира на базата на фиксирана честота и променлив работен цикъл (т.е. съотношението на продължителността на 0 и 1 варира). Ако трябва да увеличите нивото на аналоговия сигнал на изхода, тогава продължителността на дневника. 1 се увеличава, а продължителността на дневника. 0 намалява и обратно.
Осредняването на цифров сигнал за един период (с използване на нискочестотен филтър) генерира аналогов сигнал.Например работен цикъл от 50% (когато продължителност 0 е равна на продължителност 1) създава аналогов изходен сигнал с напрежение половината от захранващото напрежение, работен цикъл от 75% произвежда сигнал с напрежение 75% от захранващото напрежение. Примери за филтрирани резултати са показани в края на този документ.
Аналогов нискочестотен филтър, например, може да бъде изграден около пасивен RC филтър. Филтърът премахва високата базова честота и оставя аналогов сигнал на изхода. Граничната честота на филтъра трябва да бъде избрана достатъчно висока, за да не повлияе на интересуващия ни аналогов сигнал. В същото време граничната честота трябва да бъде възможно най-ниска, за да се минимизират пулсациите от базовата честота на ШИМ.
Ориз. 1. Най-простият LPF от първи ред.
Ако аналоговият сигнал трябва да бъде подаден към товар с нисък импеданс, той трябва да бъде усилен от буферен усилвател с висок импеданс, свързан между изхода на филтъра и приемника на сигнала. Това ще предотврати падането на нивото на сигнала и ще подобри работата на филтъра.
Пример за осцилограма на реален PWM сигнал с променящ се работен цикъл е показан на фиг. 2.
Ориз. 2. ШИМ изходен сигнал с променлив работен цикъл.
AVR използва таймери/броячи за генериране на PWM сигнали. За да промените основната честота на ШИМ, променете тактовата честота на таймера и горната стойност на брояча. Колкото по-висока е тактовата честота и/или колкото по-ниска е стойността на високия брой, толкова по-висока ще бъде базовата честота на ШИМ или скоростта на събитието препълване на таймера. При пълна разделителна способност (висока стойност на брояча 255), максималната базова честота на ШИМ е 250kHz. Увеличаването на базовата честота над тази стойност може да дойде с цената на намаляване на разделителната способност, тъй като се получава по-груба стъпка в диапазона от 0% до 100% работен цикъл.Промяната на стойността на регистрите за сравнение (Output Compare Registers, OCR) променя работния цикъл на PWM сигнала.
Увеличаването на стойността на OCR увеличава работния цикъл. Изходът на PWM е 1, докато броячът все още не е достигнал стойността на OCR, и е 0, когато броячът е надвишил стойността на OCR и продължава да брои до горната стойност. Този режим на генериране на PWM се нарича Fast-PWM режим (бърз PWM режим) или високоскоростен PWM (високоскоростен PWM).
Ориз. 3. Стойности на брояча и PWM изход.
Когато се използва високоскоростна ШИМ за генериране на аналогови сигнали, размерът на стъпката между аналоговите нива зависи от разделителната способност на ШИМ. Колкото по-висока е базовата честота, толкова по-лесно е да се филтрира на изхода и да се получи сигнал с по-малко пулсации. Изборът между резолюция и базова честота е компромис при създаване на приложение.
[Алтернативни употреби ]
Високоскоростният таймер може също да се използва за генериране на високочестотни цифрови сигнали, които могат да се използват за часовник на цифрови възли в приложение. Ако зададете горната граница на брояча на малка стойност, тогава е налично генериране на големи честоти.
Най-високата възможна тактова честота за високоскоростния таймер ATtiny26 е 64 MHz (prescler изключен). С базова честота на PWM от 16 MHz PWM (висока стойност на броя 3), стойността на OCR може да бъде зададена на 0, 1 (25% работен цикъл), 2 (50% работен цикъл, вижте A на фигура 4) или 3 (100% работен цикъл). Това показва, че понижаването на горната граница на броя увеличава базовата честота на ШИМ, но също така намалява резолюцията на ШИМ.
За да се постигне максимална изходна честота от таймера, той трябва да се стартира в режим без ШИМ. И двете стойности, и OCR, и горна границаcounts трябва да бъде настроен на 0. След това броячът остава на 0. Настройването на действието Output Compare Match за превключване на изхода ще накара таймера да се превключва с всеки такт на часовника, което ще доведе до 32 MHz сигнал (B на фигура 4).
Ориз. 4. Високочестотен цифров изход.
На фиг. Фигура 5 показва как се генерира синусоида от високоскоростния ШИМ изход.
Кодът се състои от 3 части: инициализация, обработка на прекъсване при препълване Timer1 (препълване ISR) цикъл с преминаване в режим на заспиване. Изпълнението предполага системна тактова честота от 8 MHz.
Ориз. 5. Примерен код на основния контур на генератора на синусоидален сигнал.
Инициализация. За да работи PWM изходът, щифтът Output Compare Timer1 (OC1A) трябва да бъде конфигуриран като изходен порт.
След това трябва да конфигурирате таймера: източникът за часовник на таймера се подготвя - PLL се стартира и честотата на системата е зададена (това е необходимо за работа). Отнема около 100 ms за стабилизиране на PLL, така че преди да започне основния код, той изчаква края на стабилизирането на PLL с анкета на флага за заключване на PLL. Веднага след като PLL бъде уловен, се избира желаната тактова честота за таймера.
След това режимът на ШИМ се избира така, че щифтът OC1A да превключва на събитие за съвпадение на сравнение и стойността на високия брой на таймера е настроена на 0xFF. Горната стойност на броя влияе върху разделителната способност на ШИМ (точността) и горната му честота - колкото по-висока е стойността на броя, толкова по-висока е точността (разделителната способност), но толкова по-ниска е основната честота на ШИМ. В този пример е зададена максималната стойност за горната стойност на броя.
Сега таймерът е готов за работа и настройва коефициента на разделяне на предскалерастартира таймера. Последната стъпка е да активирате прекъсването при препълване.
Ориз. 6. Подпрограма Init, инициализация на изхода и Timer1 за работа в режим Fast PWM.
Програма за обслужване на прекъсвания (ISR). Когато броячът на таймера достигне зададената горна граница в регистъра OCR1C (0xFF), се стартира манипулаторът на прекъсване при препълване (Timer1 Overflow ISR). Това се случва на редовни интервали, защото OCR1C не се променя. Този интервал е периодът на бързата изходна базова честота на PWM.
Изпълнението на кода за обработка на прекъсвания отнема 13 тактови цикъла на ядрото. Повикването и връщането добавя допълнително време, което води до общо 21 тактови цикъла на честотата на ядрото на системата. Тъй като Timer1 е 8-битов, прекъсването на таймера се случва на всеки 256/(PWM_clock/system_clock) цикъл. Примерът е проектиран да работи от вътрешен RC осцилатор на 8 MHz. Ако изберете максимална тактова честота на PWM от 64 MHz, тогава прекъсването на препълването на Timer1 ще се случва на всеки 32 цикъла на ядрото.
Въпреки че е възможно да се работи с PWM на максимална честота от 64 MHz, това приложение е избрало часовника на PWM, разделен на 4 от прескалера, т.е. 16 MHz, за да илюстрира използването на прескалера.
Ориз. 7. Обработчик на прекъсване при препълване Timer1.
Изчакване (неактивен). Режим на заспиване Idle се използва за поставяне на устройството в режим на ниска мощност, докато се чака следващото прекъсване. След обработка на прекъсването устройството се връща в спящ режим.
Осцилограми. Екранните снимки на вълните по-долу показват примери за формиране на синусоидален сигнал, генериран от PWM на ATtiny26. Формите на вълната показват изходаизходен сигнал OC1A, който произвежда широчинно-импулсен модулиран сигнал и с него филтриран PWM сигнал. Използва се обикновен RC филтър за изглаждане на PWM сигнала и превръщането му в синусоидален сигнал - аналогов сигнал, чиято амплитуда зависи от коефициента на запълване на изходния PWM сигнал. RC филтрите са настроени на R = 10 kΩ C = 100 nF, което води до честота на прекъсване на филтъра от 1 kHz, което позволява на нискочестотна синусоида да премине през филтъра, като същевременно успешно потиска високата базова честота на ШИМ.
Ориз. 8. Изход OC1A - филтриран и нефилтриран.
Ориз. 9. Изход OC1A - филтриран и нефилтриран (с разтягане по времевата ос).