Turinys:
- 1 žingsnis: aprašymas
- 2 žingsnis: AVR laikmačiai - PWM režimas
- 3 žingsnis: šviesos intensyvumo matavimas - ADC ir LDR
- 4 veiksmas: valdiklio nuolatinės srovės variklis ir dvigubas H tilto variklio tvarkyklės modulis-L298N
- 5 veiksmas: programos kodo rašymas C. Įkeliant HEX failą į mikrovaldiklio „Flash“atmintį
- 6 žingsnis: elektros grandinė
Video: AVR mikrovaldiklis. Impulsų pločio moduliavimas. Nuolatinės srovės variklio ir LED šviesos intensyvumo valdiklis: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Sveiki visi!
Impulsų pločio moduliacija (PWM) yra labai paplitusi telekomunikacijų ir galios valdymo technika. jis dažniausiai naudojamas valdyti elektros prietaisui tiekiamą galią, nesvarbu, ar tai būtų variklis, ar šviesos diodas, ar garsiakalbiai, ir tt. Iš esmės tai yra moduliacijos technika, kai nešiklio impulsų plotis keičiamas pagal analoginio pranešimo signalą..
Mes sukuriame paprastą elektros grandinę, skirtą valdyti nuolatinės srovės variklio sukimosi greitį priklausomai nuo šviesos intensyvumo. Šviesos intensyvumui matuoti naudosime nuo šviesos priklausomą rezistorių ir AVR mikrovaldiklio funkcijas, tokias kaip analoginis į skaitmeninį konvertavimą. Taip pat ketiname naudoti dvigubo H tilto variklio tvarkyklės modulį-L298N. Paprastai jis naudojamas valdant variklių greitį ir kryptį, tačiau gali būti naudojamas kitiems projektams, pavyzdžiui, tam tikrų apšvietimo projektų ryškumui didinti. Be to, prie mūsų grandinės pridėtas mygtukas, skirtas perjungti variklio sukimosi kryptį.
1 žingsnis: aprašymas
Kiekvienas šio pasaulio kūnas turi tam tikrą inerciją. Variklis sukasi, kai tik įjungiamas. Kai tik jis bus išjungtas, jis sustos. Bet tai nesustoja iš karto, tam reikia šiek tiek laiko. Bet kol jis visiškai nesustoja, jis vėl įjungiamas! Taip jis pradeda judėti. Tačiau net ir dabar reikia šiek tiek laiko, kad pasiektų visą greitį. Bet prieš tai atsitinka, jis išjungiamas ir pan. Taigi bendras šio veiksmo poveikis yra tas, kad variklis sukasi nuolat, bet mažesniu greičiu.
Impulsų pločio moduliacija (PWM) yra palyginti nauja energijos perjungimo technika, skirta tiekti tarpinį elektros energijos kiekį tarp visiškai įjungto ir visiškai išjungto lygio. Paprastai skaitmeniniai impulsai turi tą patį įjungimo ir išjungimo laikotarpį, tačiau kai kuriais atvejais mums reikia, kad skaitmeninis impulsas turėtų daugiau/mažiau laiko/neveikimo laiko. Naudodami PWM techniką, mes sukuriame skaitmeninius impulsus, kurių įjungimo ir išjungimo būsena yra nevienoda, kad gautume reikiamas tarpines įtampos vertes.
Darbo ciklą apibrėžia aukšto įtampos trukmės procentas visu skaitmeniniu impulsu. Jį galima apskaičiuoti taip:
Darbo ciklo % = T įjungta /T (laikotarpis) x 100
Paimkime problemos pareiškimą. Turime generuoti 50 Hz PWM signalą, kurio darbo ciklas yra 45%.
Dažnis = 50 Hz
Laikotarpis, T = T (įjungtas) + T (išjungtas) = 1/50 = 0,02 s = 20 ms
Darbo ciklas = 45%
Taigi, sprendžiant pagal aukščiau pateiktą lygtį, gauname
T (įjungta) = 9 ms
T (išjungta) = 11 ms
2 žingsnis: AVR laikmačiai - PWM režimas
Norėdami sukurti PWM, AVR turi atskirą aparatūrą! Naudodamas tai, procesorius nurodo aparatinei įrangai gaminti tam tikro darbo ciklo PWM. „ATmega328“turi 6 PWM išėjimus, 2 yra laikmatyje/skaitiklyje0 (8 bitai), 2 yra laikmatyje/skaitiklyje1 (16 bitų), o 2 yra laikmatyje/skaitiklyje2 (8 bitai). „Timer/Counter0“yra paprasčiausias PWM įrenginys „ATmega328“. Laikmatis/skaitiklis0 gali veikti 3 režimais:
- Greitas PWM
- Fazių ir dažnių pataisytas PWM
- Fazės pataisytas PWM
kiekvienas iš šių režimų gali būti apverstas arba neapverstas.
Inicijuokite „Timer0“PWM režimu:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - nustatyti WGM: greitas PWM
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - nustatykite palyginimo išvesties režimą A, B
TCCR0B | = (1 << CS02) - nustatykite laikmatį su prescaler = 256
3 žingsnis: šviesos intensyvumo matavimas - ADC ir LDR
Nuo šviesos priklausomas rezistorius (LDR) yra keitiklis, kuris keičia savo atsparumą pasikeitus šviesai ant jo paviršiaus.
LDR yra pagaminti iš puslaidininkinių medžiagų, kad jie turėtų šviesai jautrias savybes. Šie LDR arba FOTO REZISTORIAI veikia „fotolaidumo“principu. Dabar šis principas sako, kad kai šviesa patenka ant LDR paviršiaus (šiuo atveju), elemento laidumas padidėja arba, kitaip tariant, LDR pasipriešinimas sumažėja, kai šviesa patenka ant LDR paviršiaus. Ši LDR atsparumo sumažėjimo savybė pasiekiama, nes ji yra paviršiuje naudojamos puslaidininkinės medžiagos savybė. LDR dažniausiai naudojamas šviesos buvimui aptikti arba šviesos intensyvumui matuoti.
Norėdami perkelti išorinę nepertraukiamą informaciją (analoginę informaciją) į skaitmeninę/skaičiavimo sistemą, turime ją paversti sveiku skaičiumi (skaitmenine). Šio tipo konvertavimą atlieka analoginis skaitmeninis keitiklis (ADC). Analoginės vertės konvertavimo į skaitmeninę vertę procesas vadinamas analoginiu į skaitmeninį konvertavimą. Trumpai tariant, analoginiai signalai yra realaus pasaulio signalai aplink mus, kaip garsas ir šviesa.
Skaitmeniniai signalai yra analoginiai skaitmeninio ar skaitmeninio formato atitikmenys, kuriuos gerai supranta skaitmeninės sistemos, tokios kaip mikrovaldikliai. ADC yra tokia aparatinė įranga, kuri matuoja analoginius signalus ir sukuria to paties signalo skaitmeninį atitikmenį. AVR mikrovaldikliai turi įmontuotą ADC galimybę analoginę įtampą paversti sveiku skaičiumi. AVR konvertuoja jį į 10 bitų skaičių nuo 0 iki 1023.
Šviesos intensyvumui matuoti naudojame įtampos lygio konverterį iš daliklio grandinės su LDR iš analoginio į skaitmeninį.
Inicijuoti ADC:
TADCSRA | = (1 << ADEN) - įjungti ADC
ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - nustatykite ADC prescaler = 128
ADMUX = (1 << REFS0) - įtampos nustatymas = AVCC; - nustatyti įvesties kanalą = ADC0
Žiūrėkite vaizdo įrašą su išsamiu ADC AVR mikrovaldiklio aprašymu: AVR Microcontroller. Šviesos intensyvumo matavimas. ADC ir LDR
4 veiksmas: valdiklio nuolatinės srovės variklis ir dvigubas H tilto variklio tvarkyklės modulis-L298N
Mes naudojame nuolatinės srovės variklių tvarkykles, nes mikrovaldikliai apskritai negali tiekti srovės, ne didesnės kaip 100 miliamperų. Mikrovaldikliai yra protingi, bet ne stiprūs; šis modulis papildys kai kuriuos raumenis prie mikrovaldiklių, kad galėtų valdyti didelės galios nuolatinės srovės variklius. Jis vienu metu gali valdyti 2 nuolatinės srovės variklius iki 2 amperų arba vieną žingsninį variklį. Mes galime valdyti greitį naudodami PWM ir variklių sukimosi kryptį. Be to, jis naudojamas LED juostos ryškumui didinti.
Smeigtuko aprašymas:
OUT1 ir OUT2 prievadas, skirtas nuolatinės srovės varikliui prijungti. OUT3 ir OUT4, skirti prijungti LED juostą.
ENA ir ENB yra įjungimo kaiščiai: prijungus ENA prie aukštos (+5 V) jungties, įjungiami OUT1 ir OUT2 prievadai.
Jei prijungsite ENA kaištį prie žemo (GND), jis išjungs OUT1 ir OUT2. Panašiai ENB ir OUT3 ir OUT4.
Nuo IN1 iki IN4 yra įvesties kaiščiai, kurie bus prijungti prie AVR.
Jei IN1-aukštas (+5V), IN2-žemas (GND), OUT1 tampa aukštas, o OUT2-žemas, todėl galime valdyti variklį.
Jei IN3-aukštas (+5V), IN4-žemas (GND), OUT4 tampa aukštas, o OUT3-žemas, todėl užsidega LED juostos lemputė.
Jei norite pakeisti variklio sukimosi kryptį, tiesiog pakeiskite IN1 ir IN2 poliškumą, panašiai kaip ir IN3 ir IN4.
Taikydami PWM signalą ENA ir ENB, galite valdyti dviejų skirtingų išėjimų prievadų variklių greitį.
Plokštė gali priimti nuo 7V iki 12V nominaliai.
Džemperiai: Yra trys trumpikliai; 1 trumpiklis: Jei jūsų varikliui reikia daugiau nei 12 V maitinimo šaltinio, turite atjungti 1 jungiklį ir 12 V gnybte įjungti norimą įtampą (maks. 35 V). Atneškite kitą 5 V maitinimą ir įvestį į 5 V terminalą. Taip, turite įvesti 5 V įtampą, jei reikia naudoti daugiau nei 12 V įtampą (kai pašalinamas trumpiklis 1).
5 V įėjimas skirtas tinkamam IC veikimui, nes pašalinus trumpiklį, bus išjungtas įmontuotas 5 V reguliatorius ir apsaugota nuo didesnės įėjimo įtampos iš 12 V gnybto.
5 V gnybtas veikia kaip išėjimas, jei jūsų maitinimas yra nuo 7 V iki 12 V, ir veikia kaip įvestis, jei naudojate daugiau nei 12 V įtampą, o trumpiklis pašalinamas.
2 ir 3 jungiklis: Jei pašalinsite šiuos du trumpiklius, turite įvesti įjungimo ir išjungimo signalą iš mikrovaldiklio, dauguma vartotojų nori pašalinti du trumpiklius ir pritaikyti signalą iš mikrovaldiklio.
Jei išlaikysite du trumpiklius, OUT1 į OUT4 visada bus įjungtas. Prisiminkite ENA trumpiklį OUT1 ir OUT2. ENB trumpiklis OUT3 ir OUT4.
5 veiksmas: programos kodo rašymas C. Įkeliant HEX failą į mikrovaldiklio „Flash“atmintį
AVR mikrovaldiklio programos rašymas ir kūrimas naudojant C kodą naudojant integruotą kūrimo platformą - „Atmel Studio“.
#ifndef F_CPU #define F_CPU 16000000UL // nurodantis valdiklio kristalų dažnį (16 MHz AVR ATMega328P) #endif
#include // antraštė, kad būtų galima valdyti srautų duomenų srautus. Apibrėžia kaiščius, prievadus ir pan. #Include // antraštė, kad programoje būtų įjungta uždelsimo funkcija
#define BUTTON1 2 // mygtuko jungiklis, prijungtas prie B prievado 2 kaiščio #define DEBOUNCE_TIME 25 // laikas laukti, kol bus atšauktas mygtukas
// Timer0, PWM Initialization void timer0_init () {// nustatyti laikmatį OC0A, OC0B kaištis perjungimo režimu ir CTC režimas TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // nustatyti laikmatį su prescaler = 256 TCCR0B | = (1 << CS02); // inicijuoti skaitiklį TCNT0 = 0; // inicijuoti palyginimo reikšmę OCR0A = 0; }
// ADC inicializavimo negaliojimas ADC_init () {// Įgalinti ADC, atrankos dažnis = osc_freq/128 nustatyti išankstinį skalę iki didžiausios vertės, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Pasirinkite įtampos etaloną (AVCC)
// Mygtuko jungiklio būsena neparašyta char button_state () {
/ * mygtukas paspaudžiamas, kai BUTTON1 bitas yra aiškus */
jei (! (PINB & (1 <
{
_delay_ms (DEBOUNCE_TIME);
jei (! (PINB & (1 <
}
grįžti 0;
}
// Uostų inicijavimas void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-MYGTUKŲ JUNGIKLIS TIESIOGINIS PORTB = 0b00010110;
DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;
DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Nustatykite žemus visus PORTC kaiščius, kurie jį išjungia. }
// Ši funkcija nuskaito analogo į skaitmeninį konvertavimą. uint16_t get_LightLevel () {_delay_ms (10); // Palaukite, kol kanalas gaus pasirinktą ADCSRA | = (1 << ADSC); // Pradėkite ADC konvertavimą nustatydami ADSC bitą. Parašykite 1 į ADSC
tuo tarpu (ADCSRA & (1 << ADSC)); // Palaukite, kol konversija bus baigta
// ADSC vėl tampa 0 iki tol, paleisti kilpą nuolat _delay_ms (10); grąžinimas (ADC); // Grąžinkite 10 bitų rezultatą
}
// Ši funkcija perkelia skaičių iš vieno diapazono (0-1023) į kitą (0-100). uint32_t žemėlapis (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 (niekinis)
{uint16_t i1 = 0;
port_init ();
timer0_init (); ADC_init (); // inicializacija ADC
kol (1)
{i1 = žemėlapis (get_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Nustatyti išvesties palyginimo registro kanalą A OCR0B = 100-i1; // Nustatykite išvesties palyginimo registro kanalą B (apverstas)
if (button_state ()) // Jei mygtukas yra paspaustas, perjunkite šviesos diodo būseną ir atidėkite 300 ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // perjungti dabartinę kaiščio būseną IN1. PORTB ^= (1 << 1); // perjungti dabartinę kaiščio IN2 būseną. Pakeiskite variklio sukimosi kryptį
PORTB ^= (1 << 3); // perjungti dabartinę kaiščio būseną IN3. PORTB ^= (1 << 4); // perjungti dabartinę kaiščio būseną IN4. LED juosta yra išjungta/įjungta. _delay_ms (LOCK_INPUT_TIME); }}; grįžti (0); }
Programavimas baigtas. Tada sukurkite ir sukompiliuokite projekto kodą į šešioliktainį failą.
Įkeliant HEX failą į mikrovaldiklio „flash“atmintį: įveskite DOS eilutės lange komandą:
avrdude –c [programuotojo vardas] –p m328p –u –U „flash“: w: [jūsų šešiakampio failo pavadinimas]
Mano atveju tai yra:
avrdude –c ISPProgv1 –p m328p –u –U blykstė: w: PWM.hex
Ši komanda įrašo hex failą į mikrovaldiklio atmintį. Žiūrėkite vaizdo įrašą su išsamiu mikrovaldiklio „flash“atminties įrašymo aprašymu: „Mikrovaldiklio„ flash “atminties įrašymas…
Gerai! Dabar mikrovaldiklis veikia pagal mūsų programos instrukcijas. Patikrinkime!
6 žingsnis: elektros grandinė
Prijunkite komponentus pagal schemą.
Rekomenduojamas:
Paprastas nuolatinės srovės - nuolatinės srovės stiprinimo keitiklis naudojant 555: 4 žingsnius
Paprastas nuolatinės srovės - nuolatinės srovės stiprinimo keitiklis naudojant 555: dažnai grandinėje naudinga turėti aukštesnę įtampą. Pateikti „ +ve“ir „ve“bėgelius „op -amp“, vairuoti signalus ar net relę be papildomos baterijos. Tai paprastas 5V iki 12V nuolatinės srovės keitiklis, sukurtas naudojant 555 laikmatį
Nuo kintamosios srovės iki +15V, -15V 1A kintamasis ir 5V 1A nuolatinės srovės nuolatinės srovės maitinimo šaltinis: 8 žingsniai
Kintamosios srovės į +15V, -15V 1A kintamasis ir 5V 1A nuolatinio maitinimo šaltinis: maitinimo šaltinis yra elektros prietaisas, tiekiantis elektros energiją elektros apkrovai. Šiame modelio maitinimo šaltinyje yra trys kietojo kūno nuolatinės srovės maitinimo šaltiniai. Pirmasis maitinimas suteikia kintamą teigiamą 1,5–15 voltų išėjimą iki 1 ampero
97% efektyvus nuolatinės srovės ir nuolatinės srovės keitiklis [3A, reguliuojamas]: 12 žingsnių
97% efektyvus nuolatinės srovės ir nuolatinės srovės konverteris [3A, reguliuojamas]: maža nuolatinės srovės į nuolatinę srovę konverterio plokštė yra naudinga daugeliui programų, ypač jei ji gali tiekti srovę iki 3A (2A nuolat be aušintuvo). Šiame straipsnyje mes išmoksime sukurti nedidelę, efektyvią ir pigią „Buck“keitiklio grandinę. [
Nuo 24 V nuolatinės srovės variklio iki didelio greičio universalaus variklio (30 voltų): 3 žingsniai
24 V nuolatinės srovės variklis į didelės spartos universalųjį variklį (30 voltų): Sveiki! Šiame projekte aš išmokysiu jus, kaip įprastą žaislinį 24 V nuolatinės srovės variklį paversti 30 V universaliu varikliu. Asmeniškai manau, kad vaizdo demonstravimas geriausiai apibūdina projektą . Taigi, vaikinai, aš rekomenduočiau jums pirmiausia pažiūrėti vaizdo įrašą. V projektas
Paprastas (ir purvinas) impulsų pločio moduliavimas (PWM) su 555 laikmačiu: 3 žingsniai
Paprastas (ir purvinas) impulsų pločio moduliavimas (PWM) su 555 laikmačiu: paprasta grandinė DC variklio greičio valdymui (ventiliatoriaus greičio valdymas, šviesos / šviesos diodų pritemdymas ir kt.) Naudojant 555 laikmatį. Taip pat geras atspirties taškas pradedantiesiems, norintiems gauti savo rankos nešvarios naudojant 555 laikmačio IC. Kai kas ginčytųsi, kad tai ne pats