Përmbajtje:

Mikrokontrolluesi AVR. Modulimi i Gjerësisë së Pulsit. Kontrolluesi i DC Motor dhe intensiteti i dritës LED .: 6 hapa
Mikrokontrolluesi AVR. Modulimi i Gjerësisë së Pulsit. Kontrolluesi i DC Motor dhe intensiteti i dritës LED .: 6 hapa

Video: Mikrokontrolluesi AVR. Modulimi i Gjerësisë së Pulsit. Kontrolluesi i DC Motor dhe intensiteti i dritës LED .: 6 hapa

Video: Mikrokontrolluesi AVR. Modulimi i Gjerësisë së Pulsit. Kontrolluesi i DC Motor dhe intensiteti i dritës LED .: 6 hapa
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Nëntor
Anonim
Image
Image

Pershendetje te gjitheve!

Modulimi i Gjerësisë së Pulsit (PWM) është një teknikë shumë e zakonshme në telekomunikacion dhe kontroll të energjisë. zakonisht përdoret për të kontrolluar fuqinë e furnizuar me një pajisje elektrike, qoftë një motor, një LED, altoparlantë, etj. isshtë në thelb një teknikë modulimi, në të cilën gjerësia e pulsit të bartësit ndryshon në përputhje me sinjalin e mesazhit analog Me

Ne bëjmë qark të thjeshtë elektrik për të kontrolluar shpejtësinë rrotulluese të motorit DC në varësi të intensitetit të dritës. Ne do të përdorim rezistencë të varur nga drita dhe veçori të mikrokontrolluesit AVR të tillë si Konvertimi analog në dixhital për të matur intensitetin e dritës. Gjithashtu ne do të përdorim Dual H-Bridge Motor Driver Module-L298N. Zakonisht përdoret për të kontrolluar shpejtësinë dhe drejtimin e motorëve, por mund të përdoret për projekte të tjera të tilla si nxitja e shkëlqimit të projekteve të caktuara të ndriçimit. Gjithashtu, shtoi një buton në qarkun tonë për të ndryshuar drejtimin e rrotullimit të motorit.

Hapi 1: Përshkrimi

Përshkrim
Përshkrim
Përshkrim
Përshkrim

Çdo trup në këtë botë ka njëfarë inercie. Motori rrotullohet sa herë që ndizet. Sapo të fiket, do të priret të ndalet. Por nuk ndalet menjëherë, kërkon pak kohë. Por, para se të ndalet plotësisht, ndizet përsëri! Kështu fillon të lëvizë. Por edhe tani, duhet pak kohë për të arritur shpejtësinë e tij të plotë. Por para se të ndodhë, fiket, dhe kështu me radhë. Kështu, efekti i përgjithshëm i këtij veprimi është se motori rrotullohet vazhdimisht, por me një shpejtësi më të ulët.

Modulimi i Gjerësisë së Pulsit (PWM) është një teknikë relativisht e fundit e ndërrimit të energjisë për të siguruar sasi të ndërmjetme të energjisë elektrike midis niveleve plotësisht të ndezura dhe plotësisht të fikura. Zakonisht, impulset dixhitale kanë të njëjtën periudhë kohore të ndezjes dhe fikjes, por në disa situata ne kemi nevojë që pulsi dixhital të ketë më shumë/më pak në kohë/jashtë orarit. Në teknikën PWM, ne krijojmë impulse dixhitale me sasi të pabarabartë të gjendjes ndezëse dhe fikëse për të marrë vlerat e kërkuara të tensionit të ndërmjetëm.

Cikli i punës përcaktohet nga përqindja e kohëzgjatjes së tensionit të lartë në një impuls dixhital të plotë. Mund të llogaritet me:

% e ciklit të punës = T on /T (koha e periudhës) x 100

Le të marrim një deklaratë problemi. Ne duhet të gjenerojmë një sinjal PWM 50 Hz që ka 45% cikël pune.

Frekuenca = 50 Hz

Periudha kohore, T = T (aktiv) + T (fikur) = 1/50 = 0.02 s = 20 ms

Cikli i Detyrës = 45%

Kështu, duke zgjidhur sipas ekuacionit të dhënë më sipër, marrim

T (ndezur) = 9 ms

T (jo) = 11 ms

Hapi 2: Kohëmatësit AVR - Modaliteti PWM

Kohëmatësit AVR - Modaliteti PWM
Kohëmatësit AVR - Modaliteti PWM
Kohëmatësit AVR - Modaliteti PWM
Kohëmatësit AVR - Modaliteti PWM

Për të bërë PWM, AVR përmban pajisje të veçanta! Duke përdorur këtë, CPU udhëzon pajisjen të prodhojë PWM të një cikli të caktuar detyre. ATmega328 ka 6 dalje PWM, 2 janë të vendosura në kohëmatës/numërues0 (8bit), 2 janë të vendosura në kohëmatës/numërues1 (16bit), dhe 2 ndodhen në kohëmatës/numërues2 (8bit). Kohëmatësi/Counter0 është pajisja më e thjeshtë PWM në ATmega328. Kohëmatësi/Counter0 është i aftë të funksionojë në 3 mënyra:

  • PWM e shpejtë
  • Faza dhe Frekuenca e Korrigjuar PWM
  • Faza e Korrigjuar PWM

secila nga këto mënyra mund të jetë e përmbysur ose jo e përmbysur.

Filloni Timer0 në modalitetin PWM:

TCCR0A | = (1 << WGM00] | (1 << WGM01) - ngritur WGM: PWM e shpejtë

TCCR0A | = (1 << COM0A1] | (1 << COM0B1) - vendosni krahasimin e mënyrës së daljes A, B

TCCR0B | = (1 << CS02) - vendosni kohëmatësin me prescaler = 256

Hapi 3: Matja e Intensitetit të Dritës - ADC & LDR

Matja e Intensitetit të Dritës - ADC & LDR
Matja e Intensitetit të Dritës - ADC & LDR
Matja e Intensitetit të Dritës - ADC & LDR
Matja e Intensitetit të Dritës - ADC & LDR
Matja e Intensitetit të Dritës - ADC & LDR
Matja e Intensitetit të Dritës - ADC & LDR

Rezistori i varur nga drita (LDR) është një dhënës që ndryshon rezistencën e tij kur drita bie në sipërfaqen e tij ndryshon.

LDR -të janë bërë nga materiale gjysmëpërçuese për t'u mundësuar atyre që të kenë vetitë e tyre të ndjeshme ndaj dritës. Këto LDR ose PHOTO RESISTORS punojnë në parimin e "Përçueshmërisë së Fotos". Tani ajo që thotë ky parim është sa herë që drita bie në sipërfaqen e LDR (në këtë rast) përçueshmëria e elementit rritet ose me fjalë të tjera rezistenca e LDR zvogëlohet kur drita bie në sipërfaqen e LDR. Kjo veti e uljes së rezistencës për LDR arrihet sepse është një veti e materialit gjysmëpërçues të përdorur në sipërfaqe. LDR përdoren në shumicën e rasteve për të zbuluar praninë e dritës ose për të matur intensitetin e dritës.

Për transferimin e informacionit të jashtëm të vazhdueshëm (informacion analog) në një sistem dixhital/kompjuterik, ne duhet t'i konvertojmë ato në vlera të plota (dixhitale). Ky lloj konvertimi kryhet nga Analog to Digital Converter (ADC). Procesi i shndërrimit të një vlere analoge në vlerë dixhitale njihet si Konvertimi analog në dixhital. Me pak fjalë, sinjalet analoge janë sinjale të botës reale rreth nesh si tingulli dhe drita.

Sinjalet dixhitale janë ekuivalentë analogë në format dixhital ose numerik të cilat kuptohen mirë nga sistemet dixhitale si mikrokontrolluesit. ADC është një pajisje e tillë që mat sinjalet analoge dhe prodhon një ekuivalent dixhital të të njëjtit sinjal. Mikrokontrolluesit AVR kanë një pajisje ADC të integruar për të kthyer tensionin analog në një numër të plotë. AVR e shndërron atë në një numër 10-bit të intervalit 0 në 1023.

Ne përdorim konvertimin analog në dixhital të nivelit të tensionit nga qark ndarës me LDR për të matur intensitetin e dritës.

Filloni ADC:

TADCSRA | = (1 << ADEN] - Aktivizo ADC

ADCSRA | = (1 << ADPS2] | (1 << ADPS1] | (1ADPS0) - vendosni parapagues ADC = 128

ADMUX = (1 << REFS0) - vendosni referencën e tensionit = AVCC; - konfiguroni kanalin hyrës = ADC0

Shikoni videon me një përshkrim të hollësishëm të mikrokontrolluesit ADC AVR: Mikrokontrolluesi AVR. Matja e Intensitetit të Dritës. ADC & LDR

Hapi 4: Kontrolluesi DC Motor & Moduli i Shoferit të Dyfishtë H-Bridge-L298N

Kontrolluesi DC Motor & Moduli i Shoferit Motor të Dyfishtë H-Bridge-L298N
Kontrolluesi DC Motor & Moduli i Shoferit Motor të Dyfishtë H-Bridge-L298N
Kontrolluesi DC Motor & Moduli i Shoferit Motor të Dyfishtë H-Bridge-L298N
Kontrolluesi DC Motor & Moduli i Shoferit Motor të Dyfishtë H-Bridge-L298N
Kontrolluesi DC Motor & Moduli i Shoferit Motor të Dyfishtë H-Bridge-L298N
Kontrolluesi DC Motor & Moduli i Shoferit Motor të Dyfishtë H-Bridge-L298N

Ne përdorim drejtues motorësh DC sepse mikrokontrolluesit nuk janë në gjendje të japin rrymë jo më shumë se 100 miliamps në përgjithësi. Mikrokontrolluesit janë të zgjuar, por jo të fortë; ky modul do të shtojë disa muskuj te mikrokontrolluesit për të drejtuar motorë DC me fuqi të lartë. Mund të kontrollojë 2 motorë DC njëkohësisht deri në 2 amps secili ose një motor stepper. Ne mund të kontrollojmë shpejtësinë duke përdorur PWM dhe gjithashtu drejtimin e tij rrotullues të motorëve. Gjithashtu, përdoret për drejtimin e shkëlqimit të shiritit LED.

Përshkrimi i kunjit:

Porta OUT1 dhe OUT2, e cila është për lidhjen e motorit DC. OUT3 dhe OUT4 për lidhjen e shiritit LED.

ENA dhe ENB janë kunjat e aktivizimit: duke e lidhur ENA me atë të lartë (+5V) mundëson portën OUT1 dhe OUT2.

Nëse lidhni kunjin ENA me të ulët (GND), ai çaktivizon OUT1 dhe OUT2. Në mënyrë të ngjashme, për ENB dhe OUT3 dhe OUT4.

IN1 deri IN4 janë kunjat hyrëse të cilat do të lidhen me AVR.

Nëse IN1-lartë (+5V), IN2-ulët (GND), OUT1 kthehet lartë dhe OUT2 kthehet poshtë, kështu që ne mund të drejtojmë motor.

Nëse IN3-lartë (+5V), IN4-ulët (GND), OUT4 kthehet lartë dhe OUT3 kthehet ulët, kështu drita LED e shiritit është e ndezur.

Nëse doni të ndryshoni drejtimin e rrotullimit të motorit, thjesht ndryshoni polaritetin IN1 dhe IN2, në mënyrë të ngjashme për IN3 dhe IN4.

Duke aplikuar sinjalin PWM në ENA dhe ENB ju mund të kontrolloni shpejtësinë e motorëve në dy porte të ndryshme dalëse.

Bordi mund të pranojë nga 7V në 12V nominalisht.

Jumpers: Ka tre kunja kërcyes; Jumper 1: Nëse motori juaj ka nevojë për më shumë se 12V ju duhet të shkëputni Jumper 1 dhe të aplikoni tensionin e dëshiruar (max 35V) në terminalin 12V. Sillni një furnizim dhe hyrje tjetër 5V në terminalin 5V. Po, duhet të futni 5V nëse keni nevojë të aplikoni më shumë se 12V (kur Jumper 1 hiqet).

Hyrja 5V është për funksionimin e duhur të IC, pasi heqja e kërcyesit do të çaktivizojë rregullatorin e integruar 5V dhe do të mbrojë nga tensioni më i lartë i hyrjes nga terminali 12V.

Terminali 5V vepron si dalje nëse furnizimi juaj është midis 7V deri në 12V dhe vepron si hyrje nëse aplikoni më shumë se 12V dhe bluza hiqet.

Jumper 2 dhe Jumper 3: Nëse i hiqni këto dy kërcyes ju duhet të futni sinjalin e aktivizimit dhe çaktivizimit nga mikrokontrolluesi, shumica e përdoruesve preferojnë të heqin dy kërcyesit dhe të aplikojnë sinjalin nga mikrokontrolluesi.

Nëse i mbani dy kërcyesit, OUT1 në OUT4 do të aktivizohet gjithmonë. Mbani mend bluzën ENA për OUT1 dhe OUT2. Bluzë ENB për OUT3 dhe OUT4.

Hapi 5: Shkrimi i kodit për një program në C. Ngarkimi i skedarit HEX në Flash Memory të Mikrokontrolluesit

Shkrimi dhe ndërtimi i aplikacionit të mikrokontrolluesit AVR në C Code duke përdorur Platformën e Zhvillimit të Integruar - Atmel Studio.

#ifndef F_CPU #përcakto F_CPU 16000000UL // tregues i frekuencës kristalore të kontrolluesit (16 MHz AVR ATMega328P) #endif

#include // header për të mundësuar kontrollin e rrjedhës së të dhënave mbi kunjat. Përcakton kunjat, portet, etj. #Include // header për të mundësuar funksionin e vonesës në program

#define BUTTON1 2 // çelësi i butonit i lidhur me portën B pin 2 #përcakto DEBOUNCE_TIME 25 // koha për të pritur ndërsa butoni "de-kërcim" #përcaktoni LOCK_INPUT_TIME 300 // koha për të pritur pas shtypjes së një butoni

// Timer0, PWM Initialization void timer0_init () {// vendosni kohëmatës OC0A, pin OC0B në modalitetin e kalimit dhe modalitetin CTC TCCR0A | = (1 << COM0A1] | (1 << COM0B1] | (1 << WGM00) | (1 << WGM01]; // vendosni kohëmatësin me prescaler = 256 TCCR0B | = (1 << CS02); // inicoj numëruesin TCNT0 = 0; // inicializoni krahasimin e vlerës OCR0A = 0; }

// ADC Initialization void ADC_init () {// Aktivizo ADC, frekuenca e marrjes së mostrave = osc_freq/128 vendos prescaler në vlerën maksimale, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2] | (1 << ADPS1] | (1 << ADPS0];

ADMUX = (1 << REFS0); // Zgjidhni Referencën e Tensionit (AVCC)

// Ndrysho butonin e statusit pa shenjë char button_state () {

/ * butoni shtypet kur BUTTON1 bit është i qartë */

nëse (! (PINB & (1 <

{

_vonesa_ms (DEBOUNCE_TIME);

nëse (! (PINB & (1 <

}

kthimi 0;

}

// Portet Initializimi void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-PORTB DREJTUES I ÇELWSIT TUT BUTONIT = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Vendosni të gjitha kunjat e PORTC të ulëta që e fikin atë. }

// Ky funksion lexon vlerën e konvertimit analog në dixhital. uint16_t merrni_LightLevel () {_vonesë_ms (10); // Prisni për ca kohë që kanali të marrë ADCSRA të zgjedhur | = (1 << ADSC); // Filloni konvertimin ADC duke vendosur bitin ADSC. Shkruaj 1 në ADSC

ndërsa (ADCSRA & (1 << ADSC)); // Prisni që konvertimi të përfundojë

// ADSC bëhet 0 përsëri deri atëherë, drejto vazhdimisht lakun _delay_ms (10); kthimi (ADC); // Ktheni rezultatin 10-bit

}

// Ky funksion ri-harton një numër nga një diapazon (0-1023) në tjetrin (0-100). uint32_t hartë (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 kryesore (e pavlefshme)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicimi ADC

ndërsa (1)

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

OCR0A = i1; // Vendos daljen e krahasimit të kanalit të regjistrit A OCR0B = 100-i1; // Vendos daljen e krahasimit të kanalit të regjistrit B (i përmbysur)

if (button_state ()) // Nëse butoni shtypet, ndërroni gjendjen e LED -it dhe vononi për 300ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // kalimi i gjendjes aktuale të pinit IN1. PORTB ^= (1 << 1); // kalimi i gjendjes aktuale të pinit IN2. Kthejeni drejtimin e rrotullimit të motorit

PORTB ^= (1 << 3); // kalimi i gjendjes aktuale të pinit IN3. PORTB ^= (1 << 4); // kalimi i gjendjes aktuale të pinit IN4. Shiriti LED është fikur/ndezur. _vonesa_ms (LOCK_INPUT_TIME); }}; kthimi (0); }

Programimi ka përfunduar. Tjetra, ndërtimi dhe përpilimi i kodit të projektit në skedar gjashtëkëndësh.

Ngarkimi i skedarit HEX në kujtesën flash të mikrokontrolluesit: shkruani komandën në dritaren e shpejtë të DOS.

avrdude –c [emri i programuesit] –p m328p –u –U flash: w: [emri i skedarit tuaj gjashtëkëndësh]

Në rastin tim është:

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

Kjo komandë shkruan skedar gjashtëkëndësh në kujtesën e mikrokontrolluesit. Shikoni videon me një përshkrim të hollësishëm të djegies së kujtesës flash të mikrokontrolluesit: Memoria flash e mikrokontrolluesit po digjet…

Ne rregull! Tani, mikrokontrolluesi punon në përputhje me udhëzimet e programit tonë. Le ta kontrollojmë!

Hapi 6: Qarku Elektrik

Qarku Elektrik
Qarku Elektrik
Qarku Elektrik
Qarku Elektrik

Lidhni komponentët në përputhje me diagramin skematik.

Recommended: