spinach Postat August 31, 2011 Partajează Postat August 31, 2011 Salutam ,Intentionez sa fac un generator de semnal PWM , folosind un AtTiny2313 . Am studiat prospectul circuitului si am ajuns la o neclaritate , pe care poate ma ajutati sa o lamuresc . Deci:1.Pentru a folosi un semnal PWM , avem nevoie de o anumita frecventa si un grad de umplere . Uzual , la frecventa nu se umbla , dar se umbla la gradul de umplere .2.Tiny2313 ofera 2 moduri de direct PWM pe o esire , fara a mai scrie ceva suplimentar in program .Neclaritatea este pentru ambele moduri la fel.3.Fie ca folosim timerul de 8 biti , fie cel de 16 biti , neclaritatea mea este aceasi si provine din exprimarile prospectului .4. Frecventa semnalului livrat , se regleaza din valoare de TOP . Aici , in prospect apar 2 notiuni : -ca valoare de top fie este fixa , fie este data de OCRxA -ca valoare de top este data de OCRxn M-a bagat in ceata ; cum este corect ?5.Indiferent de stilul folosit [inversor/neinversor] pragul de comutare se defineste de OCRxn ; pai daca este adevarat ca valoare de top se defineste numai cu OCRxA , de ce se exprima cu OCRxn si nu cu OCRxB ?iar m-a bagat in ceata .6.Teoretic pentru ca sa ii schimb gradul de umplere , trebuie sa umblu la pragul de comutare ; pot sa o fac in timp ce timerul functioneaza ?7.Are 2 esiri [OCxA si OCxB ] ce pot fi alocate ca tip output PWM ; se poate folosi oricare din ele ? merg in paratel ? sint bara-bara cu alocarile de top si prag ? se poate folosi doar una din el , oricare ?8.Apar niste restrictii output descrise la varianta toggle ; sint valabile tot timpul ?9.Presupunind ca alocam timerul , cu zona A ,pentru generare de PWM ; mai poate fi folosit cu zona B ca timer separat ? Cind alocam un timer pentru generare de PWM este normal sa socotim ca de fapt nu mai exista ?Sper ca nu am pus prea multe intrebari . Link spre comentariu
ole Postat August 31, 2011 Partajează Postat August 31, 2011 Am sa incerc sa raspund cat pot de complet si clar, pe rand la fiecare punct:1.Pentru a genera PWM este nevoie de 1 timer care sa aiba generatoare de PWM. ATTiny2313 are cate 2 canale PWM atat pe Timer0(8-bit) cat si pe Timer1(16-bit). Pentru a genera PWM cu timerul ales trebuie setat modul de lucru al timerului corespunzator si aleasa o sursa de ceas pt acesta. Un exemplu ar fi Fast PWM, TOP=0xFF, CLK=f_clk;2. Te referi cumva la Fast PWM si Phase Correct PWM?4. Corect este asa cum e scris in tabelul de la pagina 75, respectiv 106 din datasheet. Din cate am vazut eu este doar OCRxA.5. Pragul de comutare este dat, intr-adevar, de OCRxn, asta insemnand ca fiecare dintre OCR0A,OCR0B,OCR1A,OCR1B poate avea o alta valoare, stabilind pragul la care va comuta iesirea respectiva si astfel latimea pulsului pe acea iesire. Atentie insa la modul de lucru al fiecarei iesiri, putand fi active oricate din cele 4 generatoare de PWM, nu neaparat toate 4. Valoarea de TOP pe de alta parte stabileste frecventa PWM-ului. In modul Fast PWM, spre exemplu, acesta este fix si egal cu 0xFF. In modul CTC el este variabil si egal cu OCR0A (pt Timer0), respectiv OCR1A (pt Timer1).6. Valoarea pragului de comutare poate fi schimbata in timp ce timerul functioneaza, fara nicio problema. E posibil sa existe exceptii insa din experienta spun ca nu am avut probleme cu Fast PWM, CTC sau Phase Correct la schimbarea "din mers" a factorului de umplere.7. Modul de functionare al fiecarei iesiri este dat de bitii COMxn1, COMxn0 din registrul TCCRxA, unde x este numarul timerului iar n este iesirea A sau B. Cum am spus si la punctul 5, se pot folosi oricate din cele 4 iesiri atat timp cat timerul care le controleaza este configurat corect. Spre exemplu, nu se pot folosi iesirile OC1A si OC1B daca Timer1 nu este configurat sa genereze PWM si nu este pornit, chiar daca Timer0 este configurat pt PWM iar iesirile OC0A si OC0B genereaza PWM. Se poate folosi de asemenea si o iesire de la un timer, sa zicem OC0A, si o iesire de la celalalt timer, OC1B, cu conditia ca atat Timer0 cat si Timer1 sa fie configurate corespunzator, asta fiind doar un exemplu.8. Ce restrictii? La ce pagina scrie despre asa ceva?9. Un timer folosit pentru PWM poate fi folosit si ca timer normal tinand cont de anumite restrictii care apar in functie de modul de PWM ales. Link spre comentariu
spinach Postat Septembrie 1, 2011 Autor Partajează Postat Septembrie 1, 2011 a. Varianta pe care vreau sa o implantez este Phase corect PWM ; am vazut ca este varianta recomandata pentru motoare ; ambele variante insa au aceasi problema in prospect , de exprimare , cind se bilbie in stabilire valoare de top . Daca este adevarat ca valoare de top se stabileste numai din OCRxA , evident ca valoare prag de comutare se va stabili din OCRxB , ca altul nu ar mai fi, si aceste sa fie valabil pentru ambele esiri . Chiar si schema de la pagina 61 este neconcordanta cu afirmatiile prospectului . Pun aceste intrebari deoarece nu pot sa ma hotarasc in cablaj , care din esiri o voi folosi pentru PWM. b.valorile pentru OCRxA si OCRxB , evident vor fi alocate functie de necesitatile de PWM . Cred ca a folosi timerul in alte scopuri in paralel , ar trebui sa o facem fara sa ne atingem de valorile celor 2 registri OCRxn c.Restrictie , de la pg 68 "Setting the COM0A1:0 bits to one allows the AC0A pin to toggle on Compare Matches if the WGM02 bit is set. This option is not available for the OC0B pin (See Table 26 on page 54). The actual OC0x value will only be visible on the port pin if the data direction for the port pin is set as output. The PWM waveform is generated by setting (or clearing) the OC0x Register at the Compare Match between OCR0x and TCNT0, and clearing (or setting) the OC0x Register at the timer clock cycle the counter is cleared (changes from TOP to BOTTOM). Pentru phase corect PWM cam tot asa este ; ma gindesc , ca sa fiu sigur , sa aloc OCxA ca iesire de PWM , deoarece nu imi trebuie 2 esiri. Link spre comentariu
ole Postat Septembrie 1, 2011 Partajează Postat Septembrie 1, 2011 a. Daca OCR0A este TOP si ambele iesiri sunt setate pt Normal PWM (mod 2) atunci, din cate am inteles eu, OC0A va avea factor de umplere 50% tot timpul iar OC0B va avea factor de umplere in functie de OCR0B care are valoarea maxima egala cu TOP si implicit in cazul de fata are valoare maxima egala cu OCR0A. Ambele semnale au frecventa data de frecventa de ceas a sistemului, divizorul ales pt timer si valoare lui OCR0A. b. Timerul se poate folosi independent de OCR0A si OCR0B. Valorile acestor registri se pot modifica in intreruperea folosita pe Timer. c. Modul acesta de functionare, daca bine am priceput, seamana oarecum cu modul CTC (in care se obtine semnal cu factor de umplere 50%) dar este disponibil doar pt OC0A. Acum, in functie de ce PWM ai nevoie te gandesti ce sa folosesti. Chiar asa...de ce semnal ai nevoie, cu ce parametri? Link spre comentariu
spinach Postat Septembrie 1, 2011 Autor Partajează Postat Septembrie 1, 2011 Nu stiu prea bine ; ceva uzual , de 1khz cu factor de umplere intre 20-95 %.Ei trateaza ca fiind cazuri speciale cind OCRxn este setat pe valoare de top sau valoare de bottom Am mai studiat schemele de la cele 2 timere si au cam acelasi principiu ; acuma ar putea filogic cam asa : ca valu de top sa se seteze din OCRnA , valoare de prag din OCRnB iar esirile in functie de ce ii trebuie fiecaruia ; cea ce ma intriga , de ce esirile sint profilate pe A ai B daca sint omoloage ?Din studiul tabelelor 35, 36, 38 ,39 , insa reiesa urmatoarea logica :-daca ne hotarim sa folosim OCnA , ca iesire , atunci top se fixeaza din OCRnA si prag din OCRnB-daca ne hotarim sa foloim OCnB , ca iesire , atunci top se regleaza din OCRnB si prag din OCRnA Eu nu mai inteleg nimic , din ambigitatea acestui prospect. Link spre comentariu
ole Postat Septembrie 8, 2011 Partajează Postat Septembrie 8, 2011 Eu din cat am lucrat cu PWM nu prea sunt de acord cu Din studiul tabelelor 35, 36, 38 ,39 , insa reiesa urmatoarea logica :-daca ne hotarim sa folosim OCnA , ca iesire , atunci top se fixeaza din OCRnA si prag din OCRnB-daca ne hotarim sa foloim OCnB , ca iesire , atunci top se regleaza din OCRnB si prag din OCRnAdar poate nu am inteles eu bine.Am intrebat de semnalul care se doreste a fi generat pentru a gasi cea mai buna solutie. Daca nu trebuie o frecventa exacta atunci e mai simplu. In orice caz ar fi bine de stiut conditiile impuse (f_CPU - este impus sau se poate alege?, f_semnal - macar orientativ, factor de umplere). Stiu ca ultimele doua au mai fost mentionate o data insa ~1Khz se poate obtine in mai multe feluri. Link spre comentariu
spinach Postat Septembrie 9, 2011 Autor Partajează Postat Septembrie 9, 2011 -nu este fixa frecventa ; voi pilota intrarea unui motor bldc , cu o tensiune de 2.7-3.5v ; in functie de fecventa disponibila , se proiecteaza structura RC de transformare din ac in dc.-am facut deja primul test si am costatat ca in regim phase pwm , pe OC0A , nu iese nimic ; am sa decuplez toate esirile sa vad pe care va iesi semnal . Bilbiala din prospect arata ca au adaptat un prospect standart la tiny3213 si in mod sigur este ceva ce nu se va potrivi . Link spre comentariu
spinach Postat Septembrie 10, 2011 Autor Partajează Postat Septembrie 10, 2011 Am facut cercetari astfel :-circuitul a lucreat in regim ISP-cercetarea am facut-o pe timerul 0 -pini de esire OC0A si OC0B au fost liberi-am incercat mai multe variante , masurind cu un multimetru fiecare pin -nu am putut sa determin gradul de umplere deoarece nu am osciloscopObsevatii a.mod fast PWM-daca setam cu top in varianta FF , atunci ambele esiri au semnal inverting/noninverting ; frecventa corespunde cu formula din prospect ; intreruperile merg si pot fi folosite in paralel ; probabil ca din OCR0A se regleaza umplerea la esire OC0A si din esire A ; OCR0B probabil ca regleaza umplerea din esire B-daca setam top =OCR0A , atunci gasim semnal inverting/noninverting numai pe esirea B ; esrirea A pur si simplu este moarta ; cind OCR0A tinde catre FF , frcventa scade si tinde catra valoarea de la punctul anterior ; cind OCR0A tinde catre 00 , frecventa creste ; merge si cu intreruperi in paralel b. mod Phase Corect PWM-se comporta in acelasi sistem ca si fast pwm , dar cu frecventele pe jumatate-mu merge cu intreruperi ; daca se activeaza intreruperea , imediat generatorul se opreste .-In concluzie :-putem fabrica 2 semnale PWM , cu frecventa egala cu FF la amindoua si factori de umplere diferiti .-putem fabrica un singur semnal , cu fercventa in functie de OCR0A , esire pe OC0B , umplere reglabila din OCR0B-putem folosi in paralel timerul , cu intrerupere , pentru mod fast pwm , dar nu putem umbla separat la valorile timerului .Deci , cind proiectam circuitul , daca avem nevoie de un singur semnal PWM , este mai sigur sa folosim esirea OC0B- Link spre comentariu
simplex Postat Noiembrie 5, 2011 Partajează Postat Noiembrie 5, 2011 Exista un proiect de generator semnal PWM (vezi adresele de mai jos) pentru Atmel AVR cu programul de comanda scris in BASCOM si schema simulata in Proteus ISIS. Tot ce trebuie sa faci este sa dai un dublu click pe procesorul din schema si sa schimbi fisierul sau HEX cu propriul tau HEX (nu neaparat obtinut cu Bascom) pentru a experimenta cum functioneaza generarea acestui PWM. http://www.avrprojects.info/avr-project ... using-pwm/ si http://www.avrprojects.info/files/files ... ontrol.zip Nu uita sa setezi - Proteus ISIS / Debug / Digital Osciloscope pe vizibil pentru a putea vedea cum se modifica factorul de umplere al semnalului PWM daca apesi butoanele Slow si Fast de pe schema. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum