PWM. Նմանեցնելով անալոգային քորոցներին ձեր Arduino տախտակի հետ

PWM ազդանշաններ

Թվային և անալոգային քորոցներով, որոնք կարող եք օգտագործել ձեր Arduino տախտակի վրա, կարող եք ստանալ կամ ուղարկել էլեկտրական ազդանշաններ ՝ ձեր էլեկտրոնային նախագծերից տվյալները վերահսկելու կամ ստանալու համար: Բացի այդ, այս տեսակի ափսեի մեջ կան ևս շատ հետաքրքիր ազդակներ, և դրանք հենց դրանք են PWM, որը կարող է ընդօրինակել անալոգային ազդանշանը ՝ առանց իրականում անալոգային լինելու Այսինքն ՝ դրանք թվային քորոցներ են, որոնք կարող են գործել անալոգային ազդանշանի նման (ոչ նույն) ձևով:

Այս տեսակի ազդանշանները շատ գործնական են այն դեպքում, երբ դուք ոչ միայն ցանկանում եք օգտագործել թվային ԲԱՐՁՐ և OWԱՐ ազդանշաններ, այսինքն ՝ 1 կամ 0, ON և OFF, բայց ուզում եք ավելի առաջ գնալ և նկարագրել մի փոքր ավելի բարդ ազդանշաններ: Օրինակ ՝ հնարավոր է փոփոխել ա – ի արագությունը շարժիչային DC, կամ լույսի լույսի ինտենսիվությունը ՝ էլեկտրասրահի համար և այլն:

Անալոգային vs թվային համակարգ

Անալոգային ընդդեմ թվային ազդանշանի

Էլեկտրոնային շղթաները կարելի է բաժանել երկու մեծ ընտանիքի կամ կատեգորիայի. թվային և անալոգային, Թվային էլեկտրոնիկայի մասին խոսելիս մենք օգտագործում ենք դիսկրետ արժեքներով մեծություններ, այսինքն `երկուական համակարգ, որը ներկայացված է ցածր կամ բարձր լարման էլեկտրական ազդանշաններով` այդ բիթերի վիճակը մեկնաբանելու համար: Մյուս կողմից, երբ խոսքը վերաբերում է անալոգային շղթային, օգտագործվում են շարունակական արժեքներով մեծություններ:

Թվային համակարգերի շրջանակներում կարելի է գտնել իր հերթին դրանք համակցական տիպի և հաջորդական տիպի, Այսինքն ՝ առաջիններն են, որոնցում համակարգի ելքը կախված է միայն մուտքերի վիճակից: Մյուս կողմից, հաջորդականներում ներառվում են հիշողության տարրեր, և ելքը կախված կլինի մուտքերի ընթացիկ վիճակից և պահված նախորդ վիճակից:

Անալոգների դեպքում այս երկու մեծ խմբերը կամ տարբերակները չկան, քանի որ այստեղ դրանք շարունակական ազդակներ են, որոնք միշտ կախված կլինեն ազդանշանը ներկայիս համակարգը: Օրինակ ՝ բարձրախոսում դրան մատակարարվող ազդանշանը կախված է այն ձայնից, որը ցանկանում եք վերարտադրել: Նույնը `խոսափողի հետ, որը կստեղծի անալոգային ազդանշան` կախված այն ստացող ձայնից: Անշուշտ, դուք դա տեսել եք նաև բազմաթիվ այլ սենսորների հետ, որոնք մենք նկարագրել ենք այս բլոգում և գործում են անալոգային ազդանշաններով (և, հետևաբար, պետք է ստեղծվեր բանաձև, որպեսզի հետագայում արժեքները հնարավոր լինի հաշվարկել կամ պայմանավորել Arduino IDE էսքիզներում ) ...

Մեկի և մյուսի այս հատկությունները ոմանց ստիպում են ունենալ իրենցը առավելություններն ու թերությունները, ինչպես միշտ է գրեթե ամեն ինչում: Օրինակ ՝ թվայինները սովորաբար ավելի էժան, արագ, ավելի դյուրին են մշակվում, տեղեկատվությունը կարող է ավելի հեշտությամբ պահվել, ունեն ավելի մեծ ճշգրտություն, կարող են ծրագրավորվել, դրանք այնքան էլ խոցելի չեն աղմուկի ազդեցության համար և այլն: Բայց ճիշտ է նաև, որ անալոգերով կարելի է գործել ավելի բարդ ազդանշաններով:

By ejemplo, Թվային տիպի Hall ազդեցության սենսորը կարող է հայտնաբերել միայն մոտակա մագնիսական դաշտի առկայությունը կամ բացակայությունը: Փոխարենը, Hall- ի էֆեկտի անալոգային սենսորը կարող է դա անել, ինչպես նաև որոշել նշված մագնիսական դաշտի խտությունը անալոգային ազդանշանի շնորհիվ, որը նա առաջացնում է իր ելքում: Իմանալով, թե ինչպես լավ մեկնաբանել մեծ կամ փոքր լարման այդ ազդանշանը, հեշտությամբ կարող եք իմանալ այդ մեծությունը: Բնության մեծության մեջ դուք ունեք նաև այլ օրինակներ, որոնք կարող եք քանակական չափել անալոգային համակարգով, ինչպիսիք են ջերմաստիճանը, ժամանակը, ճնշումը, հեռավորությունը, ձայնը և այլն:

Անալոգային ընդդեմ թվային ազդանշանի

Ասածս ա անալոգային ազդանշան Դա կլինի լարում կամ էլեկտրական հոսանք, որը տատանվում է ժամանակի հետ և անընդհատ: Եթե ​​գծագրվի, անալոգային ազդանշանը կլինի մեկ հաճախականության սինուս:

Ինչպես թվային ազդանշան, լարում է, որը ժամանակի հետ համեմատաբար փոխվում է աստիճանաբար: Այսինքն, եթե այն ներկայացված է գրաֆիկի վրա, դա կլինի քայլ ազդանշան, որը չի տատանվում անընդհատ, բայց փոփոխվում է քայլերով կամ դիսկրետ աճերով:

Դուք պետք է իմանաք, որ կան անալոգային ազդանշանից թվայինին անցնելու սխեմաներ կամ հակառակը: Սրանք փոխարկիչներ դրանք հայտնի են որպես DAC (թվայինից անալոգային փոխարկիչ) և ADC (անալոգայինից թվային փոխարկիչ): Եվ դրանք շատ տարածված են շատ սարքերում, որոնք մենք այսօր օգտագործում ենք, ինչպիսիք են հեռուստացույցը, համակարգիչները և այլն: Դրանց միջոցով դուք կարող եք վերափոխել այս սարքավորումների կողմից օգտագործվող թվային ազդանշանները էլեկտրոնային մակարդակի ՝ այլ ծայրամասերի կամ անալոգային մասերի հետ աշխատելու համար:

By ejemplo, ձայնային քարտի հետ աշխատող անալոգային ազդանշաններով բարձրախոս կամ խոսափող կամ թվային գրաֆիկական քարտեր, որոնք ունեին հայտնի RAMDAC չիպ, անալոգային մոնիտորի նավահանգիստների համար ... Arduino- ում այս տեսակի փոխարկիչները օգտագործվում են նաև բազմաթիվ նախագծերի համար, ինչպես կտեսնենք ...

Ի՞նչ է PWM- ը:

գրաֆիկական հերթափոխի ցիկլ

Չնայած որ PWM (զարկերակի լայնության մոդուլյացիա) կամ զարկերակի լայնության մոդուլացում, ունի թվային հիմք, դրա ազդանշանի ձևը հիշեցնում է որոշակիորեն «քառակուսի» անալոգային ազդանշան: Այն թույլ է տալիս թվային իմպուլսների միջոցով փոխել ազդանշանը անալոգային համակարգի նմանակման համար, ինչպես ես արդեն մեկնաբանել եմ նախկինում: Փաստորեն, եթե նայեք անունին, դա արդեն ձեզ տալիս է ցուցանակներ այն մասին, թե ինչ է նա անում ՝ թվային իմպուլսների լայնության միջով:

Սա ձեռնտու է դրան Arduino քանի որ կան բազմաթիվ ավտոմատիզմներ կամ էլեկտրոնային բաղադրիչներ, որոնք կարող եք ավելացնել ձեր նախագծերին և այլն ի վիճակի չեն իրական անալոգային ազդանշան տրամադրել, բայց նրանք օգտագործում են այս PWM- ը գործելու համար: Ոչ էլ կարող են օգտագործել դիսկրետիզացված անալոգային ազդանշան, այսինքն, որը անցնում է լարման ցատկերի ՝ թվայինին նմանվելու համար: Այն, ինչ նրանք կարող են անել, օգտագործել թվային ելքը -Vcc կամ թվային տիպի Vcc այս յուրօրինակ ազդանշանն առաջացնելու համար ...

Հետևաբար, PWM- ը մի տեսակ «հնարք» է, որով Arduino- ն և այլ համակարգեր կարող են համագործակցել այս տեսակի ազդանշանների հետ, որոնք դրանք բավականին անալոգային չեն, ոչ էլ սովորական թվային, Դա հնարավոր դարձնելու համար նրանք ակտիվ պահում են թվային թողարկումը որոշակի ժամանակ կամ անջատված ՝ կախված ամեն պահի հետաքրքրությունից: Սա հեռու է թվային ժամացույցից կամ երկուական կոդի ազդանշանից, որի իմպուլսներն ունեն նույն լայնությունը:

Arduino- ի հետ ձեր նախագծերում դուք կարող եք ստուգել այս տեսակի PWM ազդանշանները, որոնցում ժամանակի ընթացքում պահպանվում է իմպուլսի ազդակների կայուն հաճախականությունը, բայց այս իմպուլսների լայնությունը բազմազան է, Փաստորեն, այն կոչվում է Հերթապահական ցիկլ, երբ ազդանշանը բարձր է պահվում ցիկլի ընդհանուր մասի նկատմամբ: Հետեւաբար, հերթապահության ցիկլը տրված է% -ով:

Հիշեք, որ PWM- ում դուք չեք աշխատում, ինչպես անալոգային ազդանշանում, մի քանի լարման արժեքների միջև, և այն տատանվում է նրանց միջև: PWM- ի դեպքում դա քառակուսի ազդանշան է թվային ոճով և որի առավելագույն արժեքը Vcc է, Օրինակ, եթե աշխատում եք 3 Վ էլեկտրամատակարարմամբ, կարող եք տալ 3 Վ կամ 0 Վ իմպուլս, բայց ոչ 1 Վ կամ որևէ այլ միջանկյալ արժեք, ինչպես դա տեղի էր ունենում իրական անալոգում: Այդ դեպքում տատանվողը զարկերակի լայնությունն է, որը մենք կարող ենք 30% պահել այդ բարձր Vcc արժեքի վրա, կամ 60% ՝ դրան ավելի մեծ էներգիա տալու համար և այլն:

Բայց զգույշ եղեք, քանի որ եթե սարքը աջակցում է Vcc սահմանաչափին և PWM- ով գերազանցվում է, այն կարող է վնասվել: Այսպիսով, միշտ անհրաժեշտ կլինի հարգել արտադրողների կողմից տրամադրված տվյալների թերթերի արժեքները: Բացի այդ, որոշ սարքերում, ինչպիսիք են DC շարժիչները, ռելեներ, էլեկտրամագնիսներ և այլն, լարման հեռացումը Հերթապահ ցիկլից հետո կարող է նշանակել, որ ինդուկտիվ բեռները կարող են վնաս պատճառել: Այդ պատճառով է պաշտպանություններ ժամանակին

PWM Arduino- ի վրա

Arduino I2C ավտոբուս

Այժմ, երբ դուք գիտեք, թե ինչպես է այն աշխատում, եկեք տեսնենք Arduino աշխարհում PWM- ի կոնկրետ դեպքը ...

PWM ՝ pinout Arduino- ի վրա

Arduino տախտակների վրա կարող եք գտնել մի քանի քորոց, որոնք իրականացնում են ապարատային PWM: Դուք կարող եք դրանք նույնականացնել PCB- ում, քանի որ դրանք ունեն ա խորհրդանիշ ~ (փոքր գլուխ) քորոցի համարակալման հետ միասին: Դա կարող էր կատարվել նաև Arduino ծածկագրի ծրագրային ապահովման միջոցով, բայց դա միկրոհսկիչը ծանրաբեռնում էր աշխատանքով, ինչ-որ անհեթեթություն, երբ դա կարելի է անել բնիկ և ապարատային համակարգով:

  • Arduino UNO, Mini և Nano- Դուք ունեք 6 8-բիթանոց PWM ելք 3-րդ, 5-րդ, 6-րդ, 9-րդ, 10-րդ և 11-րդ քորոցների վրա, որոնք ունենալու են այդ ~ համարի դիմաց:
  • Արդուինո Մեգա- Այս ամենահզոր Arduino տախտակի վրա դուք ունեք 15 8-բիթանոց PWM ելք: Նրանք գտնվում են 2-ից 13-ի և 44-ի 46-ի քորոցների վրա:
  • Arduino DueԱյս դեպքում կա 13 8-բիթանոց PWM ելք: Դրանք գտնվում են 2-ից 13-ի քորոցների վրա, գումարած երկու այլ անալոգային ելքեր, որոնք դիսկրետիզացված են DAC- ի կողմից `12-բիթանոց լուծմամբ:

Երբ խոսում եք 8-բիթանոց կամ 12-բիթանոց բանաձևի մասին և այլն, այս տեսակի PWM ելքներում, դուք նկատի ունեք ձեր ունեցած մանևրի տարածքը: Հետ 8 բիթն ունի 256 մակարդակ Միջև որի կարող ես տարբերվել, և 12 բիթը բարձրանում է մինչև 4096 մակարդակ:

Կառավարում ժամանակաչափերով

Ապարատային PWM կառավարման համար, Arduino կօգտագործի ժամանակաչափերը դրա համար Յուրաքանչյուր ներկա ժմչփ կարող է սպասարկել 2 կամ 3 PWM ելք: Յուրաքանչյուր ելքի համեմատության գրանցամատյանը լրացնում է այս համակարգը, որպեսզի երբ ժամանակը հասնի գրանցողի արժեքին, արդյունքի վիճակը կամ արժեքը փոխվի `այդ հերթապահ ցիկլերը դադարեցնելու համար: Չնայած նույն erմչփի կողմից վերահսկվող երկու ելք կա, երկուսն էլ կարող են ունենալ տարբեր հերթապահ ցիկլեր, չնայած դրանք կիսում են նույն հաճախականությունը:

Pամաչափերի դեպքում, որոնք կապված են յուրաքանչյուր PWM քորոցի հետ, դրանք կտարբերվեն կախված Arduino տախտակի տեսակից որ ունես.

  • Arduino UNO, Mini և Nano:
    • Erմչփ 0 - 5 և 6
    • Erմչփ 1 - 9 և 10
    • Erմչփ 2 - 3 և 11
  • Արդուինո Մեգա:
    • Erմչփ 0 - 4 և 13
    • Erմչփ 1 - 11 և 12
    • Erմչփ 2 - 9 և 10
    • Erմչփ 3 - 2, 3 և 5
    • Erմչփ 4 - 6, 7 և 8
    • Erմչփ 5 - 44, 45 և 46

Նախանշված գրանցամատյանը ժամանակը կբաժանի ամբողջ թվով, իսկ theմչփն անում է մնացածը ՝ PWM- ի հետ կապված յուրաքանչյուր ելքը վերահսկելու համար: Ռեեստրի արժեքի փոփոխումը կարող է փոխել հաճախականությունը: Ի հաճախականություններ Դրանք նույնպես տարբեր կլինեն ՝ կախված ժմչփից և ափսեից.

  • Arduino UNO, Mini և Nano:
    • Timer0. Թույլ է տալիս նախանշել 1, 8, 64, 256 և 1024: Հաճախականությունը 62.5 Khz է:
    • Erմչփ 1. 1, 8, 64, 256 և 1024 նախադրվածներով: 31.25 Khz հաճախականությամբ:
    • Timer2. Հավասար է Timer1- ին, միայն այն բացի նախորդներից ավելացնում է 32 և 128-ի նախաքաղցում:
  • Արդուինո Մեգա:
    • Erամաչափ 0, 1, 2 ՝ նույնը, ինչ վերևում:
    • Erմչփ 3, 4 և 5` 31.25 կՀց հաճախականությամբ և նախանշված `1, 8, 64, 256 և 1024:

Անհամատեղելիություն և բախումներ

Timամանակաչափը արդյունքների հետ կապված միայն այդ գործառույթի համար չէ, օգտագործվում է նաև ուրիշների կողմից: Հետևաբար, եթե դրանք օգտագործվում են մեկ այլ գործառույթի կողմից, դուք պետք է ընտրություն կատարեք մեկի կամ մյուսի միջև, դուք չեք կարող երկուսն էլ միաժամանակ օգտագործել: Օրինակ ՝ սրանք այն անհամատեղելիություններն են, որոնք կարող եք գտնել ձեր նախագծերում.

  • Սերվոյի գրադարանԵրբ օգտագործում եք servo շարժիչներ, ժամանակաչափերն օգտագործվում են ինտենսիվորեն, ինչը կարող է հանգեցնել բախումների: Մասնավորապես օգտագործեք Timer1- ը UNO- ի, Nano- ի և Mini- ի համար, այսինքն `դուք չեք կարող օգտագործել 9-րդ և 10-րդ քորոցները, մինչ օգտագործում եք ուրվագիծ այդ գրադարանի հետ: Mega- ում դա կախված կլինի սպասարկողների քանակից ...
  • SPIԵթե ​​Arduino տախտակի վրա օգտագործվում է SPI հաղորդակցություն, MOSI գործառույթի համար օգտագործվում է 11-րդ քորոցը: Այդ պատճառով այդ PWM քորոցը հնարավոր չէ օգտագործել:
  • Տոն: այս գործառույթը գործարկում է Timer2- ը: Այսպիսով, եթե այն օգտագործվում է, դուք անօգուտ եք դարձնում 3-րդ և 11-րդ քորոցները (կամ Mega- ի համար 9-ը և 10-ը):

Գործնական թեստ Arduino- ի հետ

Arduino PWM սխեմատիկ LED- ով

Եթե ​​ցանկանում եք տեղում տեսնել, թե ինչպես է PWM- ն աշխատում Arduino- ի վրա, ապա ամենալավ բանը, որ կարող եք անել, միացնել վոլտմետր կամ մուլտիմետր (գործառույթով ՝ լարման չափման համար) PWM քորոցի, որը դուք ընտրել եք օգտագործել, և Arduino տախտակի աղացած քորոցը կամ GND- ը: Այս կերպ, չափիչ սարքի էկրանին դուք կկարողանաք տեսնել, թե ինչպես է լարումը փոխվում թվային ելքով, PWM այս հնարքի շնորհիվ:

Դուք կարող եք փոխարինել վոլտմետրը / մուլտիմետրը LED- ով, որպեսզի տեսնեք, թե ինչպես է լույսի ուժգնությունը տատանվում `DC շարժիչով կամ ցանկացած այլ ցանկալի տարրով: Ես դա պարզեցրել եմ դիագրամում Fritzing- ով LED- ով առանց ավելորդի, բայց իմացեք, որ այն կարող է նաև ներկայացնել մուլտիմետրի հուշումներ ...

Եթե ​​դուք օգտագործում եք LED, հիշեք դիմադրությունը կաթոդի և GND- ի մոտ:

դեպի աղբյուրի կոդը Arduino տախտակի միկրոհսկիչին վերահսկելու համար, որպեսզի ամեն ինչ աշխատի, դուք պետք է այն տեղադրեք Arduino IDE- ի մեջ (այս դեպքում ես օգտագործել եմ PWM 6-րդ փին Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
Ես ձեզ խորհուրդ եմ տալիս խաղալ արժեքների հետ և տեսնել արդյունքները լույսի կամ վոլտմետրի վրա, Րագիրը կարող է 0-ից 9 արժեքներ ստանալ, այնպես որ դուք կտեսնեք, թե ինչպես է ամեն ինչ փոխվում: Լրացուցիչ տեղեկությունների համար խորհուրդ եմ տալիս ձեզ arduino դասընթացը որ ունենք անվճար ներբեռնման մեջ ...

Հոդվածի բովանդակությունը հավատարիմ է մեր սկզբունքներին խմբագրական էթիկա, Սխալի մասին հաղորդելու համար կտտացրեք այստեղ.

Մեկնաբանություն, թող ձերը

Թողեք ձեր մեկնաբանությունը

Ձեր էլ. Փոստի հասցեն չի հրապարակվելու: Պահանջվող դաշտերը նշված են *

*

*

  1. Տվյալների համար պատասխանատու ՝ Միգել Անխել Գատոն
  2. Տվյալների նպատակը. Վերահսկել SPAM, մեկնաբանությունների կառավարում:
  3. Օրինականություն. Ձեր համաձայնությունը
  4. Տվյալների հաղորդագրություն. Տվյալները չեն փոխանցվի երրորդ անձանց, բացառությամբ իրավական պարտավորության:
  5. Տվյալների պահպանում. Տվյալների շտեմարան, որը հյուրընկալվում է Occentus Networks (EU) - ում
  6. Իրավունքներ. Timeանկացած պահի կարող եք սահմանափակել, վերականգնել և ջնջել ձեր տեղեկատվությունը:

  1.   jose ասաց

    Բարև բարի օր Առաջին հերթին ուզում եմ շնորհակալություն հայտնել ձեզ նորագույնի այս բացատրությանը նվիրված ժամանակի համար:
    Ես կցանկանայի ձեզ հարցում ներկայացնել: Ես փորձում եմ գործարկել կոդը Arguino Mega- ի համար proteus 8 էմուլատորի վրա: Վոլտմետրը միացնում եմ 6-րդ պինին, Proteus- ը միացված է սերիական պորտին, բայց չգիտեմ `ինչպես կամ ինչով փոխել, որպեսզի տարբեր լարման դուրս գան: Ես ստիպված էի փոքր փոփոխություններ կատարել օրենսգրքում `այն կազմելու համար: Շատ շնորհակալ եմ ձեր օգնության համար