INHOUDSOPGAWE:

Arduino Sinewave vir omsetters: 4 stappe
Arduino Sinewave vir omsetters: 4 stappe

Video: Arduino Sinewave vir omsetters: 4 stappe

Video: Arduino Sinewave vir omsetters: 4 stappe
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, November
Anonim
Arduino Sinewave vir omsetters
Arduino Sinewave vir omsetters

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

Arduino -program vir veranderlike dienssiklus
Arduino -program vir veranderlike dienssiklus

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

Afwisselend by 50Hz Arduino -penne
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: