INHOUDSOPGAWE:
- Stap 1: Genereer die Pwm -sein vir 50Hz
- Stap 2: Arduino -program vir veranderlike diens
- Stap 3: Afwisselend by 50Hz Arduino -penne
- Stap 4: Ry met 'n H -brug en filtreer die Pwm -sein
Video: Arduino Sinewave vir omsetters: 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
In hierdie projek het ek 'n SPWM (sinusgolfpuls wye gemoduleerde) sein gegenereer van twee arduino pwm digitale uitsette.
Omdat ek so 'n program moet maak, moet ek oor baie ander funksies en eienskappe van die arduino praat, die volledige projek, insluitend ossilloskoopbeelde en vir verskillende frekwensies, besoek my webwerf:
eprojectszone
Stap 1: Genereer die Pwm -sein vir 50Hz
Om 'n 50Hz -sein teen 'n hoër frekwensie te genereer, is dit nodig om berekeninge te doen. Die frekwensies van arduino kan by 8MHz wees, maar ons wil 'n sein hê met 'n veranderlike siklus.
Om die tipes veranderlike werk siklusse van arduino te verstaan, kan u hierdie 3 dele van dieselfde pos 1, 2 en 3 lees.
Gestel ons frekwensie is 50Hz, wat beteken dat die tydsperiode 20 ms is. Dus is 10ms 'n halfsiklusperiode. In die 10ms moet ons baie pulse hê met verskillende werksiklusse wat begin met klein dienssiklusse, in die middel van die sein het ons maksimum insetsiklusse en eindig ons ook met klein dienssiklusse. Om 'n sinusgolf te genereer, gebruik ons twee penne een vir positiewe halfsiklus en een vir negatiewe halfsiklus. In ons pos hiervoor gebruik ons penne 5 en 6, wat beteken dat tydopnemer 0 is.
Vir 'n gladde sein kies ons fase korrekte pwm teen 'n frekwensie van 31372 Hz, sien vorige pos. Dus, omdat ons frekwensie f = 31372Hz is, is die periode vir elke pols T = 1/31372 = 31.8 ons, dus is die aantal pulse vir 'n halwe siklus N = 10ms/31.8us = 314 pulse. Om die pligsiklus vir elke pols te bereken, het ons y = sinx, maar in hierdie vergelyking het ons grade nodig, so die halfsiklus het 180 grade vir 314 pulse. Vir elke pols het ons 180/314 = 0.57deg/puls. Dit beteken dat ons vir elke pols vorentoe beweeg met 0.57deg.
y is die dienssiklus en x die waarde van die posisie in die halfsiklus. eers is x 0, en dan x = 0,57, x = 1,14 ensovoorts tot x = 180.
as ons al die 314 waardes bereken, kry ons 'n skikking 314 elemente (tik "int" wat makliker deur arduino bereken kan word).
So 'n skikking is:
int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};
U kan sien dat die pligsiklus, soos 'n sinusgolf, die eerste en die laaste element die laagste is en die hoogste in die middel.
Stap 2: Arduino -program vir veranderlike diens
In die prent hierbo het ons veranderlike pligsiklusseine met waardes van die skikking.
Maar hoe om so 'n sein te maak ??
die deel van die onderstaande program gebruik onderbrekings om die waardes van dienssiklusse te verander
sei (); // aktiveer onderbrekings
}
ISR (TIMER1_COMPA_vect) {// onderbreek wanneer timer 1 ooreenstem met OCR1A -waarde
if (i> 313 && OK == 0) {// finale waarde van vektor vir pen 6
i = 0; // gaan na die eerste waarde van vektor (skikking)
OK = 1; // aktiveer pen 5
}
x = sinPWM ; // x neem die waarde van die vektor wat ooreenstem met posisie i (i is nul geïndekseer)-waarde van dienssiklus
i = i+1; // gaan na die volgende posisie
}
Stap 3: Afwisselend by 50Hz Arduino -penne
Omdat elke pen slegs 'n halfwerk -siklus genereer om 'n volle sinusgolf te maak, gebruik ons twee penne wat mekaar na presies 10 msekondes (vir 50Hz) afwissel. Hierdie verandering van penne word aan die einde van die skikking gemaak- nadat ons gesê het pen 5 het 314 pulse gegenereer, word hierdie pen afgeskakel en pen 6 aangeskakel, wat dieselfde is, maar vir die negatiewe werksiklus.
Omdat arduino slegs positiewe seine kan genereer, word negatiewe dienssiklus in h brug gemaak- u kan hier hieroor lees
Die program om penne te verander:
sei (); // aktiveer onderbrekings
}
ISR (TIMER1_COMPA_vect) {// onderbreek wanneer timer 1 ooreenstem met OCR1A -waarde
if (i> 313 && OK == 0) {// finale waarde van vektor vir pen 6
i = 0; // gaan na die eerste waarde van die vektor
OK = 1; // aktiveer pen 5
}
if (i> 313 && OK == 1) {// finale waarde van vektor vir pen 5
i = 0; // gaan na die eerste waarde van die vektor
OK = 0; // aktiveer pen 6
}
x = sinPWM ; // x neem die waarde van die vektor wat ooreenstem met posisie i (i is nul geïndekseer)
i = i+1; // gaan na die volgende posisie
as (OK == 0) {
OCR0B = 0; // maak pen 5 0
OCR0A = x; // stel pen 6 in vir die ooreenstemmende dienssiklus
as (OK == 1) {
OCR0A = 0; // maak pen 6 0
OCR0B = x; // stel pen 5 in vir die ooreenstemmende dienssiklus
}
}
Stap 4: Ry met 'n H -brug en filtreer die Pwm -sein
Die seine wat van arduino verkry word, is die kontrolegedeelte vir omskakelaars, omdat albei positief is. Om 'n volle sinusgolf en 'n praktiese omvormer te maak, moet ons 'n h -brug gebruik en 'n laagdeurlaatfilter van die pwm skoonmaak.
Die H-brug word hier aangebied.
Die laagdeurlaatfilter is getoets met klein AC-motors-hier.
Aanbeveel:
Arduino motorwaarskuwingstelsel vir omgekeerde parkering - Stap vir stap: 4 stappe
Arduino -waarskuwingstelsel vir omgekeerde parkeerterrein | Stap vir stap: In hierdie projek ontwerp ek 'n eenvoudige Arduino Car Reverse Parking Sensor Circuit met behulp van Arduino UNO en HC-SR04 Ultrasonic Sensor. Hierdie Arduino -gebaseerde motor -omkeerwaarskuwingstelsel kan gebruik word vir 'n outonome navigasie, robotafstand en ander reeks
Opstelling vir eksterne Bluetooth GPS -verskaffer vir Android -toestelle: 8 stappe
Opstelling vir eksterne Bluetooth GPS-verskaffer vir Android-toestelle: hierdie instruksies sal verduidelik hoe u u eie eksterne Bluetooth-gps vir u telefoon kan aanbring, maar dit kan slegs teen ongeveer $ 10 aanbring.Materiaal: NEO 6M U-blox GPSHC-05 bluetooth-moduleKennis van koppelvlak Blutooth lae energie modules Ardui
Relay Board vir Arduino vir minder as $ 8 .: 5 stappe
Relay Board vir Arduino vir minder as $ 8 .: Hallo vriende, vandag gaan ek u vertel hoe u 'n relay board vir Arduino vir minder as $ 8 kan maak. In hierdie kring gaan ons geen IC of transistor gebruik nie, so kom ons doen dit
Gebruik 1 analoog invoer vir 6 knoppies vir Arduino: 6 stappe
Gebruik 1 analoog invoer vir 6 knoppies vir Arduino: ek het gereeld gewonder hoe ek meer digitale insette vir my Arduino kan kry. Dit het onlangs by my opgekom dat ek een van die analoog insette moet kan gebruik om verskeie digitale insette in te voer. Ek het vinnig gesoek en gevind waar mense is
Tutoriaal vir L298 2Amp -motorbestuurderskerm vir Arduino: 6 stappe
Tutoriaal vir L298 2Amp-motorbestuurderskerm vir Arduino: beskrywingL298 2Amp-motorbestuurderskerm vir Arduino is gebaseer op die geïntegreerde kring van die L298-motorbestuurder, 'n motorbestuurder met volledige brug. Dit kan twee afsonderlike 2A DC -motors of 1 2A -stapmotors aandryf. Motor se snelheid en rigtings kan afsonderlik beheer word