AVR mikrokontroler. Modulacija širine impulsa. Kontroler istosmjernog motora i intenziteta LED svjetla .: 6 koraka
AVR mikrokontroler. Modulacija širine impulsa. Kontroler istosmjernog motora i intenziteta LED svjetla .: 6 koraka
Anonim
Image
Image

Zdravo svima!

Modulacija širine impulsa (PWM) vrlo je česta tehnika u telekomunikacijama i kontroli snage. obično se koristi za kontrolu napajanja električnog uređaja, bilo da se radi o motoru, LED diodi, zvučnicima itd. U osnovi je tehnika modulacije u kojoj se širina impulsa nosioca mijenja u skladu s signalom analogne poruke.

Izrađujemo jednostavno električno kolo za kontrolu brzine vrtnje istosmjernog motora ovisno o intenzitetu svjetlosti. Za mjerenje intenziteta svjetlosti koristit ćemo funkcije otporne na svjetlo i AVR mikrokontrolera, poput analogno -digitalne konverzije. Također ćemo koristiti Dual H-Bridge Motor Driver Module-L298N. Obično se koristi za kontrolu brzine i smjera motora, ali se može koristiti i za druge projekte, kao što je povećanje svjetline određenih projekata rasvjete. Također, dodali smo gumb u naš krug za promjenu smjera rotacije motora.

Korak 1: Opis

Opis
Opis
Opis
Opis

Svako tijelo na ovom svijetu ima neku inerciju. Motor se okreće kad god je uključen. Čim se isključi, ima tendenciju da prestane. Ali to ne prestaje odmah, potrebno je neko vrijeme. Ali prije nego što potpuno prestane, ponovo se uključuje! Tako se počinje kretati. Ali čak i sada je potrebno neko vrijeme da se postigne puna brzina. Ali prije nego što se to dogodi, isključuje se i tako dalje. Dakle, ukupni učinak ove radnje je da se motor neprestano okreće, ali manjom brzinom.

Modulacija širine impulsa (PWM) je relativno novija tehnika uključivanja i isključivanja za pružanje srednjih količina električne energije između potpuno uključenih i potpuno isključenih nivoa. Obično digitalni impulsi imaju isti vremenski period uključivanja i isključivanja, ali u nekim situacijama nam je potreban digitalni impuls da bismo imali više/manje vremena/vremena. U PWM tehnici stvaramo digitalne impulse s nejednakom količinom stanja uključivanja i isključivanja kako bismo dobili potrebne vrijednosti srednjeg napona.

Radni ciklus je definiran postotkom trajanja visokog napona u potpunom digitalnom impulsu. Može se izračunati prema:

% radnog ciklusa = T uključeno /T (vrijeme perioda) x 100

Uzmimo izjavu o problemu. Moramo generirati 50 Hz PWM signal sa 45% radnog ciklusa.

Frekvencija = 50 Hz

Vremenski period, T = T (uključeno) + T (isključeno) = 1/50 = 0,02 s = 20 ms

Radni ciklus = 45%

Dakle, rješavajući prema gornjoj jednadžbi, dobivamo

T (uključeno) = 9 ms

T (isključeno) = 11 ms

Korak 2: AVR mjerači vremena - PWM način rada

AVR tajmeri - PWM način rada
AVR tajmeri - PWM način rada
AVR tajmeri - PWM način rada
AVR tajmeri - PWM način rada

Za izradu PWM -a, AVR sadrži zasebni hardver! Koristeći ovo, CPU upućuje hardver da proizvodi PWM određenog radnog ciklusa. ATmega328 ima 6 PWM izlaza, 2 se nalaze na mjeraču vremena/brojaču 0 (8 bita), 2 se nalaze na mjeraču vremena/brojaču 1 (16 bita), a 2 se nalaze na mjeraču vremena/brojaču 2 (8 bita). Timer/Counter0 je najjednostavniji PWM uređaj na ATmega328. Tajmer/brojač 0 može raditi na 3 načina:

  • Brzi PWM
  • PWM sa fazom i frekvencijom
  • PWM sa faznom korekcijom

svaki od ovih načina može biti obrnut ili neobrnut.

Pokretanje Timer0 u PWM načinu rada:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - postavite WGM: Brzi PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - postavite način uspoređivanja izlaza A, B

TCCR0B | = (1 << CS02) - podesite mjerač vremena s predskalerom = 256

Korak 3: Mjerenje intenziteta svjetlosti - ADC i LDR

Mjerenje svjetlosnog intenziteta - ADC i LDR
Mjerenje svjetlosnog intenziteta - ADC i LDR
Mjerenje svjetlosnog intenziteta - ADC i LDR
Mjerenje svjetlosnog intenziteta - ADC i LDR
Mjerenje svjetlosnog intenziteta - ADC i LDR
Mjerenje svjetlosnog intenziteta - ADC i LDR

Otpornik ovisan o svjetlosti (LDR) je pretvarač koji mijenja svoj otpor pri promjeni svjetlosti na njegovu površinu.

LDR -ovi su izrađeni od poluvodičkih materijala kako bi im se omogućilo da imaju svojstva osjetljiva na svjetlost. Ovi LDR -ovi ili FOTO OTPORI rade na principu „fotoprovodljivosti“. Ono što ovaj princip kaže je kad god svjetlost padne na površinu LDR -a (u ovom slučaju) provodljivost elementa se povećava ili drugim riječima otpor LDR -a opada kada svjetlost padne na površinu LDR -a. Ovo svojstvo smanjenja otpora za LDR postiže se jer je to svojstvo poluvodičkog materijala koji se koristi na površini. LDR se najčešće koristi za otkrivanje prisutnosti svjetlosti ili za mjerenje intenziteta svjetlosti.

Za prijenos vanjskih kontinuiranih informacija (analognih informacija) u digitalni/računalni sistem, moramo ih pretvoriti u cjelobrojne (digitalne) vrijednosti. Ovu vrstu konverzije izvodi analogno -digitalni pretvarač (ADC). Proces pretvaranja analogne vrijednosti u digitalnu vrijednost poznat je kao analogno -digitalna konverzija. Ukratko, analogni signali su signali iz stvarnog svijeta oko nas poput zvuka i svjetlosti.

Digitalni signali su analogni ekvivalenti u digitalnom ili numeričkom formatu koje digitalni sistemi poput mikrokontrolera dobro razumiju. ADC je jedan takav hardver koji mjeri analogne signale i proizvodi digitalni ekvivalent istog signala. AVR mikrokontroleri imaju ugrađen ADC uređaj za pretvaranje analognog napona u cijeli broj. AVR ga pretvara u 10-bitni broj u rasponu od 0 do 1023.

Za mjerenje intenziteta svjetlosti koristimo analogno -digitalni pretvarač naponskog nivoa iz razdjelnog kruga s LDR -om.

Pokretanje ADC -a:

TADCSRA | = (1 << ADEN) - Omogući ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - podesite ADC predskaler = 128

ADMUX = (1 << REFS0) - postavljanje referentnog napona = AVCC; - postavite ulazni kanal = ADC0

Pogledajte video sa detaljnim opisom ADC AVR mikrokontrolera: AVR mikrokontroler. Mjerenje intenziteta svjetlosti. ADC i LDR

Korak 4: Kontrolni motor istosmjernog motora i modul pokretača motora s dvostrukim mostom H-Bridge-L298N

Kontroler istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontroler istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontroler istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontroler istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontroler istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontroler istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N

Koristimo upravljačke programe istosmjernih motora jer mikrokontroleri ne mogu isporučiti struju općenito ne veću od 100 miliampera. Mikrokontroleri su pametni, ali nisu jaki; ovaj modul će dodati neke mišiće mikrokontrolerima za pogon istosmjernih motora velike snage. Može upravljati 2 istosmjerna motora istovremeno do 2 ampera svaki ili jednim koračnim motorom. Brzinu možemo kontrolirati pomoću PWM -a, kao i smjer okretanja motora. Također, koristi se za povećanje svjetline LED trake.

Opis igle:

OUT1 i OUT2 port, koji služi za povezivanje istosmjernog motora. OUT3 i OUT4 za povezivanje LED trake.

ENA i ENB su pinovi za omogućavanje: povezivanjem ENA na visoki (+5V) omogućava priključke OUT1 i OUT2.

Ako spojite ENA pin na niski (GND), onemogućiće OUT1 i OUT2. Slično, za ENB i OUT3 i OUT4.

IN1 do IN4 su ulazni pinovi koji će biti povezani na AVR.

Ako je IN1 visok (+5V), IN2 nizak (GND), OUT1 postaje visok, a OUT2 nizak, tako da možemo pokretati motor.

Ako je IN3 visok (+5V), IN4 nizak (GND), OUT4 postaje visok, a OUT3 nizak, pa LED lampica svijetli.

Ako želite promijeniti smjer rotacije motora, samo obrnite polaritet IN1 i IN2, slično za IN3 i IN4.

Primjenom PWM signala na ENA i ENB možete kontrolirati brzinu motora na dva različita izlazna priključka.

Ploča može prihvatiti nominalno od 7V do 12V.

Džemperi: Postoje tri iglice za kratkospojnike; Kratkospojnik 1: Ako je vašem motoru potrebno više od 12 V napajanja, morate odspojiti kratkospojnik 1 i primijeniti željeni napon (max 35 V) na priključku od 12 V. Dovedite još 5V napajanje i ulaz na 5V terminal. Da, morate unijeti 5V ako trebate primijeniti više od 12V (kada je uklonjen kratkospojnik 1).

Ulaz 5V služi za pravilno funkcioniranje IC-a, jer će uklanjanje kratkospojnika onemogućiti ugrađeni regulator 5V i zaštititi od većeg ulaznog napona sa priključka 12V.

5V terminal djeluje kao izlaz ako je vaše napajanje između 7V i 12V i djeluje kao ulaz ako primijenite više od 12V i kratkospojnik je uklonjen.

Kratkospojnik 2 i kratkospojnik 3: Ako uklonite ova dva kratkospojnika, morate unijeti signal za omogućavanje i onemogućavanje iz mikrokontrolera, većina korisnika preferira uklanjanje dva kratkospojnika i primjenu signala iz mikrokontrolera.

Ako zadržite dva kratkospojnika, OUT1 do OUT4 će uvijek biti omogućeni. Zapamtite ENA kratkospojnik za OUT1 i OUT2. ENB kratkospojnik za OUT3 i OUT4.

Korak 5: Pisanje koda za program na C. Učitavanje HEX datoteke u fleš memoriju mikrokontrolera

Pisanje i izrada aplikacije AVR mikrokontrolera u C kodu pomoću Integrirane razvojne platforme - Atmel Studio.

#ifndef F_CPU #define F_CPU 16000000UL // Kazivač frekvencije kristala kontrolera (16 MHz AVR ATMega328P) #endif

#include // zaglavlje za omogućavanje kontrole protoka podataka preko pinova. Definira pinove, portove itd. #Include // zaglavlje za omogućavanje funkcije odgode u programu

#define BUTTON1 2 // prekidač dugmeta spojen na priključak B pin 2 #define DEBOUNCE_TIME 25 // vrijeme za čekanje dok dugme za "de-bouncing" #define LOCK_INPUT_TIME 300 // vrijeme za čekanje nakon pritiska na dugme

// Timer0, PWM Inicijalizacija void timer0_init () {// postavljanje tajmera OC0A, OC0B pin u preklopnom načinu rada i CTC načinu rada TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // postavljanje mjerača vremena s predkalerom = 256 TCCR0B | = (1 << CS02); // inicijaliziranje brojača TCNT0 = 0; // inicijalizira vrijednost uspoređivanja OCR0A = 0; }

// ADC Initialization void ADC_init () {// Omogući ADC, uzorkovanje freq = osc_freq/128 postavi predskaler na maksimalnu vrijednost, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Odabir reference napona (AVCC)

// Status prekidača dugmeta unsigned char button_state () {

/ * dugme se pritisne kada je BUTTON1 bit čist */

ako (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

ako (! (PINB & (1 <

}

return 0;

}

// Inicijalizacija portova void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-DUGMETNI PREKIDAČ DIREKTNI PORTB = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Sve pinove PORTC -a postavite na nisko što ga isključuje. }

// Ova funkcija čita vrijednost analogno -digitalnog pretvarača. uint16_t get_LightLevel () {_delay_ms (10); // Pričekajte neko vrijeme da kanal odabere ADCSRA | = (1 << ADSC); // Pokretanje ADC konverzije postavljanjem ADSC bita. Napišite 1 u ADSC

while (ADCSRA & (1 << ADSC)); // Pričekajte da se konverzija dovrši

// ADSC postaje opet 0 do tada, neprestano izvršavaj petlju _delay_ms (10); povrat (ADC); // Vraća 10-bitni rezultat

}

// Ova funkcija preslikava broj iz jednog raspona (0-1023) u drugi (0-100). mapa uint32_t (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 (void)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicijalizacija ADC -a

dok (1)

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

OCR0A = i1; // Postavljanje izlaznog kanala za usporedbu kanala A OCR0B = 100-i1; // Postavljanje izlaznog kanala za usporedbu kanala B (obrnuto)

if (button_state ()) // Ako je dugme pritisnuto, promenite stanje LED diode i odložite 300 ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // prebacivanje trenutnog stanja pina IN1. PORTB ^= (1 << 1); // prebacivanje trenutnog stanja pina IN2. Obrnite smjer okretanja motora

PORTB ^= (1 << 3); // prebacivanje trenutnog stanja pina IN3. PORTB ^= (1 << 4); // prebacivanje trenutnog stanja pina IN4. LED traka je isključena/uključena. _dey_ms (LOCK_INPUT_TIME); }}; return (0); }

Programiranje je završeno. Zatim, sastavljanje i kompajliranje projektnog koda u heksadecimalnu datoteku.

Otpremanje HEX datoteke u fleš memoriju mikrokontrolera: otkucajte u prozoru DOS upita naredbu:

avrdude –c [ime programera] –p m328p –u –U blic: w: [naziv vaše heksadecimalne datoteke]

U mom slučaju to je:

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

Ova naredba zapisuje heksadecimalnu datoteku u memoriju mikrokontrolera. Pogledajte video zapis sa detaljnim opisom snimanja fleš memorije mikrokontrolera: Flash memorija mikrokontrolera gori …

Uredu! Sada mikrokontroler radi u skladu s uputama našeg programa. Hajde da provjerimo!

Korak 6: Električno kolo

Električni krug
Električni krug
Električni krug
Električni krug

Spojite komponente u skladu sa shematskim dijagramom.