Obsah:

Mikrokontrolér AVR. Modulace šířky pulsu. Ovladač stejnosměrného motoru a intenzity světla LED: 6 kroků
Mikrokontrolér AVR. Modulace šířky pulsu. Ovladač stejnosměrného motoru a intenzity světla LED: 6 kroků

Video: Mikrokontrolér AVR. Modulace šířky pulsu. Ovladač stejnosměrného motoru a intenzity světla LED: 6 kroků

Video: Mikrokontrolér AVR. Modulace šířky pulsu. Ovladač stejnosměrného motoru a intenzity světla LED: 6 kroků
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Listopad
Anonim
Image
Image

Ahoj všichni!

Modulace šířky pulsu (PWM) je velmi běžnou technikou v oblasti telekomunikací a řízení výkonu. běžně se používá k ovládání výkonu přiváděného elektrickému zařízení, ať už je to motor, LED, reproduktory atd. Jedná se v podstatě o modulační techniku, ve které se šířka nosného impulsu mění v souladu s analogovým signálem zprávy.

Vytváříme jednoduchý elektrický obvod pro řízení rychlosti otáčení stejnosměrného motoru v závislosti na intenzitě světla. K měření intenzity světla použijeme funkce rezistoru závislého na světle a mikrokontroléru AVR, jako je převod analogového signálu na digitální. Rovněž použijeme modul Dual H-Bridge Motor Driver-L298N. Obvykle se používá při řízení rychlosti a směru motoru, ale lze jej použít i pro jiné projekty, jako je řízení jasu určitých světelných projektů. Také bylo do našeho okruhu přidáno tlačítko pro přepínání směru otáčení motoru.

Krok 1: Popis

Popis
Popis
Popis
Popis

Každé tělo v tomto světě má nějakou setrvačnost. Motor se otáčí, kdykoli je zapnut. Jakmile se vypne, bude mít tendenci se zastavit. Ale nezastaví se to okamžitě, nějakou dobu to trvá. Než se ale úplně zastaví, je znovu zapnutý! Tím se začne hýbat. Ale i teď nějakou dobu trvá, než dosáhne plné rychlosti. Ale než se to stane, je vypnuto atd. Celkový účinek této akce tedy je, že se motor otáčí nepřetržitě, ale nižší rychlostí.

Modulace šířky pulsu (PWM) je poměrně nedávná technika přepínání napájení, která poskytuje střední množství elektrického výkonu mezi úrovněmi plného zapnutí a vypnutí. Digitální impulsy mají obvykle stejnou dobu zapnutí a vypnutí, ale v některých situacích potřebujeme, aby digitální pulsy měly více/méně času/času. V technice PWM vytváříme digitální impulsy s nestejným množstvím zapnutého a vypnutého stavu, abychom získali požadované hodnoty mezilehlého napětí.

Pracovní cyklus je definován procentem trvání vysokého napětí v úplném digitálním impulsu. Lze jej vypočítat podle:

% pracovního cyklu = T on /T (perioda) x 100

Vezměme si problémové prohlášení. Potřebujeme vygenerovat signál 50 Hz PWM se 45% pracovním cyklem.

Frekvence = 50 Hz

Časové období, T = T (zapnuto) + T (vypnuto) = 1/50 = 0,02 s = 20 ms

Pracovní cyklus = 45%

Řešení tedy podle výše uvedené rovnice dostaneme

T (zapnuto) = 9 ms

T (vypnuto) = 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

Pro vytváření PWM obsahuje AVR samostatný hardware! Použitím toho CPU dává hardwaru pokyn k produkci PWM konkrétního pracovního cyklu. ATmega328 má 6 PWM výstupů, 2 jsou umístěny na časovači/čítači0 (8bit), 2 jsou umístěny na časovači/čítači1 (16bit) a 2 jsou umístěny na časovači/čítači2 (8bit). Timer/Counter0 je nejjednodušší PWM zařízení na ATmega328. Timer/Counter0 může pracovat ve 3 režimech:

  • Rychlé PWM
  • PWM s korekcí na fázi a frekvenci
  • Fázově upravený PWM

každý z těchto režimů může být invertovaný nebo neinvertovaný.

Inicializujte časovač 0 v režimu PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - nastavení WGM: Fast PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - nastavit režim porovnávání výstupu A, B

TCCR0B | = (1 << CS02) - nastavení časovače s prescalerem = 256

Krok 3: Měření intenzity světla - ADC a LDR

Měření intenzity světla - ADC a LDR
Měření intenzity světla - ADC a LDR
Měření intenzity světla - ADC a LDR
Měření intenzity světla - ADC a LDR
Měření intenzity světla - ADC a LDR
Měření intenzity světla - ADC a LDR

Light Dependent Resistor (LDR) je snímač, který mění svůj odpor, když světlo dopadá na jeho povrch.

LDR jsou vyrobeny z polovodičových materiálů, které jim umožňují mít jejich vlastnosti citlivé na světlo. Tyto LDR nebo FOTORISTORY fungují na principu „fotovodivosti“. Nyní tento princip říká, že kdykoli světlo dopadne na povrch LDR (v tomto případě), vodivost prvku se zvýší nebo jinými slovy odpor LDR se sníží, když světlo dopadne na povrch LDR. Této vlastnosti poklesu odporu pro LDR je dosaženo, protože je to vlastnost polovodičového materiálu použitého na povrchu. LDR se používají většinou k detekci přítomnosti světla nebo k měření intenzity světla.

Pro přenos externích souvislých informací (analogových informací) do digitálního/výpočetního systému je musíme převést na celočíselné (digitální) hodnoty. Tento typ převodu provádí analogový na digitální převodník (ADC). Proces převodu analogové hodnoty na digitální hodnotu se nazývá analogově digitální převod. Stručně řečeno, analogové signály jsou signály reálného světa kolem nás jako zvuk a světlo.

Digitální signály jsou analogové ekvivalenty v digitálním nebo číselném formátu, kterým digitální systémy, jako jsou mikrokontroléry, dobře rozumějí. ADC je hardwarem, který měří analogové signály a vytváří digitální ekvivalent stejného signálu. Mikrokontroléry AVR mají vestavěné zařízení ADC pro převod analogového napětí na celé číslo. AVR jej převede na 10bitové číslo v rozsahu 0 až 1023.

K měření intenzity světla používáme analogový a digitální převod úrovně napětí z dělicího obvodu s LDR.

Inicializovat ADC:

TADCSRA | = (1 << ADEN) - Povolit ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - nastavení ADC precaleru = 128

ADMUX = (1 << REFS0) - nastavení referenčního napětí = AVCC; - nastavit vstupní kanál = ADC0

Podívejte se na video s podrobným popisem mikrokontroléru ADC AVR: Mikrokontrolér AVR. Měření intenzity světla. ADC a LDR

Krok 4: Řídicí stejnosměrný motor a duální modul ovladače motoru H-Bridge-L298N

Řídicí stejnosměrný motor a dvojitý modul ovladače motoru můstku H-L298N
Řídicí stejnosměrný motor a dvojitý modul ovladače motoru můstku H-L298N
Řídicí stejnosměrný motor a dvojitý modul ovladače motoru můstku H-L298N
Řídicí stejnosměrný motor a dvojitý modul ovladače motoru můstku H-L298N
Řídicí stejnosměrný motor a dvojitý modul ovladače motoru mostu H-L298N
Řídicí stejnosměrný motor a dvojitý modul ovladače motoru mostu H-L298N

Používáme ovladače stejnosměrných motorů, protože mikrořadiče nejsou schopny dodávat proud obecně nejvýše 100 miliampérů. Mikrokontroléry jsou chytré, ale ne silné; tento modul přidá nějaké svaly do mikrokontrolérů pro pohon vysoce výkonných stejnosměrných motorů. Může ovládat 2 stejnosměrné motory současně až 2 ampéry každý nebo jeden krokový motor. Otáčky můžeme ovládat pomocí PWM a také jeho směr otáčení motorů. Používá se také k řízení jasu pásky LED.

Popis kolíku:

Port OUT1 a OUT2, který slouží k připojení stejnosměrného motoru. OUT3 a OUT4 pro připojení LED pásky.

ENA a ENB jsou aktivační piny: připojením ENA k vysokému (+5V) aktivuje port OUT1 a OUT2.

Pokud připojíte pin ENA na nízký (GND), deaktivuje OUT1 a OUT2. Podobně pro ENB a OUT3 a OUT4.

IN1 až IN4 jsou vstupní piny, které budou připojeny k AVR.

Pokud je IN1-high (+5V), IN2-low (GND), OUT1 se změní na high a OUT2 na low, takže můžeme pohánět motor.

Pokud je IN3-high (+5V), IN4-low (GND), OUT4 se změní na high a OUT3 se sníží, takže LED páska svítí.

Pokud chcete obrátit směr otáčení motoru, stačí změnit polaritu IN1 a IN2, podobně pro IN3 a IN4.

Aplikováním signálu PWM na ENA a ENB můžete řídit rychlost motorů na dvou různých výstupních portech.

Deska může nominálně přijímat napětí 7 V až 12 V.

Propojky: K dispozici jsou tři propojovací kolíky; Propojka 1: Pokud váš motor potřebuje napájení více než 12 V, musíte odpojit propojku 1 a na svorku 12 V použít požadované napětí (max. 35 V). Přiveďte další 5V napájení a vstup na 5V terminál. Ano, musíte zadat 5V, pokud potřebujete použít více než 12V (když je odstraněn propojka 1).

Vstup 5V slouží pro správnou funkci integrovaného obvodu, protože odstraněním propojky se deaktivuje vestavěný 5V regulátor a chrání se před vyšším vstupním napětím ze svorky 12V.

Svorka 5 V funguje jako výstup, pokud je vaše napájení mezi 7 V až 12 V, a funguje jako vstup, pokud použijete více než 12 V a propojka je odstraněna.

Propojka 2 a propojka 3: Pokud odeberete tyto dva propojky, budete muset zadat signál povolení a zakázání z mikrokontroléru, většina uživatelů upřednostňuje odstranění dvou propojek a použití signálu z mikrokontroléru.

Pokud ponecháte dvě propojky, výstupy OUT1 až OUT4 budou vždy aktivní. Pamatujte na propojku ENA pro OUT1 a OUT2. Propojka ENB pro OUT3 a OUT4.

Krok 5: Zápis kódu pro program v C. Odeslání souboru HEX do paměti flash mikrokontroléru

Psaní a vytváření aplikace mikrokontroléru AVR v kódu C pomocí integrované vývojové platformy - Atmel Studio.

#ifndef F_CPU #definovat F_CPU 16000000UL // sdělující krystalovou frekvenci ovladače (16 MHz AVR ATMega328P) #endif

#include // header umožňující řízení toku dat přes piny. Definuje piny, porty atd. #Include // záhlaví pro povolení funkce zpoždění v programu

#define BUTTON1 2 // přepínač přepínače připojený k portu B pin 2 #define DEBOUNCE_TIME 25 // čas čekání při „odskakování“tlačítko #define LOCK_INPUT_TIME 300 // čas čekání po stisknutí tlačítka

// Timer0, PWM Inicializace neplatná timer0_init () {// nastavení časovače OC0A, OC0B pin v přepínacím režimu a režimu CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // nastavení časovače s prescalerem = 256 TCCR0B | = (1 << CS02); // inicializace čítače TCNT0 = 0; // inicializace porovnat hodnotu OCR0A = 0; }

// Inicializace ADC neplatná ADC_init () {// Povolit ADC, vzorkování freq = osc_freq/128 nastavit prescaler na maximální hodnotu, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Vyberte referenci napětí (AVCC)

// Stav přepínače tlačítka bez znaménka char button_state () {

/ * tlačítko je stisknuto, když je BUTTON1 bit prázdný */

if (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

if (! (PINB & (1 <

}

návrat 0;

}

// Inicializace portů neplatná port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-BUTTON SWITCH DIRECT PORTB = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Nastaví všechny piny PORTC low, čímž se vypne. }

// Tato funkce čte hodnotu převodu z analogového na digitální. uint16_t get_LightLevel () {_delay_ms (10); // Chvíli počkejte, než bude kanál vybrán ADCSRA | = (1 << ADSC); // Spusťte převod ADC nastavením bitu ADSC. Napište 1 do ADSC

while (ADCSRA & (1 << ADSC)); // Počkejte na dokončení převodu

// ADSC se do té doby opět změní na 0, spusťte smyčku nepřetržitě _delay_ms (10); návrat (ADC); // Vrátí 10bitový výsledek

}

// Tato funkce Přemapuje číslo z jednoho rozsahu (0-1023) do jiné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 (neplatné)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicializace ADC

zatímco (1)

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

OCR0A = i1; // Nastavení výstupu porovnat registr kanál A OCR0B = 100-i1; // Nastavit výstup porovnat registr kanál B (invertovaný)

if (button_state ()) // Pokud je tlačítko stisknuto, přepněte stav LED a zpoždění na 300 ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // přepínání aktuálního stavu pinu IN1. PORTB ^= (1 << 1); // přepínání aktuálního stavu pinu IN2. Změňte směr otáčení motoru

PORTB ^= (1 << 3); // přepínání aktuálního stavu pinu IN3. PORTB ^= (1 << 4); // přepínání aktuálního stavu pinu IN4. LED páska se vypíná/zapíná. _delay_ms (LOCK_INPUT_TIME); }}; return (0); }

Programování je dokončeno. Dále vytváření a kompilace kódu projektu do hex souboru.

Odeslání souboru HEX do paměti flash mikrokontroléru: do okna výzvy DOS zadejte příkaz:

avrdude –c [jméno programátora] –p m328p –u –U flash: w: [název vašeho hexadecimálního souboru]

V mém případě je to:

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

Tento příkaz zapíše hex soubor do paměti mikrokontroléru. Podívejte se na video s podrobným popisem vypalování flash paměti mikrokontroléru: Vypalování flash paměti mikrokontroléru…

OK! Mikrokontrolér nyní pracuje v souladu s pokyny našeho programu. Pojďme to zkontrolovat!

Krok 6: Elektrický obvod

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

Připojte komponenty podle schématu.

Doporučuje: