Nega men PWM kuchini qo'zg'atmasligim kerak?

Shuning uchun men ATtiny45 bilan o'ynashni boshladim, va shunga o'xshash narsa menda, ehtimol, Sysclock/64 uchun taymerni bosib, PWMni kuch ishlatishga majbur qilsam, keyin boshqa joylarda o'rnatilgan global o'zgaruvchiga qarab chiqishlarni yoqish yoki o'chirib qo'yish ISR kodini ishga tushirish kodi yoki IO orqali. 20MHz tezlikni maksimal tezlikda qabul qilsam yaxshi rezolyutsiyaga ega bo'laman va ikkita chipning o'rniga barcha IO pinlarini PWM sifatida ishlataman, shuning uchun katta savol ... nima uchun bo'lmasin? Juda ko'p sysclock davrlarini ishlatishdan tashqari, men, albatta, kamchiliklarni ko'rmayapman ... kimdir menga berishi mumkinmi?

6
ATtinyX5 3 ta chiqish taqqoslagichini, OC0A, OC0B/OC1A (PB1 bilan birgalikda), OC1B bilan ta'minlamaydimi?
qo'shib qo'ydi muallif Hrvoje Hudo, manba
qo'shib qo'ydi muallif Dan, manba
Men buni bir marta bajarishga harakat qildim (lekin boshqa nazoratchi bilan). Amalda siz toza pulsni olmaysiz. Buning o'rniga u sizning soat tsikli vaqtingizga qarab farq qiladi va sizning kontrolünüz boshqa narsa bilan band bo'lsa, sekinlashadi.
qo'shib qo'ydi muallif Teresa Ortega, manba
u ham yomonni sezadi - bitta pwm kanali uchun juda kam apparatni oladi - u to'liq ro'yxatga olinadigan, ikkinchidan, bir soatga bo'linadigan mantiqni va ehtimol shunga o'xshash Darbeli zarba ham. bitni chalg'itishda vaqtni aniq belgilash qiyin va murakkab, shuningdek (nisbatan) kuchli resurslardan foydalanish - kodni ijro etish, kanallarni o'chirish, tizim soatlari (PWM soatlariga qaraganda ko'proq xususiyatlarga ega bo'lishi mumkin) - bularning barchasi oddiy funktsiyalardan iborat. nega ko'proq kanallarga ehtiyoj bor? arzonroq yo'l bo'lishi mumkin.
qo'shib qo'ydi muallif lanzo, manba

6 javoblar

Uch ahvolga tushgan narsalar - quvvat sarf qilish, taymerni ulash va boshqa kodni buzish. Kam quvvat rejimlari haqida qayg'urmasangiz va taymerga ehtiyoj qolmasa va intervalgacha xizmat qilish uchun bir necha soat aylanishiga bardosh bera olmaydigan tanqid kodi bo'lmasa, u holda hech qanday kamchilik yo'q. Ba'zi bir loyihalar juda oddiy va mikrokontrolning kuchining o'ndan biriga to'g'ri kelmaydi, shuning uchun hech kim bunday timerlardan foydalanib, siz noto'g'ri qilyapsiz. Sizning ehtiyojlaringizga mos keladigan dasturiy ta'minot PWM yaxshi.

6
qo'shib qo'ydi
@Menga qarshi ovozingiz bor. Shunday qilib, agar u taymerlar hali ham ishlayotgan bo'lsa, MCU uxlay olmaydi. ATtiny-da taxminan 3,8 mA (lekin, agar chindan ham kuch-quvvat haqida g'amxo'rlik qilsangiz 1,8 Vda ishlay oladigan bo'lsa, bu faqat 0,2 mA ni saqlaydi) "nol" 2 mAda bitta diskret LEDni ishlasa, men sizning jamg'armaning "statistik jihatdan ahamiyatli" ekanligiga ishonch hosil qilaman, chunki u muhandislik nuqtai nazaridan befarq.
qo'shib qo'ydi muallif Hrvoje Hudo, manba
Shuni yodda tutingki, agar siz bir yorug'lik nurini yoritishda juda ko'p bo'lsa, «tejash qudrati» haqidagi barcha gaplar ahamiyatsizdir.
qo'shib qo'ydi muallif Hrvoje Hudo, manba
Agar dasturiy ta'minotni ishlatish, PWM, CPU tezroq zarur bo'lgandan ko'ra, tezroq soat tezligi bilan ishlashini talab qilib, quvvat sarfini oshirishi mumkin.
qo'shib qo'ydi muallif firedfly, manba
@MathEE CPU ko'rsatmalarni bajarmasa, uni kam quvvatli uxlash rejimiga o'tishni buyurasiz. Bu shuni anglatadiki, qurilma muayyan vaqt uchun kam quvvat sarflaydi. Ba'zi uyqu rejimlari uchun taymer-nazorat ostida PWM ishlashni davom ettiradi, ammo, albatta, biroz chalkashlik bilan PWM bo'lmaydi. To'xtatish uyqu rejimidan chiqishning keng tarqalgan usuli hisoblanadi.
qo'shib qo'ydi muallif La raison, manba
@MathEE Apparat/taymer PWM dan foydalanilganda siz CPUga ehtiyoj sezmaysiz va siz uni uyquga qo'yishingiz mumkin. Bu adolatli miqdordagi kuchni saqlab qoladi. U PWM chalinish paytida buyruq davrlarini hisoblash o'rniga, taymer nazoratidagi PWM (va shu tariqa uxlash mumkin) ishlatilganda protsessor ishlamayapti, deb ta'kidlaydi.
qo'shib qo'ydi muallif La raison, manba
PWM ko'plab platformalarda taymerni bog'laydi
qo'shib qo'ydi muallif wannabecapablanca, manba
Bir interrupt, kodni xizmat qilish uchun mikrokreditlarni past kuch rejimidan chiqaradi. Uskuna PWM moduli chipni LPM dan chiqarmasdan, har jihatdan ancha samarali ishlashi mumkin. Agar barcha mcu ishlatiladigan bo'lsa, odatda foydalanuvchi bilan o'zaro ta'sirlashuvi bilan PWM bo'lib, u energiya sarflashga katta ta'sir ko'rsatadi.
qo'shib qo'ydi muallif Eloise Coramsfield, manba
Sizning yolg'on tasavvurlaringiz bilan rozi bo'lmaydigan @nickt kontratsistlar emas.
qo'shib qo'ydi muallif Eloise Coramsfield, manba
Buning aksi, aksincha, hozirgi kam ilovalar, energiya tejashdan eng ko'p foyda keltiradi. Agar sizning maqsadingiz 3 mAh bo'lsa, mc'yni doimo uyg'otadigan o'rtacha o'rtacha 2 mAh katta zarba. Boshqa tomondan, 500mA motorli pwm ilovasiga 2mAh zarba kam.
qo'shib qo'ydi muallif Eloise Coramsfield, manba
Katta. Rahmat.
qo'shib qo'ydi muallif John Keddy, manba
@jippie Ha, men kuchni saqlash uchun uyqu holatidan chiqib ketish uchun uzilishlarni ishlatishi mumkinligini tushunaman. Passerbyning fikricha, energiya iste'moli kamchilik bo'lib chiqdi. Ishonchim komilki, Passerby bir narsaga ega edi, biroq PWM apparatlari ISR ​​bilan birlashtirilgan hisoblagichdan kamroq kuch sarflashi menga ma'lum emas. Axir, PWM moduli qo'shimcha qurilmalarga ega bo'lgan taymer.
qo'shib qo'ydi muallif John Keddy, manba
Quvvat iste'moli orqali ISR ​​bilan taymer to'liq dasturiy ta'minotga qaraganda ko'proq energiya sarflaydi, to'g'rimi? ISR bilan ishlaydigan taymer maxsus PWM apparatini ishlatish bilan bir xil quvvat sarfiga ega bo'lishi kerak.
qo'shib qo'ydi muallif John Keddy, manba

Yaqinda men juda ko'p PWM quvvatini uzatuvchi elektr ta'minoti bilan o'ynab qoldim va siz to'g'ri deb bilasiz, "bit portlash" zarba kengligi modulyatsiya qilingan signallarga juda to'g'ri sabablar bor. Ammo, bu usulning asosiy xatolaridan biri, hosil bo'lgan ish aylanish jarayonini darhol qayta ko'rib chiqishga kerak bo'lsa.

Hatto 20 MGts hajmli soatga ega bo'lsa ham, aylanish vaqti 50 nanosaniyadir. Hisob-kitoblarga ko'ra, kuzatuv ostidagi signalni olishingiz, uni mos yozuvlar darajasidan chiqarib olishingiz va keyinchalik ish aylanishi jarayonini qaytadan boshlashingiz kerak. Bu vazifa aylanishi barqaror bo'lmagan joyda "jitter" yaratadi. Bortdagi DAC-dan foydalanish bu savoldan tashqarida emas, lekin u ko'chadan o'tadi. Bunga barham berish uchun tashqi DACni qo'shishingiz mumkin, ammo siz tezda o'qish uchun (mikrokontrolyordan tashqi DAC ga 8 yoki 12 pin bo'lishi mumkin). Keyinchalik, komponentlarni almashtirish orqali qo'shimcha signalni uzatish kechikishidan tashvishlanishingiz kerak.

Agar istalgan narsa tezkor qayta tekshirish bo'lsa, unda mustaqil ish aylanishiga qarshi kurashish qiyin bo'ladi. Bortdagi xatolikni kuchaytirgichning kechikishi shunchalik kichkinagina, siz yuqori chastotalarda o'zgargan daromadni ko'proq tashvishga solmoqdasiz. Kommutatsiya orqali signallarning tarqalishi, albatta, bir xil xavf hisoblanadi va atrofida loyihalashtirilishi kerak.

Bundan tashqari, juda ko'p PWM IC to'plami, 8 yoki 16 pinli bir pakette, bir mikroişlemciyle birlashganda, albatta, uyqusiz narsalar qila oladigan yopilish xususiyati va o'lik nazorat qilish kirishiga ega ekanligiga ishora qiladi.

Bitparchka uslubi sizning ehtiyojlaringizni qo'llab-quvvatlasa bo'ladimi-yo'qmi, buni hal qilish uchun juda ko'p narsa. Past chastota o'lchagichni ishlatsangiz chastotani ancha yuqori ko'tarib olishingiz mumkin. Siz olgan vazifa siklizatsiyasi kvantlama xatosini namoyish etadi, ammo bu sizning qilayotgan ishingizga va siz qanchalik yuqori darajada qaror qabul qilishingizga bog'liq bo'lsa ham katta ish bo'lmasligi mumkin; ammo keyin yana yuqori piksellar sonini past chastotada sarflaydi. Agar siz darhol qayta-qayta tekshirishni talab qilmasangiz va sizning ilovangiz biroz jitter qila olsa, unda bit-portlash jarayoni yo'l bo'lishi mumkin.

4
qo'shib qo'ydi

Chipdagi apparat vositalariga ega bo'lish nuqtasi protsessorni boshqa vazifalar uchun bo'shatishdir. Agar siz PWM apparatidan foydalansangiz, bir vaqtning o'zida boshqa mikrokontrolter vazifalarini bajarishingiz mumkin.

Endi menimcha, siz bu bitni tanladingiz, chunki siz ISR-ni ishlatish o'rniga/for loop qo'g'irchoq kuch-hisoblagichini ishlatish o'rniga so'rab qolmoqchisiz, lekin yana bir xil javob. Agar zarba kengligini o'zgartirsak, nega boshqa vazifalarni keraksiz qoldirishni istaymiz?

3
qo'shib qo'ydi
BOMga qo'shilmasdan 3 dan ortiq PWM kanallarini istaganimiz uchun.
qo'shib qo'ydi muallif Dan, manba
@Ignacio Ehtimol, men savolni noto'g'ri o'qiyman, lekin uni o'qiganman, OSh kuch ishlatish uchun PWM so'radim, keyin bonus ko'proq PWM kanallarini oladi. Agar siz OP aksiyasini amalga oshirishni xohlasangiz, siz ko'proq kanallarga muhtoj bo'lishingiz kerak.
qo'shib qo'ydi muallif John Keddy, manba

Siz osongina aytayotganingizni qilishingiz mumkin - men buni bir necha marta qildim. Agar siz PWMni oldindan ma'lum vaqtlarda o'zgartirishni xohlasangiz, bu sizga foydali bo'ladi; siz PWM tsikllari sonini sanab, bularni bajarishingiz mumkin va baribir buni amalga oshirish uchun taymer kerak.

Shu bilan birga, PWM/# chiqishi va erkin protsessor vaqtining miqdori o'rtasidagi o'zaro kelishuv mavjud. Siz buni amalga oshirish uchun etarlicha bo'sh CPU mavjud bo'lmagan nuqtaga etib borasiz.

Men bir bo'shliqqa qadar tortishishni tavsiya qilaman, keyin esa bu pinni ISR ​​boshida baland va oxir-oqibat past bo'ladi. Bu sizga muntazam foydalanadigan vaqtning nisbatlarini ko'rish imkonini beradi.

1
qo'shib qo'ydi

foydalanib, dasturiy ta'minotni PWM juda to'g'ri CPU talab qilmaydi. Ikkilamchi kodni o'zgartirish . . Ushbu ajoyib va ​​sodda texnika bilan siz katta CPU yuklamasdan SoftPWM kanallari ko'p bo'lishi mumkin.

0
qo'shib qo'ydi
Men LEDlar uchun BCMning turli xil variantlarini qo'lladim va ular qattiq darajalar uchun yaxshi, ammo agar yorug'lik darajasi 127 va 128 orasida o'zgarib ketsa, berilgan yondashish buziladi. 256-darajali PWM uchun muqobil yondashuv - Misol uchun har 256 tsiklda bir marta va har bir chiqib ketish LED ni ikki marta, 16 tsikldan iborat bo'ladi. O'rtalarning yarmiga (o'zgaruvchan), bit 3 va undan keyin bit 7 yozing. Qoldiqning yarmida, bit 2 ni yozing va keyin 6, va hokazo. 1/16 da nolni yozing va boshqa ishlovlarni bajaring.
qo'shib qo'ydi muallif firedfly, manba
Ikkilik kod modulatsiyasining o'zaro bog'liqligi 127 va 128 gacha bo'lgan qiymatlar ketma-ket 255 ta impuls uchun past bo'ladi va qiymatining 128 dan 127 gacha o'zgarib borishi natijasida ketma-ket 255 ta yuqori bo'ladi. Bundan tashqari, nazorat qilinadigan qurilma noto'g'ri yoqish/o'chirish harakati bo'lsa, PWM o'z masofasining ko'pchiligi uchun lineer ishlaydi, BCM esa bunday qilmaydi. BCM bo'yicha ayrim o'zgarishlar foydali bo'lishi mumkin, ammo uning cheklovlari ko'pincha tan olinishi va ko'rib chiqilishi kerak.
qo'shib qo'ydi muallif firedfly, manba
Minor nit: PWM bir necha muayyan modulyatsiya sxemalariga ishora qiladi, unda doimiy chiqish darajasi ma'lum bir ish aylanishiga ega bo'lgan yurak urish to'lqini bilan ifodalanadi va to'lqinning chastotasi vakili darajadan mustaqil bo'ladi; sxemalar faqat chiqish darajasidagi o'zgarishlar ko'rinishida o'zgaradi. Ikkilik Kod Modulatsiyasi vazifa aylanish modulyatsiyasi sxemalarining umumiy umumiy sinfining a'zosi hisoblanadi.
qo'shib qo'ydi muallif firedfly, manba
BCM har narsa uchun echim bo'lmasligini yaxshi tushungan bo'lsangiz ham, juda ko'p jihozlar bilan juda yaxshi va juda kam CPU foydalanish bilan shug'ullanadi. Eng keng tarqalgan yoritgichlar, ehtimol, yorug'likli LED-lardir. Ushbu holatda nashrida lineerligi zarur bo'lsa, u holda PWM va BCM ham tuzatish jadvali kerak bo'ladi.
qo'shib qo'ydi muallif TheFaderJockey, manba

Shaxsan men timer PWMlarning tezroq va izchilligini topdim (256 oralig'ida, agar bunday rezolyutsiya kerak bo'lmasa, dasturiy ta'minot ["qo'pol kuch"] tezroq bo'lishi mumkin) va men 2 dan ortiq qattiq PWMs bilan birga yumshoq PWMingni sinab ko'rdim va u juda yumshoq emas edi, shuning uchun dasturda barcha PWM ni tanladim va u ajoyib bo'ldi. Bitta narsa - vaqtni va oraliq hisob-kitoblarni/ishlov berishni to'xtatib turganda, biroz vaqt talab etadi, yumshoq PWM stalls va juda sezilarli bo'lishi mumkin.

0
qo'shib qo'ydi