Mikrokontroller algoritmida PWM dasturiy ta'minoti. AVR-da boy kanalli PWM dasturi. Yangi zarur dasturiy ta'minot PWM

Golovna / Asosiy funksionallik

Raqamli qo'shimchalar, masalan, mikrokontroller shunga teng ikkita signal bilan ishlashi mumkin. nol va bitta yoki o'tkazib yuborilgan va o'tkazib yuborilgan. Ushbu darajada siz behudalik holatini nazorat qilish uchun osongina yoga aylantira olasiz, masalan, uni o'chiring yoki yorug'likni o'chiring. Bundan tashqari, siz keruvannya uchun yoga vicorate mumkin, u elektr aksessuar, vicoristovuyuchi turli drayverlarga (tranzistor, simistor, o'rni va boshqalar) bo'lsin. Lekin ba'zan sizga ko'proq kerak bo'ladi, faqat qo'shimchalarni "yoqish" va "o'chirish" ni pasaytiring. Chunki siz yorug'lik manbasining (yoki chiroqning) yorqinligini yoki dvigatelning tezligini nazorat qilishni xohlaysiz tez tuzum, keyin raqamli signallar Men hech narsa haqida o'ylay olmayman. Bu holat raqamli texnologiyada tez-tez muhokama qilinadi va deyiladi Impuls kengligi modulyatsiyasi (PWM).

Barcha zamonaviy mikrokontrollerlar PWM signaliga mos keladigan maxsus jihozlarga ega bo'lsin. Ushbu darajada biz SHIM texnikasining asoslarini o'rganishimiz kerak va AVR mikrokontrollerlari yordamida SHIMni amalga oshirish yaxshiroqdir.

Mikrokontroller kabi raqamli qo'shimchalar chiqish liniyalarida yuqori = 5V va past = 0V bo'lgan ikkitadan ortiq darajalarni yaratishi mumkin. Ale sho, yakscho mi 2,5 chi 3,1 chi ni olmoqchimi, bu 0-5V oralig'idagi kuchlanishmi? Chiqishda doimiy oqimning doimiy kuchlanishini yaratish uchun biz yuqori = 5V va past = 0V teng bo'lgan meander hosil qilamiz (div. Baby 1).

1-rasm

Kichkintoydan ma'lum bir soat uchun signal past va yuqori darajada to'lib ketganligini ko'rish mumkin. T0 - past riven, T1 - yuqori riven. Signal davri T = T0+T1. Impulslar davri- ikki susidnyh ípulsív ikki xarakterli nuqtalari orasidagi tse interval. Ikki jabha orasidagi davrni yoki ikkita tomir impulslarining retsessiyasi bilan ovoz chiqarib, lotincha T harfini bildiring.

Impulslarning vositachisiz o'tish davri impulslar ketma-ketligining chastotasi bilan mos keladi va uni quyidagi formula yordamida hisoblash mumkin: T = 1/F

T1 impulsi T davrining yarmiga to'liq teng bo'lsa, bunday signal ko'pincha "meander" deb ataladi.

Impulslarning ish sikli impulslarning ularning trivalligiga o'tish davri deb ataladi va S harfi bilan belgilanadi: S=T/T1

Mehribonlik aql bovar qilmaydigan qadriyat va dunyoda yolg'iz bo'lolmaydi, lekin u yuzlab ayollarda ham namoyon bo'lishi mumkin. Bu atama ko'pincha ingliz tilidagi matnlarda qo'llaniladi ish aylanishi, Tse shunday PWM ning tugallanish koeffitsienti yoki ish siklining qiymatini tartiblaydi. To'ldirish koeffitsienti D - shpalning egri chizig'ining qiymati.

To'ldirish koeffitsienti vidsotkaxda kuylang va quyidagi formula bo'yicha hisoblang: D=1/S yoki shunday D=T1/T*100%

Kichkintoyda (1-rasm) siz yarim soat davomida T1 \u003d T0 tupurishingiz mumkin. Shunday qilib, PWM ish tsiklining qiymati 50% ga aylanadi. Bunday impulslarning chastotasi yuqori bo'lgani uchun (aytaylik, 5000 Gts), biz 5V tobtoning yarmini olamiz. 2,5 V. Bunday martabada, natijada, boshqaruvchining dvigateldan chiqarilishi (qo'shimcha haydovchilar yordami uchun) umumiy tezlikning 50% ga bog'liq. Texnika ShíM vikoristovuê tsey fakt yaratish uchun ikki teng o'rtasidagi kuchlanish (masalan, 0-12V orasida). Barcha e'tibor ish tsiklining qiymatini 0-100% oralig'ida o'zgartirganda, biz chiqishda bir xil kirish kuchlanishini olib tashlaymiz. Quyida ko'rsatilgan, PWM signalini boshqa tejamkorlik signaliga qo'llang.

Agar siz chiqishga R / C filtrini qo'ysangiz, kvadrat to'lqinni emas, balki signalga teng sof DCni olishingiz mumkin. Ammo bu kollektor dvigatellari uchun emas, balki yorug'lik chiqaradigan diodlarni boshqarish uchun kerak. Buning uchun PWM signalini to'g'ridan-to'g'ri haydovchiga qo'llash mumkin (masalan, bipolyar tranzistor, MOSFET ham).


Robot rejimida 16-rozr. Taymer taymerning ishlash rejimini (WGMn3-0) va shakllanish rejimini o'rnatadigan bitlarning kombinatsiyasi bilan belgilanadigan impulslarning shakllanishi chiqishiga operatsiya algoritmi va u bilan bog'liq xatti-harakatlar bilan o'rganiladi. chiqish signalining (COMnx1:0). Chiqish signalini shakllantirish rejimini belgilash uchun rahunka algoritmini qo'shing, chunki Kelajakda yotish algoritmi robot taymer rejimiga o'rnatiladi. COMnx1:0 PWM bitli rejimlarda siz ishlab chiqarilgan PWM chiqishida inversiyani yoqish/o‘chirish mumkin (inversiyali PWM yoki inversiyasiz PWM ni tanlash uchun). PWM bo'lmagan rejimlar uchun COMnx1:0 bitlari o'rnatiladi, shuning uchun o'tish vaqtida uni o'chirish kerak bo'ladi: chiqishni tashlang, kiriting, teskari o'zgartiring (shuningdek, "Chiqish signalini shakllantirish bloki" va "Taymerning soat diagrammasi"). 16 o'lchamli taymer-zajigalkalar").

Oddiy ish rejimi

O'zi oddiy rejim Robot normal rejimda (WGMn3-0 = 0b0000). Da bu rejim lichnik summa (qo'shimcha) sifatida ishlaydi, bu bilan lichnik chegirmaga ega emas. Lichnikni almashtirish maksimal 16-bitga o'tishda bir soat davomida talab qilinadi. qiymati (0xFFFF) pastki diapazonga (0x0000). Oddiy ishda, agar TCNTn nol qiymatini oladigan bo'lsa, TOVn taymerini qayta o'rnatish bayrog'i bir xil soat sikliga o'rnatiladi.

Aslida, TOVn qayta tartiblash bayrog'i ko'z qisish uchun taymer ro'yxatining 17-biti bo'lib, vinlar faqat tiklanadi va tashlanmaydi. Shu bilan birga, taymerning taqsimlanishini oshirish uchun dasturiy ta'minot quvvatini o'zgartirish mumkin, shuning uchun siz taymerni qayta tartiblashni o'zgartirishingiz mumkin va agar TOVn ensignlaridan biri topilsa, ular avtomatik ravishda o'chiriladi. Oddiy ish rejimi uchun maxsus holatlar yo'q, shuning uchun yangi lichilnikning kirishi vickonano be-bunday mit bo'lishi mumkin.

Oddiy rejimda siz suratga olish blokini bekor qilishingiz mumkin. Biroq, agar siz izni kuzatib boradigan bo'lsangiz, teng bo'laklarning vinifikatsiyalari orasidagi maksimal interval lichnikni qayta tartiblash davridan oshmaydi. Agar bunday aqlga erishilmasa, taymer-lichilnik va rozpodilnikni o'zgartirish kerak.

Tanaffuslar yaratish uchun sindirish blokini buzish mumkin. Oddiy ishlashda signallarga mos kelish uchun OCnx-ni bekor qilish tavsiya etilmaydi, chunki bu vaqtda protsessor soatining muhim qismi kuzatiladi.

Taymerni o'tkazib yuborish rejimi píd h zbígu (STS)

STS rejimida (WGM01, WGM00 = 0b10) ijarachining ijara haqini belgilash uchun OCR0 registri tekshiriladi. Har safar CTC rejimi o'rnatilganda va kvalifikatsiya qiymati (TCNT0) OCR0 registrining qiymatiga o'rnatilganda, kvalifikator nolga qaytariladi (TCNT0=0). Ushbu tartibda OCR0 lichnik rahunkasining yuqori qismini, shuningdek, binoning ikkinchi bo'linmasini o'rnatadi. Ushbu rejimda hosil bo'ladigan to'g'ri chiziqli impulslar chastotasini yanada kengroq tartibga solish ta'minlanadi. Vín, shuningdek, ovnishnyh podiyning lichnik ishini osonlashtiradi.

Taymerni ishga tushirish rejimida (WGMn3-0 = 0b0100 yoki 0b1100) taymerni sozlash OCRnA yoki ICRn registrlari tomonidan o'rnatiladi. CTC rejimida qo'ng'iroqni qayta o'rnatish (TCNTn) talab qilinadi, bu qiymat OCRnA registrining (WGMn3-0 = 0b0100) yoki ICRn (WGMn3-0 = 0b1100) qiymatlaridan olinganligini anglatadi. OCRnA yoki ICRn registrining qiymati oynaning yuqori chegarasini, shuningdek, taymerning alohida sozlanishini belgilaydi. Ushbu rejimda hosil bo'ladigan to'g'ri chiziqli impulslar chastotasini yanada kengroq tartibga solish ta'minlanadi. Vín, shuningdek, ovnishnyh podiyning lichnik ishini osonlashtiradi. Taymerning STS rejimida ishlashining soatlik diagrammasi kichik ko'rinishda ko'rsatilgan 1. Taymer (TCNTn) o'z vaqtini OCRnA va ICRn qiymatlariga erishilgan soatga qadar oshiradi, bu taymer (TCNTn) bekor qilinadi.

1-rasm - STS rejimi uchun vaqt diagrammasi

Agar siz palataning yuqori chegarasiga etib borgan bo'lsangiz, siz qo'shimcha OCFnA yoki ICFn, palataning yuqori chegarasini boshqarish uchun g'olib bo'lgan qo'shimcha registrlar uchun o'zgarishlarni yaratishingiz mumkin. Qayta tiklashga ruxsat berilgan bo'lsa ham, ko'krak qafasining yuqori chegarasini yangilash uchun qayta tiklash jarayoni amalga oshirilishi mumkin. Biroq, rahunka tepasining qiymati rahunka orasidagi pastki qiymatga yaqin, agar lichnik farqsiz yoki farqning kichik qiymati bilan ishlasa, alohida e'tibor bilan g'alaba qozonish kerak, chunki. STS rejimida metro buferi mavjud emas. Agar OCRnA yoki ICRn da yozilgan qiymat joriy TCNTn qiymatidan kichik bo'lsa, u holda aqliy summa uchun lichilikning chegirmasi o'rnatiladi, agar qiymat maksimal qiymatga (0xFFFF) yetsa, u holda dam olish lageri 0x0000 va yangi OCRnA yoki ICRn qiymatiga erishildi. Boy vaziyatlarda bunday vaziyatni ayblash mumkin emas. Shu bilan bir qatorda, siz PWM rejimiga kirishingiz mumkin, ro'yxatdan o'chirish OCRnA oynaning yuqori chegarasini o'rnatadi (WGMn3-0 = 0b1111), chunki bu turdagi OCRnA past oqim buferiga ega bo'lishi mumkin.

CTC rejimida signal hosil qilish uchun OCnA chiqishi terining ohangidagi mantiqiy darajani o'zgartirish uchun o'zgartirilishi mumkin, buning uchun ovozni o'chirish rejimini o'rnatish kerak (COMnA1, COMnA0 = 0b01). OCnA qiymati ko'rsatilgan portda mavjud bo'ladi, agar u port to'g'ridan-to'g'ri chiqishga o'rnatilgan bo'lsa. Yaratiladigan signalning maksimal chastotasi fOC0 = fclk_I/O/2, shuning uchun OCRnA = 0x0000. OCRn ning boshqa qiymatlari uchun hosil bo'ladigan signalning chastotasi quyidagi formula bo'yicha aniqlanishi mumkin:

de o'zgartirish N predivisorning bo'linish koeffitsientini aniqlaydi (1, 8, 32, 64, 128, 256 yoki 1024).

Shunday qilib, odatdagi ish rejimida bo'lgani kabi, TOV0 belgisi ham xuddi shu taymer belgisiga o'rnatiladi, agar uning qiymati 0xFFFF dan 0x0000 gacha o'zgarsa.

Tez PWM rejimi (FAST PWM)

Qo'lda impuls kengligi modulyatsiyasi (PWM) rejimi (WGMn3-0 = 0b0101, 0b0110, 0b0111, 0b1110, 0b1111) boshqariladigan chastotada PWM impulslarini yaratish uchun topshiriqlar. Vídmínu víd ínshih modesív ív robotlarida, tomu vikoristovuêtsya odnosvjavovana lichilnikning roboti. Rakhunok rakhunkaning pastki chegarasidan yuqori chegarasiga to'g'ri chiziqda vykonuêtsya.

Agar inverting bo'lmagan chiqish rejimi o'rnatilgan bo'lsa, u holda TCNTn va OCRnx yoqilganda, OCnx signali tiklanadi va yuqori chegara tushiriladi. Agar ish rejimi teskari bo'lsa, u holda OCnx chiqishi ishga tushirilganda tushiriladi va oynaning yuqori chegarasiga o'rnatiladi. Bir yo'nalishli rahunka uchun ushbu rejim uchun ish chastotasi PWM rejimi va fazani to'g'rilashdan ikki baravar yuqori, rahunkaning ikki marta to'g'rilanishi yo'q. Ushbu rejimni o'g'irlash uchun yuqori chastotali PWM signallarini yaratish imkoniyati hayotni barqarorlashtirish, rektifikatsiya va raqamli-analog konvertatsiya qilish vazifalariga o'xshaydi. Yuqori chastota, bunda urish mumkin begona elementlar jismonan kichik kengaytmalar (indüktanslar, kondansatörler), sim tizimning umumiy varstini pasaytiradi.

Razdílní zdatníst SHíM 8, 9 yoki 10 ta raqamdan iborat boʻlishi yoki ICRn yoki OCRnA registrlari tomonidan oʻrnatilishi mumkin, lekin kamida 2 ta raqam (ICRn yoki OCRnA = 0x0003) va 16 ta raqamdan (ICRn yoki OCRnA = 0x0) koʻp boʻlmasligi mumkin. Yuqori chegara (VP) ning berilgan qiymatida Razdílna zdatníst ShíM kelayotgan daraja bilan hisoblanadi:

Shvidko shiM likilnik izmshamn rejimi zbiga io -io -io -io -ogs bilimiga 0x00ff, 0x01FF Abo 0x03FF (Yakshcho WGMN3: 0B0101, 0B0110 Abo 0B0110, AMOYaks (keyin WGMN3) taymer sinxronizatsiyasining keyingi soatiga kelib o'chiriladi. Shvetsiyalik PWM uchun vaqt diagrammasi kichik 2 da keltirilgan. Kichik ko'rsatkichlarda, agar OCRnA yoki ICRn registrlari yuqori chegarani o'rnatish uchun o'rnatilgan bo'lsa, shved PWM rejimi ko'rsatiladi. Grafikning bir yo'nalishini tasvirlash uchun soat diagrammasidagi TCNTn qiymati funktsiyaning grafigi sifatida ko'rsatilgan. Diagrammada PWM chiqishining inversiyalari va inversiyalari ko'rsatilgan. Qisqa gorizontal chiziq TCNTn grafigidagi nuqtani ko'rsatadi, OCRnx va TCNTnx qiymatlarini tuzatadi. OCnx bayrog'i ishga tushirish vaqtida tiklanmoqda.

Shakl 2 - Shved PWM rejimi uchun vaqt diagrammasi

Taymerni tiklash bayrog'i (TOVn) taymer yuqori chegaraga yetgan zahoti qayta o'rnatiladi. Bundan tashqari, TOVn bayrog'i bilan bir vaqtning o'zida bir xil soat pulsi bilan siz OCnA yoki ICFn bayroqlarini o'rnatishingiz mumkin, shuning uchun yuqori chegarani o'rnatish uchun OCRnA yoki ICRnni ro'yxatdan o'tkazish aniq. Agar o'tish joylaridan faqat bittasiga ruxsat berilsa, u holda o'tish joyini qayta ishlash tartib-qoidalari yuqori chegara va o'tish chegaralarini yangilash orqali amalga oshirilishi mumkin.

Agar yuqori chegaraning qiymati o'zgartirilsa, yuqori chegaraning yangi qiymati polning barcha registrlarida kattaroq yoki muhimroq bo'lishi uchun ehtiyotkorlik bilan o'ylash kerak. Boshqa holatda, TCNTn va OCRnx hech qanday tarzda qimirlamadi. Shuni ta'kidlash kerakki, yuqori chegaraning qiymati belgilangan bo'lsa, OCRnx registridagi yozuv 0 gacha bo'lgan zaryadsizlanishlar uchun maskalanadi, ular mag'lub bo'lmaydi.

ICRn registrini o'zgartirish mexanizmi OCRnA tomonidan turli holatlarda, shuningdek, yuqori chekka sozlamalari bilan o'zgartiriladi. ICRn registrini buferlab bo'lmaydi. Bu shuni anglatadiki, agar ICRn xodimning ish soati uchun kichik qiymatga kichik qiymat bilan yoki unsiz yozilsa, ICRn registriga qiymat yozish xavfsiz emas, chunki u ko'rsatilgan qiymatdan kichikroq ko'rinadi. TCNTn ning joriy qiymati. Natijada, bunday vaziyatda rahunkaning tepasida zbíg o'tkazib yuboriladi. Bunday holda, lichnik maksimal qiymatga (0xFFFF) ko'tariladi, 0x0000 qiymati bilan qayta ishga tushadi va keyin winkne zbig. To'g'ri buferlash sxemasini almashtirish uchun OCRnA ni ro'yxatdan o'tkazing, shuning uchun uni istalgan vaqtda o'zgartirish mumkin.

class="eliadunit">

OCRnA manzili uchun yozuv imzolangandan so'ng, qiymat aslida OCRnA bufer registriga joylashtiriladi. zbíg mizh TCNTn va rahunka yuqori natijasida, keyin taymer sinxronlashtirish keyingi tsikli bufer registrlari ostona OCRnA nusxa ko'chiradi. Registrni yangilash TCNTn o'chirilgan va TOVn belgisi o'rnatilgan bir vaqtning o'zida amalga oshiriladi.

Yuqori chegarani belgilash uchun ICRn registridan foydalanish tavsiya etiladi, chunki rahunkaning yuqori chegarasi doimiy hisoblanadi. Bunday holda, OCRnA registri OCnA chiqishida PWM signalini yaratish uchun ham o'rnatiladi. Biroq, PWM chastotasi dinamik ravishda o'zgarganligi sababli (yuqori chegaraning o'zgarishi tufayli), u holda yuqori chegarani belgilash uchun OCRnA registrini o'zgartirish kerak, chunki Vín pídtrimuê subvíynu buferlash.

Shved rejimida PWM bloklari OCnx kalitlarida PWM signallarini yaratishga imkon beradi. Agar COMnx1:0 =0b10 bo'lsa, u holda PWM chiqish inversiyasisiz o'rnatiladi va COMnx1:0 = 0b11 bo'lsa, PWM rejimi chiqish inversiyasi bilan o'rnatiladi (59-jadval bo'limi). Haqiqiy OCnx qiymati belgilangan portda tekshirilishi mumkin, chunki u to'g'ridan-to'g'ri chiqish (DDR_OCnx) ga o'rnatiladi. PWM signali OCRnx va TCNTn o'rtasida nosozlik yuzaga kelganda OCnx registrini o'rnatish (o'rnatish) yo'li bilan, shuningdek lichnikni qayta o'rnatish bilan bir vaqtda OCnx registrini tushirish (o'rnatish) yo'li bilan hosil bo'ladi. yuqori chegaradan pastki chegaraga o'tish).

Yuqori chegaraning (VP) berilgan qiymati uchun PWM chiqish signalining chastotasi shkala bilan aniqlanadi:

de N - o'zgartirish, siz taqsimlash koeffitsientining qiymatini o'rnatganingizdek (1, 8, 32, 64, 128, 256 yoki 1024).

OCRnx registrining chegara qiymatlarini kiritish PWM impulslarini yaratishdagi maxsus tebranishlar bilan bog'liq. Agar OCRnx pastki chegaraga (0x0000) teng bo'lsa, u holda chiqishda taymer sinxronizatsiya siklining qisqa teri pulsi (VP+1) hosil bo'ladi. OCRnx da nurga teng doimiy o'rnatishdan oldin nurning yuqori chegarasiga teng qiymatni yozish. Chiqishda 1 yoki 0 (chiqish signalining polaritesining qo'shimcha biti COMnx1: 0 shaklida depozit).

Odatdagidek, meander ishlab chiqarish talab qilinadi (2 yoki 50% to'ldirish uchun to'g'ridan-to'g'ri impulslar) yuqori chastotali, keyin u COMnA1 bit sozlash bilan swidkoy SHIM rejimini bekor qilish kerak bo'ladi: 0 = 0b01, shuning uchun mantiqiy darajasi teri zbígu davomida OCnA chiqishi o'zgartiriladi (teskari). Yuqori chegarani o'rnatish uchun OCRnA ni tanlash kerak bo'lganidek, buni qilish kerak (WGMn3-0 = 0b1111). Ushbu to'lqin shakli uchun hosil bo'lgan maksimal kvadrat to'lqin chastotasi fOCnA = fclk_I/O/2, ya'ni OCRnA =0x0000. Nima maxsus OCnA ni STS rejimida bir oz suzuvchi buferlash bilan almashtirishga o'xshaydi, masalan, PWM rejimida.

Fazalarni to'g'rilash bilan impuls kengligi modulyatsiyasi rejimi (faza to'g'ri)

Fazali to'g'rilash (PWM FC) bilan impuls kengligi modulyatsiyasi rejimi (WGMn3-0 = 0b0001, 0b010, 0b0011, 0b1010 yoki 0b1011) Fazali tuzatish va yuqori tarmoqli kengligi bilan PWM signalini yaratish uchun tayinlash. Ikki tomonlama robotli taymer-lichilnikni o'rnatish uchun PWM rejimi. Lichnik pastki chegaradan (0x0000) yuqori chegaragacha bo'lgan to'g'ri chiziqda tsiklik ravishda ko'z qisib, keyin yuqori chegaradan pastki chegaraga qaytib keladi. Impulsni shakllantirishning chiqishi uchun teskari bo'lmagan rejim vazifalariga qo'shimcha ravishda, TCNTn va OCRnx qiymati to'g'ridan-to'g'ri / teskari to'lqin soatiga sozlanganda OCnx chiqishi qayta o'rnatiladi / tiklanadi. Chiqish rejimi o'rnatilishi bilanoq, boshqa tomondan, o'rnatish kunning to'g'ridan-to'g'ri soatiga o'rnatiladi va OCnx chiqishi qaytish soatida bekor qilinadi. Ikki tomonlama robotlar bilan maksimal chastota PWM signali kichikroq, bir yo'nalishli robotlar bilan pastroq, ammo ikki tomonlama robotli PWM rejimlarida simmetriya kabi xususiyatlar tufayli qi rejimlari haydovchi boshqaruvi teskari aylantirilganda yaxshiroq aylanish uchun muhimdir.

Ushbu rejimda Razdílna zdatníst ShíM o'rnatilishi mumkin (8, 9 yoki 10 razryad) yoki qo'shimcha registr ICRn yoki OCRnA so'rang. Minimal sig‘im 2 tadan ortiq (ICRn yoki OCRnA = 0x0003), maksimali esa 16 ta raqam (ICRn yoki OCRnA = 0xFFFF). Agar yuqori chegara o'rnatilgan bo'lsa, ushbu rejimda PWM binosining o'lchami quyidagicha ko'rsatiladi:

WGM rejimida taymer 0x00FF, 0x01FF yoki 0x03FF sobit qiymatlaridan biriga (WGMn3-0 = 0b0001, 0b0010 yoki 0b0011 uchun amal qiladi), shuningdek ICRn ning teng qiymatiga (00 WG1:01) erishilgunga qadar oshadi. . Uzoqroqda, yuqori chegaraga etib borishda, lichnik to'g'ridan-to'g'ri rahunkani o'zgartiradi. TCNTn qiymati taymer sinxronizatsiyasining bir tsiklining yuqori chegarasiga teng saqlanadi. PWM FC rejimi uchun vaqt diagrammasi kichik 3 da ko'rsatilgan. Kichik ko'rsatkichlarda yuqori chegarani o'rnatish uchun qo'shimcha registr OCRnA va ICRn bilan PWM FC rejimi. Tasvirning ikki tomonlama to'g'riligini tasvirlash uchun funktsiyaning grafigi ko'rinishidagi TCNTn tasvirlarini tegirmon. Kichik miqyosda PWM chiqishining inversiyasiz va inversiyalari mavjud. p align="justify"> Qisqa gorizontal chiziqlar OCRnx qiymatlaridan chetga chiqqan TCNTn o'zgarishlar jadvalidagi nuqtalarni ko'rsatadi. OCnx bayrog'i ishga tushirish vaqtida tiklanmoqda.

3-rasm - PWM FC rejimi uchun vaqt diagrammasi

Taymerni tiklash bayrog'i (TOVn) har safar taymer pastki chegaraga yetganda qayta o'rnatiladi. Yuqori chegarani o'rnatishga kelsak, OCRnA yoki ICRn registrlari o'rnatiladi, OCnA yoki ICFn bayrog'i odatda bir xil taktli puls bilan o'rnatiladi, OCRnx registri bufer registridan yangilangan (ramkaning yuqori qismida). Prapori pererivannya lichnik tomonidan pastki yoki yuqori chegaraga yetib borganidan keyin avlod pererivannia uchun vikoristovuvatisya mumkin.

Yuqori ro'yxatga olish qiymatini o'zgartirganda, u barcha registrlarning qiymatlariga teng yoki kattaroq bo'lishi uchun chekni saqlash kerak. Boshqa holatda, TCNTn va OCRnx hech qanday tarzda qimirlamadi. Shuni ta'kidlash kerakki, bir soat davomida yuqori inter-raxunkaning qiymatini g'alaba bilan aniqlaganda, OCRnx registridagi rekord o'chiriladi, g'alaba qozonmaganlar esa nolga qaytadi. Kichkintoyning uchinchi davri - 53 ta illyustratsion tebranish, agar yuqori oqimning dinamik o'zgarishi assimetrik impulsning paydo bo'lishiga olib kelsa. Bu xususiyat OCRnx registrini yangilash soatiga asoslanadi. OCRnx yangilanishining parchalari rahunkaning tepasida paydo bo'ladi, keyin PWM davri rahunkaning tepasida boshlanadi va tugaydi. Bu shuni anglatadiki, teskari rahunkaning trivalligi yuqori chegaraning to'g'ridan-to'g'ri qiymatlariga, to'g'ridan-to'g'ri esa - yuqori chegaraning yangi qiymatlariga tayinlanadi. Farqning ahamiyatiga kelsak, unda to'g'ridan-to'g'ri va rahunkaning qaytarilishining trivalligi ham qayta ko'rib chiqiladi. Chiqish impulslarining assimetriyasini hosil qilish uchun vidminnist trevalozlik.

Joriy rejimni almashtirishda yuqori chegarani o'zgartirish uchun yuqori chegarani o'zgartirish uchun PFC rejimini (faza va chastotani tuzatish) o'zgartirish tavsiya etiladi. Yuqori chegaraning statik qiymati g'alaba qozongan bo'lsa-da, bu rejimlar o'rtasida deyarli hech qanday farq yo'q.

PWM FC rejimida Pairing Blocks OCnx simlarida PWM signallarini yaratishga imkon beradi. Agar siz COMnx1:0 = 0b10 ni o'rnatsangiz, PWM chiqishi inversiyasiz, COMnx1:0=0b11 bo'lsa, inversiya bilan bo'ladi. Aslida, OCnx qiymati chiqish portida kuzatilishi mumkin, xuddi registrdagi to'g'ridan-to'g'ri portga chiqish uchun to'g'ridan-to'g'ri ma'lumotlar (DDR_OCnx). PWM signali to'g'ridan-to'g'ri uyg'onish soati uchun OCRnx va TCNTn qiymati o'zgartirilganda OCnx registrini sozlash (o'rnatish) yo'li bilan, shuningdek, OCnx registrini tushirish (o'rnatish) yo'li bilan hosil bo'ladi. OCRnx va TCNTn qiymati qaytib aylanish soatiga o'rnatiladi. Belgilangan yuqori chegara (VP) bilan PWM FC rejimida PWM signalining natijaviy chastotasini quyidagi usul yordamida hisoblash mumkin:

OCRnx registrining chegara qiymatlarini yozish PWM FK rejimida PWM signallarini yaratishdagi maxsus tebranishlar bilan bog'liq. Agar siz PWM rejimini inversiyasiz o'rnatsangiz va OCRnx ni pastki chegaraga tenglashtirsangiz, u holda jurnal doimiy ravishda chiqishda o'rnatiladi. 0 va yuqori chegaraga teng bo'lsa, chiqishda doimiy ravishda mavjud bo'lgan nur mavjud. 1. Inversiya bilan PWM uchun tenglarning belgilanishi uzunliklar bilan almashtirilishi kerak.

Agar siz OCnA o'zgaruvchisini yuqori chegara sifatida belgilasangiz (WGMn3:0 = 0b1011) va COMnA1:0 =0b01 ni o'rnatsangiz, OCnA chiqishida kvadrat to'lqin hosil bo'ladi.

Faza va chastotani tuzatish bilan impuls kengligi modulyatsiyasi rejimi (faza va chastotani to'g'rilash)

Faza va chastotani to'g'rilash (PWM PFC) (WGMn3-0 = 0b1000 yoki 0b1001) bilan impuls kengligi modulyatsiyasi rejimi, faza va chastotani to'g'rilash bilan yuqori quvvat taqsimotida PWM impulslarini ishlab chiqarish uchun topshiriqlar. Ikki tomonlama robot zajigalkada poydevorlarning Yak i rejimi PWM FK rejimi PWM FChK. Ism tsiklik ravishda pastki chegaradan (0x0000) yuqori chegaraga, so'ngra yuqori chegaradan pastki chegaraga qaytariladi. Agar vazifalar teskari bo'lmagan PWM rejimi bo'lsa, OCnx chiqishi to'xtatiladi, bu to'g'ridan-to'g'ri to'lqinning bir soati uchun TCNTn va OCRnx TCNTn va OCRnx o'rtasida pasayishiga olib keladi va tiklanadi, bu esa pasayishiga olib keladi. qaytish to'lqinining soati. Invert rejimida robot teskari buriladi. Ikki yo'nalishli robot, bir yo'nalishli robotga mos ravishda, ko'proq avlodni yaratish bilan bog'liq past chastotalar. Biroq, ikki tomonlama nurli PWM rejimlarida simmetriya muammolari, ularni blokirovka qilish drayvlarni aylantirish vazifalarida muhimroqdir.

PWM va PFC rejimlari o'rtasidagi asosiy boshqaruv OCRnx registrini OCRnx bufer registridan yangilash vaqtida faol bo'ladi (bo'lim 3-rasm va 4-rasm).

Razdylna zdatníst SHIM ushbu rejimda qo'shimcha registr ICRn yoki OCRnA so'rashi mumkin. Minimal sig'im 2 darajagacha (ICRn yoki OCRnA = 0x0003), maksimal sig'im esa 16 ta raqam (ICRn yoki OCRnA = 0xFFFF). Razdílna zdatníst ShíM dan bunday viraz uchun undirish mumkin:

PWM FCH rejimida lichnik eng katta ICRn qiymatiga (WGMn3: 0 = 0b1000) yoki OCRnA da (WGMn3: 0 = 0b1001) oshiriladi. Tse rahunkaning tepasiga etib borishni anglatadi, shundan so'ng rahunka to'g'ridan-to'g'ri o'zgaradi. TCNTn qiymati taymer sinxronizatsiyasining bir soat tsikli bo'yicha diagrammaning teng yuqori qismi bilan to'ldiriladi. PWM PFC rejimi uchun vaqt diagrammasi kichik rasmda ko'rsatilgan 54. O'qishlar eskizida, PWM PFC rejimi, agar diagrammaning tepasi OCRnA yoki ICRn registrlari tomonidan o'rnatilgan bo'lsa. TCNTn qiymati displeyning ikki tomonlamaligini ko'rsatish uchun funktsiya grafigi sifatida ko'rsatilgan. Ko'rsatkichlar diagrammasida inverting bo'lmaganidek, PWM ni o'zgartiradigan PWM ham mavjud. Qisqa gorizontal chiziqlar TCNTn grafigining nuqtalariga ishora qiladi, OCRnx va TCNTn o'rtasida og'adi. OCnx qayta ishga tushirish bayrog'i boshlangandan keyin tiklanadi.

Shakl 4 - Faza va chastotani tuzatish bilan PWM rejimi uchun vaqt diagrammasi

Taymerni tiklash bayrog'i (TOVn) xuddi shu tsikl bilan o'rnatiladi, agar registr bufer registridagi qiymatlar bilan yangilangan bo'lsa (pastki chiziqda). Agar yuqori chegara uchun OCRnA yoki ICRn registrlari ro'yxatdan o'tgan bo'lsa, u holda yuqori chegaraga etib borgandan so'ng, OCnA yoki ICFn belgisi o'rnatiladi. Lichnik tomonidan yuqori yoki pastki chegaraga erishilganda, perevannya bayroqlari perevannya avlodi uchun g'olib bo'lishi mumkin.

Yuqori chegarani o'zgartirganda, yangi qiymat chegaraning barcha registrlaridagi qiymatlardan kattaroq yoki ko'proq teng bo'lishi uchun qadam qo'yish kerak. Boshqa holatda, agar yuqori chegaraning qiymati chegara registrlari qiymatidan kamroq bo'lsa ham, TCNTn va OCRnx o'rtasidagi farq hech qachon kelmaydi.

Kichik 4 da PWM FC rejimida hosil bo'ladigan chiqish signali barcha davrlar uchun nosimmetrik ekanligi ko'rsatilgan. Oskylki ro'yxatdan OCRnx novlyuyutsya pastki mezhí rachunka, keyin to'g'ridan-to'g'ri va svorotnogo rachunkív zavzhdi trevalosity teng. Natijada, chiqish impulslari nosimmetrik shaklga, shuningdek, o'zgaruvchan chastotaga ega.

Yuqori chegarani o'rnatish uchun ICRn varianti tavsiya etiladi, chunki yuqori chegaraning qiymati doimiydir. Bunday holda, OCRnA registri ko'rsatilgan OCnAda impulslarning impuls kengligi modulyatsiyasi uchun o'rnatiladi. Biroq, yuqori chegarani o'zgartirish uchun SHIM chastotasini dinamik ravishda o'zgartirish zarur bo'lganligi sababli, yuqori chegarani o'rnatish uchun yangi pastki oyna buferlashining ko'rinishi uchun OCRnA registrini yutib olish tavsiya etiladi.

PWM FCH rejimida PFC bloklari OCnx chiqishida PWM impulslarini yaratishga imkon beradi. Agar COMnx1:0 = 0b10 bo'lsa, unda teskari bo'lmagan PWM chiqishi ko'rsatiladi va COMnx1:0=0b11 bo'lsa, u teskari hisoblanadi (60-jadval bo'limi). OCnx qiymati to'g'ridan-to'g'ri chiqishga o'rnatilgan bo'lsa, chiqish portida faqat tashqi yo'nalishda mavjud bo'ladi. PWM signali OCRnx va TCNTn o'rtasida o'zgarganda OCnx registrini sozlash (qayta o'rnatish) yo'li, to'g'ridan-to'g'ri to'lqin soati va OCRnx va TCNTn o'rtasida o'zgarganda OCnx registrining tushishi (sozlanishi), vaqti aylanish vaqti. Ushbu rejimdagi PWM chastotasi, yuqori chegara (VP) o'rnatilganda, tajovuzkor daraja bilan ko'rsatiladi:

de N - bo'linuvchining koeffitsienti (1, 8, 32, 64, 128, 256 yoki 1024).

OCRnx registrining chegara qiymatlarini yozish ushbu rejimda PWM signallarini yaratishdagi maxsus tebranishlar bilan bog'liq. Agar siz OCRnx ni pastki chegaraga (0x0000) tenglashtirsangiz, u holda inverting bo'lmagan rejimda chiqish har doim past mantiqiy daraja bo'ladi va teng yuqori chegara qiymatini yozishda chiqish har doim yuqori mantiqiy teng bo'ladi. . Invert rejimida chiziqlar teskari bo'ladi.

Agar OCRnA yuqori chegarani (WGMn3:0 = 0b1001) va COMnA1:0 = 0b01 belgilash uchun aylantirilsa, OCnA chiqishida kvadrat to'lqin hosil bo'ladi.


PWM-ning apparat tatbiq etilishi dasturiy ta'minotga nisbatan aqldan ozgan afzalliklarni beradi, protsessorning parchalari noqulay kod bilan parchalanadi, shuning uchun xizmat ko'rsatish uchun bir soat vaqt ketadi va bu PWM bilan ishlash uchun ko'proq imkoniyatlarni beradi. Достатньо провести ініціалізацію таймер/лічильника (занести необхідні значення в регістри використовувані таймер/лічильником) як таймер/лічильник може працювати незалежно від процесора, відповідно процесор може займатися іншими завданнями, тільки іноді звертаючись в необхідний момент для коригування або зміни режиму або отримання результатів від таймер /shaxs.

Huquqlarning tavsifi

T1 urganida qayta tug'ilish hosil qilishi mumkin:

  1. TCNT1 rachunk registrini qayta yozish;
  2. agar LCNT1 va OCR1A va OCR1B dori registrlari teng bo'lsa (teri reestri uchun okremo);
  3. rachunkian registrini ICR1 ko'mish registrida saqlashda.

T2 urganida qayta tug'ilish hosil qilishi mumkin:

  1. TCNT2 rachunk registrini qayta yozish;
  2. TCNT2 tibbiy reestri va OCR2 reestrining bir xilligi bilan.

Barcha qayta to'siqlarning bayroqlari TIFR reestrida qayta markalanadi va ruxsatnoma/panjara TIMSK reestrida qayta oziqlanadi.

TIMSK zaryadsizlanish registri
Registr7 6 5 4 3 2 1 0
TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0* TOIE0
  • OCIE2- "zbíg" taymer/taymer T2 uchun muhlatga ruxsat berish huquqi
  • TOIE2- T2 taymerini/taymerini qayta o'rnatish huquqi
  • TICIE1- T1 taymer / zajigalkaning "tiqilib qolishi" dan keyin qayta o'rnatishga ruxsat berish huquqi
  • OCIE1A- Taymer/taymer T1 ning "zbíg A" pastki qismi uchun tanaffusga ruxsat berish huquqi
  • OCIE1B- Taymer/taymer T1 ning "boshlash B" dan keyin qayta ishga tushirish huquqi
  • TOIE1- T1 taymerini/taymerini qayta o'rnatish uchun Ensign ruxsati
  • OCIE0*- T0 taymer/qo'ng'iroq qiluvchining "boshlanishi" dan keyin qayta ishga tushirish huquqi (* - ATmega8-da har kuni)
  • TOIE0- T0 taymer/taymerni qayta o'rnatish huquqi
  • OCF2- "zbíg" taymer/qo'ng'iroq qiluvchi T2 uchun Prapor muhlat
  • TOV2- T2 taymer/taymerni qayta o'rnatish bayrog'i
  • ICF1- T1 taymer/taymerni "yutish" uchun tirilish bayrog'i
  • OCF1A- T1 taymer/taymerning "zbíg A" pastki qismi uchun muhlat bayrog'i
  • OCF1B- T1 taymer/taymerning "boshlash B" uchun muhlat bayrog'i
  • TOV1- T1 taymer/taymerni qayta o'rnatish uchun belgi
  • OCF0- "zbíg" taymer/taymer T0 uchun muhlat bayrog'i
  • TOV0- T0 taymer/taymerni qayta o'rnatish uchun belgi

ATmega8/16 kontrolleridagi robot tayter/zajigalka T1 tavsifi

O'n olti xonali taymer / taymer T1 soatlik intervallarni shakllantirish, qo'ng'iroq signallari sonini hisoblash va OC1A va OC1B o'rashlarida har xil tejamkorlik va trivaliteli WIM bilan signallarni ishlab chiqarish uchun ishlatilishi mumkin. Bundan tashqari, ICP1 yoki analog komparatordan chaqiruv signali uchun T1 o'zining oqim tegirmonini ICR1 nam registrida saqlashi mumkin.

Zaryadlash registrlari TCCR1A:TCC1B:TCNT1:OCR1A:OCR1B:ICR1
Registr7 6 5 4 3 2 1 0
TCCR1A COM1A1 COM1A0 COM1B1 COM1BO FOC1A FOC1B WGM11 WGM10
TCCR1B ICNC1 ICES1 * WGM13 WGM12 CS12 CS11 CS10
TCNT1: H R/W R/W R/W R/W R/W R/W R/W R/W
TCNT1: L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A: H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1A: L R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B: H R/W R/W R/W R/W R/W R/W R/W R/W
OCR1B: L R/W R/W R/W R/W R/W R/W R/W R/W
ICR1: H R/W R/W R/W R/W R/W R/W R/W R/W
ICR1: L R/W R/W R/W R/W R/W R/W R/W R/W

Teri 16-bitli registr ikkita 8-bitli registrda ikkita operatsiya talab qilinadigan yozuvni o'qish soatiga jismoniy ravishda taqsimlanadi. Avval yozilayotganda avval kattasi, keyin kichiki, orqaga qarab o‘qilganida kichiki, keyin kattasi o‘qiladi.

TCCR1A: TCCR1B- T1 taymer/taymer tomonidan kuzatish uchun 8 bitli registrlar

TCNT1- taymer/taymer T1 ning 16-bitli rachunkovy registri. Taymer/alternatorning soat signalining teri zarbasidan keyin nolga tushirish, oshirish (qiymatni 1 ga oshirish) yoki kamaytirish (qiymatni 1 ga o'zgartirish) kerak.

OCR1A: OCR1B- 16 xonali port registrlari

ICR1- TCNT1 qiymatini ICP1 chiqish signalining faol qirrasi komparator chiqish signaliga berilgan soat uchun saqlovchi 16-bitli suv toshqini registri.

Janglarni tayinlash

COM1A1: COM1A0: COM1B1: COM1B0- Qi razryadlari TCNT1 shaxsiy registrining qiymati va OCR1A:OCR1B registrining qiymati o'zgartirilganda OC1A:OC1B harakatini aniqlaydi.

FOC1A: FOC1B- Primus o'zgarishiga xizmat qilish uchun Qi zaryadsizlanishi Men OC1A:OC1B ni ko'raman

ICNC1- Birinchi faol jabhada biroz ko'proq "0" ko'milishi uchun o'tish kodini boshqarish sxemasining tartibi, shuning uchun "1" cho'kish signalining to'rtinchi bir xil tanlovidan keyin ko'miladi.

ICES1- Signalning faol chetini tanlash zaryadsizlanishi, agar qiymat "0" bo'lsa, TCNT1 rachunk registrini OCR1 sink registrida saqlash "1" kabi tushadigan signalning chetida bo'ladi. yuksalish ustida.

WGM13: WGM12: WGM11: WGM10- T1 taymer/zajigalka ish rejimini tanlash uchun zaryadsizlantirish davrlari

CS22: CS21: C20- Taymer / soat T1 ning soat signaliga tayinlangan zaryadsizlanish.

Taymer/chiller T1 ning ish rejimini tanlang
WGM13WGM12WGM11WGM10Robot rejimiRahunku moduli (TOP)
0 0 0 0 Oddiy $FFFF
0 0 0 1 Fazani to'g'ri PWM

8-bit

$00FF
0 0 1 0 Fazani to'g'ri PWM

9-bit

$01FF
0 0 1 1 Fazani to'g'ri PWM

10-bit

$ 03 chegirma
0 1 0 0 CTC OCR1A
0 1 0 1 Tez PWM

8-bit

$00FF
0 1 1 0 Tez PWM

9-bit

$01FF
0 1 1 1 Tez PWM

10-bit

$ 03 chegirma
1 0 0 0 ICR1
1 0 0 1 Faza va Freguensy to'g'ri PWM OCR1A
1 0 1 0 Fazani to'g'ri PWM ICR1
1 0 1 1 Fazani to'g'ri PWM OCR1A
1 1 0 0 CTC ICR1
1 1 0 1 zaxiralangan *
1 1 1 0 Tez PWM ICR1
1 1 1 1 Tez PWM OCR1A

Vibir dzherela soat signali

Oddiy rejim

Eng oddiy ish tartibi - T1. Soat signalining teri pulsiga ko'ra, TCNT1 shaxsiy registrining o'sishi kiritiladi (kattaroq qiymat 1 ga teng). TIFR modulining $FFFF qiymatidan o'tishda qayta oqim boshlanadi va keyingi bosqich $0000 qiymatidan boshlanadi, bunda TIFR registrida TOV1=1 bayrog'i va TOIE1=1 bayrog'i o'rnatiladi. TIMSK registrini yaratish mumkin. Bu rejimda berilgan chastotali signalni hosil qilish uchun razryadda COM1A1=0:COM1A0=1 ni ko'rish uchun OC1A yoki OC1B kontrollerni ko'rish uchun COM1B1=0:COM1B0=1 yozish kerak.

Bundan tashqari, teri taktiga ko'ra, TCNT1 rachunka registrining tartibi va tartibning OCR1A:OCR1B tartibi o'rnatiladi, tartib o'zgartirilganda, OCF1A=1:OCF1B=1 tartibi o'rnatiladi va tartibi OCIE1A=1:OCIE1B=1 ham hosil qilinadi. Aynan shu vaqtda OC1A:OC1B holati COM1A1:COM1A0:COM1B1:COM1B0 bit sozlamalariga qarab o'zgarishi mumkin.

STS rejimi (yugurish paytida skeyp)

Ushbu rejimda T1 Oddiy rejimdagi kabi printsipga amal qiladi. Farqi shundaki, TCNT1 hisob registrining mumkin bo'lgan maksimal qiymati OCR1A tekislash registrining yoki ICR1 (taymer/qo'ng'iroq qiluvchi rejimini tanlash uchun bo'linma jadvali) qiymatlari orasida bo'ladi. TCNT1 OCR1A yoki ICR1 qiymatiga yetganda, TCNT1 qiymati TCNT1=$0000 ga qayta o'rnatiladi. Ayni paytda TOV1=1 bayrog'i o'rnatiladi.

Tez PWM rejimi (Swedcode PWM)

Qo'shimcha rejim uchun siz yuqori chastotali PWM signalini yaratishingiz mumkin. Oddiy rejimda ishlash printsipi va tartibi ta'sir qilmaydi, lekin OCR1A: OCR1B registrining suzuvchi buferlanishining mavjudligi, signalda assimetrik impulslarning paydo bo'lishi, shuningdek, OS1A:OC1B (div. stol) o'chirilgan.


Fazani to'g'rilash PWM rejimi

Ushbu rejimni qo'llash avvalgisiga o'xshaydi, chunki lichilniy registr teskari lichilnik sifatida ishlaydi. Ushbu rejim Atmel tomonidan dvigatellarni tartibga solish uchun eng mos deb tavsiya etilganligi sababli, biz hisobotni ko'rib chiqamiz. TCNT1 registri TCNT1 (yoki qiymati) moduli qiymatiga ICR1 registrining qiymati qiymatining qiymati qiymati yoki OCR1A registrining qiymatiga erishilganda. ICR1 registri yoki OCR1A registrining qiymati, taymer / chil rejimini tanlash uchun jadvalga qarang), qiymat qiymatining qiymati qiymatining qiymati qiymatining qiymati ICR1 registrining qiymati to'g'ridan-to'g'ri o'zgartiriladi. TCNT1 shaxsiy registrida minimal qiymatga ($0000) erishilganda, u ham hisobni to'g'ridan-to'g'ri o'zgartiradi va o'sha paytda TOV1ni TIFR registriga o'tkazish bayrog'i tiklanadi. Shuningdek, agar siz TCNT1 ro'yxatga olish registrlari va OCR1A:OCR1B ro'yxatga olish registrlari o'rnida teng bo'lsangiz, jadvalga muvofiq TIFR registrining OCF1A:OCF1B bayrog'i o'rnatiladi va ro'yxatga olish holati OC1A:OC1B o'zgartiriladi.

OCR1A:OCR1B registrining qiymatini yozish vaqtida nosimmetrik vikilarni o'chirish uchun ushbu rejimda suzuvchi yozuvni buferlash amalga oshiriladi. Registr qiymatini o'zgartirish sababi TCNT1 rachunk registri rahunku moduli (TOR) qiymatiga yetgan paytda o'zgartiriladi (yoki ICR1 registrining qiymati yoki OCR1A registrining qiymati jadvalda ko'rib chiqiladi). taymer / chimer rejimini tanlash). Buning uchun OS1A: OC1B mo'ylovlarining taymerini / hisoblagichini ishga tushirayotganda, nuqta ko'tarilganda lageringizni o'zgartirmang, dock registrining qiymati (TOR) ga yetmaydi.


Menejer: Keling, PWM yordami uchun 12 voltli isitish chiroqining yoritilishini boshqarish dasturini kengaytiraylik. "Ko'proq" tugmasi bosilganda chiroqning yorqinligi oshadi, "Kamroq" tugmasi bosilganda yorug'lik o'zgaradi. Bizning kelajakdagi qo'shimcha qurilish sxemasi kichik bir shaklda ko'rsatilgan. 4 MGts chastotali ichki generator kabi soatli Atmega8 mikrokontrolleri qanday ovoz chiqaradi. Vlasne bizda yorug'lik moslamalarining yorqinligini tartibga solish uchun viide dimer, tsí pristroí priznachení bor. Shu bilan birga, ochiq rangli dimerlar eng katta kenglikka ega edi.

Oddiylik uchun, bizning sxemamizdan oldin siz yorug'lik manbasini ulashingiz mumkin, ammo lampochka bilan u yaxshiroq bo'ladi. Visnovkivga ulangan tugmalar PD0, PD1. Navantage visnovka bilan bog'langan PB1 (OC1A) rezistor va MOSFET qutbli tranzistor orqali, bu biz uchun kalit sifatida eng amaliy (kalit rejimida). Polar tranzistor uning izolyatsiya eshigi quvvat pallasida joylashganligi va boshqaruvning elektr maydoni tomonidan tebranishi va boshqaruv oqimi mikroamperlarga etib borishidan yaxshiroqdir. Tse imkon beradi, vikoristovuyuchi bir yoki ikki tranzistorlar, cheruvati ulug'vor intensivligi (o'nlab amper va o'nlab yuzlab voltgacha), navantazhyuchi mikrokontroller emas. Vrahovyuchi ham haqiqatdir dala tranzistorlari parallel ravishda (bipolyar bo'lganlarga) ulanish mumkin, yuzlab amperlar bilan qattiqroq kaskadni olib tashlash mumkin.

Endi mikrokontroller WIM-ni qanday amalga oshirishini aniqlaymiz va dasturni yozamiz. Yuqorida aytib o'tilganidek, bizning MK 3 ta taymerga ega va barcha hidlar PWM rejimida ishlashi mumkin. Biz o'n olti xonali taymer / qo'ng'iroqdan foydalanamiz. Bitami WGM13-10 biz FastPWM roboti uchun taymerimizni rahunkaning yuqori chegarasi bilan sozladik. ICR1. Dasturning printsipi shundan iboratki, bizning taymerimiz rahuê víd 0 dan 65535 gacha (0xFFFF), registrda ICR1 255 raqamini kiriting, agar yuqori taymer oralig'i (TOP) o'rnatilgan bo'lsa, PWM signal chastotasi doimiy bo'ladi. Shuningdek, bizning taymerimiz hisob registrini va registrni (TCNT1 \u003d OCR1A) o'zgartirganda, kontrollerning bevalari almashtiriladiganlarga moslashtirilgan. OC1A. Ofset registriga yozish orqali PWM koeffitsientini o'zgartirishingiz mumkin OCR1A 0 dan 255 gacha bo'lgan raqam qanchalik baland bo'lsa, raqam qanchalik baland bo'lsa, to'ldirish koeffitsienti qanchalik baland bo'lsa, chiroq yorqinroq bo'ladi. Xuddi shu tarzda, tugma o'zgartiriladi i, va keyin u reestrga yoziladi OCR1A.

Dasturning yangi matni quyida ko'rsatilgan. Hisobot sharhlarida robot dasturi tasvirlangan.

/*** Faoliyat №8. PWM signallarini shakllantirish ***/ #include #o'z ichiga oladi int main(void) ( unsigned int i=0; //i ni oʻzgartirish uchun imzolangan /***Ruxsat etilgan kirish porti***/ PORTB = 0x00; DDRB |= (1)<< PB1); PORTD |= (1 << PD1)|(1 << PD0); // подключаем внутренние нагрузочные резисторы DDRD = 0x00; /***Настройка таймера***/ TCCR1A |= (1 << COM1A1)|(0 << COM1A0) // Установим биты COM1A1-COM1A0:0b10, означает сброс вывода канала A при сравнении |(1 << WGM11)|(0 << WGM10); // Установим биты WGM13-10:0b1110, согласно таблице это TCCR1B |= (1 << WGM13)|(1 << WGM12) // будет режим - FAST PWM, где верхний предел счета задается битом ICR1 |(0 << CS12)|(0 << CS11)|(1 << CS10); // Битами CS12-10:0b001 задаем источник тактового сигнала для таймера МК, включен без делителя TCNT1 = 0x00; // начальная установка счетчика ICR1 = 0xFF; // задаем период ШИМ, здесь у нас число 255, // по формуле fPWM=fclk_I/O/N*(1+ICR1)// вычисляем частоту ШИМ, она будет равна 15625 Hz OCR1A = 0x00; // начальный коэффициент заполнения ШИМ /***Основной цикл программы***/ while(1) { if((PIND&(1 << PD0)) == 0) //если кнопка "больше" нажата { if (i < 254) { // коэффициент заполнения ШИМ изменяется от 0 до 255 i=i+1; // увеличиваем i на единицу OCR1A = i; // записываем переменную в регистр сравнения _delay_ms(30); // задержка 30ms } } if((PIND&(1 << PD1)) == 0) //если кнопка "меньше" нажата { if (i >0) // SHIM kechikish koeffitsienti 255 dan 0 ga o'zgartirildi ( i--; // i ni bittadan o'zgartiring (siz yozishingiz mumkin) OCR1A = i; // kechikish registriga o'zgartirishni yozing _delay_ms(30); // kechikish 30ms)))

Hurmat! Birinchidan, men mikrokontrollerga oziq-ovqat beraman, keyin tranzistor MK ga kelishi uchun uni o'zgartirishimiz kerak, keyin esa uni chiroq va yarim tranzistor bilan lansetka berishimiz shart emas. Aks holda, siz tranzistorni yoqishingiz mumkin. O'ng tomonda, MKning "pastliklari" yopiq lagerda "deraza oldida qolishi"da - badbo'y hid hech narsaga bog'liq emas va maqsad ularni ayblaydi. Tsikh zaif induktsiya etarli, schob tez-tez vydkriti allaqachon sezgir polovy tranzistor. Todi yogo opir o'rtasida drenaj va qo'shilish lasan o'rtasida víd kílkoh MOhm uchun kílkoh Om yoki tez-tez Om í yangi oqimi orqali chiroq uchun katta strum. Ammo tranzistor to'g'ri ishlamayapti, shuning uchun deklanşöre 1-3 ko'rsatma emas, balki barqaror 5 qo'llanilishi kerak va bu operatsiya minimal darajadan boyroq bo'ladi. Tse yangi buyuk kílkosí issiqlik ko'z oldiga olib, va vín bo'g'ib, yoki balki yondirib.

Biz o'sha ATtiny13 zajigalka/taymer kalitlariga oddiy rejimda va uyg'onish pulsi (CTC) rejimida duch keldik. Ushbu maqolada men taymer mavzusini davom ettiraman, ammo endi impuls kengligi modulyatsiyasini (PWM) amalga oshirish uchun uni ko'rib chiqaylik.

Barcha mikroprotsessorlar raqamli signallar bilan ishlaydi, tobto. mantiqiy nol (0 V) va mantiqiy (5 V yoki 3,3 V) bilan. Ale, qanday ish, qanday qilib biz oraliq qiymat sifatida chiqishni olishni xohlaymiz? Bunday vipadkalar tiqilib qoladi Impuls kengligi modulyatsiyasi(PWM, eng. impuls kengligi modulyatsiyasi (PWM)) - doimiy chastotada impulslar oralig'ini o'zgartirish orqali to'yinganlikka olib keladigan intensivlikni nazorat qilish jarayoni.
Puls kengligi modulyatsiyasi - davriy impuls signali. Raqamli va analog PWM, unipolyar va bipolyar va boshqalardan foydalaning. Ale, ularning ishlash printsipi bir-biriga bog'langan ikkita turdagi signallarda jo'shqinlik va maydon mavjud bo'lganda mustaqil ravishda bir xil bo'lib qoladi: mos yozuvlar (pilka o'xshash yoki uch oqimli impulslar) va kirish (doimiy yoki kerakli tartibda o'zgartiriladi) , PWM ning o'ziga xos vazifalarida bajarilgan). Qi signallari tenglashtiriladi va ular o'zgarganda, PWM chiqishidagi signalning qiymati o'zgaradi. PWM ning chiqish kuchlanishi to'g'ridan-to'g'ri kesilgan impulslar kabi ko'rinishi mumkin, ularning trivalligini o'zgartiradi, biz PWM chiqishidagi kuchlanishning o'rtacha qiymatini tartibga solishimiz mumkin.

* Agar siz RC-nayzani PWM chiqishida birlashtirmoqchi bo'lsangiz, unda siz impuls kuchlanishini almashtirib, kerakli qiymatning doimiy kuchlanishini olishingiz mumkin. Ammo yorug'lik diodlari bo'lgan ko'timizda siz usiz ham qila olasiz, chunki inson ko'zi hali ham soat chastotasida yorug'lik o'lchovini ko'ra olmaydi, bu g'alaba qozonadi.

PWM parametrlari

  • T - takt davri (mos yozuvlar signalining);
  • t - impulsga bog'liqlik;
  • S - tejamkor;
  • D - to'ldirish koeffitsienti.

Yaxshilik momentum yirtilgunga qadar davrni belgilashga bog'liq. To'ldirish koeffitsienti - bu parchalanishning qaytarilish qiymati (kenglikda farq qilishi mumkin):

S=T/t=1/D

Keling, ATtiny13 dumbasida AVR mikrokontrollerlarida PWM qanday qo'llanilishi haqida hisobotni ko'rib chiqaylik.
Oldingi qismida aytib o'tilganidek, ATtiny13 ikki xil PWM turini qo'llaydi: "Shvidka PWM" (Tez PWM) va "Fazalarni tuzatish bilan PWM" (Phase correct PWM). Vikoristan vbudovannoy MK bo'yicha poydevorning Obidva varianti sakkiz bitli lichilnik/taymer T0. Taymer mos yozuvlar signalini bekor qiladi. Taymerning soat chastotasi protsessorning soat chastotasining boshi yoki tashqi soat generatori tomonidan o'rnatiladi. Soat rejimi bitlar bilan o'rnatiladi CS02 (2), CS01 (1), CS00(0) ro'yxatdan o'tish TCCR0B:

  • 000 - taymer/taymer T0 zupineno
  • 001 - soat generatori CLK
  • 010-CLK/8
  • 011-CLK/64
  • 100-CLK/256
  • 101-CLK/1024
  • 110 - signalning pasayishi haqida vizualizatsiya qilingan T0 (pastki 7, PB2) da ovnishny dzherelni ko'rish
  • 111 - signal o'sishiga ko'ra T0 (pastki 7, PB2) ko'rinishida ovnishny dzherelni ko'rish

PWM uchun taymerni sozlash

Taymerning ishlash rejimi bitlar bilan o'rnatiladi WGM01(1) bu WGM00(0) ro'yxatdan o'tish TCCR0A:

  • 00 - normal rejim
  • 01 - PWM fazasini tuzatish rejimi
  • 10 - kuchaytiruvchi rejim
  • 11 - PWM rejimi

Bu erda biz "01" va "11" variantlari bilan belgilanamiz.

Beaty COM0A1(7) bu COM0A0(6) ro'yxatdan o'tish TCCR0A lichnik tanlanganda (ro'yxatga olish kitobi) OC0A displeyida (5 past, PB0) qanday signal paydo bo'lishini o'rnating TCNT0) registr A bilan ( OCR0A).

"Shvidka ShIM" rejimi uchun:

  • 10 - A dan boshlanganda OC0A ko'rishda 0 ni o'rnatish, hisoblagichni qayta o'rnatishda OC0A ko'rishda 1 ni o'rnatish (teskari bo'lmagan rejim)
  • 11 - A dan boshlanganda OC0A ko'rinishida 1ni o'rnatish, hisoblagich nolga o'rnatilganda OC0A ko'rinishida 0ni o'rnatish (teskari rejim)
  • 00 - OC0A ishlamayapti
  • 01 - agar TCCR0B registrining WGM02 biti 0 ga o'rnatilgan bo'lsa, OC0A kaliti ishlamaydi
  • 01 - shuningdek, TCCR0B registrining WGM02 biti 1 ga o'rnatilgan, A kiritilganda uzunlikda OC0A ko'rsatiladi.
  • 10 - soat qiymatining o'sish soatini A dan oshirganda OC0A ko'rinishida 0 ni belgilash, A ning oshishi soat qiymatining o'zgarishi soati bo'lganda OC0A ko'rinishida 1 ni belgilash. (teskari bo'lmagan rejim)
  • 11 - OC0A ko'rinishida soat qiymatining o'sish soatini A dan oshirganda, OC0A ko'rinishida 0 ni belgilash, A ning oshishi soat qiymatining o'zgarishi soati bo'lganda (teskari rejim)

Beaty COM0B1(5) bu COM0B0(4) ro'yxatdan o'tish TCCR0A lichnik tanlanganda (ro'yxatga olish kitobi) OC0B (6 past, PB1) da qanday signal paydo bo'lishini belgilang TCNT0) registr B bilan ( OCR0B).

"Shvidka ShIM" rejimi uchun:

  • 01 - zaxira
  • 10 - B ishlayotganda OC0B chiqishida 0 ni o'rnatish, hisoblagich nolga o'rnatilganda OC0B chiqishida 1 ni o'rnatish (teskari bo'lmagan rejim)
  • 11 - B ishlayotganda OC0B chiqishida 1 ni o'rnatish, hisoblagich nolga o'rnatilganda OC0B chiqishida 0 ni o'rnatish (teskari rejim)

"PWM fazadan tashqari tuzatish" rejimi uchun:

  • 00 - OC0B ishlamayapti
  • 01 - zaxira
  • 10 - B vaqtini o'zgartirish vaqti o'zgartirilganda OC0B ko'rinishida 0 ga o'rnatiladi, kun vaqtini o'zgartirish vaqti o'zgartirilganda OC0B ko'rinishida sozlama 1 ga o'rnatiladi (bo'lmagan). teskari rejim)
  • 11 - vaqt qiymati ortib borayotganida OC0B ko'rinishida 1 ga o'rnatiladi, vaqt qiymatining o'zgarishi vaqti 0 ga o'rnatiladi, vaqt qiymati pasayganda OC0B ko'rinishida 0 ga o'rnatiladi (teskari rejim)

Shvidka PWM (tezkor PWM)

Ushbu rejimda lichilnik noldan maksimalgacha o'zgarib turadi. Lichnikning nol qiymati o'rnatilganda, chiqishda impuls paydo bo'ladi (mantiqiy birlik o'rnatiladi). zbígu z pívnyannya ro'yxatdan o'tganda - puls tashlanadi (mantiqiy nol o'rnatiladi). Teskari rejimda, teskari, aksincha.

Fazali tuzatishdan PWM (fazali to'g'ri PWM)

Ushbu rejimda lichilnik vvazhê víd noldan maksimalgacha, keyin esa qaytish rejimida to'g'ridan-to'g'ri nolga. zbígu z ro'yxatdan o'tganda lichnik qiymatining ortishi pívnyannja pid soat - impuls tashlanadi (mantiqiy nol o'rnatiladi). Zbígu píd h tushganda - impuls paydo bo'ladi (mantiqiy birlik tiklanadi). Teskari rejimda, teskari, aksincha. Qisqa rejimda er-xotin soat chastotasi Fast PWM rejimiga qarshi o'zgartiriladi. Keyin, tejamkorlikni o'zgartirganda, impulslarning markazlari harakat qilmaydi. Ushbu rejimning asosiy xususiyati boy fazali PWM signallarining ishlashi, masalan, uch fazali sinusoiddir, shuning uchun oraliqni o'zgartirganda, ikkita PWM signali orasidagi fazaviy o'tish yo'qolmaydi.

Shaxsan Sobachit, WIM amaliyoti sifatida biz kichik dastur yozamiz (qolganini soliq to'lovimga sarflayman, ishonchim komilki, kod yuz ellik marta qo'yiladi):

/* * tiny13_board_pwm * ATtiny13 maxsus jonglyor taxtasi demo dasturi. * Ikki kanalda PWM ishini namoyish qilish: * OC0A chiqishida teskari bo'lmagan signal, OC0B chiqishida teskari. */ #define F_CPU 1200000UL #include #o'z ichiga oladi #define LED0 PB0 // OC0A #define LED1 PB1 // OC0B int main(void) ( // Light: DDRB |= (1)<< LED0)|(1 << LED1); // выходы = 1 PORTB &= ~((1 << LED0)|(1 << LED1)); // по умолчанию отключены = 0 // Таймер для ШИМ: TCCR0A = 0xB3; // режим ШИМ, неинверсный сигнал на выходе OC0A, инверсный - на выходе OC0B TCCR0B = 0x02; // предделитель тактовой частоты CLK/8 TCNT0=0; // начальное значение счётчика OCR0A=0; // регистр совпадения A OCR0B=0; // регистр совпадения B while(1) { do // Нарастание яркости { OCR0A++; OCR0B = OCR0A; _delay_ms(5); } while(OCR0A!=255); _delay_ms(1000); // Пауза 1 сек. do // Затухание { OCR0A--; OCR0B = OCR0A; _delay_ms(5); } while(OCR0A!=0); _delay_ms(1000); // Пауза 1 сек. } }

Bu erda Bachimo, A va B registrlarida MK boshidan boshlab 0 ga o'rnatiladi va hisoblagich OC0A chiqishida teskari bo'lmagan PWM signalini yaratish bilan Tez PWM sifatida ishga tushiriladi va chiqishda teskari. OC0B. Asosiy tsiklda registrlarning qiymatlari asta-sekin 0 dan maksimalgacha va orqaga o'zgaradi. Natijada, OC0A va OC0B visnovklariga ulangan yorug'lik asta-sekin yonadi va xuddi antifazada bo'lgani kabi o'chadi.
Va shunga qaramay, agar siz ko'proq hurmat qilsangiz, chiroqlardan biri oxirigacha o'chmagani ma'qul, lekin qorong'ida porlashni davom ettiradi. Tez PWM rejimining o'ziga xos xususiyati nimada. O'ng tomonda, bu rejimda, siz uni 0 ni ro'yxatdan o'tkazish uchun yozishingiz kerak, lichnik chiqishda nolga o'rnatilganda, hamma narsa mantiqiy birlikka o'rnatiladi, go'yo hujumkor xushmuomalalik bilan tashlangan (chiqish). reestrdan). Shu tarzda, teri davrida, trivalite 1 tsiklining bir qisqa zarbasini o'tkazib yuboring, yorug'likni yoqish uchun bir oz etarli. Bu ta'sir tashqi impulslarni shakllantirishning teskari rejimida mumkin emas, chunki ba'zida, lichilnik nolga qaytarilganda, qisqa puls emas, balki uning o'rniga - maksimal PWM yukining soatiga qisqa tushish. Ushbu nosozlikni osiloskopda kuzatish mumkin, ammo inson shafaqining bunday merakhtinnyasini shunchaki eslab bo'lmaydi. Buning uchun yana bir yorug'lik spalah edi va qayta-qayta o'chdi. Fazali tuzatish bilan PWM rejimida kun davomida ta'sir mustaqil bo'ladi, chiqishda teskari signal hosil bo'ladi. Bitning qiymatini eslang WGM01(1) ro'yxatdan o'tish TCCR0A 1 dan 0 gacha.

PWM (PWM) - impuls kengligi modulyatsiyasi. Bu atamani tuhmat qilish shart emas. Bu kuchlanishni tartibga solishning yagona yo'li. Monitorning uning ustida yorqin yonishiga ruxsat beriladi va siz yorqinlikni o'zgartirasiz. Va bu hozir siz uchun nimani anglatadi?

Shuni ta'kidlash kerakki, monitorning monitoringi biroz yorug'likdir. Doimiy stress nurida yaxshi yashash. Ammo biz monitorning yorqinligini o'zgartirishimiz kerak edi. O'zgarish qarshiligi bilan ishlash mumkinligini aytish mantiqan to'g'ri. Kichik oqimlarda bu mumkin. Ale zo'rlarida, rezistor juda qizib ketadi. O'lchamlarni, sarf-xarajatlarni, energiyani tiklashni qat'iy oshiring.

Shuning uchun odamlar doimiy kuchlanish pulsatsiyasi bilan talon-taroj qilishni yaxshi ko'radigan tranzistorlar sxemasini o'ylab topishdi. Bu paydo bo'ladi, pulsatsiyalanuvchi kuchlanish, davrda tushib ketgan, u doimiy kuchlanishga teng bo'ladi. Tobto. Agar uzoq vaqt davomida kuchlanish 50% yoqilgan bo'lsa, 50% o'chirilgan bo'lsa, u holda ekvivalent doimiy kuchlanish nominal kuchlanishning 50% ga teng.

Raqamlar oddiy - ular PWM orqali 5V doimiy kuchlanishni o'tkazdilar - ular 2,5V ni olishdi. Natijada, impuls 75% ga teng, bu 3,75V doimiy kuchlanishga teng. Menimcha, bu fikr mantiqiy edi.

Endi amaliy amalga oshirishga o'tamiz. Mikrokontroller yordamida biz darajani 0 dan 100% gacha, keyin esa 100% dan nolga o'zgartiramiz. Yakuniy natija quyidagicha ko'rinishi mumkin:

Sob u joyida edi, chiroqni yoqing. Natijada, biz silliq ravishda yoqamiz va chiroqni yoqamiz.

Sevimli CodeVision-ni ishga tushiramiz. Biz usta yordami uchun loyiha yaratamiz. Taymer taqsimotida (Taymerlar) Taymer 2 ni tanlang va uni chaqaloq kabi o'rnating.

Agar siz loyihani yaratishga harakat qilsangiz, dasturni payvand qilish mumkin. Oyog'imiz bo'lsa ham kutamiz 3 porti May oyida, buti shamoldek tikilgan.

Keling, kodni bunga o'tkazamiz:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #o'z ichiga oladi void main (void) (PORTB = 0x00; DDRB = 0x08; // Taymer/Counter 2 ishga tushirildi ASSR = 0x00; TCCR2 = 0x6C; TCNT2 = 0x00; OCR2 = 0x00; TIMSK = 0x00; while(1)(); )

#o'z ichiga oladi void main(void) ( PORTB=0x00; DDRB=0x08; // Taymer/Counter 2 ishga tushirilishi ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while (1) ( );

OCR2 = 0x00 qatoriga e'tibor qaratamiz; Qia zminna hali ham impulsni to'ldirishning kattaligiga bog'liq. Qiymat 0 dan 255 (0xFF) ga o'zgartiriladi, keyin. 255 100% bandligini isbotlaydi (doimiy oqim). Shuningdek, u 30% zaxiraga muhtoj (255/100)*30=77. Daly 77 o'n oltilik tizimiga tarjima qilingan OCR2 = 0x4D;

TCCR2=0x6C; Qiymatni o'zgartirish orqali biz PWM chastotasini sozlashimiz mumkin. Robot va PWM chastotasining tarqalishi chastotaning ko'pligi, mikrokontrollerning depratatsiyasi. Loyihada mikrokontrollerning chastotasi 8 MGts, PWM chastotasi 125 kHz, shuningdek haydovchi 8/125 = 64.
1101100 ikkilik sanoq tizimidagi 0x6C, Atmega8 va Bachimo registrlari tavsifi TCCR2 ma'lumotlar jadvali, shuning uchun o'q 1101 100 qolgan raqamlar 100 va PWM chastotasini tanlash uchun berilgan

Keling, to'g'ridan-to'g'ri dasturga o'tamiz:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #o'z ichiga oladi #o'z ichiga oladi void main(void)(PORTB=0x00; DDRB=0x08; ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while(1)< 0xff ) { OCR2= OCR2+ 0x01 ; delay_ms(5 ) ; } while (OCR2>0x00) (OCR2 = OCR2-0x01; delay_ms(5);))); )

#o'z ichiga oladi #o'z ichiga oladi void main(void) ( PORTB=0x00; DDRB=0x08; ASSR=0x00; TCCR2=0x6C; TCNT2=0x00; OCR2=0x00; TIMSK=0x00; while (1) ( while(OCR2)<0xff) { OCR2=OCR2+0x01; delay_ms(5); } while(OCR2>0x00) (OCR2=OCR2-0x01; delay_ms(5); )); )

Kod o'xshashlik darajasiga qadar oddiy: tsiklning tartibi 0 dan 255 (ff) ga oshiriladi, keyin biz 255 dan 0 ga o'zgartiramiz.
Men nasamkinets vidosik, hamma narsa amalda bo'lishi mumkin, deb. Vivchenni bilan omad tilaymiz)

Yangilangan 12/16/15. Hammaga salom. O'tgan yozuvni EEPROM xotirasidan saralab, bugun biz PWM (PWM) haqida gaplashamiz? U impuls kengligi modulyatsiyasi, kuchlanishning o'rtacha qiymati sifatida shifrlangan, chunki u impulsning tejamkorligini o'zgartiradi. Sening do'zaxingga sverdlovskiy ma'lum bir takrorlanish chastotasidan impulsning trivalligi. Tobto. Oddiy so'zlar bilan aytganda, barcha doimiy qiymatlar uchun impulsning kengligini o'zgartiradi. Bizga yana nima kerak?

ShIM (PWM) o'z kuchini boshqarish bilan mexanikasiz kuchlanishni tartibga solish uchun tranzistor pallasida ishlaydi. Masalan, yorug'lik chiqaruvchi diodlarning yorqinligini nazorat qilish, LCD-monitorlarda yorug'lik yorqinligini nazorat qilish, motorlarni boshqarish va boshqalar. Agar siz kichkintoyga qarasangiz, mikrokontrolördan chiqish, xuddi kichkintoy pastroq bo'lgani kabi, taxminan qadam bosadi. Ko'rinib turibdiki, pulsning tejamkorligi to'la, chunki pulsning butun kengligi 5 ga teng, keyin pulsning 30% da, o'rtacha chiqish taxminan 1,5 V ni tashkil qiladi. Mikrokontrollerlar uchun AVR PWM boshqaruvi sakkiz bitli taymerlar / soatlar T0 / (T2) va o'n olti bitli T1 (ba'zi modellar uchun T3) uchun o'rnatiladi. Va shuningdek, boshqa modellar, PWM bit tezligi o'rnatilishi mumkin, masalan, ATmega 128. Keling, o'n olti xonali taymer / soat T1 ni sozlashni ko'rib chiqaylik. Ma'lumotlar jadvalga muvofiq yoki hujjatdan yoki ma'lumotlar varag'idan olinadi (adabiyot - №1 maqola).

Mikronlarda bunday magnitafon uchun uchta rejimni tanlashingiz mumkin: Fast PWM, Phase Correct PWM, Phase and Frequency Correct PWM ( modeldagi depozit)

Keling, boshqa rejimni ko'rib chiqaylik - Aniq fazali PWM. Bu erda shaxsiy registr teskari litsenziya sifatida ishlaydi, uni o'zgartirish $0000 dan maksimal qiymatga, so'ngra $0000 ga o'zgaradi. Taymer/chirker bilan jiringlash uchun uchta TCCR1A, TCCR1B, TCCR1C registrlari mavjud. Taymer/chiller rejimini tanlash uchun WGMn1: WGMn0 va WGMn1: WGMn0 bitlarini o'rnatish kerak. . í̈x vstanovlennya qo'ng'iroq tovushining maksimal qiymatini (PWM signalini sozlash) ê yoki belgilangan qiymatlarga tushiring yoki u taymer / lichnikning birinchi registrlari o'rnida ko'rsatilgan. Razdylna zdatnyst viraz bilan ifodalanadi :

g = log (TOP + 1) / log2, de TOP - binoning taqsimlanishiga qarab jadvaldan tanlangan rahunkaning moduli.

Shundan so'ng, kechikish taymerining ishlash rejimini tanlaganingizdek, rejim o'rnatilganda OCnx chiqishining harakatini aniqlaydigan COMnA1: COMnA0, COMnB1: COMnB0, COMnC1: COMnC0 ketma-ket bloki uchun ish rejimini tanlashingiz kerak. "Zbig" ga.

Xo'sh, qon tomirining qolgan qismi chastotadan sezilarli. Biz CSn2…CSn0 bitini TCCR1B registriga o'rnatishimiz kerak, shunda soat signali soat signaliga tayinlanadi. Bunday dastur usulida o'q OC1A chiqishidagi sozlangan PWM yadrosiga o'xshaydi. Misol uchun:

/* Tugallangan PWM */
TCCR1A=(1</* OC1A bitta ko'rsatiladi, agar OCR1A==TCNT1 bo'lsa, OCR1A==TCNT1 bo'lganda 0 ga tushadi va sakkiz bitli PWM Faza To'g'ri PWM rejimining 1 raqamining maksimal qiymatiga erishilganda 1 ga qayta o'rnatiladi. Rahunku moduli TOR $00FF*/
TCCR1B=(1<OCR1A = 50; /* moduli 255 va kuchlanishi 5, OC1A chiqishida taxminan 1 V olinadi */

Dasturdan ko'rinib turibdiki, WIM ni tanlash uchun OCR1A registridan foydalanish mumkin. Lichnik maksimal qiymatga yetganda, bu davrda 255, o'zgarish to'g'ridan-to'g'ri o'zgartiriladi va lichnik bir davr uchun signal bilan bir xil davrda qoldiriladi. Bunday holda, ishning chastotasi qarama-qarshi rejimda to'g'riroq bo'ladi. Ale, shu tarzda, lichnikning o'zgarishining simmetriyasi poklanadi. Dvigun bilan keruvannya uchun nima ko'proq mos keladi. Bunday xushmuomalalikda buyurtma registrining o'rnida yangilanish mavjud. Lichnik tomonidan minimal qiymatga erishilganda, o'zgartirish to'g'ridan-to'g'ri hisobga kiritiladi va TIFR registrining TOV1 ni qayta yozish bayrog'i darhol o'rnatiladi. Teng bo'lgan taqdirda, rachunk registrining o'rniga, registr teng yoki teng emasligidan qat'i nazar, TIFR registrining yangi OCF1A / OCF1B / OCF1C belgisi o'rnatiladi. OCnx bloki bir kechada o'zgaradi. H hosil bo'ladigan signalning chastotasi fOCn \u003d f / (2 * N * TOP), de N - sub-vakilning koeffitsienti, f - kvarts chastotasi. Bundan tashqari, siz, masalan, lashing va vikoristannya ShIMning ko'tiga hayron bo'lishingiz mumkin.

Hamma narsa nima uchun yaxshi. Keyingi postda biz ko'rishimiz mumkin CNC havaskor tartib boshqaruvchisi. Men konstruktor kabi dasturlar to'plami uchun ushbu blogning oldingi postini ajratib ko'rsatishga harakat qilaman. Shunday qilib, bir marta ular yozgan va yaqinlashib kelayotgan loyihada vikoristali yogo bo'lsa, yanada oqilona bo'ladi. Barcha ezgu tilaklarni tilayman.

Mikrokontrollerlarning biriktirmalarida ba'zan analog signalni yaratish kerak bo'ladi. Analog signalning chastotasiga qarab, g'olib bo'lishi mumkin bo'lgan mikrokontrollerning zaruriy ruxsati va turi dekilkom usullarida vikonatsiya qilinishi mumkin. Va o'zi uchun: qo'shimcha impuls kengligi modulyatsiyasi, apparat taymerlarining vikorist funksionalligi yoki dasturiy ta'minotni amalga oshirish uchun, o'rnatilgan raqamli-analog konvertor (DAC) yordami uchun, diskretda tashqi raqamli-analog konversiya sxemalari yordami uchun elementlar yoki qo'shimcha raqamli mikrosxemalar uchun.

1. Yordamchi PWM (PWM) uchun analog signalni yaratish printsipi

PWM signali raqamli signal bo'lib, unda takrorlanish davri doimiy bo'lib, davomiyligi o'zgaradi. 1-davrgacha PWM signalining trivalligining oshishi to'ldirish omili deb ataladi. Bunday signalni past chastotali filtrdan o'tkazgandan so'ng, u aslida teng darajada integrallashtiriladi, biz filtrning chiqishida yuk koeffitsientiga teng kuchlanishni olamiz.


Shu tarzda, kichikroq koeffitsient etarli shakldagi analog signallarni yaratishi mumkin. Bundan tashqari, o'zgarish kabi, masalan, sinusoid, inson tili kabi ichdi, shuning uchun u doimiy (yaxshi bosim miqdori).

1.1 Signalning xarakteristikalari

Chiqish analog signalining maksimal amplitudasi raqamli PWM signalining mantiqiy birligining amplitudasi bilan aniqlanadi. Agar mikrokontroller +5 da ishlasa, taxminan, chiqish analog signalining amplitudasi 0 dan 5 V gacha bo'ladi.

Analog signalni o'zgartirish uchun minimal muddat(dozvil) viraz bilan ifodalanadi:


dUa = Umax/2^n,


de Umax - analog signalning maksimal amplitudasi (V), n - PWMni amalga oshiradigan qurilmaning o'lchami.

Misol uchun, PWM signali dasturiy ta'minot 8-bitli drayver yordamida hosil bo'ladi. Qo'shimcha ko'rsatkich sifatida qabul qilinishi mumkin bo'lgan PWM signalining gradatsiyalari soni 2^8 = 256 ni tashkil qiladi.


dUa = 5/256 = 0,0195 st.


PWM signal chastotasi uni quyidagicha aniqlaymiz:


Fpwm = Fcpu/(K*2^n),


de Fcpu – mikrokontrollerning taktli chastotasi (Hz), K – lichnikning preskaler koeffitsienti, n – lichnikning raqamli sig‘imi.

Masalan, mikrokontrollerning taktli chastotasi 8 MGts, preskaler koeffitsienti 8, bit hajmi 8 bit. Keyin chiqish PWM signalining chastotasi qo'shimcha bo'ladi:

Fpwm = 8000000/(8*256) = ~3906 Gts


Analog chiqish chastotasi viraz bilan belgilanadi:

Fa = Fpwm/Ns = Fcpu/(K*2^n*Ns),


de Fpwm - PWM signalining chastotasi va Ns - analog signalning chastotasi.

Masalan, PWM signali 8-bitli lichnikda preskaler koeffitsienti 8 ga teng va mikrokontrollerning soat chastotasi 8 MGts bo'lgan holda amalga oshiriladi. Mikrokontrollerning xotirasida sinusoidal signalning 32 ta namunasi mavjud, ya'ni bitta 10-davr. Keyin chiqish sinusoidining chastotasi yanada rivojlangan:

Fa = 8000000 / (8*2^8*32) = ~122Hz

WIM asosida ezilgan DAC'a zaryadsizlanish quvvati vikorant zajigalkaning zaryadsizlanish quvvatiga teng.

1.2 PWM ning apparat ta'minoti

Barcha joriy mikrokontrollerlar omborida taymerlar/sovutgichlar mavjud. Ushbu taymerlarning bir yoki bir nechta rejimi PWM signalini yaratish uchun tayinlangan. Qoida tariqasida, butun signal maxsus sariqlarda hosil bo'ladi. Masalan, Atmel'dan mega16 mikrokontrolleri 8 bitli taymer/signal T0 ga ega bo'lib, u PWM signalini ishlab chiqarishning ikkita rejimini (aniq fazali PWM va PWM o'zgartiradi) ishlab chiqarishi mumkin va signal hosil bo'lishi uchun B portiga ulanadi. OC0 (PINB3) ishlatiladi.

PWM signalini apparat bilan amalga oshirish samaradorligi - mikrokontrollerning narxi past (PWM signali davrida bir marta uzilish qo'ng'iroqlari), soddaligi va aniqligi (tizimda ozgina uzilishlar mavjud). Uchta kichik bo'shliqni ko'rib chiqish mumkin - lichniklar soni o'ralgan, chastotasi yuqori emas, kanallar soni o'ralgan, ularda PWM signallarini yaratish mumkin. Men ko'p sonli PWM signallarini ishlab chiqarish uchun maxsus "o'tkirlashtirilgan" maxsus mikrokontrollerlarni ishlab chiqmoqchiman.

1.3 PWM ning dasturiy ta'minoti

PWM signalini dasturiy ravishda yaratish ham mumkin. Buning uchun shunchaki dastur taymerini yaratish va apparat taymerining signalidan so'ng uning qiymatini oshirish va taymerning ekstremal qiymatlariga erishish kerak, bu holda signal sozlamalarni o'zgartiradi.

Dasturiy ta'minotni amalga oshirishning afzalligi - soddaligi, kanallar soni to'silmagan va chegaralarning yo'qligi. Zvichayno, aqliy jihatdan cheklanmagan, yaxshilangan xotira mavjud.Dasturiy ta'minotni joriy etishdagi kamchiliklar - mikrokontrollerga qiziqishning yuqori darajasi. Lichilnikning teriga o'sishini chaqirish aybini bekor qilish va agar ekstremal qiymatlardan biriga erishilmasa, qayta ko'rib chiqish kerak. Bundan tashqari, dasturiy ta'minotni amalga oshirish kamroq aniqlikka (signalda uchta jabhadan ko'p) va kamroq chastotaga (birinchi yarmidan keyin) ega bo'lishi mumkin.

Biroq, narxdan qat'i nazar, SHIMu-ning dasturiy ta'minotidan ham foydalanish mumkin, chunki doimiy analog signalni yoki o'zgaruvchan signalni yaratish kerak, lekin past chastotali.

Quyida qo'shimcha apparat va dasturiy ta'minot impuls kengligi modulyatsiyasi uchun analog signalni yaratish funktsiyasi bo'lgan kod misoli keltirilgan. Atmega16 mikrokontrolleri uchun kod yozish, soat chastotasi 8 MGts, IAR kompilyatori. PB2 va PB3 chiqishlarida 32 ta ikkita signaldan ikkita sinusoid (turli chastotalar) hosil bo'ladi.


#o'z ichiga oladi
#o'z ichiga oladi
#o'z ichiga oladi

#SPWM_PIN kodini aniqlang 2

//sinus jadvali
__flash uint8_t tableSin =
{
152,176,198,218,234,245,253,255,
253,245,234,218,198,176,152,128,
103, 79, 57, 37, 21, 10, 2, 0,
2, 10, 21, 37, 57, 79,103,128
};

uint8_t softCount = 0;
uint8_t softComp = 0;

int asosiy (yaroqsiz)
{
// Portlarni sozlash
PORTB=0;
DDRB=0xff;

//T0 uchun qayta ishga tushirishga ruxsat berilgan
TIMSK = (1<//FastPWM rejimi, inv bo'lmagan. nim signali, oldindan o'lchovchi 8
TCCR0 = (1< (0<

//savdo reestrini tiklash
TCNT0 = 0;
OCR0 = 0;

enable_interrupt();
while(1);
qaytish 0;
}

// T0 taymerini tiklash
#pragma vektori = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void)
{
statik uint8_t i = 0;
statik uint8_t j = 0;

OCR0=tableSin[i];
i = (i + 1) & 31;

// dasturiy ta'minot PWM
softCount++;
agar (softCount == 0)(
PORTB |= (1<softComp = tableSin[j];
j = (j + 1) & 31;
}

Agar (softCount == softComp)(
PORTB &= ~(1< }
}

1.4 PWM uchun filtr

Filtrning chastotasi aybdor, lekin ishlab chiqarilgan analog signallarning maksimal chastotasi va PWM signalining chastotasi o'rtasida. Bunday holda, filtrning chastotasi analog signalning diapazoniga yaqin tanlanadi, bu esa biroz zaiflashuvga olib keladi. Va agar filtrning chastotasi PWM signalining chastotasiga yaqin bo'lsa, analog signal shunchaki "ko'rinmaydi". PWM signalining chastotasi qanchalik yuqori bo'lsa, tashqi filtrni amalga oshirish osonroq bo'ladi.

Keling, bir misolni ko'rib chiqaylik. PWM signali apparat 8-bitli soat tomonidan ishlab chiqariladi, oldindan shkala koeffitsienti 8 ga teng, mikrokontrollerning takt chastotasi 8 MGts, analog signal soni 32 ga teng.

PWM signalining chastotasi qo'shimcha:

Fpwm = Fcpu/(K*2^n) = 8000000/(8*256) = ~3906 Gts

Analog signalning chastotasi o'rnatiladi:

Fa = Fpwm/Ns = 3906/32 = 122 Gts

Biz 200 Gts ga teng chastotani va passiv past chastotali RC filtrining reytingini tanlaymiz. Bunday filtrning chastotasi chastota bilan belgilanadi:

Fc = 1/(2*Pi*R*C),

de R - qarshilik qiymati (Ohm), C - kondansatkichning quvvati (F).

Komponentlardan birining nominalini hisobga olgan holda, siz ikkinchisining nominalini hisoblashingiz mumkin. Nominal qiymati 1 kOm bo'lgan rezistor uchun kondansatkichning sig'imi ko'proq:


C = 1/(2*Pi*Fc*R) = 1/(6.28*1000*200) = ~0.8uF


Biz E12 seriyasidan eng yaqin qiymatni tanlaymiz - 0,82 uF. Filtrning bunday reytinglari uchun biz shunga o'xshash analog signalni olamiz.

Biroq, qoida tariqasida, passiv filtrning bir tomoni etarli bo'ladi. Shu sababli, analog signal hali ham ko'p sonli harmoniklarga loyiqdir.

© 2022 androidas.ru - Android haqida hamma narsa