Tartalomjegyzék:

AVR mikrovezérlő. Impulzus szélesség moduláció. Az egyenáramú motor és a LED -fényerősség vezérlője: 6 lépés
AVR mikrovezérlő. Impulzus szélesség moduláció. Az egyenáramú motor és a LED -fényerősség vezérlője: 6 lépés

Videó: AVR mikrovezérlő. Impulzus szélesség moduláció. Az egyenáramú motor és a LED -fényerősség vezérlője: 6 lépés

Videó: AVR mikrovezérlő. Impulzus szélesség moduláció. Az egyenáramú motor és a LED -fényerősség vezérlője: 6 lépés
Videó: Servo motor controlling with PWM servo motor driver 2024, November
Anonim
Image
Image

Üdv mindenkinek!

Az impulzusszélesség -moduláció (PWM) egy nagyon gyakori technika a távközlésben és a teljesítményszabályozásban. általánosan használják az elektromos készülékhez táplált teljesítmény szabályozására, legyen az motor, LED, hangszóró stb. Alapvetően modulációs technika, amelyben a vivőimpulzus szélessége az analóg üzenetjelnek megfelelően változik.

Egyszerű elektromos áramkört készítünk az egyenáramú motor forgási sebességének szabályozására fényintenzitástól függően. Fényfüggő ellenállást és AVR mikrokontroller funkciókat fogunk használni, mint például az analóg -digitális átalakítás a fényintenzitás mérésére. Továbbá a Dual H-Bridge motorvezérlő modult-L298N fogjuk használni. Általában a motorok fordulatszámának és irányának szabályozására szolgál, de más projektekhez is használható, például bizonyos világítási projektek fényerejének növeléséhez. Ezenkívül hozzáadott egy gombot az áramkörünkhöz a motor forgásirányának megváltoztatásához.

1. lépés: Leírás

Leírás
Leírás
Leírás
Leírás

Ezen a világon minden testnek van valamilyen tehetetlensége. A motor minden bekapcsoláskor forog. Amint ki van kapcsolva, hajlamos leállni. De nem áll meg azonnal, időbe telik. De mielőtt teljesen leállna, újra bekapcsolja! Így mozogni kezd. De még most is kell egy kis idő, hogy elérje teljes sebességét. De mielőtt ez megtörténne, ki van kapcsolva, és így tovább. Ennek a műveletnek az összhatása tehát az, hogy a motor folyamatosan, de kisebb sebességgel forog.

Az impulzusszélesség -moduláció (PWM) egy viszonylag új teljesítménykapcsolási technika, amely közepes mennyiségű elektromos energiát biztosít a teljesen be- és kikapcsolási szintek között. Általában a digitális impulzusoknak ugyanaz a be- és kikapcsolási időtartama, de bizonyos helyzetekben szükségünk van arra, hogy a digitális impulzusnak több/kevesebb legyen az ideje/kikapcsolási ideje. A PWM technikában digitális impulzusokat hozunk létre egyenlő mennyiségű be- és kikapcsolt állapotban, hogy megkapjuk a szükséges közbenső feszültségértékeket.

A működési ciklust a nagyfeszültség időtartamának százalékos aránya határozza meg egy teljes digitális impulzusban. Kiszámítható:

A munkaciklus % -a = T be /T (időszak idő) x 100

Vegyünk egy problémajelentést. 50 Hz -es PWM jelet kell generálnunk, 45% -os üzemidővel.

Frekvencia = 50 Hz

Időszak, T = T (be) + T (ki) = 1/50 = 0,02 s = 20 ms

Üzemidő = 45%

Így a fenti egyenlet szerint megoldva kapjuk

T (be) = 9 ms

T (ki) = 11 ms

2. lépés: AVR időzítők - PWM mód

AVR időzítők - PWM mód
AVR időzítők - PWM mód
AVR időzítők - PWM mód
AVR időzítők - PWM mód

A PWM készítéséhez az AVR külön hardvert tartalmaz! Ennek használatával a CPU utasítja a hardvert, hogy készítsen PWM -et egy adott ciklusban. Az ATmega328 6 PWM kimenettel rendelkezik, 2 az időzítő/számláló0 (8 bites), 2 az időzítő/számláló1 (16 bites), és 2 az időzítő/számláló2 (8 bites) helyen található. A Timer/Counter0 az ATmega328 legegyszerűbb PWM eszköze. A Timer/Counter0 3 üzemmódban képes működni:

  • Gyors PWM
  • Fázis és frekvencia korrigált PWM
  • Fáziskorrigált PWM

ezen módok mindegyike fordított vagy nem invertált.

A Timer0 inicializálása PWM módban:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - WGM beállítása: gyors PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - állítsa be az A, B kimeneti mód összehasonlítását

TCCR0B | = (1 << CS02) - időzítő beállítása előskálázóval = 256

3. lépés: Fényintenzitás mérés - ADC és LDR

Fényintenzitás mérés - ADC és LDR
Fényintenzitás mérés - ADC és LDR
Fényintenzitás mérés - ADC és LDR
Fényintenzitás mérés - ADC és LDR
Fényintenzitás mérés - ADC és LDR
Fényintenzitás mérés - ADC és LDR

A fényfüggő ellenállás (LDR) egy jelátalakító, amely megváltoztatja ellenállását, ha a fény a felületére esik.

Az LDR -ek félvezető anyagokból készülnek, hogy fényérzékeny tulajdonságaik legyenek. Ezek az LDR -ek vagy FOTÓellenállások a „Photo Conductivity” elvén működnek. Ez az elv azt mondja, amikor a fény az LDR felületére esik (ebben az esetben) az elem vezetőképessége nő, vagy más szóval az LDR ellenállása csökken, amikor a fény az LDR felületére esik. Az LDR ellenállás csökkenésének ez a tulajdonsága azért érhető el, mert a felületen használt félvezető anyag tulajdonsága. Az LDR -t a legtöbb esetben a fény jelenlétének észlelésére vagy a fényerősség mérésére használják.

A külső folyamatos információk (analóg információk) digitális/számítási rendszerbe történő átviteléhez azokat egész (digitális) értékekre kell átalakítanunk. Ezt a fajta átalakítást az analóg -digitális átalakító (ADC) hajtja végre. Analóg digitális átalakítás néven ismert az analóg érték digitális értékké történő átalakításának folyamata. Röviden, az analóg jelek a valós világ jelei körülöttünk, mint a hang és a fény.

A digitális jelek analóg megfelelői digitális vagy numerikus formátumban, amelyeket jól értenek a digitális rendszerek, például a mikrokontrollerek. Az ADC egy ilyen hardver, amely analóg jeleket mér és ugyanazon jel digitális egyenértékét állítja elő. Az AVR mikrokontrollerek beépített ADC funkcióval rendelkeznek az analóg feszültség egész számgá alakítására. Az AVR átalakítja 10 bites tartományba, 0 és 1023 között.

A fényintenzitás mérésére LDV -elosztó áramkörből származó feszültségszint analóg -digitális átalakítóját használjuk.

Az ADC inicializálása:

TADCSRA | = (1 << ADEN) - Az ADC engedélyezése

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - állítsa be az ADC előskálázót = 128

ADMUX = (1 << REFS0) - feszültségreferencia beállítása = AVCC; - Beviteli csatorna beállítása = ADC0

Nézze meg a videót az ADC AVR mikrokontroller részletes leírásával: AVR Microcontroller. Fényintenzitás mérése. ADC és LDR

4. lépés: Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul L298N

Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul-L298N
Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul-L298N
Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul-L298N
Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul-L298N
Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul L298N
Vezérlő egyenáramú motor és kettős H-híd motorvezérlő modul L298N

DC motorvezérlőket használunk, mert a mikrovezérlők általában nem képesek 100 milliampernél nagyobb áramot leadni. A mikrokontrollerek okosak, de nem erősek; ez a modul bizonyos izmokat ad hozzá a mikrovezérlőkhöz nagy teljesítményű egyenáramú motorok meghajtásához. Egyidejűleg 2 egyenáramú motort tud vezérelni, akár 2 amper erejéig, vagy egy léptetőmotort. A fordulatszámot a PWM segítségével szabályozhatjuk, és a motorok forgásirányát is. Ezenkívül a LED szalag fényerejének növelésére használták.

Csap leírása:

OUT1 és OUT2 port, amely egyenáramú motor csatlakoztatására szolgál. OUT3 és OUT4 a LED szalag csatlakoztatásához.

Az ENA és az ENB engedélyező csapok: az ENA magas (+5 V) csatlakoztatásával lehetővé teszi az OUT1 és OUT2 portokat.

Ha az ENA érintkezőt alacsonyra (GND) csatlakoztatja, az letiltja az OUT1 és OUT2 kimenetet. Hasonlóképpen, az ENB és az OUT3 és OUT4 esetében.

IN1 - IN4 azok a bemeneti érintkezők, amelyek az AVR -hez csatlakoznak.

Ha IN1-magas (+5V), IN2-alacsony (GND), az OUT1 magasra, az OUT2 alacsonyra fordul, így meg tudjuk hajtani a motort.

Ha IN3-magas (+5V), IN4-alacsony (GND), az OUT4 magasra, az OUT3 alacsonyra kapcsol, így a LED szalagfény világít.

Ha meg akarja fordítani a motor forgásirányát, fordítsa meg az IN1 és IN2 polaritást, hasonlóan az IN3 és IN4 esetében.

Az ENA és az ENB PWM jelének használatával két különböző kimeneti porton szabályozhatja a motorok fordulatszámát.

A tábla névlegesen 7V és 12V között fogadhat.

Jumper: Három áthidaló csap van; 1. jumper: Ha a motornak több mint 12 V -os tápellátására van szüksége, akkor válassza le az 1. jumpert, és kapcsolja be a kívánt feszültséget (max. 35 V) a 12 V -os csatlakozóra. Hozzon egy másik 5 V -os tápfeszültséget és bemenetet az 5 V -os terminálra. Igen, 5 V -ot kell beírnia, ha 12 V -nál nagyobb feszültséget kell alkalmazni (amikor az 1 -es jumpert eltávolítják).

Az 5 V-os bemenet az IC megfelelő működéséhez szolgál, mivel az áthidaló eltávolítása letiltja a beépített 5 V-os szabályozót, és megvédi a 12 V-os terminál magasabb bemeneti feszültségétől.

Az 5 V -os csatlakozó kimenetként működik, ha a tápfeszültség 7 V és 12 V között van, és bemenetként működik, ha 12 V -nál nagyobb feszültséget alkalmaz, és a jumper eltávolításra kerül.

Jumper 2 és Jumper 3: Ha eltávolítja ezt a két jumpert, be kell írnia az engedélyezési és letiltási jelet a mikrokontrollerből, a legtöbb felhasználó inkább eltávolítja a két jumpert, és alkalmazza a jelet a mikrokontrollerből.

Ha megtartja a két jumpert, az OUT1 - OUT4 mindig engedélyezve lesz. Emlékezzen az ENA jumperre az OUT1 és OUT2 esetén. ENB jumper OUT3 és OUT4.

5. lépés: Kód írása programhoz C -ben. HEX fájl feltöltése a mikrokontroller flash memóriájába

Az AVR mikrokontroller alkalmazás írása és építése C kódban az Atmel Studio integrált fejlesztői platformja segítségével.

#ifndef F_CPU #define F_CPU 16000000UL // a vezérlő kristályfrekvenciájának megmondása (16 MHz AVR ATMega328P) #endif

#include // fejléc az adatáramlás vezérlésének engedélyezéséhez a csapok felett. Meghatározza a csapokat, portokat stb. #Include // fejléc a késleltetés funkció engedélyezéséhez a programban

#define BUTTON1 2 // gombkapcsoló a B port 2-es csatlakozójához csatlakoztatva

// Timer0, PWM Initialization void timer0_init () {// időzítő beállítása OC0A, OC0B pin kapcsoló módban és CTC mód TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // időzítő beállítása előméretezővel = 256 TCCR0B | = (1 << CS02); // inicializáló számláló TCNT0 = 0; // inicializálja az összehasonlító értéket OCR0A = 0; }

// ADC inicializálás void ADC_init () {// ADC engedélyezése, mintavételi frekvencia = osc_freq/128 állítsa az előskálázót a maximális értékre, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Válassza ki a feszültségreferenciát (AVCC)

// Gombkapcsoló állapota unsigned char button_state () {

/ * a gomb megnyomásakor a BUTTON1 bit tiszta */

ha (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

ha (! (PINB & (1 <

}

visszatérés 0;

}

// Portok inicializálása void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-GOMBKAPCSOLÓ KÖZVETLEN PORTB = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Állítsa a PORTC összes csapját alacsonyra, ami kikapcsolja. }

// Ez a funkció beolvassa az analóg -digitális konvertálás értékét. uint16_t get_LightLevel () {_delay_ms (10); // Várjon egy kicsit, amíg a csatorna kiválasztja az ADCSRA | = (1 << ADSC); // Indítsa el az ADC átalakítást az ADSC bit beállításával. Írjon 1 -et az ADSC -hez

while (ADCSRA & (1 << ADSC)); // Várja meg, amíg a konverzió befejeződik

// Az ADSC addig ismét 0 lesz, folyamatosan futtassa a ciklust _delay_ms (10); visszatérés (ADC); // A 10 bites eredmény visszaadása

}

// Ez a funkció újra leképez egy számot az egyik tartományból (0-1023) a másikba (0-100). uint32_t térkép (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 (); // inicializálás ADC

míg (1)

{i1 = térkép (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // A kimeneti összehasonlító regiszter A csatorna beállítása OCR0B = 100-i1; // A kimeneti összehasonlító regiszter B csatorna beállítása (invertált)

if (button_state ()) // Ha megnyomja a gombot, kapcsolja át a LED állapotát és a késleltetést 300 ms -ig (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // az IN1 érintkező aktuális állapotának átváltása. PORTB ^= (1 << 1); // az IN2 érintkező aktuális állapotának átváltása. Fordítsa meg a motor forgásirányát

PORTB ^= (1 << 3); // az IN3 csap aktuális állapotának átváltása. PORTB ^= (1 << 4); // a tű aktuális állapotának váltása IN4. A LED szalag ki/be van kapcsolva. _delay_ms (LOCK_INPUT_TIME); }}; visszatérés (0); }

A programozás befejeződött. Ezután a projektkód felépítése és fordítása hexa fájlba.

HEX fájl feltöltése a mikrokontroller flash memóriájába: írja be a DOS prompt ablakba a következő parancsot:

avrdude –c [programozó neve] –p m328p –u –U flash: w: [hexa fájl neve]

Az én esetemben ez:

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

Ez a parancs hex fájlt ír a mikrokontroller memóriájába. Nézze meg a videót a mikrovezérlő flash memóriájának égetésének részletes leírásával: A mikrokontroller flash memóriájának égetése…

Rendben! Most a mikrokontroller programunk utasításainak megfelelően működik. Nézzük meg!

6. lépés: Az elektromos áramkör

Az elektromos áramkör
Az elektromos áramkör
Az elektromos áramkör
Az elektromos áramkör

Csatlakoztassa az alkatrészeket a vázlatos rajz szerint.

Ajánlott: