Sadržaj:

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

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

Video: AVR mikrokontroler. Modulacija širine impulsa. Kontroler istosmjernog motora i intenziteta LED svjetla .: 6 koraka
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Studeni
Anonim
Image
Image

Pozdrav svima!

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

Izrađujemo jednostavan električni krug za kontrolu brzine vrtnje istosmjernog motora ovisno o intenzitetu svjetlosti. Za mjerenje intenziteta svjetlosti koristit ćemo značajke otpornika ovisne o svjetlu i mikrokontrolera AVR, 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, nastojat će prestati. Ali to ne prestaje odmah, potrebno je neko vrijeme. No, prije nego što potpuno prestane, ponovno se uključuje! Tako se počinje kretati. Ali čak i sada treba neko vrijeme da se postigne puna brzina. No 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) relativno je 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 razina. Obično digitalni impulsi imaju isto vrijeme uključivanja i isključivanja, ali u nekim nam je situacijama potreban digitalni impuls kako bi 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 definiran je postotkom trajanja visokog napona u potpunom digitalnom impulsu. Može se izračunati prema:

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

Uzmimo izjavu o problemu. Moramo generirati PWM signal od 50 Hz koji ima radni ciklus od 45%.

Frekvencija = 50 Hz

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

Radni ciklus = 45%

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

T (uključeno) = 9 ms

T (isključeno) = 11 ms

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

AVR mjerači vremena - PWM način rada
AVR mjerači vremena - PWM način rada
AVR mjerači vremena - PWM način rada
AVR mjerači vremena - 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ču1 (16 bita), a 2 se nalaze na mjeraču vremena/brojaču 2 (8 bita). Timer/Counter0 je najjednostavniji PWM uređaj na ATmega328. Timer/Counter0 može raditi na 3 načina:

  • Brzi PWM
  • PWM sa fazom i frekvencijom
  • PWM s 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) - postavite mjerač vremena s predmjeračem = 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 svjetlu (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 "fotovodljivosti". Ono što ovo načelo kaže je kad god svjetlost padne na površinu LDR -a (u ovom slučaju) povećava se vodljivost elementa ili drugim riječima otpor LDR -a se smanjuje 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 svjetla ili za mjerenje intenziteta svjetlosti.

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

Digitalni signali analogni su ekvivalenti u digitalnom ili numeričkom formatu koje digitalni sustavi 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 raspona od 0 do 1023.

Za mjerenje intenziteta svjetlosti koristimo analogno -digitalno pretvaranje razine napona iz razdjelnog kruga s LDR -om.

Pokretanje ADC -a:

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

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - postavite pretkaler ADC -a = 128

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

Pogledajte video s detaljnim opisom ADC AVR mikrokontrolera: AVR mikrokontroler. Mjerenje svjetlosnog intenziteta. ADC i LDR

Korak 4: Jednosmjerni motor kontrolera i modul pogona motora s dvostrukim H-mostom-L298N

Kontrolni motor istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontrolni motor istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontrolni motor istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontrolni motor istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontrolni motor istosmjernog motora i dvostruki modul pogona motora s H-mostom-L298N
Kontrolni motor 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, a također i smjer okretanja motora. Također, koristi se za povećanje svjetline LED trake.

Opis pribadače:

OUT1 i OUT2 priključak, koji služi za spajanje istosmjernog motora. OUT3 i OUT4 za spajanje LED trake.

ENA i ENB omogućuju pinove: povezivanjem ENA na visoki (+5V) omogućuje priključke OUT1 i OUT2.

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

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

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

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

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 igle 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).

5V ulaz služi za ispravno funkcioniranje IC-a, budući da će uklanjanje kratkospojnika onemogućiti ugrađeni regulator 5V i zaštititi od većeg ulaznog napona s priključka 12V.

5V terminal djeluje kao izlaz ako je opskrba između 7V i 12V, a djeluje kao ulaz ako primijenite više od 12V, a 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 radije uklanja dva skakača i primjenjuje signal 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: Zapisivanje koda za program na C. Prijenos HEX datoteke u flash 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 // govori frekvencija kristala kontrolera (16 MHz AVR ATMega328P) #endif

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

#define BUTTON1 2 // prekidač gumba spojen na priključak B pin 2 #define DEBOUNCE_TIME 25 // vrijeme čekanja dok gumb "de-bouncing" #define LOCK_INPUT_TIME 300 // vrijeme čekanja nakon pritiska tipke

// Timer0, PWM Initialization void timer0_init () {// postavljanje timera OC0A, OC0B pin u preklopnom načinu 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 pretkaler na maksimalnu vrijednost, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

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

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

/ * tipka se pritisne kada je BUTTON1 bit jasan */

ako (! (PINB & (1 <

{

_kašnjenje_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 pretvaranja. 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 do tada ponovno postaje 0, kontinuirano izvodi petlju _delay_ms (10); povrat (ADC); // Vraća 10-bitni rezultat

}

// Ova funkcija preslikava broj iz jednog raspona (0-1023) u drugi (0-100). uint32_t karta (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 = karta (get_LightLevel (), 0, 1023, 0, 100);

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

if (button_state ()) // Ako je gumb pritisnut, promijenite stanje LED diode i odgodite 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. _odgoda_ms (LOCK_INPUT_TIME); }}; return (0); }

Programiranje je dovršeno. Zatim, sastavljanje i prevođenje projektnog koda u hex datoteku.

Prijenos HEX datoteke u fleš memoriju mikrokontrolera: unesite DOS prozor sa naredbom:

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

U mom slučaju to je:

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

Ova naredba zapisuje heksadecimalnu datoteku u memoriju mikrokontrolera. Pogledajte video zapis s detaljnim opisom snimanja flash memorije mikrokontrolera: Bljesak memorije mikrokontrolera gori …

U redu! Sada mikrokontroler radi u skladu s uputama našeg programa. Idemo provjeriti!

Korak 6: Električni krug

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

Spojite komponente u skladu sa shematskim dijagramom.

Preporučeni: