Obsah:

Mikrokontrolér AVR. Modulovanie šírky impulzu. Ovládač jednosmerného motora a intenzity svetla LED: 6 krokov
Mikrokontrolér AVR. Modulovanie šírky impulzu. Ovládač jednosmerného motora a intenzity svetla LED: 6 krokov

Video: Mikrokontrolér AVR. Modulovanie šírky impulzu. Ovládač jednosmerného motora a intenzity svetla LED: 6 krokov

Video: Mikrokontrolér AVR. Modulovanie šírky impulzu. Ovládač jednosmerného motora a intenzity svetla LED: 6 krokov
Video: Использование плат Digispark Attiny85 Mini Arduino: Урок 108 2024, November
Anonim
Image
Image

Ahojte všetci!

Modulovanie šírky impulzu (PWM) je veľmi bežnou technikou v oblasti telekomunikácií a riadenia výkonu. bežne sa používa na ovládanie výkonu privádzaného do elektrického zariadenia, či už je to motor, LED dióda, reproduktory atď. Je to v zásade modulačná technika, v ktorej sa šírka nosného impulzu mení v súlade s analógovým signálom správy.

Vytvárame jednoduchý elektrický obvod na ovládanie rýchlosti otáčania jednosmerného motora v závislosti od intenzity svetla. Na meranie intenzity svetla použijeme funkcie závislé na svetle a mikrokontroléry AVR, ako je analógovo -digitálna konverzia. Tiež použijeme modul Dual H-Bridge Motor Driver-L298N. Obvykle sa používa na ovládanie rýchlosti a smeru motora, ale môže byť použitý aj na iné projekty, ako je riadenie jasu určitých svetelných projektov. Do nášho obvodu bolo tiež pridané tlačidlo na prepínanie smeru otáčania motora.

Krok 1: Popis

Popis
Popis
Popis
Popis

Každé telo v tomto svete má určitú zotrvačnosť. Motor sa otáča vždy, keď je zapnutý. Akonáhle je vypnutý, má tendenciu sa zastaviť. Ale to sa nezastaví okamžite, chvíľu to trvá. Kým sa však úplne zastaví, je opäť zapnutý! Tak sa to začne hýbať. Ale aj teraz trvá nejaký čas, kým sa dostane na plné obrátky. Ale skôr, ako sa to stane, je vypnuté a podobne. Celkový účinok tejto akcie teda je, že sa motor otáča nepretržite, ale pri nižších otáčkach.

Modulovanie šírky impulzu (PWM) je pomerne nedávna technika prepínania napájania, ktorá poskytuje stredné množstvo elektrického výkonu medzi úrovňami úplne zapnutého a vypnutého. Digitálne impulzy majú zvyčajne rovnaké časové obdobie zapnutia a vypnutia, ale v niektorých situáciách potrebujeme, aby digitálny impulz mal viac/menej času/času. V technike PWM vytvárame digitálne impulzy s nerovnomerným počtom stavov zapnutia a vypnutia, aby sme získali požadované hodnoty stredného napätia.

Pracovný cyklus je definovaný percentom trvania vysokého napätia v úplnom digitálnom impulze. Dá sa vypočítať podľa:

% pracovného cyklu = T on /T (časový úsek) x 100

Zoberme si vyhlásenie o probléme. Potrebujeme vygenerovať signál 50 Hz PWM so 45% pracovným cyklom.

Frekvencia = 50 Hz

Časové obdobie, T = T (zapnuté) + T (vypnuté) = 1/50 = 0,02 s = 20 ms

Pracovný cyklus = 45%

Riešením podľa vyššie uvedenej rovnice dostaneme

T (zapnuté) = 9 ms

T (vypnuté) = 11 ms

Krok 2: Časovače AVR - režim PWM

Časovače AVR - režim PWM
Časovače AVR - režim PWM
Časovače AVR - režim PWM
Časovače AVR - režim PWM

Na výrobu PWM obsahuje AVR samostatný hardvér! Pri jeho použití CPU dáva hardvéru pokyn, aby produkoval PWM konkrétneho pracovného cyklu. ATmega328 má 6 výstupov PWM, 2 sú umiestnené na časovači/počítadle 0 (8 bitov), 2 sú umiestnené na časovači/počítadle 1 (16 bitov) a 2 sú umiestnené na časovači/počítadle 2 (8 bitov). Timer/Counter0 je najjednoduchšie zariadenie PWM na ATmega328. Časovač/počítadlo 0 môže pracovať v 3 režimoch:

  • Rýchle PWM
  • PWM s korekciou na fázu a frekvenciu
  • Fázovo upravený PWM

každý z týchto režimov môže byť invertovaný alebo neinvertovaný.

Inicializujte časovač 0 v režime PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - nastavenie WGM: rýchle PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - nastaviť režim porovnávania výstupu A, B

TCCR0B | = (1 << CS02) - nastavte časovač s predzosilňovačom = 256

Krok 3: Meranie intenzity svetla - ADC a LDR

Meranie intenzity svetla - ADC a LDR
Meranie intenzity svetla - ADC a LDR
Meranie intenzity svetla - ADC a LDR
Meranie intenzity svetla - ADC a LDR
Meranie intenzity svetla - ADC a LDR
Meranie intenzity svetla - ADC a LDR

Svetlo závislý odpor (LDR) je prevodník, ktorý mení svoj odpor, keď sa svetlo dopadajúce na jeho povrch zmení.

LDR sú vyrobené z polovodičových materiálov, aby im umožnili získať vlastnosti citlivé na svetlo. Tieto LDR alebo FOTORISTORY fungujú na princípe „vodivosti fotografií“. Tento princíp hovorí, že vždy, keď svetlo dopadne na povrch LDR (v tomto prípade), vodivosť prvku sa zvýši alebo inými slovami, odpor LDR sa zníži, keď svetlo dopadne na povrch LDR. Táto vlastnosť poklesu odporu pre LDR je dosiahnutá, pretože je to vlastnosť polovodičového materiálu použitého na povrchu. LDR sa používajú väčšinou na detekciu prítomnosti svetla alebo na meranie intenzity svetla.

Na prenos externých súvislých informácií (analógových informácií) do digitálneho/počítačového systému ich musíme previesť na celočíselné (digitálne) hodnoty. Tento typ prevodu vykonáva analógovo -digitálny prevodník (ADC). Proces prevodu analógovej hodnoty na digitálnu hodnotu je známy ako analógovo -digitálna konverzia. Stručne povedané, analógové signály sú signály skutočného sveta okolo nás ako zvuk a svetlo.

Digitálne signály sú analógové ekvivalenty v digitálnom alebo číselnom formáte, ktorým digitálne systémy, ako napríklad mikrokontroléry, dobre rozumejú. ADC je hardvér, ktorý meria analógové signály a vytvára digitálny ekvivalent rovnakého signálu. Mikrokontroléry AVR majú vstavané zariadenie ADC na prevod analógového napätia na celé číslo. AVR ho skonvertuje na 10-bitové číslo v rozsahu 0 až 1023.

Na meranie intenzity svetla používame analógovo -digitálny prevod úrovne napätia z deličového obvodu s LDR.

Inicializovať ADC:

TADCSRA | = (1 << ADEN) - Povoliť ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - nastavte predzosilňovač ADC = 128

ADMUX = (1 << REFS0) - referenčná hodnota nastavenia = AVCC; - nastavte vstupný kanál = ADC0

Pozrite si video s podrobným popisom mikrokontroléra ADC AVR: Mikrokontrolér AVR. Meranie intenzity svetla. ADC a LDR

Krok 4: Riadiaci motor jednosmerného prúdu a modul ovládača motora s dvojitým mostíkom H-L298N

Jednosmerný motor ovládača a modul ovládača motora s dvojitým mostíkom H-L298N
Jednosmerný motor ovládača a modul ovládača motora s dvojitým mostíkom H-L298N
Jednosmerný motor ovládača a modul ovládača motora s dvojitým mostíkom H-L298N
Jednosmerný motor ovládača a modul ovládača motora s dvojitým mostíkom H-L298N
Jednosmerný motor radiča a modul ovládača motora s dvojitým mostíkom H-L298N
Jednosmerný motor radiča a modul ovládača motora s dvojitým mostíkom H-L298N

Používame ovládače jednosmerných motorov, pretože mikrokontroléry nie sú schopné dodávať prúd viac ako 100 miliampérov vo všeobecnosti. Mikrokontroléry sú inteligentné, ale nie silné; tento modul dodá mikrokontrolérom určité svaly na pohon vysoko výkonných jednosmerných motorov. Môže ovládať 2 jednosmerné motory súčasne až do 2 ampérov alebo jeden krokový motor. Otáčky môžeme ovládať pomocou PWM a tiež jeho smer otáčania motorov. Tiež sa používa na zvýšenie jasu pásky LED.

Popis pinov:

Port OUT1 a OUT2, ktorý slúži na pripojenie jednosmerného motora. OUT3 a OUT4 na pripojenie LED pásky.

ENA a ENB sú aktivačné piny: pripojením ENA k vysokému (+5 V) umožní port OUT1 a OUT2.

Ak pripojíte kolík ENA na nízky (GND), deaktivuje to OUT1 a OUT2. Podobne pre ENB a OUT3 a OUT4.

IN1 až IN4 sú vstupné piny, ktoré budú pripojené k AVR.

Ak je IN1 vysoký (+5 V), IN2 nízky (GND), OUT1 sa zmení na vysoký a OUT2 na nízky, takže môžeme poháňať motor.

Ak je IN3 vysoký (+5 V), IN4 nízky (GND), OUT4 sa zmení na vysoký a OUT3 na nízky, čím sa rozsvieti svetlo LED pásky.

Ak chcete obrátiť smer otáčania motora, stačí obrátiť polaritu IN1 a IN2, podobne pre IN3 a IN4.

Použitím signálu PWM na ENA a ENB môžete ovládať rýchlosť motorov na dvoch rôznych výstupných portoch.

Doska môže nominálne akceptovať napätie 7 V až 12 V.

Svetre: Existujú tri prepojovacie kolíky; Prepojka 1: Ak máte motor potrebný na napájanie viac ako 12 V, musíte odpojiť prepojku 1 a na svorku 12 V použiť požadované napätie (max. 35 V). Pripojte ďalšie 5V napájanie a vstup na 5V svorku. Áno, musíte pripojiť 5 V, ak potrebujete použiť viac ako 12 V (keď je odstránený prepojovací mostík 1).

5V vstup slúži na správnu funkciu IC, pretože odstránením prepojky sa deaktivuje vstavaný 5V regulátor a ochráni pred vyšším vstupným napätím z 12 V konektora.

5V terminál funguje ako výstup, ak je napájanie medzi 7V až 12V, a funguje ako vstup, ak použijete viac ako 12V a prepojka je odstránená.

Prepojky 2 a prepojky 3: Ak odstránite tieto dve prepojky, budete musieť zadať signál zapnutia a vypnutia z mikrokontroléra, väčšina používateľov uprednostňuje odstránenie týchto dvoch prepojok a použitie signálu z mikrokontroléra.

Ak ponecháte dva prepojky, OUT1 až OUT4 budú vždy povolené. Nezabudnite na prepojku ENA pre OUT1 a OUT2. Prepojka ENB pre OUT3 a OUT4.

Krok 5: Zapísanie kódu pre program v C. Odovzdanie súboru HEX do pamäte Flash mikrokontroléra

Písanie a vytváranie aplikácie mikrokontroléra AVR v kóde C pomocou integrovanej vývojovej platformy - Atmel Studio.

#ifndef F_CPU #define F_CPU 16000000UL // informujúci o kryštálovej frekvencii ovládača (16 MHz AVR ATMega328P) #endif

#include // hlavička na povolenie riadenia toku údajov nad kolíkmi. Definuje piny, porty atď. #Include // hlavička na povolenie funkcie oneskorenia v programe

#define BUTTON1 2 // prepínač tlačidiel pripojený k portu B pin 2 #define DEBOUNCE_TIME 25 // čas čakania pri „odskakovaní“tlačidla #define LOCK_INPUT_TIME 300 // čas čakania po stlačení tlačidla

// Timer0, PWM Inicializácia neplatná timer0_init () {// nastavenie časovača OC0A, OC0B pin v prepínacom režime a režime CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // nastavenie časovača pomocou prescaleru = 256 TCCR0B | = (1 << CS02); // inicializácia počítadla TCNT0 = 0; // inicializácia porovnávacej hodnoty OCR0A = 0; }

// Inicializácia ADC neplatná ADC_init () {// Povoliť ADC, vzorkovanie freq = osc_freq/128 nastaviť prescaler na maximálnu hodnotu, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Vyberte referenciu napätia (AVCC)

// Stav prepínača tlačidiel nepodpísaný znak button_state () {

/ * tlačidlo je stlačené, keď je BUTTON1 bit jasný */

if (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

if (! (PINB & (1 <

}

návrat 0;

}

// Inicializácia portov neplatná port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-SPÍNAČ TLAČIDIEL PRIAMY PORTB = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Nastavte všetky piny PORTC na minimum, čím sa vypne. }

// Táto funkcia číta hodnotu analógovo -digitálneho prevodu. uint16_t get_LightLevel () {_delay_ms (10); // Chvíľu počkajte, kým bude kanál vybraný ADCSRA | = (1 << ADSC); // Spustite prevod ADC nastavením bitu ADSC. Napíšte 1 do ADSC

while (ADCSRA & (1 << ADSC)); // Počkajte na dokončenie konverzie

// ADSC sa do tej doby opäť zmení na 0, bežte slučku nepretržite _delay_ms (10); návrat (ADC); // Vráti 10-bitový výsledok

}

// Táto funkcia premapuje číslo z jedného rozsahu (0-1023) do druhého (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 (prázdny)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicializácia ADC

zatiaľ čo (1)

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

OCR0A = i1; // Nastavenie porovnania výstupu register kanál A OCR0B = 100-i1; // Nastavenie výstupu na porovnanie registra, kanál B (invertovaný)

if (button_state ()) // Ak je tlačidlo stlačené, prepnite stav a oneskorenie LED diódy na 300 ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // prepínanie aktuálneho stavu pinu IN1. PORTB ^= (1 << 1); // prepínanie aktuálneho stavu pinu IN2. Obráťte smer otáčania motora

PORTB ^= (1 << 3); // prepínanie aktuálneho stavu pinu IN3. PORTB ^= (1 << 4); // prepínanie aktuálneho stavu pinu IN4. LED páska je vypnutá/zapnutá. _delay_ms (LOCK_INPUT_TIME); }}; návrat (0); }

Programovanie je dokončené. Ďalej budovanie a prekladanie kódu projektu do hex súboru.

Odovzdanie súboru HEX do pamäte flash mikrokontroléra: do okna výzvy systému DOS zadajte príkaz:

avrdude –c [meno programátora] –p m328p –u –U flash: w: [názov vášho hexadecimálneho súboru]

V mojom prípade je to:

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

Tento príkaz zapíše hexadecimálny súbor do pamäte mikrokontroléra. Pozrite si video s podrobným popisom napaľovania pamäte flash mikrokontroléra: napaľovanie pamäte flash mikrokontroléra …

Dobre! Mikrokontrolér teraz pracuje v súlade s pokynmi nášho programu. Pozrime sa na to!

Krok 6: Elektrický obvod

Elektrický obvod
Elektrický obvod
Elektrický obvod
Elektrický obvod

Pripojte komponenty podľa schematického diagramu.

Odporúča: