Kazalo:

Mikrokrmilnik AVR. Modulacija širine impulza. Krmilnik enosmernega motorja in jakosti LED luči: 6 korakov
Mikrokrmilnik AVR. Modulacija širine impulza. Krmilnik enosmernega motorja in jakosti LED luči: 6 korakov

Video: Mikrokrmilnik AVR. Modulacija širine impulza. Krmilnik enosmernega motorja in jakosti LED luči: 6 korakov

Video: Mikrokrmilnik AVR. Modulacija širine impulza. Krmilnik enosmernega motorja in jakosti LED luči: 6 korakov
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, November
Anonim
Image
Image

Pozdravljeni vsi skupaj!

Pulzno širinska modulacija (PWM) je zelo pogosta tehnika v telekomunikacijah in nadzoru moči. običajno se uporablja za nadzor moči, ki se napaja na električno napravo, pa naj gre za motor, LED, zvočnike itd. V bistvu gre za modulacijsko tehniko, pri kateri se širina nosilnega impulza spreminja glede na signal analognega sporočila.

Izdelamo preprosto električno vezje za nadzor hitrosti vrtenja enosmernega motorja v odvisnosti od jakosti svetlobe. Za merjenje jakosti svetlobe bomo uporabili funkcije, odvisne od svetlobe, in mikrokontrolerja AVR, kot je analogno -digitalna pretvorba. Uporabili bomo tudi Dual H-Bridge Motor Driver Module-L298N. Običajno se uporablja za nadzor hitrosti in smeri motorjev, lahko pa se uporablja tudi za druge projekte, na primer za povečanje svetlosti nekaterih svetlobnih projektov. V vezje smo dodali tudi gumb za preklop smeri vrtenja motorja.

1. korak: Opis

Opis
Opis
Opis
Opis

Vsako telo na tem svetu ima neko vztrajnost. Motor se vrti vsakič, ko je vklopljen. Takoj ko se izklopi, se bo ponavadi ustavil. Vendar se ne ustavi takoj, traja nekaj časa. Toda preden se popolnoma ustavi, se znova vklopi! Tako se začne premikati. Toda tudi zdaj traja nekaj časa, da doseže svojo polno hitrost. Toda preden se to zgodi, se izklopi itd. Splošni učinek tega dejanja je torej, da se motor neprekinjeno vrti, vendar z nižjo hitrostjo.

Pulzno širinska modulacija (PWM) je sorazmerno najnovejša tehnika preklapljanja moči za zagotavljanje vmesnih količin električne energije med popolnoma vklopljenimi in popolnoma izklopljenimi ravnmi. Običajno imajo digitalni impulzi enako časovno obdobje vklopa in izklopa, v nekaterih situacijah pa potrebujemo, da ima digitalni impulz več/manj časa/časa. V PWM tehniki ustvarjamo digitalne impulze z neenako količino stanja vklopa in izklopa, da dobimo zahtevane vrednosti vmesne napetosti.

Delovni cikel je določen z odstotkom trajanja visoke napetosti v celotnem digitalnem impulzu. Izračuna se lahko tako:

% obratovalnega cikla = T vklop /T (čas obdobja) x 100

Vzemimo izjavo o problemu. Ustvariti moramo 50 Hz PWM signal z 45% delovnim ciklom.

Frekvenca = 50 Hz

Časovno obdobje, T = T (vklopljeno) + T (izklopljeno) = 1/50 = 0,02 s = 20 ms

Delovni cikel = 45%

Tako z reševanjem po enačbi, podani zgoraj, dobimo

T (vklopljeno) = 9 ms

T (izklopljeno) = 11 ms

2. korak: Časovniki AVR - način PWM

Časovniki AVR - način PWM
Časovniki AVR - način PWM
Časovniki AVR - način PWM
Časovniki AVR - način PWM

Za izdelavo PWM AVR vsebuje ločeno strojno opremo! Z uporabo tega CPE strojni opremi naroči izdelavo PWM določenega delovnega cikla. ATmega328 ima 6 izhodov PWM, 2 se nahajata na časovniku/števcu0 (8 bitov), 2 se nahajata na merilniku časa/števcu1 (16 bitov), 2 pa na merilniku časa/števcu 2 (8 bitov). Timer/Counter0 je najpreprostejša PWM naprava na ATmega328. Časovnik/števec 0 lahko deluje v treh načinih:

  • Hiter PWM
  • PWM s fazno in frekvenčno korekcijo
  • PWM s fazno korekcijo

vsak od teh načinov je lahko obrnjen ali neobrnjen.

Inicializirajte Timer0 v načinu PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - nastavite WGM: Hitri PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - nastavite primerjalni izhodni način A, B

TCCR0B | = (1 << CS02) - nastavite časovnik s predkalerjem = 256

3. korak: Merjenje svetlobne jakosti - ADC in LDR

Merjenje svetlobne jakosti - ADC in LDR
Merjenje svetlobne jakosti - ADC in LDR
Merjenje svetlobne jakosti - ADC in LDR
Merjenje svetlobne jakosti - ADC in LDR
Merjenje svetlobne jakosti - ADC in LDR
Merjenje svetlobne jakosti - ADC in LDR

Svetlobno odvisen upor (LDR) je pretvornik, ki spremeni svoj upor, ko svetloba pade na njegovo površino.

LDR so izdelani iz polprevodniških materialov, ki jim omogočajo občutljivost na svetlobo. Ti LDR -ji ali FOTO Uporniki delujejo po načelu "fotoprevodnosti". To načelo pravi, da kadar svetloba pade na površino LDR (v tem primeru) se prevodnost elementa poveča ali z drugimi besedami upor LDR zmanjša, ko svetloba pade na površino LDR. Ta lastnost zmanjšanja upora za LDR je dosežena, ker je lastnost polprevodniškega materiala, uporabljenega na površini. LDR se večinoma uporabljajo za odkrivanje prisotnosti svetlobe ali za merjenje jakosti svetlobe.

Za prenos zunanjih neprekinjenih informacij (analognih informacij) v digitalni/računalniški sistem jih moramo pretvoriti v celoštevilčne (digitalne) vrednosti. To vrsto pretvorbe izvaja analogno -digitalni pretvornik (ADC). Proces pretvorbe analogne vrednosti v digitalno vrednost je znan kot analogno -digitalna pretvorba. Skratka, analogni signali so signali iz resničnega sveta okoli nas, kot sta zvok in svetloba.

Digitalni signali so analogni ekvivalenti v digitalni ali numerični obliki, ki jih digitalni sistemi, kot so mikrokrmilniki, dobro razumejo. ADC je ena taka strojna oprema, ki meri analogne signale in proizvaja digitalni ekvivalent istega signala. Mikrokrmilniki AVR imajo vgrajen ADC sistem za pretvorbo analogne napetosti v celo število. AVR ga pretvori v 10-bitno število v območju od 0 do 1023.

Za merjenje jakosti svetlobe uporabljamo analogno -digitalni pretvornik napetostnega nivoja iz razdelilnega vezja z LDR.

Inicializirajte ADC:

TADCSRA | = (1 << ADEN) - Omogoči ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - nastavite predkaler ADC = 128

ADMUX = (1 << REFS0) - nastavitev naponske napetosti = AVCC; - nastavite vhodni kanal = ADC0

Oglejte si video s podrobnim opisom mikrokrmilnika ADC AVR: mikrokrmilnik AVR. Merjenje svetlobne jakosti. ADC in LDR

Korak: Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N

Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N
Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N
Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N
Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N
Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N
Krmilnik enosmernega motorja in modul gonilnika motorja z dvojnim mostom-L298N

Uporabljamo gonilnike enosmernega motorja, ker mikrokrmilniki ne morejo oddati toka, ki na splošno ne presega 100 miliamperov. Mikrokrmilniki so pametni, vendar ne močni; ta modul bo mikrokrmilnikom dodal nekaj mišic za pogon enosmernih motorjev velike moči. Lahko krmili 2 enosmerna motorja hkrati do 2 ampera vsak ali en koračni motor. Hitrost lahko nadzorujemo s PWM in tudi smerjo vrtenja motorjev. Uporablja se tudi za povečanje svetlosti LED traku.

Opis pin:

OUT1 in OUT2 vrata, ki sta za priključitev enosmernega motorja. OUT3 in OUT4 za priključitev LED traku.

ENA in ENB sta omogočena zatiča: s priključitvijo ENA na visoko (+5V) omogočita vrata OUT1 in OUT2.

Če priključite ENA pin na nizko (GND), onemogočite OUT1 in OUT2. Podobno za ENB in OUT3 in OUT4.

IN1 do IN4 so vhodni zatiči, ki bodo povezani z AVR.

Če je IN1 visok (+5V), IN2 nizek (GND), se OUT1 obrne visoko, OUT2 pa nizko, zato lahko poganjamo motor.

Če je IN3 visok (+5V), IN4 nizek (GND), se OUT4 obrne visoko, OUT3 pa nizko, zato sveti LED trak.

Če želite obrniti smer vrtenja motorja, obrnite polariteti IN1 in IN2, podobno za IN3 in IN4.

Z uporabo signala PWM na ENA in ENB lahko nadzorujete hitrost motorjev na dveh različnih izhodnih vratih.

Plošča lahko sprejema nominalno od 7V do 12V.

Skakači: Obstajajo trije mostički; Mostič 1: Če vaš motor potrebuje več kot 12 V napajanje, morate odklopiti 1 in priključiti želeno napetost (največ 35 V) na priključek 12 V. Priključite še 5V napajanje in vhod na priključku 5V. Da, vnesti morate 5V, če želite uporabiti več kot 12V (ko odstranite skakalec 1).

Vhod 5V je namenjen pravilnemu delovanju IC, saj odstranitev mostička onemogoči vgrajen regulator 5V in ščiti pred višjo vhodno napetostjo iz priključka 12V.

5V priključek deluje kot izhod, če je napajanje med 7V in 12V, in deluje kot vhod, če uporabite več kot 12V in je mostiček odstranjen.

Mostiček 2 in Mostič 3: Če odstranite ta dva mostička, morate vnesti signal za omogočanje in onemogočanje iz mikrokrmilnika, večina uporabnikov raje odstrani oba mostička in uporabi signal iz mikrokrmilnika.

Če držite oba mostička, bosta OUT1 do OUT4 vedno omogočena. Zapomnite si mostiček ENA za OUT1 in OUT2. ENB mostiček za OUT3 in OUT4.

5. korak: Pisanje kode za program v C. Nalaganje HEX datoteke v pomnilnik mikrokontrolerja

Pisanje in izdelava aplikacije mikrokrmilnika AVR v kodi C z uporabo integrirane razvojne platforme - Atmel Studio.

#ifndef F_CPU #define F_CPU 16000000UL // sporoča frekvenco kristala krmilnika (16 MHz AVR ATMega328P) #endif

#include // glava za omogočanje nadzora pretoka podatkov nad zatiči. Določa zatiče, vrata itd. #Include // header za omogočanje funkcije zamika v programu

#define BUTTON1 2 // stikalo gumba povezano z vhodom B pin 2 #define DEBOUNCE_TIME 25 // čas za čakanje, medtem ko gumb za "odbijanje" #define LOCK_INPUT_TIME 300 // čas za čakanje po pritisku gumba

// Timer0, PWM Initialization void timer0_init () {// nastavitev časovnika OC0A, pin OC0B v preklopnem načinu in načinu CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // nastavite časovnik s prednastavkom = 256 TCCR0B | = (1 << CS02); // inicializiraj števec TCNT0 = 0; // inicializiramo primerjalno vrednost OCR0A = 0; }

// ADC Initialization void ADC_init () {// Omogočite ADC, vzorčenje freq = osc_freq/128 nastavite predkaler na največjo vrednost, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Izberite referenčno napetost (AVCC)

// Status stikala gumba unsigned char button_state () {

/ * gumb je pritisnjen, ko je bit BUTTON1 čist */

če (! (PINB & (1 <

{

_dey_ms (DEBOUNCE_TIME);

če (! (PINB & (1 <

}

vrnitev 0;

}

// Inicializacija portov void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-GUMBNI PREKLOPNIK DIRECT PORTB = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Nastavite vse zatiče PORTC na nizko, kar izklopi. }

// Ta funkcija bere vrednost analogno -digitalnega pretvornika. uint16_t get_LightLevel () {_delay_ms (10); // Počakajte nekaj časa, da kanal izbere ADCSRA | = (1 << ADSC); // Zagon pretvorbe ADC z nastavitvijo bit ADSC. Napišite 1 v ADSC

medtem ko (ADCSRA & (1 << ADSC)); // Počakajte, da se pretvorba dokonča

// ADSC do takrat spet postane 0, neprekinjeno vodi zanko _delay_ms (10); vračilo (ADC); // Vrne 10-bitni rezultat

}

// Ta funkcija ponovno preslika število iz enega območja (0-1023) v drugega (0-100). zemljevid 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 (void)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // inicializacija ADC

medtem ko (1)

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

OCR0A = i1; // Nastavi izhodni kanal za primerjavo registra A OCR0B = 100-i1; // Nastavi izhodni primerjalni kanal kanala B (obrnjen)

if (button_state ()) // Če je gumb pritisnjen, preklopite stanje LED in zakasnite 300 ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // preklop trenutnega stanja zatiča IN1. PORTB ^= (1 << 1); // preklop trenutnega stanja zatiča IN2. Obrnite smer vrtenja motorja

PORTB ^= (1 << 3); // preklop trenutnega stanja nožice IN3. PORTB ^= (1 << 4); // preklop trenutnega stanja nožice IN4. LED trak je izklopljen/vklopljen. _dey_ms (LOCK_INPUT_TIME); }}; return (0); }

Programiranje je končano. Nato sestavi in prevede kodo projekta v šestnajstiško datoteko.

Nalaganje datoteke HEX v pomnilnik mikrokrmilnika: v okno poziva DOS vnesite ukaz:

avrdude –c [ime programerja] –p m328p –u –U bliskavica: w: [ime vaše šestnajstiške datoteke]

V mojem primeru je to:

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

Ta ukaz zapiše šestnajstiško datoteko v pomnilnik mikrokrmilnika. Oglejte si video s podrobnim opisom zapisovanja bliskovnega pomnilnika mikrokrmilnika: zapisovanje bliskovnega pomnilnika mikrokrmilnika …

V redu! Zdaj mikrokrmilnik deluje v skladu z navodili našega programa. Preverimo!

6. korak: Električno vezje

Električno vezje
Električno vezje
Električno vezje
Električno vezje

Priključite komponente v skladu s shematskim diagramom.

Priporočena: