- ПВМ пинови у АВР микроконтролеру Атмега16
- Шта је ПВМ сигнал?
- Компоненте потребне
- Кружни дијаграм
- Програмирање Атмега16 за ПВМ
Модулација ширине импулса (ПВМ) је моћна техника где се ширина импулса мења одржавањем фреквенције константном. Техника се данас користи у многим системима управљања. Примена ПВМ-а није ограничена и користи се у широком спектру апликација као што су контрола брзине мотора, мерење, контрола снаге и комуникација итд. У ПВМ техници се лако може генерисати аналогни излазни сигнал помоћу дигиталних сигнала. Овај водич ће вам помоћи да разумете ПВМ, његове терминологије и како га можемо применити помоћу микроконтролера. У овом упутству ћемо демонстрирати ПВМ помоћу микроконтролера АВР Атмега16 променом интензитета ЛЕД-а.
Да бисте детаљно разумели основе ПВМ-а, идите на наше претходне водиче о ПВМ-у са различитим микроконтролером:
- Водич за ПВМ за АРМ7-ЛПЦ2148: Контрола осветљености ЛЕД диода
- Модулација ширине импулса (ПВМ) помоћу МСП430Г2: Контрола осветљености ЛЕД-а
- Генерисање ПВМ-а помоћу ПИЦ микроконтролера са МПЛАБ и КСЦ8
- Модулација ширине импулса (ПВМ) у СТМ32Ф103Ц8: Контрола брзине једносмерног вентилатора
- Генерирање ПВМ сигнала на ГПИО пиновима ПИЦ микроконтролера
- Водич за ПВМ за Распберри Пи
ПВМ пинови у АВР микроконтролеру Атмега16
Атмега16 има четири наменска ПВМ пина. Ови пинови су ПБ3 (ОЦ0), ПД4 (ОЦ1Б), ПД5 (ОЦ1А), ПД7 (ОЦ2).
Такође Атмега16 има два 8-битна тајмера и један 16-битни тајмер. Тимер0 и Тимер2 су 8-битни тајмери, док је Тимер1 16-битни тајмер. Да бисмо генерисали ПВМ, морамо имати преглед тајмера јер се тајмери користе за генерисање ПВМ-а. Као што знамо да је фреквенција број циклуса у секунди на коме тајмер ради. Тако ће нам већа фреквенција дати бржи тајмер. У генерисању ПВМ-а, бржа ПВМ фреквенција даће финију контролу над излазом, јер може брже реаговати на нове радне циклусе ПВМ-а.
У овом водичу за ПВМ за Атмега16 користићемо Тимер2. Можете одабрати било који радни циклус. Ако не знате шта је радни циклус у ПВМ, хајде да разговарамо укратко.
Шта је ПВМ сигнал?
Модулација ширине импулса (ПВМ) је дигитални сигнал који се најчешће користи у управљачким круговима. Време током којег сигнал остаје висок назива се „он тиме“, а време током којег сигнал остаје низак се назива „време искључења“. Постоје два важна параметра за ПВМ о којима се говори у наставку:
Радни циклус ПВМ
Проценат времена у којем ПВМ сигнал остаје ВИСОК (на време) назива се радни циклус.
Као и код импулсног сигнала од 100мс, ако је сигнал ВИСОК 50мс и НИСАК 50мс, то значи да је пулс био полувреме ВИСОК, а пола времена НИСКО. Тако можемо рећи да је радни циклус 50%. Слично томе, ако је пулс у ВИСОКОМ стању од 25 мс, а од 100 мс у НИСКОМ стању од 75 мс, тада би радни циклус био 25%. Приметите да израчунавамо само трајање ВИСОКОГ стања. Можете погледати доњу слику за визуелно разумевање. Формула радног циклуса је тада,
Радни циклус (%) = време укључивања / (време укључивања + време искључења)
Дакле, променом радног циклуса можемо променити ширину ПВМ-а, што резултира променом осветљености ЛЕД-а. Имаћемо демонстрацију коришћења различитог радног циклуса за контролу осветљености ЛЕД диода. Погледајте демо видео на крају овог водича.
Након избора радног циклуса, следећи корак би био избор ПВМ режима. Режим ПВМ одређује како желите да ПВМ ради. Постоје углавном 3 врсте ПВМ режима. То су следећи:
- Брзи ПВМ
- Фаза коректна ПВМ
- Фазни и фреквенцијски тачни ПВМ
Брзи ПВМ се користи тамо где промена фазе није битна. Коришћењем брзог ПВМ-а можемо брзо извести вредности ПВМ-а. Брзи ПВМ се не може користити тамо где промена фазе утиче на рад као што је управљање мотором, па се у таквој примени користе и други начини ПВМ-а. Будући да ћемо контролисати осветљеност ЛЕД-а тамо где промена фазе неће много утицати, па ћемо користити брз ПВМ режим.
Сада ћемо генерисати ПВМ, контролисаћемо интерни тајмер да одбројава, а затим ћемо вратити на нулу при одређеном бројању, тако да ће тајмер одбројавати, а затим враћати на нулу изнова и изнова. Ово поставља период. Сада имамо могућност управљања пулсом, УКЉУЧИВАЊЕ пулса на одређеном бројачу у тајмеру док он расте. Када се бројач врати на 0, искључите пулс. Са овом има пуно флексибилности, јер увек можете приступити бројачу тајмера и пружити различите импулсе једним тајмером. Ово је сјајно када желите да контролишете више ЛЕД диода одједном. Почнимо сада да повезујемо једну ЛЕД диоду са Атмега16 за ПВМ.
Овде погледајте све пројекте повезане са ПВМ-ом.
Компоненте потребне
- Атмега16 АВР микроконтролер ИЦ
- Кристални осцилатор од 16 МХз
- Два кондензатора од 100 нФ
- Два кондензатора од 22 пФ
- Тастер
- Јумпер Вирес
- Бреадбоард
- УСБАСП в2.0
- 2 ЛЕД (било која боја)
Кружни дијаграм
Користимо ОЦ2 за ПВМ, односно Пин21 (ПД7). Дакле, повежите једну ЛЕД диоду на ПД7 пину Атмега16.
Програмирање Атмега16 за ПВМ
Комплетан програм је дат у наставку. Снимите програм у Атмега16 помоћу ЈТАГ и Атмел студија и погледајте ПВМ ефекат на ЛЕД. Његова осветљеност ће се полако повећавати и смањивати због променљивог радног циклуса ПВМ. Проверите видео запис дат на крају.
Почните са програмирањем Атмега16 подешавањем Регистра Тимер2. Битови регистра Тимер2 су следећи и према томе можемо поставити или ресетовати битове.
Сада ћемо разговарати о свим битовима Тимер2 да бисмо могли добити жељени ПВМ користећи писани програм.
У регистру Тимер2 налазе се углавном четири дела:
ФОЦ2 (Форце Оутпут Цомпаре фор Тимер2): ФОЦ2 бит је постављен када ВГМ битови одређују режим који није ПВМ.
ВГМ2 (начин генерисања таласа за тајмер2): Ови битови контролишу секвенцу бројања бројача, извор максималне (ТОП) вредности бројача и врсту генерације таласног облика која ће се користити.
ЦОМ2 (Упореди излазни режим за тајмер2): Ови битови контролишу понашање излаза. Комплетан опис бита је објашњен у наставку.
ТЦЦР2 - = (1 <
Поставите ВГМ20 и ВГМ21 битове као ВИСОКО да бисте активирали ПВМ брзи режим. ВГМ стоји за режим генерисања таласних облика. Изборни битови су као испод.
ВГМ00 |
ВГМ01 |
Рад у режиму Тимер2 |
0 |
0 |
Нормал |
0 |
1 |
ЦТЦ (Цлеар Тимер Он Матцх Матцх) |
1 |
0 |
ПВМ, фаза исправна |
1 |
1 |
Брзи ПВМ режим |
За више детаља о начину генерисања таласних облика можете погледати званични лист података Атмега16.
ТЦЦР2 - = (1 <
Такође нисмо користили никакво претходно скалирање, па смо поставили регистар извора сата као '001'.
Битови за одабир сата су следећи:
ЦС22 |
ЦС21 |
ЦС20 |
Опис |
0 |
0 |
0 |
Нема извора сата (тајмер / бројач заустављен) |
0 |
0 |
1 |
цлк Т2С / (без прескалирања) |
0 |
1 |
0 |
Цлк Т2С / 8 (из уређаја за предскаливање) |
0 |
1 |
1 |
Цлк Т2С / 32 (из уређаја за предскаливање) |
1 |
0 |
0 |
Цлк Т2С / 64 (из уређаја за предскалирање) |
1 |
0 |
1 |
Цлк Т2С / 128 (из уређаја за предскалирање) |
1 |
1 |
0 |
Цлк Т2С / 256 (из уређаја за предскалирање) |
1 |
1 |
1 |
Цлк Т2С / 1024 (из система за уклањање скала) |
Такође се ОЦ2 брише при упоређивању подударањем постављањем ЦОМ21 бита као '1' и ЦОМ20 као '0'.
Опције избора режима упоређивања излаза (ЦОМ) за брзи режим ПВМ дате су у наставку:
ЦОМ21 |
ЦОМ21 |
Опис |
0 |
0 |
Нормалан рад порта, ОЦ2 је искључен. |
0 |
1 |
Резервисано |
1 |
0 |
Обришите ОЦ2 на упоредном мечу, поставите ОЦ2 на ВРХ |
1 |
1 |
Поставите ОЦ2 на упоредни меч, очистите ОЦ2 на врху |
Повећајте радни циклус са 0% на 100%, тако да ће се осветљеност временом повећавати. Узмите вредност од 0-255 и пошаљите је на ОЦР2 пин.
фор ( дути = 0; дути <255; дути ++) // 0 до максималног радног циклуса { ОЦР2 = дути; // полако повећавамо осветљеност ЛЕД-а _делаи_мс (10); }
Слично томе смањите радни циклус са 100% на 0% да бисте постепено смањивали осветљеност ЛЕД диода.
фор (дути = 0; дути> 255; дути--) // макс. до 0 радни циклус { ОЦР2 = дути; // полако смањујемо осветљеност ЛЕД _делаи_мс (10); }
Овим је завршен наш водич за употребу ПВМ-а у Атмега16 / 32.