Sisällysluettelo:

AVR -mikrokontrolleri. Pulssinleveysmodulaatio. DC -moottorin ja LED -valon voimakkuuden säädin: 6 vaihetta
AVR -mikrokontrolleri. Pulssinleveysmodulaatio. DC -moottorin ja LED -valon voimakkuuden säädin: 6 vaihetta

Video: AVR -mikrokontrolleri. Pulssinleveysmodulaatio. DC -moottorin ja LED -valon voimakkuuden säädin: 6 vaihetta

Video: AVR -mikrokontrolleri. Pulssinleveysmodulaatio. DC -moottorin ja LED -valon voimakkuuden säädin: 6 vaihetta
Video: SKG Garage: Flektin ohjaimen testailua 2024, Heinäkuu
Anonim
Image
Image

Hei kaikki!

PWM (Pulse Width Modulation) on hyvin yleinen tekniikka tietoliikenteessä ja tehonohjauksessa. sitä käytetään yleisesti sähkölaitteeseen syötettävän tehon ohjaamiseen, olipa se sitten moottori, LED, kaiuttimet jne..

Teemme yksinkertaisen sähköpiirin DC -moottorin pyörimisnopeuden säätämiseksi valon voimakkuudesta riippuen. Alamme käyttää valosta riippuvaa vastusta ja AVR -mikrokontrolleriominaisuuksia, kuten analogisesta digitaaliseen muuntamista, valon voimakkuuden mittaamiseen. Lisäksi aiomme käyttää Dual H-Bridge -moottorin ohjainmoduulia L298N. Sitä käytetään tyypillisesti moottorin nopeuden ja suunnan säätämiseen, mutta sitä voidaan käyttää muihin projekteihin, kuten tiettyjen valaistusprojektien kirkkauden lisäämiseen. Lisäksi lisäsimme piiriin painikkeen moottorin pyörimissuunnan vaihtamiseksi.

Vaihe 1: Kuvaus

Kuvaus
Kuvaus
Kuvaus
Kuvaus

Jokaisella ruumiilla tässä maailmassa on jonkinlainen hitaus. Moottori pyörii aina, kun siihen kytketään virta. Heti kun se sammutetaan, se pysähtyy. Mutta se ei lopu heti, se vie jonkin aikaa. Mutta ennen kuin se pysähtyy kokonaan, se käynnistetään uudelleen! Näin se alkaa liikkua. Mutta nytkin kestää jonkin aikaa saavuttaa täyden nopeutensa. Mutta ennen kuin se tapahtuu, se sammutetaan ja niin edelleen. Tämän toiminnan kokonaisvaikutus on siten, että moottori pyörii jatkuvasti, mutta pienemmällä nopeudella.

Pulssileveysmodulaatio (PWM) on verrattain viimeaikainen tehonvaihtotekniikka, joka tarjoaa välimäärää sähköä täysin päälle ja pois päältä. Yleensä digitaalisilla pulsseilla on sama käynnistys- ja sammutusaika, mutta joissakin tilanteissa tarvitsemme digitaalipulssilla enemmän/vähemmän aikaa/pois päältä. PWM -tekniikassa luomme digitaalisia pulsseja, joissa on epätasainen määrä päälle- ja pois -tilaa, jotta saadaan tarvittavat välijännitearvot.

Toimintasykli määritellään korkean jännitteen keston prosentteina täydellisessä digitaalisessa pulssissa. Se voidaan laskea seuraavasti:

Toimintasyklin % = T päällä /T (jaksoaika) x 100

Otetaanpa ongelmalausunto. Meidän on luotava 50 Hz: n PWM -signaali, jonka toimintajakso on 45%.

Taajuus = 50 Hz

Aikajakso, T = T (päällä) + T (pois) = 1/50 = 0,02 s = 20 ms

Toimintajakso = 45%

Siten ratkaisemalla yllä annetun yhtälön mukaisesti saamme

T (päällä) = 9 ms

T (pois päältä) = 11 ms

Vaihe 2: AVR -ajastimet - PWM -tila

AVR -ajastimet - PWM -tila
AVR -ajastimet - PWM -tila
AVR -ajastimet - PWM -tila
AVR -ajastimet - PWM -tila

PWM: n tekemiseen AVR sisältää erillisen laitteiston! Tätä käyttämällä CPU ohjaa laitteistoa tuottamaan tietyn käyttöjakson PWM. ATmega328: ssa on 6 PWM -lähtöä, 2 on ajastimessa/laskurissa0 (8bit), 2 ajastimessa/laskurissa1 (16bit) ja 2 ajastimessa/laskurissa2 (8bit). Ajastin/laskuri0 on ATmega328: n yksinkertaisin PWM -laite. Ajastin/laskuri0 pystyy toimimaan kolmessa tilassa:

  • Nopea PWM
  • Vaihe- ja taajuuskorjattu PWM
  • Vaihekorjattu PWM

jokainen näistä tiloista voi olla käänteinen tai kääntämätön.

Alusta ajastin0 PWM -tilassa:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - määritä WGM: nopea PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - määritä vertailutila A, B

TCCR0B | = (1 << CS02) - aseta ajastin esikaalaimella = 256

Vaihe 3: Valon voimakkuuden mittaus - ADC ja LDR

Valon voimakkuuden mittaus - ADC ja LDR
Valon voimakkuuden mittaus - ADC ja LDR
Valon voimakkuuden mittaus - ADC ja LDR
Valon voimakkuuden mittaus - ADC ja LDR
Valon voimakkuuden mittaus - ADC ja LDR
Valon voimakkuuden mittaus - ADC ja LDR

Valosta riippuvainen vastus (LDR) on anturi, joka muuttaa vastustaan, kun sen pinnalle muuttuu valoa.

LDR: t on valmistettu puolijohdemateriaaleista, jotta ne voivat olla valolle herkkiä ominaisuuksia. Nämä LDR: t tai KUVAVASTAUKSET toimivat”valokuvien johtavuuden” periaatteella. Tämä periaate sanoo nyt, että aina kun valo putoaa LDR: n pinnalle (tässä tapauksessa), elementin johtavuus kasvaa tai toisin sanoen LDR: n vastus pienenee, kun valo putoaa LDR: n pinnalle. Tämä LDR: n resistanssin vähenemisen ominaisuus saavutetaan, koska se on pinnalla käytettävän puolijohdemateriaalin ominaisuus. LDR: ää käytetään useimmiten valon läsnäolon havaitsemiseen tai valon voimakkuuden mittaamiseen.

Jotta ulkoista jatkuvaa tietoa (analogista tietoa) voitaisiin siirtää digitaaliseen/tietokonejärjestelmään, meidän on muutettava ne kokonaislukuarvoiksi (digitaalisiksi). Tämän tyyppisen muuntamisen suorittaa analoginen digitaalimuunnin (ADC). Prosessi analogisen arvon muuttamisesta digitaaliseksi arvoksi tunnetaan nimellä Analoginen digitaalinen muunnos. Lyhyesti sanottuna analogiset signaalit ovat todellisia signaaleja ympärillämme, kuten ääni ja valo.

Digitaaliset signaalit ovat analogisia vastaavia digitaalisessa tai numeerisessa muodossa, jotka digitaaliset järjestelmät, kuten mikro -ohjaimet, ymmärtävät hyvin. ADC on yksi tällainen laitteisto, joka mittaa analogisia signaaleja ja tuottaa digitaalisen ekvivalentin samasta signaalista. AVR -mikrokontrollereissa on sisäänrakennettu ADC -toiminto, joka muuntaa analogisen jännitteen kokonaislukuksi. AVR muuntaa sen 10-bittiseksi lukumääräksi 0-1023.

Valon voimakkuuden mittaamiseen käytämme LDR -jakajapiirin jännitetason analogista digitaalista muunnosta.

Alusta ADC:

TADCSRA | = (1 << ADEN) - Ota ADC käyttöön

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - aseta ADC -esisäädin = 128

ADMUX = (1 << REFS0) - asetettu jänniteviite = AVCC; - aseta tulokanava = ADC0

Katso video, jossa on yksityiskohtainen kuvaus ADC AVR -mikro -ohjaimesta: AVR Microcontroller. Valon voimakkuuden mittaus. ADC ja LDR

Vaihe 4: Ohjaimen tasavirtamoottori ja kahden H-sillan moottorin ohjainmoduuli-L298N

Ohjain DC-moottori ja kahden H-sillan moottorin ohjainmoduuli-L298N
Ohjain DC-moottori ja kahden H-sillan moottorin ohjainmoduuli-L298N
Ohjain DC-moottori ja kahden H-sillan moottorin ohjainmoduuli-L298N
Ohjain DC-moottori ja kahden H-sillan moottorin ohjainmoduuli-L298N
Ohjain DC-moottori ja kahden H-sillan moottorin ohjainmoduuli-L298N
Ohjain DC-moottori ja kahden H-sillan moottorin ohjainmoduuli-L298N

Käytämme tasavirtamoottorin ohjaimia, koska mikrokontrollerit eivät yleensä pysty tuottamaan enintään 100 milliampeeria virtaa. Mikro -ohjaimet ovat älykkäitä, mutta eivät vahvoja; tämä moduuli lisää joitakin lihaksia mikrokontrollereihin suuritehoisten tasavirtamoottoreiden käyttämiseksi. Se voi ohjata 2 tasavirtamoottoria samanaikaisesti enintään 2 ampeeria kutakin tai yhtä askelmoottoria. Voimme hallita nopeutta PWM: llä ja myös sen pyörimissuuntaa moottoreilla. Sitä käytettiin myös LED -nauhan kirkkauden lisäämiseen.

Nastan kuvaus:

OUT1- ja OUT2 -portti, joka on tarkoitettu DC -moottorin liittämiseen. OUT3 ja OUT4 LED -nauhan liittämistä varten.

ENA ja ENB ovat mahdollistavia nastoja: kun kytket ENA: n korkeaan (+5 V), se mahdollistaa portit OUT1 ja OUT2.

Jos liität ENA -nastan matalaan (GND), OUT1 ja OUT2 poistetaan käytöstä. Samoin ENB ja OUT3 ja OUT4.

IN1 - IN4 ovat tulonastat, jotka liitetään AVR: ään.

Jos IN1-korkea (+5V), IN2-matala (GND), OUT1 kääntyy korkeaksi ja OUT2 kääntyy matalaksi, joten voimme ajaa moottoria.

Jos IN3-korkea (+5V), IN4-matala (GND), OUT4 muuttuu korkeaksi ja OUT3 pienenee, jolloin LED-nauhavalo palaa.

Jos haluat kääntää moottorin pyörimissuunnan, vaihda IN1- ja IN2 -napaisuus, kuten IN3- ja IN4 -napaisuudet.

Soveltamalla PWM -signaalia ENA: han ja ENB: hen voit ohjata moottorien nopeutta kahdella eri lähtöportilla.

Taulu voi hyväksyä 7V - 12V nimellisesti.

Puserot: Hyppytappeja on kolme; Hyppyjohdin 1: Jos moottorisi tarvitsee yli 12 V: n jännitteen, sinun on irrotettava hyppyjohdin 1 ja kytkettävä haluttu jännite (enintään 35 V) 12 V: n liittimeen. Tuo toinen 5 V: n syöttö ja tulo 5 V: n liittimeen. Kyllä, sinun on syötettävä 5 V, jos haluat käyttää enemmän kuin 12 V (kun hyppy 1 poistetaan).

5 V: n tulo on tarkoitettu IC: n moitteettomaan toimintaan, koska hyppyjoukon poistaminen poistaa sisäänrakennetun 5 V: n säätimen käytöstä ja suojaa korkeammalta 12 V: n liittimen tulojännitteeltä.

5 V -liitin toimii ulostulona, jos syöttöjännite on välillä 7 V - 12 V, ja se toimii tulona, jos käytät yli 12 V: n jännitettä ja jumpperi on poistettu.

Hyppääjä 2 ja hyppy 3: Jos poistat nämä kaksi hyppääjää, sinun on syötettävä mikro- ohjaimen käyttöönotto- ja poistosignaali, useimmat käyttäjät haluavat poistaa kaksi hyppääjää ja käyttää signaalia mikrokontrollerista.

Jos pidät kaksi hyppääjää, OUT1 - OUT4 ovat aina käytössä. Muista ENA -hyppyjohdin OUT1: lle ja OUT2: lle. ENB -silta OUT3 ja OUT4.

Vaihe 5: Ohjelman koodin kirjoittaminen C

AVR -mikrokontrollerisovelluksen kirjoittaminen ja rakentaminen C -koodissa integroidulla kehitysalustalla - Atmel Studio.

#ifndef F_CPU #define F_CPU 16000000UL // kertoo ohjaimen kristallitaajuuden (16 MHz AVR ATMega328P) #endif

#include // otsikko, joka mahdollistaa tiedonkulun hallinnan nastojen yli. Määrittää nastat, portit jne. #Include // otsikko, joka mahdollistaa ohjelman viiveen

#define BUTTON1 2 // painikekytkin liitetty porttiin B nasta 2 #define DEBOUNCE_TIME 25 // aika odottaa, kun "de-bouncing" -painike #define LOCK_INPUT_TIME 300 // aika odottaa painikkeen painamisen jälkeen

// Ajastin0, PWM -alustus void timer0_init () {// ajastimen OC0A, OC0B -nastan asettaminen vaihtotilassa ja CTC -tila TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // aseta ajastin esikaalaimella = 256 TCCR0B | = (1 << CS02); // alustavat laskuri TCNT0 = 0; // alustetaan vertailuarvo OCR0A = 0; }

// ADC -alustus void ADC_init () {// Ota ADC käyttöön, näytteenottotaajuus = osc_freq/128 aseta esiasetin maksimiarvoon, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Valitse jänniteohje (AVCC)

// Painikekytkimen tila unsigned char button_state () {

/ * painiketta painetaan, kun BUTTON1 -bitti on tyhjä */

jos (! (PINB & (1 <

{

_viive_ms (DEBOUNCE_TIME);

jos (! (PINB & (1 <

}

palauta 0;

}

// Porttien alustus void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-PAINIKKEEN KYTKIN SUORA PORTTI = 0b00010110;

DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Aseta kaikki PORTC -nastat alhaisiksi, mikä sammuttaa sen. }

// Tämä toiminto lukee analogisen digitaalimuunnoksen arvon. uint16_t get_LightLevel () {_delay_ms (10); // Odota hetki, kunnes kanava saa valitun ADCSRA | = (1 << ADSC); // Aloita ADC -muunnos asettamalla ADSC -bitti. Kirjoita 1 ADSC: lle

kun taas (ADCSRA & (1 << ADSC)); // Odota, että muunnos on valmis

// ADSC: stä tulee taas 0 siihen asti, suorita silmukka jatkuvasti _delay_ms (10); paluu (ADC); // Palauta 10-bittinen tulos

}

// Tämä toiminto kartoittaa numeron uudelleen alueelta (0-1023) toiselle (0-100). uint32_t -kartta (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 (mitätön)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // alustaminen ADC

samalla (1)

{i1 = kartta (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // Aseta lähtövertailurekisterikanava A OCR0B = 100-i1; // Aseta lähtövertailurekisterikanava B (käänteinen)

if (button_state ()) // Jos painiketta painetaan, vaihda LED -tilan ja viiveen 300 ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // nastan IN1 nykyisen tilan vaihtaminen. PORTB ^= (1 << 1); // nastan IN2 nykyisen tilan vaihtaminen. Käännä moottorin pyörimissuunta

PORTB ^= (1 << 3); // nastan IN3 nykyisen tilan vaihtaminen. PORTB ^= (1 << 4); // nastan IN4 nykyisen tilan vaihtaminen. LED -nauha kytkeytyy pois/päälle. _viive_ms (LOCK_INPUT_TIME); }}; paluu (0); }

Ohjelmointi on valmis. Seuraavaksi projektikoodin rakentaminen ja kääntäminen heksatiedostoksi.

HEX -tiedoston lataaminen mikro -ohjaimen flash -muistiin: kirjoita DOS -kehoteikkunaan komento:

avrdude –c [ohjelmoijan nimi] –p m328p –u –U flash: w: [heksatiedoston nimi]

Minun tapauksessani se on:

avrdude –c ISPProgv1 –p m328p –u –U -salama: w: PWM.hex

Tämä komento kirjoittaa heksatiedoston mikro -ohjaimen muistiin. Katso video, jossa on yksityiskohtainen kuvaus mikro -ohjaimen flash -muistin polttamisesta: Mikro -ohjaimen flash -muistin polttaminen…

Ok! Nyt mikrokontrolleri toimii ohjelmamme ohjeiden mukaisesti. Tarkistetaan se!

Vaihe 6: Sähköpiiri

Sähköpiiri
Sähköpiiri
Sähköpiiri
Sähköpiiri

Liitä komponentit kaavion mukaisesti.

Suositeltava: