Բովանդակություն:
- Քայլ 1: Նկարագրություն
- Քայլ 2: AVR ժամաչափեր - PWM ռեժիմ
- Քայլ 3. Լույսի ինտենսիվության չափում - ADC & LDR:
- Քայլ 4. Controller DC Motor & Dual H-Bridge Motor Driver Module-L298N
- Քայլ 5. Codeրագրի համար ծածկագիր գրելը C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ
- Քայլ 6: Էլեկտրական միացում
Video: AVR միկրոկոնտրոլեր: Իմպուլսի լայնության մոդուլյացիա: DC շարժիչի և LED լույսի ինտենսիվության վերահսկիչ. 6 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Ողջույն բոլորին!
Pulse Width Modulation (PWM) շատ տարածված տեխնիկա է հեռահաղորդակցության և էներգիայի կառավարման մեջ: այն սովորաբար օգտագործվում է էլեկտրական սարքի սնուցվող հզորությունը վերահսկելու համար ՝ լինի դա շարժիչ, LED, բարձրախոս և այլն: Հիմնականում դա մոդուլյացիոն տեխնիկա է, որի դեպքում կրիչի զարկերակի լայնությունը տատանվում է ՝ ըստ անալոգային հաղորդագրության ազդանշանի.
Մենք պարզ էլեկտրական շղթա ենք պատրաստում ՝ լույսի ինտենսիվության մեջ կախված DC շարժիչի պտտման արագությունը վերահսկելու համար: Լույսի ինտենսիվությունը չափելու համար մենք կօգտագործենք Light Dependent Resistor- ի և AVR միկրոկառավարիչի գործառույթները, ինչպիսիք են Analog to Digital Conversion- ը: Նաև մենք պատրաստվում ենք օգտագործել D-H-Bridge Motor Driver Module-L298N մոդուլը: Այն սովորաբար օգտագործվում է շարժիչների արագությունը և ուղղությունը վերահսկելու համար, բայց կարող է օգտագործվել այլ նախագծերի համար, ինչպիսիք են լուսավորման որոշ նախագծերի պայծառությունը: Նաև կոճակ ավելացրեց մեր շրջանագծին `շարժիչի պտույտի ուղղությունը փոխելու համար:
Քայլ 1: Նկարագրություն
Այս աշխարհի յուրաքանչյուր մարմին ունի որոշակի իներցիա: Շարժիչը պտտվում է ամեն անգամ, երբ այն միացված է: Անջատվելուն պես այն հակված կլինի կանգ առնել: Բայց դա անմիջապես չի դադարում, դա որոշ ժամանակ է պահանջում: Բայց մինչև ամբողջովին կանգ առնելը, այն նորից միացված է: Այսպիսով, այն սկսում է շարժվել: Բայց նույնիսկ հիմա, այն լրիվ արագության հասնելու համար որոշ ժամանակ է պահանջվում: Բայց մինչ դա տեղի կունենա, այն անջատված է և այլն: Այսպիսով, այս գործողության ընդհանուր ազդեցությունն այն է, որ շարժիչը անընդհատ պտտվում է, բայց ավելի ցածր արագությամբ:
Pulse Width Modulation (PWM) համեմատաբար վերջին էներգիայի անջատման տեխնիկա է ՝ լիովին միացված և լիովին անջատված մակարդակների միջև միջանկյալ քանակությամբ էլեկտրաէներգիա ապահովելու համար: Սովորաբար, թվային իմպուլսներն ունեն միացման և անջատման նույն ժամանակահատվածը, բայց որոշ իրավիճակներում մեզ անհրաժեշտ է, որ թվային զարկերակը ժամանակին/ժամանակից դուրս ավելի/պակաս ունենա: PWM տեխնիկայում մենք ստեղծում ենք միացման և անջատման անհավասար քանակությամբ թվային իմպուլսներ `պահանջվող միջանկյալ լարման արժեքներ ստանալու համար:
Աշխատանքային ցիկլը սահմանվում է ամբողջ թվային զարկերակում բարձր լարման տևողության տոկոսով: Այն կարելի է հաշվարկել ՝
% Պարտական ցիկլ = T միացված /T (ժամանակաշրջան) x 100
Եկեք ընդունենք խնդրահարույց հայտարարություն: Մենք պետք է ստեղծենք 50 Հց PWM ազդանշան, որն ունի 45% աշխատանքային ցիկլ:
Հաճախականություն = 50 Հց
Timeամանակահատված, T = T (միացված) + T (անջատված) = 1/50 = 0,02 վ = 20 ms
Աշխատանքի ցիկլ = 45%
Այսպիսով, լուծելով վերը տրված հավասարման համաձայն, մենք ստանում ենք
T (միացված) = 9 ms
T (անջատված) = 11 ms
Քայլ 2: AVR ժամաչափեր - PWM ռեժիմ
PWM- ի պատրաստման համար AVR- ն պարունակում է առանձին սարքավորում: Օգտագործելով սա ՝ պրոցեսորը հրահանգում է սարքավորմանը արտադրել որոշակի աշխատանքային ցիկլի PWM: ATmega328- ն ունի 6 PWM ելք, 2 -ը տեղակայված են ժամաչափի/հաշվիչի վրա (8 բիթ), 2 -ը տեղակայված են ժամաչափի/հաշվիչի վրա (16 բիթ), իսկ 2 -ը `ժամաչափի/հաշվիչի վրա (8 բիթ): Erամաչափը/Counter0- ը ATmega328- ի ամենապարզ PWM սարքն է: Erամաչափը/Counter0- ը կարող է աշխատել երեք ռեժիմով.
- Արագ PWM
- Փուլ և հաճախականություն ուղղված PWM
- Փուլը ուղղեց PWM- ը
այս ռեժիմներից յուրաքանչյուրը կարող է շրջված կամ ոչ շրջված լինել:
Initialize Timer0- ը PWM ռեժիմում
TCCR0A | = (1 << WGM00] | (1 << WGM01) - կարգավորել WGM: Արագ PWM
TCCR0A | = (1 << COM0A1] | (1 << COM0B1) - սահմանել համեմատել ելքային ռեժիմը A, B
TCCR0B | = (1 << CS02) - կարգավորեք ժամանակաչափ նախալեզվիչով = 256
Քայլ 3. Լույսի ինտենսիվության չափում - ADC & LDR:
Լույսի վրա կախված դիմադրողը (LDR) փոխարկիչ է, որը փոխում է իր դիմադրությունը, երբ լույսը ընկնում է նրա մակերևույթի վրա:
LDR- ները պատրաստված են կիսահաղորդչային նյութերից, որպեսզի նրանք ունենան իրենց լուսազգայուն հատկությունները: Այս LDR- ները կամ PHOTO RESISTORS- ն աշխատում են «Լուսանկարչական հաղորդունակություն» սկզբունքով: Այժմ այն, ինչ ասում է այս սկզբունքը, այն է, երբ լույսը ընկնում է LDR- ի մակերևույթին (այս դեպքում) տարրի հաղորդունակությունը մեծանում է, կամ այլ կերպ ասած LDR- ի դիմադրությունը նվազում է, երբ լույսը ընկնում է LDR- ի մակերեսին: LDR- ի համար դիմադրության նվազման այս հատկությունը ձեռք է բերվում, քանի որ դա մակերեսին օգտագործվող կիսահաղորդչային նյութի հատկություն է: LDR- ն շատ դեպքերում օգտագործվում է լույսի առկայությունը հայտնաբերելու կամ լույսի ինտենսիվությունը չափելու համար:
Արտաքին շարունակական տեղեկատվությունը (անալոգային տեղեկատվությունը) թվային/հաշվողական համակարգի փոխանցելու համար մենք պետք է դրանք վերածենք ամբողջական (թվային) արժեքների: Այս տեսակի փոխակերպումն իրականացվում է Անալոգային թվային փոխարկիչի (ADC) միջոցով: Անալոգային արժեքը թվային արժեքի վերածելու գործընթացը հայտնի է որպես անալոգային թվային փոխակերպում: Մի խոսքով, անալոգային ազդանշանները մեզ շրջապատող իրական աշխարհի ազդանշաններ են, ինչպես ձայնը և լույսը:
Թվային ազդանշանները թվային կամ թվային ձևաչափի անալոգային համարժեքներ են, որոնք լավ են ընկալվում թվային համակարգերի կողմից, ինչպիսիք են միկրոկառավարիչները: ADC- ն այնպիսի սարքավորում է, որը չափում է անալոգային ազդանշանները և արտադրում է նույն ազդանշանի թվային համարժեքը: AVR միկրոկոնտրոլերները ներկառուցված են ADC սարքավորում ՝ անալոգային լարումը ամբողջ թիվ դարձնելու համար: AVR- ը այն փոխակերպում է 0-ից 1023 միջակայքի 10-բիթանոց թվի:
Լույսի ինտենսիվությունը չափելու համար մենք օգտագործում ենք լարման մակարդակի անալոգային թվային փոխակերպում LDR- ով բաժանարար միացումից:
Նախնականացնել ADC- ն ՝
TADCSRA | = (1 << ADEN] - Միացնել ADC- ը
ADCSRA | = (1 << ADPS2) | (1 << ADPS1] | (1ADPS0) - կարգավորեք ADC նախալեզվիչ = 128
ADMUX = (1 << REFS0] - կարգավորել լարման հղում = AVCC; - կարգաբերեք Մուտքային ալիք = ADC0
Դիտեք տեսանյութը ՝ ADC AVR միկրոկառավարիչի մանրամասն նկարագրությամբ ՝ AVR միկրոկոնտրոլեր: Լույսի ինտենսիվության չափում: ADC & LDR
Քայլ 4. Controller DC Motor & Dual H-Bridge Motor Driver Module-L298N
Մենք օգտագործում ենք DC շարժիչների վարորդներ, քանի որ միկրոկոնտրոլերները ընդհանուր առմամբ չեն կարողանում հոսանք հաղորդել ոչ ավելի, քան 100 միլիամպ: Միկրոկոնտրոլերները խելացի են, բայց ոչ ուժեղ; այս մոդուլը մի քանի մկան կավելացնի միկրոկոնտրոլերներին `բարձր հզորության DC շարժիչներ վարելու համար: Այն կարող է միաժամանակ կառավարել 2 DC շարժիչ ՝ յուրաքանչյուրը մինչև 2 ամպեր կամ մեկ քայլաչափ: Մենք կարող ենք վերահսկել արագությունը PWM- ի միջոցով, ինչպես նաև շարժիչների պտտման ուղղությունը: Բացի այդ, այն օգտագործվում էր LED ժապավենի պայծառությունը քշելու համար:
Պին նկարագրություն
OUT1 և OUT2 նավահանգիստ, որը նախատեսված է DC շարժիչը միացնելու համար: OUT3 և OUT4 LED ժապավենը միացնելու համար:
ՀԷNA -ը և ENB- ն միացման կապեր են. Միացնելով ՀԷNA -ը բարձր (+5V) - ին, այն հնարավորություն է տալիս OUT1 և OUT2 նավահանգիստներին:
Եթե ՀԷNA -ի կապը միացնեք ցածրին (GND), այն անջատում է OUT1- ը և OUT2- ը: Նմանապես, ENB- ի և OUT3- ի և OUT4- ի համար:
IN1- ից IN4- ը մուտքային կապումներն են, որոնք միացված կլինեն AVR- ին:
Եթե IN1- բարձր (+5V), IN2- ցածր (GND), OUT1- ը դառնում է բարձր, իսկ OUT2- ը ՝ ցածր, այդպիսով մենք կարող ենք շարժիչ վարել:
Եթե IN3- բարձր (+5V), IN4- ցածր (GND), OUT4- ը դառնում է բարձր, իսկ OUT3- ը ՝ ցածր, ուստի LED ժապավենի լույսը միացված է:
Եթե ցանկանում եք շրջել շարժիչի պտտման ուղղությունը, պարզապես հակադարձեք IN1 և IN2 բևեռականությունը, նույնը ՝ IN3- ի և IN4- ի համար:
Կիրառելով PWM ազդանշանը ՀԷNA -ին և ENB- ին, կարող եք վերահսկել շարժիչների արագությունը երկու տարբեր ելքային պորտերի վրա:
Տախտակը կարող է անվանական ընդունել 7 Վ -ից մինչև 12 Վ լարման:
Թռչկոտողներ. Կան երեք ցատկող կապում; Թռիչք 1. Եթե շարժիչի կարիք ունեք ավելի քան 12 Վ լարման, դուք պետք է անջատեք Jumper 1 -ը և կիրառեք ցանկալի լարումը (առավելագույնը 35 Վ) 12 Վ տերմինալում: Բերեք ևս 5 Վ լարման և մուտքի 5 Վ տերմինալում: Այո, դուք պետք է մուտքագրեք 5V, եթե ձեզ անհրաժեշտ է կիրառել ավելի քան 12V (երբ Jumper 1- ը հեռացվում է):
5 Վ մուտքը նախատեսված է IC- ի պատշաճ աշխատանքի համար, քանի որ թռիչքի հեռացումը կակտիվացնի ներկառուցված 5 Վ կարգավորիչը և կպաշտպանի 12 Վ տերմինալից մուտքի ավելի բարձր լարումից:
5 Վ տերմինալը գործում է որպես ելք, եթե ձեր մատակարարումը 7 Վ -ից մինչև 12 Վ է, և գործում է որպես մուտք, եթե կիրառեք ավելի քան 12 Վ, և թռիչքը հանվում է:
Jumper 2 և Jumper 3. Եթե այս երկու թռիչքները հեռացնեք, ապա պետք է միկրոկառավարիչից մուտքագրեք միացման և անջատման ազդանշանը, օգտվողներից շատերը նախընտրում են հեռացնել երկու թռիչքը և ազդանշանը կիրառել միկրոկոնտրոլերից:
Եթե երկու թռիչքը պահեք, OUT1- ը OUT4- ին միշտ միացված կլինի: Հիշեք ՀԷNA -ի թռիչքը OUT1- ի և OUT2- ի համար: ENB jumper OUT3 և OUT4 համար:
Քայլ 5. Codeրագրի համար ծածկագիր գրելը C. Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ
AVR միկրոկառավարիչի կիրառումը C կոդի մեջ գրելն ու կառուցելը `օգտագործելով ինտեգրված զարգացման պլատֆորմը` Atmel Studio:
#ifndef F_CPU #սահմանել F_CPU 16000000UL // պատմող վերահսկիչ բյուրեղային հաճախականություն (16 ՄՀց AVR ATMega328P) #endif
#include // վերնագիր ՝ կապերի վրա տվյալների հոսքի վերահսկումը միացնելու համար: Սահմանում է կապում, նավահանգիստներ և այլն: #include // header `ծրագրում հետաձգման գործառույթը միացնելու համար
#define BUTTON1 2 // կոճակի անջատիչ, որը միացված է B պին 2-ին #սահմանել DEBOUNCE_TIME 25 // ժամանակ սպասել, մինչ «դե-ցատկում» կոճակը #սահմանել LOCK_INPUT_TIME 300 // կոճակը սեղմելուց հետո սպասելու ժամանակը
// Timer0, PWM Initialization void timer0_init () {// կարգավորեք ժմչփը OC0A, OC0B կապը միացման ռեժիմում և CTC ռեժիմում TCCR0A | = (1 << COM0A1] | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01]; // կարգավորել ժամանակաչափ նախալեզվիչով = 256 TCCR0B | = (1 << CS02); // սկզբնական հաշվիչ TCNT0 = 0; // սկզբնավորել համեմատել արժեքը OCR0A = 0; }
// ADC Initialization void ADC_init () {// Միացնել ADC- ն, ընտրանքի հաճախականությունը = osc_freq/128 սահմանել prescaler- ը առավելագույն արժեքի, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2] | (1 << ADPS1] | (1 << ADPS0];
ADMUX = (1 << REFS0); // Ընտրեք լարման հղում (AVCC)
// Button switch status unsigned char button_state () {
/ * կոճակը սեղմվում է, երբ BUTTON1 բիթը պարզ է */
եթե (! (PINB & (1 <
{
_delay_ms (DEBOUNCE_TIME);
եթե (! (PINB & (1 <
}
վերադարձ 0;
}
// Նավահանգիստների նախաստորագրում void 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; // Setածր դարձրեք PORTC- ի բոլոր կապումները, որն անջատում է այն: }
// Այս գործառույթը կարդում է անալոգային թվային փոխակերպման արժեքը: uint16_t get_LightLevel () {_delay_ms (10); // Սպասեք որոշ ժամանակ, մինչև ալիքը ստանա ընտրված ADCSRA | = (1 << ADSC); // Սկսեք ADC- ի փոխարկումը `ADSC բիթ սահմանելով: ADSC- ին գրեք 1
իսկ (ADCSRA & (1 << ADSC)); // Սպասեք փոխակերպման ավարտին
// ADSC- ն մինչ այդ նորից դառնում է 0, անընդհատ գործարկել հանգույցը _delay_ms (10); վերադարձ (ADC); // Վերադարձեք 10-բիթանոց արդյունքը
}
// Այս գործառույթը վերագրանցում է մի շարք մի տիրույթից (0-1023) մյուս տիրույթում (0-100): uint32_t քարտեզ (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {վերադարձ (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
int հիմնական (անվավեր)
{uint16_t i1 = 0;
port_init ();
timer0_init (); ADC_init (); // նախաստորագրում ADC
մինչդեռ (1)
{i1 = քարտեզ (get_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Սահմանել ելքային համեմատական գրանցամատյան A OCR0B = 100-i1; // Սահմանել ելքային համեմատական գրանցամատյան B (շրջված)
if (button_state ()) // Եթե կոճակը սեղմված է, միացրեք LED- ի վիճակը և հետաձգեք 300ms (#սահմանեք LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // միացնել PIN- ի ընթացիկ վիճակը PORTB ^= (1 << 1); // միացնել IN2- ի քորոցի ընթացիկ վիճակը: Հակադարձեք շարժիչի պտտման ուղղությունը
PORTB ^= (1 << 3); // IN3 ներդիրի ընթացիկ վիճակի փոփոխություն: PORTB ^= (1 << 4); // միացնել IN4- ի քորոցի ընթացիկ վիճակը: LED ժապավենը անջատված/միացված է: _delay_ms (LOCK_INPUT_TIME); }}; վերադարձ (0); }
Programրագրավորումն ավարտված է: Հաջորդը, նախագծի ծածկագիրը կառուցելը և կազմելը վեցանկյուն ֆայլում:
Բեռնել HEX ֆայլը միկրոկառավարիչի ֆլեշ հիշողության մեջ. Մուտքագրեք DOS հուշման պատուհանում հրամանը.
avrdude –c [ծրագրավորողի անունը] –p m328p –u –U flash: w: [ձեր վեցանկյուն ֆայլի անունը]
Իմ դեպքում դա հետևյալն է.
avrdude –c ISPProgv1 –p m328p –u –U ֆլեշ ՝ w: PWM.hex
Այս հրամանը գրում է վեցանկյուն ֆայլ միկրոկառավարիչի հիշողության մեջ: Դիտեք տեսանյութը ՝ միկրոկառավարիչի ֆլեշ հիշողության այրման մանրամասն նկարագրությամբ.
Լավ! Այժմ, միկրոկառավարիչը աշխատում է մեր ծրագրի ցուցումներին համապատասխան: Եկեք ստուգենք այն:
Քայլ 6: Էլեկտրական միացում
Միացրեք բաղադրիչները սխեմատիկ սխեմայի համաձայն:
Խորհուրդ ենք տալիս:
Լույսի ինտենսիվության չափում `օգտագործելով BH1715 և ազնվամորի Pi: 5 քայլ
Լույսի ինտենսիվության չափում ՝ օգտագործելով BH1715 և Raspberry Pi. Երեկ մենք աշխատում էինք LCD էկրաններով, և դրանց վրա աշխատելիս մենք հասկացանք լույսի ինտենսիվության հաշվարկի կարևորությունը: Լույսի ինտենսիվությունը ոչ միայն կարևոր է այս աշխարհի ֆիզիկական տիրույթում, այլև իր լավ ասված դերն ունի կենսաբանության մեջ
Լայնության և հաճախականության ռեակտիվ լույսի ձևավորում. 6 քայլ
Ամպլիտուդայի և հաճախականության ռեակտիվ լույսի ձևավորում. Այս նախագծի ծածկագիրը հղված է ՝ https: //www.instructables.com/id/Sound-Reactive-Li…https: i … Սարքավորման դիզայնը հղված էր ՝ https: //www.instructables.com/id/Music-Reactive-De… Փոփոխություններ ՝ 1. Ա
Արևի լույսի ինտենսիվության հետևիչ ՝ 3 քայլ
Sunlight Intensity Tracker: Կան բազմաթիվ նախագծեր, որոնք հիմնված են արևի ջերմության կամ լույսի վրա: Օրինակ ՝ մրգերի և բանջարեղենի չորացում: Այնուամենայնիվ, արևի լույսի ուժգնությունը միշտ չէ, որ կայուն է և փոխվում է ամբողջ օրվա ընթացքում: Այս նախագիծը փորձում է քարտեզագրել արևի
Լույսի ինտենսիվության լամպ W/ Arduino: 3 քայլ
Լույսի ինտենսիվության լամպ W/ Arduino. Այս նախագծում ես ուսումնասիրում եմ, թե ինչպես օգտագործել arduino- ն ՝ լամպ ստեղծելու համար, որը փոխվում է ՝ կախված օրվա ժամից: Օգտատիրոջ խնդրանքով, լամպը կփոխի իր պայծառությունը, երբ դրանք չափեն կամ նվազեցնեն LDR- լույսի հայտնաբերման ռեզիստորական դիմադրությունը
Պարզ (և կեղտոտ) զարկերակային լայնության մոդուլյացիա (PWM) 555 ժամաչափով ՝ 3 քայլ
Պարզ (և կեղտոտ) զարկերակային լայնության մոդուլյացիա (PWM) 555 ժմչփով. DC շարժիչի արագության կառավարման պարզ միացում (օդափոխիչի արագության կառավարում, լույս / լուսադիոդային լուսավորություն և այլն) ՝ օգտագործելով 555 ժմչփը: Նաև լավ ելակետ սկսնակների համար, ովքեր ցանկանում են ձեռք բերել իրենց ձեռքերը կեղտոտ են 555 ժամաչափի IC- ով: Ոմանք պնդում են, որ սա ամենա