ramsesrr Postat Noiembrie 5, 2010 Partajează Postat Noiembrie 5, 2010 Cum pot genera sinus/cosinus cu mcrocontroller fara PWM .Eu ma gandeam la folosirea Seriei Taylor dar nu prea stiu cum sa o implementez.Ma poate ajuta cineva? Link spre comentariu
Vizitator Postat Noiembrie 5, 2010 Partajează Postat Noiembrie 5, 2010 Si daca ai avea PWM cum ai face, ca nu vad ce legatura are PWM-ul cu generarea functiei sinus? Cel mai rapid si simplu este sa folosesti o tabela in care stochezi valorile y precalculate ale functiei y=f(x) pe care vrei sa o generezi. Tabela o pui undeva in memorie si ca sa afli valoarea functiei pentru un x dat nu faci altceva decat un look-up table, adica o simpla citire din memorie folosind adresarea indexata dupa variabila x. De obicei asa se face. Link spre comentariu
cirip Postat Noiembrie 6, 2010 Partajează Postat Noiembrie 6, 2010 Cum pot genera sinus/cosinus cu mcrocontroller fara PWM .Eu ma gandeam la folosirea Seriei Taylor dar nu prea stiu cum sa o implementez.Ma poate ajuta cineva?Sunt doua probleme separate. Una este generarea valorilor esantioanelor si alta este transformarea lor in tensiuni.Generarea esantioanelor se poate face cu seria Taylor, asa cum ai propus, dar este ineficient pentru ca seria Taylor converge lent si ai nevoie sa faci multe ridicari la putere, adica in esenta inmultiri. Daca nu ai multiplicator hardware este si mai lent.Generarea esantioanelor sinusului se poate face prin mai multe metode:-Cum spunea RoGeorge, memorezi o tabela si faci interpolare. Avantajul este rapiditatea, dezavantajul este memoria consumata.-CORDIC - Este un algoritm de aproximatii succesive, destul de intensiv, dar mult mai eficient si cu convergenta mai rapida decat seria Taylor.-recursiv, cu transformata Z. Fiecare esantion nou se calculeaza din esantioanele anterioare cu 2 inmultiri si o adunare.-vad ca vrei sa generezi sin/cos. Daca vrei numai unul dintre ele, sin sau cos e tot aia. Cosinusul e un sinus defazat cu 90 de grade. Daca le vrei simultan, adica vrei un oscilator complex (cos + j*sin), atunci exista o smecherie recursiva prin care le generezi pe amandoua pastrand riguros relatia de faza de 90 de grade. A doua problema este conversia de la valorile numerice reprezentate digital la tensiuni. Aici poti folosi:-un PWM urmat de un filtru trece jos (Cea mai ieftina solutie. Am facut-o si merge) Asta e solutie seriala. Un pin e de ajuns.-retea R-2R sau ponderata la pinii picului. Ocupi n pini in paralel.-Convertor D/A consacrat, serial sau paralel.In functie de ce doresti si cat esti de interesat, iti mai spun. Cirip Link spre comentariu
bogdan_ Postat Noiembrie 6, 2010 Partajează Postat Noiembrie 6, 2010 Respectiv, daca vrei de-a gata, poti folosi ceva bucati din avr dds, o varianta o gasesti pe aici: http://www.scienceprog.com/avr-dds-sign ... rator-v20/ Link spre comentariu
one Postat Noiembrie 26, 2010 Partajează Postat Noiembrie 26, 2010 Cred ca problema se pune diferit in functie de frecventa pe care vrei sa o generezi.Daca vrei sa generezi 1kHz sinus, atunci varianta PWM cade.Nu prea inteleg ce inseamna generare sin/cos cu microcontroller. Adica sa iti calculeze valoarea sau sa iti scoata unda la iesire? In primul caz nu inteleg la ce foloseste PWM in al doilea caz nu inteleg de ce spui sinus-cosinus si nu spui semnal sinusoidal.Sau vrei sa ai un semnal analogic la iesire, functie de un semnal analogic la intrare?Daca este vorba despre generare, poti folosi AD8935 de exemplu, care iti poate genera semnal sinusoidal. Daca este vorba de o valoare foarte lent variabila, poti folosi un DAC.Pentru calculul valorii sin/cos o tabela mi se pare cea mai rapida cale. Link spre comentariu
cirip Postat Noiembrie 26, 2010 Partajează Postat Noiembrie 26, 2010 Se pare ca posterul initial nu mai catadicseste sa dea vreun semn. E foarte activ la vanzari, dar atat. Subiectul era interesant. 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