Jump to content
ELFORUM - Forumul electronistilor

Generare sinus/cosinus cu mcrocontroller


Recommended Posts

  • Replies 5
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

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 to comment

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 to comment
  • 3 weeks later...

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 to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines