Բովանդակություն:

Սուպեր արագ անալոգային լարումներ Arduino- ից. 10 քայլ (նկարներով)
Սուպեր արագ անալոգային լարումներ Arduino- ից. 10 քայլ (նկարներով)

Video: Սուպեր արագ անալոգային լարումներ Arduino- ից. 10 քայլ (նկարներով)

Video: Սուպեր արագ անալոգային լարումներ Arduino- ից. 10 քայլ (նկարներով)
Video: Big Tree Tech - SKR 3EZ - Basics 2024, Նոյեմբեր
Anonim
Image
Image

Այս Instructable- ը ցույց է տալիս, թե ինչպես կարելի է առաջացնել գերարագ անալոգային լարման փոփոխություններ Arduino- ից և պարզ դիմադրիչից և կոնդենսատորից: Մեկ ծրագիր, որտեղ դա օգտակար է, դա տատանումների գրաֆիկա ստեղծելն է: Կան մի քանի այլ նախագծեր, որոնք դա արել են: Johngineer- ը ցույց է տալիս պարզ տոնածառ ՝ օգտագործելով զարկերակի լայնության մոդուլյացիան (PWM): Մյուսները կատարելագործվել են այդ նախագծում ՝ օգտագործելով դիմադրության սանդուղք կամ օգտագործելով թվային-անալոգային փոխարկիչին հատկացված հատուկ չիպ:

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

Նախ, ես ձեզ կառաջնորդեմ միացում կառուցելու գործընթացում: Հետո ես կսովորեցնեմ ձեզ, թե ինչպես ավելացնել ձեր սեփական պատկերը: Վերջապես, ես կներկայացնեմ տեսությունը, թե ինչն է այն ավելի արագ դարձնում:

Եթե ձեզ դուր եկավ այս Instructable- ը, խնդրում ենք մտածել դրա օգտին քվեարկելու մասին::)

Քայլ 1: Շղթայի կառուցում

Շրջանի կառուցում
Շրջանի կառուցում

Շղթան կառուցելու համար ձեզ հարկավոր է հետևյալը.

ա) Atmel 16MHz ATmega328P- ի վրա հիմնված Arduino, օրինակ ՝ Arduino Uno կամ Arduino Nano:

բ) R արժեքի երկու ռեզիստոր, որը կազմում է առնվազն 150Ω:

գ) C արժեքի երկու կոնդենսատոր այնպես, որ C = 0.0015 / R, օրինակ.

  • R = 150Ω և C = 10μ
  • R = 1.5kΩ և C = 1 μ
  • R = 15kΩ և C = 100nF
  • R = 150kΩ և C = 10nF

Այս արժեքների ընտրության պատճառները երկակի են. Հիմնականում մենք ցանկանում ենք Arduino- ի կապում հոսանքը պահել 40 մԱ -ից առավելագույն անվանական հոսանքից ցածր: 150Ω արժեքի օգտագործումը սահմանափակում է հոսանքը մինչև 30 մԱ, երբ օգտագործվում է Arduino- ի 5 Վ լարման դեպքում: R- ի ավելի մեծ արժեքները կնվազեցնեն հոսանքը և, հետևաբար, ընդունելի են:

Երկրորդ սահմանափակումն այն է, որ մենք ցանկանում ենք մշտական պահել ժամանակը, որը R- ի և C- ի արտադրյալն է `հավասար մոտ 1.5ms: Timeրագրակազմը հատուկ կարգավորվել է այս ժամանակի հաստատունի համար: Թեև ծրագրաշարում հնարավոր է հարմարեցնել R և C արժեքները, կա նեղ շրջանակ, որի շուրջ այն կաշխատի, այնպես որ հնարավորինս ընտրեք բաղադրիչները առաջարկվող հարաբերակցությանը մոտ:

Ավելի հիմնավոր բացատրություն այն մասին, թե ինչու է RC կայունությունը կարևոր, կտրվի տեսության բաժնում, այն բանից հետո, երբ ես ձեզ ցույց տվեցի, թե ինչպես հավաքել ցուցադրման շրջանը:

Քայլ 2: Տեղադրեք օսլիոսկոպը

Օսկիլոսկոպի տեղադրում
Օսկիլոսկոպի տեղադրում

Ույցի համար պահանջվում է X/Y ռեժիմի վրա դրված օսլիլոսկոպ: Փորձարկման տողերը պետք է ամրացվեն, ինչպես ցույց է տրված սխեմատիկայում: Ձեր օսլիլոսկոպը կտարբերվի իմից, բայց ես կանցնեմ անհրաժեշտ քայլերով ՝ իմ միավորի վրա X/Y ռեժիմը կարգավորելու համար.

ա) Հորիզոնական մաքրումը կարգավորեք B ալիքով (X առանցքը) վերահսկելու համար:

բ) Օսլիլոսկոպը միացրեք երկակի ալիքի ռեժիմին:

գ) Երկու ալիքների վրա սահմանեք վոլտ/դիվը, որպեսզի այն կարողանա 0V- ից մինչև 5V լարումներ ցուցադրել: Ես իմը սահմանեցի 0.5V/div:

դ) Երկու ալիքներում միացման ռեժիմը դարձրեք DC:

ե) Կարգավորեք X- ի և Y- ի դիրքերը այնպես, որ կետը լինի էկրանի ներքևի ձախ անկյունում, երբ Arduino- ն անջատված է:

Քայլ 3: Ներբեռնեք և գործարկեք ծրագրակազմը

Image
Image

Ներբեռնեք ծրագրակազմը Arduino- ի արագ վեկտորային ցուցադրման համար: Theրագրակազմը լիցենզավորված է GNU Affero Public License v3- ով և կարող է ազատորեն օգտագործվել և փոփոխվել այդ լիցենզիայի պայմաններով:

Բացեք «fast-vector-display-arduino.ino» ֆայլը Arduino IDE- ում և վերբեռնեք ձեր Arduino- ում: Մի ակնթարթում դուք կտեսնեք «Շնորհավոր Ամանոր» անիմացիա ձեր տատանումների էկրանին:

Այս նախագիծը ես մշակեցի որպես անձնական հաքթոն Սուրբ Christmasնունդին նախորդող շաբաթներին, ուստի կա Սուրբ Christmasննդյան և Ամանորի թեմատիկ հաղորդագրություն, որը կարող եք տեսնել ՝ փոփոխելով ծածկագրի PATTERN փոփոխականը:

Քայլ 4: Ստեղծեք ձեր սեփական անհատական նկարը

Հասկացեք, թե ինչու է PWM- ն այդքան դանդաղ
Հասկացեք, թե ինչու է PWM- ն այդքան դանդաղ

Եթե ցանկանում եք ստեղծել ձեր սեփական նկարը, կարող եք տեղադրեք կետի կոորդինատները Arduino- ի ուրվագծի մեջ USER_PATTERN- ը սահմանող տողում:

Ես գտա, որ Inkscape- ը բավականին լավ գործիք է ՝ անհատական նկարչություն պատրաստելու համար.

  1. Ստեղծեք տեքստ ՝ օգտագործելով մեծ, համարձակ տառատեսակ, ինչպիսին է Impact- ը:
  2. Ընտրեք տեքստի օբյեկտը և «Ուղի» ընտրացանկից ընտրեք «Առարկա դեպի ճանապարհ»:
  3. Ընտրեք առանձին տառեր և համընկեք դրանք ՝ իրար միացված ձև ստեղծելու համար
  4. Ընտրեք «Միություն» «athանապարհ» ցանկից ՝ դրանք մեկ կորի մեջ համատեղելու համար:
  5. Եթե որևէ տառի մեջ անցքեր կան, կտրեք մի փոքր խազ ՝ ուղղանկյուն գործիքով գծելով ուղղանկյուն և հանեք այն եզրագծից ՝ օգտագործելով «Տարբերություն» գործիքը:
  6. Կրկնակի կտտացրեք ուղին ՝ հանգույցները ցուցադրելու համար:
  7. Ուղղանկյուն ընտրեք բոլոր հանգույցները և կտտացրեք «Ստեղծեք ընտրված հանգույցների անկյուն» գործիքը:
  8. Պահպանեք SVG ֆայլը:

Կարևորն այն է, որ ձեր նկարը պետք է ունենա մեկ փակ ճանապարհ և առանց անցքերի: Համոզվեք, որ ձեր դիզայնն ունի ավելի քան 130 միավոր:

Քայլ 5. Տեղադրեք կոորդինատները SVG ֆայլից Arduino IDE- ում

  1. Բացեք SVG ֆայլը և պատճենեք կոորդինատները: Դրանք կներդրվեն «ուղի» տարրի մեջ: Առաջին զույգ կոորդինատները կարող են անտեսվել. դրանք փոխարինել 0, 0 -ով:
  2. Տեղադրեք կոորդինատները Arduino- ի էսքիզի մեջ փակագծերում `«#սահմանել USER_PATTERN » - ից անմիջապես հետո:
  3. Փոխարինեք բոլոր բացատները ստորակետներով, հակառակ դեպքում կստանաք կազմման սխալ: «Փոխարինել և գտնել» գործիքը կարող է օգտակար լինել:
  4. Կազմեք և գործարկեք:
  5. Եթե խնդիրներ ունեք, դիտեք սերիական վահանակը ՝ սխալների համար: Մասնավորապես, դուք կտեսնեք հաղորդագրություններ, եթե ձեր օրինակը չափազանց շատ կետեր ունի ներքին բուֆերի համար: Նման դեպքերում պատկերը կցուցադրի չափազանց մեծ թարթում:

Քայլ 6: Հասկացեք, թե ինչու է PWM- ն այդքան դանդաղ

Սկսենք, եկեք վերանայենք կոնդենսատորի վարքագիծը, երբ այն լիցքավորվում է:

Կոնդենսատորը, որը միացված է լարման աղբյուրին Vcc, կբարձրացնի իր լարումը ըստ էքսպոնենցիալ կորի: Այս կորը ասիմպտոտիկ է, այսինքն ՝ դանդաղելու է, երբ մոտենում է նպատակային լարման: Բոլոր գործնական նպատակների համար լարումը «բավական մոտ է» 5 RC վայրկյանից հետո: RC- ն կոչվում է «ժամանակի հաստատուն»: Ինչպես տեսանք ավելի վաղ, դա ձեր շրջանի դիմադրության և կոնդենսատորի արժեքների արդյունք է: Խնդիրն այն է, որ 5 RC- ն բավականին երկար ժամանակ է գրաֆիկական ցուցադրման յուրաքանչյուր կետի թարմացման համար: Սա հանգեցնում է շատ թարթման:

Երբ մենք օգտագործում ենք զարկերակի լայնության մոդուլյացիան (PWM) կոնդենսատորը լիցքավորելու համար, մեզ ավելի լավ չէ: PWM- ով լարումը արագորեն անցնում է 0V- ից մինչև 5V: Գործնականում դա նշանակում է, որ մենք արագորեն փոխում ենք լիցքը կոնդենսատորի մեջ մղելու և այն մի փոքր նորից դուրս հանելու միջև: այս հրումն ու ձգումը ավելի շուտ նման է մարաթոն վազելուն ՝ մեծ քայլ առաջ կատարելով, այնուհետև մի փոքր հետընթաց: նորից ու նորից.

Երբ ամեն ինչ միջինացնում ես, PWM- ով օգտագործվող կոնդենսատորը լիցքավորելու պահվածքը ճիշտ նույնն է, ինչ կոնդենսատորը լիցքավորելու համար օգտագործել ես Vpwm- ի կայուն լարումը: Մեզ դեռ տևում է մոտ 5 RC վայրկյան, որպեսզի ցանկալի լարման «բավական մոտ» մոտենանք:

Քայլ 7: A- ից B, մի փոքր ավելի արագ:

Ստացեք a- ից B, մի քիչ ավելի արագ
Ստացեք a- ից B, մի քիչ ավելի արագ

Ենթադրենք, որ մենք ունենք կոնդենսատոր, որն արդեն լիցքավորված է մինչև Va: Ենթադրենք, մենք օգտագործում ենք analogWrite () -ը `b- ի նոր արժեքը դուրս գրելու համար: Ո՞րն է նվազագույն ժամանակը, որը դուք պետք է սպասեք Vb լարման հասնելուն:

Եթե կռահեցիք 5 RC վայրկյան, դա հիանալի է: 5 RC վայրկյան սպասելով, կոնդենսատորը լիցքավորվելու է գրեթե Vb- ով: Բայց եթե ուզում ենք, մենք իրականում կարող ենք մի փոքր ավելի քիչ սպասել:

Նայեք լիցքավորման կորին: Տեսնում եք, կոնդենսատորն արդեն Va- ում էր, երբ մենք սկսեցինք: Սա նշանակում է, որ մենք չպետք է սպասենք t_a ժամանակին: Մենք ստիպված կլինեինք միայն, եթե կոնդենսատորը լիցքավորեինք զրոյից:

Այսպիսով, այդ ժամանակը չսպասելով, մենք բարելավում ենք տեսնում: T_ab ժամանակը իրականում մի փոքր ավելի կարճ է, քան 5 RC:

Բայց սպասիր, մենք կարող ենք շատ ավելի լավ անել: Նայեք v_b- ի վերևում գտնվող այդ ամբողջ տարածությանը: Դա Vcc- ի, մեզ հասանելի առավելագույն լարման և Vb- ի տարբերությունն է, որին մենք մտադիր ենք հասնել: Կարո՞ղ եք տեսնել, թե ինչպես է այդ լրացուցիչ լարումը կարող օգնել մեզ շատ ավելի արագ հասնել այնտեղ, որտեղ ցանկանում ենք:

Քայլ 8: Անցեք a- ից B- ին ՝ տուրբո լիցքավորիչով:

Ստացեք a- ից B, Turbo լիցքավորիչով
Ստացեք a- ից B, Turbo լիցքավորիչով

Ճիշտ է. Թիրախային V_b լարման PWM- ի փոխարեն մենք այն պահում ենք կայուն Vcc- ում շատ շատ ավելի կարճ ժամանակահատվածում: Ես դա անվանում եմ Turbo Charger մեթոդ, և այն մեզ տանում է այնտեղ, որտեղ մենք իսկապես, իսկապես արագ ենք ուզում գնալ: Delayամանակի ուշացումից հետո (որը մենք պետք է հաշվենք), մենք հարվածում ենք արգելակներին ՝ անցնելով PWM- ի V_b- ում: Սա թույլ չի տալիս լարումը գերազանցել թիրախը:

Այս մեթոդով հնարավոր է փոխել կոնդենսատորի լարումը V_a- ից V_b ժամանակի մի հատվածում, քան պարզապես PWM- ի օգտագործումը: Ահա թե ինչպես եք տեղեր ստանում, երեխա:

Քայլ 9: Հասկացեք օրենսգիրքը

Հասկացեք օրենսգիրքը
Հասկացեք օրենսգիրքը

Նկարը արժե հազար բառ, այնպես որ դիագրամը ցույց է տալիս տվյալները և գործողությունները, որոնք կատարվում են ծածկագրում: Ձախից աջ.

  • Գրաֆիկական տվյալները պահվում են PROGMEM- ում (այսինքն `ֆլեշ հիշողություն)` որպես կետերի ցանկ:
  • Թարգմանության, մասշտաբավորման և պտտման գործողությունների ցանկացած համադրություն համակցված է փոխաբերական փոխակերպման մատրիցայի մեջ: Դա արվում է մեկ անգամ յուրաքանչյուր անիմացիոն շրջանակի սկզբում:
  • Կետերը կարդացվում են գրաֆիկական տվյալներից մեկ առ մեկ և յուրաքանչյուրը բազմապատկվում է պահված փոխակերպման մատրիցով:
  • Փոխակերպված կետերը սնվում են մկրատ ալգորիթմի միջոցով, որը կտրում է տեսանելի տարածքից դուրս գտնվող ցանկացած կետ:
  • Օգտագործելով RC հետաձգման որոնման աղյուսակը, կետերը վերածվում են շարժիչ լարման և ժամանակի հետաձգման: RC- ի հետաձգման որոնման աղյուսակը պահվում է EEPROM- ում և կարող է նորից օգտագործվել կոդի բազմաթիվ գործարկումների համար: Գործարկման ժամանակ RC որոնման աղյուսակը ստուգվում է ճշտության համար և սխալ արժեքները թարմացվում են: EEPROM- ի օգտագործումը խնայում է RAM- ի արժեքավոր հիշողությունը:
  • Շարժիչային լարումները և ուշացումները գրված են շրջանակի բուֆերում գտնվող ոչ ակտիվ շրջանակի վրա: Շրջանակի բուֆերը պարունակում է տարածք ակտիվ և ոչ ակտիվ շրջանակի համար: Երբ ամբողջական շրջանակը գրվում է, անգործուն շրջանակը դառնում է ակտիվ:
  • Interառայությունների ընդհատման ռեժիմը անընդհատ նորից նկարում է պատկերը `կարդալ լարման արժեքները և ուշացնել ակտիվ շրջանակի բուֆերից: Այդ արժեքների հիման վրա այն կարգավորում է ելքային կապանքների աշխատանքային ցիկլերը: Erամաչափ 1 -ն օգտագործվում է ժամանակի հետաձգումը մինչև մի քանի նանոսեկունդ ճշգրտություն չափելու համար, մինչդեռ ժամաչափ 2 -ը `քորոցների աշխատանքային ցիկլը վերահսկելու համար:
  • Լարման ամենամեծ փոփոխություն ունեցող քորոցը միշտ «տուրբո լիցքավորված» է `զրոյական կամ 100%ցիկլով, ապահովելով ամենաարագ լիցքավորման կամ լիցքաթափման ժամանակը: Լարման ավելի փոքր փոփոխություն ունեցող քորոցը շարժվում է աշխատանքային ցիկլով, որն ընտրված է առաջին քորոցի անցման ժամանակին համապատասխանելու համար. Այս անգամ համընկնումը կարևոր է ապահովելու համար, որ գծերը ուղիղ գծված են տատանումների վրա:

Քայլ 10. Մեծ արագությամբ գալիս է մեծ պատասխանատվություն:

Քանի որ այս մեթոդը շատ ավելի արագ է, քան PWM- ը, ինչո՞ւ analogWrite- ը () չի օգտագործում այն: Դե, քանի որ պարզապես PWM- ի օգտագործումը բավական լավ է ծրագրերի մեծ մասի համար և շատ ավելի ներողամիտ է: «Turbo Charger» մեթոդը, սակայն, պահանջում է մանրակրկիտ կոդավորում և հարմար է միայն կոնկրետ դեպքերի համար.

  1. Այն չափազանց զգայուն է ժամանակի նկատմամբ: Երբ մենք հասնում ենք թիրախային լարման մակարդակին, շարժիչ քորոցը պետք է անմիջապես անցնել սովորական PWM ռեժիմի `նպատակային լարման գերազանցումից խուսափելու համար:
  2. Այն պահանջում է RC հաստատունի իմացություն, ուստի այդ արժեքները պետք է նախապես մուտքագրվեն: Սխալ արժեքներով, ժամանակը սխալ կլինի, և լարումները `սխալ: Սովորական PWM- ով երաշխիք կա, որ որոշ ժամանակ անց կկարգավորվեք ճիշտ լարման վրա, նույնիսկ եթե RC հաստատունն անհայտ է:
  3. Կոնդենսատորը լիցքավորելու ճշգրիտ ժամանակային միջակայքի հաշվարկը պահանջում է լոգարիթմական հավասարումներ, որոնք չափազանց դանդաղ են Arduino- ում իրական ժամանակում հաշվարկի համար: Դրանք պետք է նախապես հաշվարկվեն յուրաքանչյուր անիմացիոն շրջանակից առաջ և պահվեն ինչ-որ տեղ հիշողության մեջ:
  4. Այս մեթոդով զբաղվող ծրագրերը պետք է հակադրվեն այն փաստին, որ ուշացումները շատ ոչ գծային են (դրանք, ըստ էության, ցուցադրական են): Vcc- ի կամ GND- ի մոտ թիրախային լարումները կպահանջվեն ավելի մեծ կարգերի հասնելու համար, քան միջին կետի մոտ գտնվող լարումները:

Այս սահմանափակումները հաղթահարելու համար իմ վեկտորային գրաֆիկական ծածկագիրը կատարում է հետևյալը.

  1. Այն օգտագործում է erամաչափ 1 -ը 16 կՀց հաճախականությամբ և ընդհատման ծառայության ռեժիմ ՝ ելքի ճշգրիտ մանիպուլյացիայի և ժամանակի համար:
  2. Այն պահանջում է օգտագործել RC ժամանակի հաստատունի որոշակի արժեք ՝ սահմանափակելով կոնդենսատորի և ռեզիստորի արժեքների ընտրությունը:
  3. Այն պահում է հիշողության բուֆերում անիմացիոն շրջանակի բոլոր կետերի ժամանակային ուշացումները: Սա նշանակում է, որ ռեժիմը, որը հաշվարկում է ժամանակի ուշացումները, շատ ավելի դանդաղ է, քան ընդհատվող ծառայության ռեժիմը, որը թարմացնում է ելքային կապերը: Givenանկացած տվյալ շրջանակ կարող է նկարվել մի քանի տասնյակ անգամ, մինչև հաջորդ շրջանակի հետաձգումների նոր փաթեթը պատրաստ լինի օգտագործման համար:
  4. Հիշողության բուֆերի օգտագործումը սահմանափակում է կետերի քանակը, որոնք կարելի է գծել մեկ շրջանակի համար: Ես օգտագործում եմ տիեզերական արդյունավետ կոդավորում `առկա RAM- ից առավելագույնը ստանալու համար, սակայն այն դեռ սահմանափակված է մոտ 150 միավորով: Հարյուրավոր կետերից այն կողմ, այնուամենայնիվ, էկրանը կսկսեր թարթել, ուստի դա վիճելի կետ է:

Խորհուրդ ենք տալիս: