INHOUDSOPGAWE:
- Stap 1: Beskrywing
- Stap 2: AVR -timers - PWM -modus
- Stap 3: Meting van ligintensiteit - ADC en LDR
- Stap 4: DC-motor met kontroleerder en dubbele H-brug-motorbestuurder-module-L298N
- Stap 5: Skryf kode vir 'n program in C. Laai HEX -lêer op na die mikrobeheerder se flitsgeheue
- Stap 6: Die elektriese stroombaan
Video: AVR -mikrobeheerder. Pulswydte modulasie. Beheerder van DC -motor en LED -ligintensiteit: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Hallo almal!
Pulse Width Modulation (PWM) is 'n baie algemene tegniek in telekommunikasie en kragbeheer. dit word algemeen gebruik om die krag wat aan 'n elektriese toestel toegedien word, te beheer, of dit nou 'n motor, 'n LED, luidsprekers, ens..
Ons maak 'n eenvoudige elektriese stroombaan om die rotasiesnelheid van die GS -motor in ligintensiteitsafhanklikheid te beheer. Ons gaan ligafhanklike weerstand- en AVR -mikrobeheerderfunksies soos analoog na digitale omskakeling gebruik om die ligintensiteit te meet. Ons gaan ook die Dual H-Bridge Motor Driver Module-L298N gebruik. Dit word tipies gebruik om motorsnelheid en rigting te beheer, maar kan gebruik word vir ander projekte, soos om die helderheid van sekere beligtingsprojekte te bestuur. Ons het ook 'n knoppie by ons kring gevoeg om die draairigting van die enjin te verander.
Stap 1: Beskrywing
Elke liggaam in hierdie wêreld het 'n mate van traagheid. Die motor draai elke keer as dit aangeskakel word. Sodra dit afgeskakel word, is dit geneig om te stop. Maar dit stop nie onmiddellik nie, dit neem tyd. Maar voordat dit heeltemal stop, word dit weer aangeskakel! So begin dit beweeg. Maar selfs nou neem dit tyd om sy volle spoed te bereik. Maar voordat dit gebeur, word dit afgeskakel, ens. Die algemene effek van hierdie aksie is dus dat die motor aanhoudend draai, maar teen 'n laer snelheid.
Pulswydte -modulasie (PWM) is 'n relatief onlangse kragskakeltegniek om intermediêre hoeveelhede elektriese krag tussen vlakke wat heeltemal aan en heeltemal uit is, te verskaf. Gewoonlik het digitale pulse dieselfde tyd aan en af, maar in sommige situasies benodig ons die digitale pols meer/minder betyds/betyds. In PWM -tegniek skep ons digitale pulse met 'n ongelyke hoeveelheid aan en af toestand om die vereiste tussenspanningswaardes te kry.
Inskakel siklus word gedefinieer deur die persentasie van hoogspanning duur in 'n volledige digitale puls. Dit kan bereken word deur:
% van dienssiklus = T aan /T (periode) x 100
Kom ons neem 'n probleemstelling. Ons moet 'n 50 Hz PWM -sein genereer met 'n 45% -siklus.
Frekwensie = 50 Hz
Tydsperiode, T = T (aan) + T (af) = 1/50 = 0,02 s = 20 ms
Dienssiklus = 45%
As ons dus oplos volgens die vergelyking hierbo, kry ons
T (aan) = 9 ms
T (af) = 11 ms
Stap 2: AVR -timers - PWM -modus
AVR bevat afsonderlike hardeware vir die vervaardiging van PWM! Deur dit te gebruik, gee die SVE die hardeware die opdrag om PWM van 'n spesifieke werksiklus te produseer. Die ATmega328 het 6 PWM -uitsette, 2 is geleë op timer/teller 0 (8bit), 2 is op timer/teller1 (16bit) en 2 is op timer/teller2 (8bit). Timer/Counter0 is die eenvoudigste PWM -toestel op die ATmega328. Timer/Counter0 kan op drie modusse uitgevoer word:
- Vinnige PWM
- Fase en frekwensie gekorrigeer PWM
- Fase gekorrigeer PWM
elk van hierdie modusse kan omgekeerd of nie-omgekeerd wees.
Initialiseer Timer0 in PWM -modus:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - stel WGM op: Fast PWM
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - stel vergelyking uitvoer modus A, B op
TCCR0B | = (1 << CS02) - instel timer met voorcalculator = 256
Stap 3: Meting van ligintensiteit - ADC en LDR
Ligafhanklike weerstand (LDR) is 'n transducer wat sy weerstand verander wanneer lig op die oppervlak val.
LDR's is gemaak van halfgeleiermateriaal sodat hulle hul ligsensitiewe eienskappe kan hê. Hierdie LDR's of FOTO -WEERSTANDERS werk volgens die beginsel van "Fotogeleiding". Wat hierdie beginsel nou sê, is wanneer lig op die oppervlak van die LDR val (in hierdie geval) die geleiding van die element toeneem of met ander woorde die weerstand van die LDR neem af wanneer die lig op die oppervlak van die LDR val. Hierdie eienskap van die afname in weerstand vir die LDR word bereik omdat dit 'n eienskap is van halfgeleiermateriaal wat op die oppervlak gebruik word. LDR word die meeste kere gebruik om ligte op te spoor of om die intensiteit van lig te meet.
Om eksterne deurlopende inligting (analoog inligting) na 'n digitale/rekenaarstelsel oor te dra, moet ons dit omskakel in heelgetalle (digitale) waardes. Hierdie tipe omskakeling word uitgevoer deur Analog to Digital Converter (ADC). Die proses om 'n analoog waarde in digitale waarde om te skakel, staan bekend as Analoog na digitale omskakeling. Kortom, analoog seine is werklike seine rondom ons, soos klank en lig.
Digitale seine is analoog ekwivalente in digitale of numeriese formaat wat goed verstaan word deur digitale stelsels soos mikrobeheerders. ADC is een van die hardeware wat analoog seine meet en 'n digitale ekwivalent van dieselfde sein produseer. AVR -mikrobeheerders het 'n ingeboude ADC -fasiliteit om analoog spanning in 'n heelgetal om te skakel. AVR skakel dit om in 'n 10-bis aantal getal 0 tot 1023.
Ons gebruik 'n analoog na 'n digitale omskakeling van die spanningsvlak van die verdelerkring met LDR om die ligintensiteit te meet.
Initialiseer ADC:
TADCSRA | = (1 << ADEN) - Aktiveer ADC
ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - stel ADC -voorverkoeler op = 128
ADMUX = (1 << REFS0) - stel spanningverwysing op = AVCC; - Opstel Invoerkanaal = ADC0
Kyk na die video met 'n gedetailleerde beskrywing van die ADC AVR -mikrobeheerder: AVR -mikrobeheerder. Meting van ligte intensiteit. ADC en LDR
Stap 4: DC-motor met kontroleerder en dubbele H-brug-motorbestuurder-module-L298N
Ons gebruik DC -motorbestuurders omdat mikrobeheerders in die algemeen nie meer as 100 miljard ampère kan lewer nie. Die mikrobeheerders is slim, maar nie sterk nie; hierdie module sal 'n paar spiere by mikrobeheerders voeg om hoë krag GS -motors aan te dryf. Dit kan 2 GS -motors gelyktydig beheer tot 2 ampère elk of een stapmotor. Ons kan die snelheid beheer met behulp van PWM en ook die rotasie rigting van die motors. Dit word ook gebruik om die helderheid van LED -band te bestuur.
Pin beskrywing:
OUT1- en OUT2 -poort, wat bedoel is om 'n GS -motor aan te sluit. OUT3 en OUT4 vir die aansluiting van LED -band.
ENA en ENB is aktiveerpenne: deur ENA aan hoë (+5V) te koppel, maak dit die poort OUT1 en OUT2 moontlik.
As u die ENA -pen aan laag (GND) koppel, skakel die OUT1 en OUT2 uit. Net so vir ENB en OUT3 en OUT4.
IN1 tot IN4 is die invoerpenne wat aan AVR gekoppel sal word.
As IN1-hoog (+5V), IN2-laag (GND), draai die OUT1 hoog en OUT2 laag, sodat ons die motor kan bestuur.
As IN3-hoog (+5V), IN4-laag (GND), word die OUT4 hoog en OUT3 laag, dus is die LED-bandlig aan.
As u die draairigting van die motor wil omkeer, moet u slegs die polariteit van IN1 en IN2 omkeer, net so vir IN3 en IN4.
Deur die PWM -sein op ENA en ENB toe te pas, kan u die motorsnelheid op twee verskillende uitsetpoorte beheer.
Die raad kan nominaal van 7V tot 12V aanvaar.
Springers: Daar is drie springpenne; Jumper 1: As u motor meer as 12V benodig, moet u die Jumper 1 ontkoppel en die gewenste spanning (maks. 35V) by die 12V -aansluiting toepas. Bring nog 'n 5V -toevoer en insette by die 5V -terminale. Ja, u moet 5V invoer as u meer as 12V moet toepas (as Jumper 1 verwyder word).
Die 5V-ingang is vir 'n behoorlike werking van die IC, aangesien die verwydering van die jumper die ingeboude 5V-reguleerder sal deaktiveer en beskerm teen 'n hoër ingangsspanning vanaf die 12V-aansluiting.
Die 5V -aansluiting dien as uitset as u toevoer tussen 7V en 12V is, en dien as inset as u meer as 12V toepas en die jumper verwyder word.
Jumper 2 en Jumper 3: As u hierdie twee springers verwyder, moet u die in- en uitskakelsein van die mikrobeheerder invoer, die meeste gebruikers verkies om die twee springers te verwyder en die sein van die mikrobeheerder toe te pas.
As u die twee springers behou, sal die OUT1 tot OUT4 altyd aangeskakel wees. Onthou die ENA -trui vir OUT1 en OUT2. ENB -trui vir OUT3 en OUT4.
Stap 5: Skryf kode vir 'n program in C. Laai HEX -lêer op na die mikrobeheerder se flitsgeheue
Skryf en bou van die AVR -mikrobeheertoepassing in C -kode met behulp van die Integrated Development Platform - Atmel Studio.
#ifndef F_CPU #definieer F_CPU 16000000UL // vertel die kristalfrekwensie van die beheerder (16 MHz AVR ATMega328P) #endif
#include // header om die datavloeibeheer oor penne moontlik te maak. Definieer penne, poorte, ens. #Include // header om die vertragingsfunksie in die program moontlik te maak
#define BUTTON1 2 // knoppie skakelaar gekoppel aan poort B pen 2 #definieer DEBOUNCE_TIME 25 // tyd om te wag terwyl die "de-bouncing" knoppie #definieer LOCK_INPUT_TIME 300 // tyd om te wag na 'n druk op die knoppie
// Timer0, PWM Initialization void timer0_init () {// stel timer OC0A, OC0B -pin in skakelmodus en CTC -modus TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // instel timer met prescaler = 256 TCCR0B | = (1 << CS02); // initialiseer teller TCNT0 = 0; // initialiseer vergelyk waarde OCR0A = 0; }
// ADC Initialization void ADC_init () {// Aktiveer ADC, monsterneming freq = osc_freq/128 stel prescaler op maksimum waarde, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Kies Spanningsverwysing (AVCC)
// Knoppieskakelaarstatus ongetekende char button_state () {
/ * die knoppie word ingedruk as BUTTON1 bit duidelik is */
as (! (PINB & (1 <
{
_vertraag_ms (DEBOUNCE_TIME);
as (! (PINB & (1 <
}
terugkeer 0;
}
// Poortinitialisering leemte port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-BUTTON SWITCH DIRECT PORTB = 0b00010110;
DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;
DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Stel alle penne van PORTC laag, wat dit uitskakel. }
// Hierdie funksie lees die waarde van die analoog na digitale omskakelaar. uint16_t get_LightLevel () {_delay_ms (10); // Wag 'n rukkie totdat die kanaal die gekose ADCSRA | = (1 << ADSC) kry; // Begin die ADC -omskakeling deur die ADSC -bit in te stel. Skryf 1 aan ADSC
terwyl (ADCSRA & (1 << ADSC)); // Wag totdat die omskakeling voltooi is
// ADSC word weer 0 tot dan, loop lus deurlopend _delay_ms (10); terugkeer (ADC); // Wys die 10-bis-resultaat terug
}
// Hierdie funksie herkaart 'n getal van een reeks (0-1023) na 'n ander (0-100). uint32_t map (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
int main (leeg)
{uint16_t i1 = 0;
port_init ();
timer0_init (); ADC_init (); // inisialisering ADC
terwyl (1)
{i1 = map (get_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Stel uitset vergelyk registerkanaal A OCR0B = 100-i1; // Stel uitvoer vergelyk registerkanaal B (omgekeerd)
if (button_state ()) // As die knoppie ingedruk word, verander die toestand van die LED en vertraag dit vir 300ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // die huidige toestand van die pen IN1 verander. PORTB ^= (1 << 1); // die huidige toestand van die pen IN2 verander. Draai die rotasie rigting van die motor om
PORTB ^= (1 << 3); // die huidige toestand van die pen IN3 verander. PORTB ^= (1 << 4); // die huidige toestand van die pen IN4 verander. LED -band is aan/uit. _vertraag_ms (LOCK_INPUT_TIME); }}; terugkeer (0); }
Die programmering is voltooi. Vervolgens bou en opstel van projekkode in hex -lêer.
Laai HEX -lêer op na die geheue van die mikrobeheerder: tik die opdrag in die DOS -promptvenster in:
avrdude –c [naam van programmeerder] –p m328p –u –U flits: w: [naam van u hex -lêer]
In my geval is dit:
avrdude –c ISPProgv1 –p m328p –u –U flits: w: PWM.hex
Hierdie opdrag skryf heks -lêer na die geheue van die mikrobeheerder. Kyk na die video met 'n gedetailleerde beskrywing van die verbranding van die flitsgeheue van die mikrobeheerder: die flitsgeheue van die mikrobeheerder …
Ok! Die mikrobeheerder werk nou volgens die instruksies van ons program. Kom ons kyk!
Stap 6: Die elektriese stroombaan
Verbind komponente volgens die skematiese diagram.
Aanbeveel:
Visuino Hoe om polsbreedte -modulasie (PWM) te gebruik om die helderheid van 'n LED te verander: 7 stappe
Visuino Hoe om Pulse Width Modulation (PWM) te gebruik om die helderheid van 'n LED te verander: In hierdie tutoriaal sal ons 'n LED gebruik wat gekoppel is aan Arduino UNO en Visuino om die helderheid daarvan te verander met behulp van Pulse Width Modulation (PWM). Kyk na 'n demonstrasievideo
Hoe om 8Ch PWM om te skakel na polsposisie modulasie: 4 stappe
Hoe om 8Ch PWM om te skakel na polsposisiemodulasie: ons sal twee uitsetseinformate van radio-ontvangers hersien vir radio-beheerde modelle (of RC-modelle). Die tradisionele en mees algemene tipe ontvangersein is PWM, en gewoonlik benodig PWM slegs een draad per kanaal. PPM -sein word nou al hoe meer
Monitering van 'n akkedis -terrarium met behulp van Adosia IoT WiFi -beheerder + bewegingsopsporing: 17 stappe (met foto's)
Monitering van 'n akkedis -terrarium met behulp van Adosia IoT WiFi -beheerder + bewegingsopsporing: in hierdie tutoriaal sal ons jou wys hoe om 'n eenvoudige hagedis -terrarium te bou vir 'n handjievol skink -eiers wat ons per ongeluk gevind en versteur het tydens tuinwerk buite. Ons wil hê die eiers moet veilig uitbroei, so al wat ons sal doen is om 'n veilige ruimte te skep met behulp van 'n plastiek
Maak 'n goedkoop dou -beheerder met behulp van 'n LED -dimmer: 3 stappe
Maak 'n goedkoop doukontroller met behulp van 'n LED -dimmer: Nadat ek 'n 12 Volt -haardroër wat ek 'n paar maande gelede gebruik het vir die voorkoming van dou by 'n sterparty, 'n kortsluiting gehad het, het ek gedink dat dit tyd is om 'n regte doukontroller en 'n douverwarmer vir my omvang te kry . 'N Gemiddelde dauwe -kontroleerder kos meer as 100 euro (of US D
Eenvoudige (en vuil) polsbreedte modulasie (PWM) met 555 timer: 3 stappe
Eenvoudige (en vuil) polsbreedte -modulasie (PWM) met 555 -timer: eenvoudige stroombaan vir DC -motorsnelheidsbeheer (waaiersnelheidsbeheer, lig / LED -verduistering, ens) met behulp van die 555 -timer. Ook 'n goeie beginpunt vir beginners wat hul hande vuil met die 555 timer IC. Sommige sal beweer dat dit nie die meeste is nie