Բովանդակություն:
- Քայլ 1: Օգտագործեք գործ. Հարթեցրեք ADC չափումները
- Քայլ 2: Օգտագործեք պատյան. Խոսափողի ազդանշանի DC բաղադրիչի չափում
- Քայլ 3: Հաշվարկ
- Քայլ 4: Կոդ
- Քայլ 5: Լրացուցիչ
- Քայլ 6: Եզրակացություն
Video: Միջին վազքը ձեր միկրոկառավարիչների նախագծերի համար `6 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Այս ուսումնական ձեռնարկում ես կբացատրեմ, թե ինչ է միջին վազքը և ինչու պետք է հոգ տանել դրա մասին, ինչպես նաև ցույց կտամ, թե ինչպես այն պետք է կիրառվի առավելագույն հաշվարկային արդյունավետության համար (մի անհանգստացեք բարդության համար, դա շատ պարզ է հասկանալը և ես տրամադրեք հեշտ օգտագործման գրադարան նաև ձեր arduino նախագծերի համար:)
Միջին վազքը, որը սովորաբար կոչվում է նաև շարժական միջին, շարժվող միջին կամ ընթացիկ միջին, տերմին է, որն օգտագործվում է տվյալների շարքերում վերջին N արժեքների միջին արժեքը նկարագրելու համար: Այն կարող է հաշվարկվել նույնքան սովորական միջին հաշվով, կամ կարող եք օգտագործել հնարք, որպեսզի այն նվազագույն ազդեցություն ունենա ձեր ծածկագրի աշխատանքի վրա:
Քայլ 1: Օգտագործեք գործ. Հարթեցրեք ADC չափումները
Arduino- ն ունի արժանապատիվ 10 բիթանոց ADC ՝ շատ քիչ աղմուկով: Սենսորի արժեքը չափելիս, ինչպիսիք են պոտենցիոմետրը, ֆոտոռեզիստորը կամ բարձր աղմուկի այլ բաղադրիչները, դժվար է վստահել, որ չափումը ճիշտ է:
Լուծումներից մեկն այն է, որ բազմակի չափումներ կատարեք ամեն անգամ, երբ ցանկանում եք կարդալ ձեր տվիչը և չափել դրանք միջինում: Որոշ դեպքերում սա կենսունակ լուծում է, բայց ոչ միշտ: Եթե ցանկանում եք ADC- ն կարդալ վայրկյանում 1000 անգամ, ապա պետք է ունենաք 10 000, եթե միջինում կատարեք 10 չափումներ: Հաշվարկի ժամանակի հսկայական վատնում:
Իմ առաջարկած լուծումն է չափումներ կատարել վայրկյանում 1000 անգամ, ամեն անգամ թարմացնել ընթացիկ միջին արժեքը և օգտագործել այն որպես ընթացիկ արժեք: Այս մեթոդը որոշակի ուշացում է ներկայացնում, բայց նվազեցնում է ձեր դիմումի հաշվարկային բարդությունը ՝ ձեզ ավելի շատ ժամանակ տրամադրելով լրացուցիչ մշակման համար:
Վերոնշյալ նկարում ես օգտագործել եմ վերջին 32 չափումների միջին վազքը: Դուք կտեսնեք, որ այս մեթոդը 100% անթափանց չէ, այլ զգալիորեն բարելավում է ճշգրտությունը (դա ամեն անգամ ավելի վատ չէ, քան միջինում 32 նմուշ յուրաքանչյուր անգամ): Եթե ցանկանայիք յուրաքանչյուր անգամ հաշվարկել միջինը 32 չափում, ապա Arduino UNO- ում միայն չափումների համար կպահանջվեր ավելի քան 0.25 ms:
Քայլ 2: Օգտագործեք պատյան. Խոսափողի ազդանշանի DC բաղադրիչի չափում
Arduino- ն կարող է չափել լարումները 0 -ից մինչև Vcc (սովորաբար 5 Վ) միջև: Աուդիո ազդանշանն ամբողջությամբ AC է, և եթե ցանկանում եք այն չափել միկրոկոնտրոլերի վրա, ապա պետք է կողմնակալ լինեք 1/2 Vcc- ի սահմաններում: Arduino UNO նախագծում դա կնշանակեր մոտավորապես 2,5 Վ (DC) + աուդիո ազդանշան (AC): 10 բիթանոց ADC և 5 Վ սնուցման աղբյուր օգտագործելիս 2,5 Վ կողմնակալությունը պետք է հավասար լինի 512 -ի: Այսպիսով, ազդանշանի AC արժեք ստանալու համար 512 -ը պետք է հանվի ADC չափումից և վերջ, ճիշտ է:
Իդեալական աշխարհում դա ճիշտ կլիներ: Unfortunatelyավոք, իրական կյանքը ավելի բարդ է, և մեր ազդանշանային կողմնակալությունը հակված է շեղվելու: Շատ տարածված է 50 Հց աղմուկը (60 Հց, եթե բնակվում եք ԱՄՆ -ում) էլեկտրական ցանցից: Սովորաբար ամեն ինչ այնքան էլ խնդրահարույց չէ, բայց լավ է իմանալ, որ այն գոյություն ունի: Առավել խնդրահարույց է բաղադրիչների տաքացումից գծային շեղումը: Սկզբից դուք ուշադիր սահմանում եք DC օֆսեթ ուղղումը, և այն կամաց -կամաց հեռանում է, քանի որ ձեր դիմումն աշխատում է:
Ես այս խնդիրը կնկարագրեմ (երաժշտական) ծեծող դետեկտորով: Դուք կարգավորում եք ձեր կողմնակալության հեռացումը, և հարվածները պարզ են (նկար 2): Որոշ ժամանակ անց DC- ի կողմնակալության շարժումները և հարվածները հազիվ նկատելի են միկրոկառավարիչի համար (նկար 3): Beեծի հայտնաբերման ալգորիթմը հետագայում մանրամասն ուսումնասիրվելու է, քանի որ այն գերազանցում է այս հոդվածի շրջանակը:
Բարեբախտաբար, կա մի եղանակ, որն անընդհատ հաշվարկում է ձայնի DC օֆսեթը: Surpriseարմանալի չէ, որ միջին ուսուցման այս թեման, որը լուծելի է, լուծում է տալիս:
Մենք գիտենք, որ ցանկացած AC ազդանշանի միջին արժեքը 0. է: Օգտագործելով այս գիտելիքը, մենք կարող ենք հանել AC+DC ազդանշանի միջին արժեքը, դա DC- ի կողմնակալությունն է: Այն հեռացնելու համար մենք կարող ենք վերցնել վերջին մի քանի արժեքների ընթացիկ միջին արժեքը և այն հանել ADC- ի ընթացիկ ընթերցումից: Նկատի ունեցեք, որ դուք պետք է օգտագործեք բավականաչափ երկար միջին վազք: Աուդիոյի համար պետք է բավարարի վայրկյանի տասներորդը (նմուշների քանակը կախված է ձեր նմուշի արագությունից), բայց իմացեք, որ ավելի երկար միջիններն ավելի լավ են աշխատում: Առաջին նկարում դուք կարող եք տեսնել DC- ի իրական կողմնակալության հաշվարկման օրինակ `64 տարրերով` 1 կՀց նմուշի արագությամբ (իմ առաջարկածից պակաս, բայց այն դեռ աշխատում է):
Քայլ 3: Հաշվարկ
Դուք կարող եք պատկերացնել միջին վազքը որպես բժշկի սպասասրահում գտնվող մարդկանց միջին քաշը: Բժիշկն ավարտում է մեկ հիվանդի հետազոտումը, և միևնույն ժամանակ նորը մտնում է սպասասրահ:
Սպասասրահում սպասող բոլոր հիվանդների միջին քաշը պարզելու համար բուժքույրը կարող էր յուրաքանչյուր հիվանդին հարցնել իրենց քաշի մասին, ավելացնել այդ թվերը և բաժանել հիվանդների թվի վրա: Ամեն անգամ, երբ բժիշկը ընդունում էր նոր հիվանդի, բուժքույրը կրկնում էր ամբողջ գործընթացը:
Դուք կարող եք մտածել. «Սա այնքան էլ արդյունավետ չի հնչում… Դա անելու ավելի լավ միջոց պետք է լինի»: Եվ դուք ճիշտ կլինեիք:
Այս գործընթացը օպտիմալացնելու համար բուժքույրը կարող է պահել հիվանդների ներկա խմբի ընդհանուր քաշի ռեկորդ: Երբ բժիշկը կանչում է նոր հիվանդին, բուժքույրը հարցնում էր նրա քաշի մասին և այն հանում էր ընդհանուր խմբից և բաց էր թողնում նրան: Այնուհետև բուժքույրը հարցնում էր հիվանդին, ով պարզապես սպասասրահ էր մտնում իր քաշի մասին և ավելացնում այն ընդհանուրին: Յուրաքանչյուր հերթափոխից հետո հիվանդների միջին քաշը կլինի քաշերի գումարը `բաժանված հիվանդների թվի վրա (այո, նույնը, ինչ նախկինում, բայց այժմ բուժքույրը միայն երկու հոգու էր հարցնում նրանց քաշի մասին` բոլորի փոխարեն): Ես հասկանում եմ, որ այս պարբերությունը կարող էր մի փոքր շփոթեցնող լինել, ուստի լրացուցիչ պարզության համար խնդրում ենք տե՛ս վերևի նկարը (կամ հարցեր տվեք մեկնաբանություններում):
Բայց նույնիսկ եթե վերջին պարբերությունը շփոթեցնող չեք գտել, կարող եք ունենալ հարցեր, ինչպիսիք են ՝ սկզբում ինչ պետք է լինի կուտակիչում, ինչպե՞ս կարող եմ այն, ինչ հենց նոր կարդացի, տեղադրել իրական C կոդի մեջ: Դրան կանդրադառնա հաջորդ քայլին, որտեղ դուք նույնպես կստանաք իմ սկզբնական կոդը:
Քայլ 4: Կոդ
Միջին հոսքը հաշվարկելու համար նախ անհրաժեշտ է վերջին N արժեքները պահելու միջոց: Դուք կարող եք ունենալ N տարրերով զանգված և ամբողջ բովանդակությունը մեկ տեղ տեղափոխելիս ամեն անգամ, երբ տարր եք ավելացնում (խնդրում եմ դա մի արեք), կամ կարող եք վերագրել մեկ հին տարր և ցուցիչը հարմարեցնել հաջորդ տարրին, որը դուրս է նետվելու (խնդրում ենք դա անել:)
Կուտակիչը պետք է նախաստորագրվի 0 -ի, նույնը վերաբերում է հետաձգման գծի բոլոր տարրերին: Այլ դեպքում ձեր միջին վազքը միշտ սխալ կլինի: Դուք կտեսնեք, որ delayLine_init- ը հոգում է հետաձգման գծի նախաստորագրումը, դուք ինքներդ պետք է հոգաք կուտակիչի մասին:
Հետաձգման գծին տարր ավելացնելը նույնքան հեշտ է, որքան նոր տարրերի ինդեքսը 1 -ով նվազեցնելը `համոզվելով, որ այն չի մատնանշում ուշացման գծի զանգվածի կողմը: 0 -ի ինդեքսը նվազելուց հետո այն կշրջվի մինչև 255 (քանի որ դա 8 բիթանոց անստորագիր ամբողջ թիվ է): Մոդուլո (%) օպերատորը հետաձգման տողերի զանգվածի չափով կապահովի, որ ինդեքսը մատնանշի վավեր տարր:
Միջին հաշվարկը պետք է հեշտությամբ ընկալվի, եթե հետևեիք նախորդ քայլի իմ անալոգիային: Կուտակիչից հանեք ամենահին տարրը, ավելացրեք նորագույն արժեքը կուտակիչին, նորագույն արժեքը մղեք հետաձգման գծին, վերադարձեք կուտակիչը բաժանված տարրերի քանակով:
Հեշտ է, այնպես չէ՞:
Խնդրում ենք ազատ զգալ փորձարկել կից կոդը ՝ ավելի լավ հասկանալու համար, թե ինչպես է այս ամենը գործում: Այսպես, ներկայումս arduino- ն կարդում է անալոգային արժեքը A0 անալոգի վրա և տպում է «[ADC արժեքը], [միջին վազքը]» սերիական նավահանգստի վրա 115200 բաուդ արագությամբ: Եթե դուք բացեք arduino- ի սերիական գծապատկերը բաուդ ճիշտ արագության վրա, կտեսնեք երկու տող ՝ ADC արժեքը (կապույտ) և հարթեցված արժեքը (կարմիր):
Քայլ 5: Լրացուցիչ
Կան մի քանի բաներ, որոնք պարտադիր չէ, որ դուք իմանաք, որպեսզի ձեր նախագծում աշխատող միջին ցուցանիշը օգտագործելու համար իմանալը վնաս չի պատճառի:
ուշացում. ես կսկսեմ խոսել այս քայլի նկարազարդման մասին: Դուք կնկատեք, որ ավելի շատ տարրերի միջին գործարկումը բերում է ավելի մեծ ուշացման: Եթե արժեքի փոփոխման ձեր արձագանքման ժամանակը կրիտիկական է, գուցե ցանկանաք օգտագործել ավելի կարճ միջին վազք կամ բարձրացնել ընտրանքի արագությունը (չափել ավելի հաճախ):
Առաջ անցնել.
նախաստորագրում. Երբ ես խոսում էի կուտակիչի և հետաձգման տարրերի սկզբնավորման մասին, ես ասացի, որ դրանք բոլորը պետք է նախաստորագրել 0 -ի: Այլապես կարող եք սկզբնավորել հետաձգման գիծը այն ամենի համար, ինչ ձեզ դուր է գալիս, բայց կուտակիչը պետք է սկսի որպես հետաձգման գծի նորագույն N տարրերի գումար (որտեղ N ձեր ընթացիկ միջին արժեքի տարրերն են): Եթե կուտակիչը սկսվի որպես ցանկացած այլ արժեք, հաշվարկված միջին արժեքը սխալ կլինի `կամ շատ ցածր, կամ շատ բարձր, միշտ նույն չափով (ենթադրելով նույն սկզբնական պայմանները): Ես առաջարկում եմ փորձել իմանալ, թե ինչու է դա այդպես ՝ օգտագործելով «գրիչ և թուղթ մոդելավորում»:
կուտակիչի չափը. Դուք նաև պետք է նշեք, որ կուտակիչը պետք է լինի բավական մեծ, որպեսզի պահի բոլոր տարրերի գումարը հետաձգման տողում, եթե դրանք բոլորը դրական կամ բացասական առավելագույն են: Գործնականում դա նշանակում է, որ կուտակիչը պետք է լինի տվյալների մեկ տեսակ ավելի մեծ, քան գծի ուշացման տարրերը և ստորագրված լինի, եթե գծի հետաձգման տարրերը ստորագրվեն:
հնարք. Երկար ուշացման տողերը շատ հիշողություն են զբաղեցնում: Դա կարող է արագ խնդիր դառնալ: Եթե հիշողությունը շատ սահմանափակ է և ձեզ շատ չի հետաքրքրում ճշգրտությունը, կարող եք մոտավոր վազքի միջին մոտավորությունը բաց թողնել ամբողջությամբ և փոխարենը դա անել. Կուտակիչից հանեք 1/N * կուտակիչը և ավելացրեք նոր արժեք (8 երկարատև միջին հաշվով. կուտակիչ = կուտակիչ * 7/8 + newValue): Այս մեթոդը սխալ արդյունք է տալիս, բայց դա միջին արժեքի հաշվարկման արժանապատիվ մեթոդ է, երբ հիշողությունը թուլանում է:
լեզվաբանություն. «միջին միջին/միջին», որպես կանոն, օգտագործվում է իրական ժամանակի միջինացմանը անդրադառնալիս, մինչդեռ «շարժվող միջին/միջին» սովորաբար նշանակում է, որ ալգորիթմը գործում է ստատիկ տվյալների հավաքածուի վրա, ինչպիսիք են Excel աղյուսակը:
Քայլ 6: Եզրակացություն
Հուսով եմ, որ այս ուսուցանվողը բավական հեշտ էր հասկանալ, և որ այն կօգնի ձեզ ձեր հետագա ծրագրերում: Խնդրում ենք ազատ զգալ տեղադրել հարցեր ստորև բերված մեկնաբանություններում, եթե որևէ անհասկանալի բան կա:
Խորհուրդ ենք տալիս:
Ձեր նախագծերի համար ծիածանագույն լուսադիոդներ. 4 քայլ (նկարներով)
Ainիածան լուսադիոդներ ձեր նախագծերի համար. Բարև բոլորին: Ես օգտագործում եմ այս լուսադիոդները շատ դեկորատիվ նախագծերի համար, և արդյունքը միշտ զարմանալի է, ուստի ես ուզում եմ կիսվել իմ փորձով ձեզ հետ, տեսա, որ շատերը գնում են RGB LED շերտի կարգավորիչներ և օգտագործում են 3 կամ 5 նման սարքեր: գույնի փոփոխման ռեժիմը պարզապես
Միկրոկառավարիչների օգտագործումը `հեռավոր ոռոգման համակարգը գործարկելու և վերահսկելու համար. 4 քայլ
Հեռավոր ոռոգման համակարգի շահագործման և վերահսկման համար միկրոկոնտրոլերների օգտագործումը. Ֆերմերները և ջերմոցային տնտեսվարողները `էժան ավտոմատ ոռոգման համակարգի համար: Այս նախագծում մենք ինտեգրում ենք հողի խոնավության էլեկտրոնային տվիչ միկրոկոնտրոլերի հետ, որպեսզի բույսերը ինքնաբերաբար ոռոգվեն, երբ հողը չափազանց չորանա ՝ առանց մարդու միջամտության
Պարտիզանական մարտկոցի սեփականատեր ձեր սեղանի համար / Arduino նախագծերի համար. 3 քայլ
Պարտիզանական մարտկոցի սեփականատեր ձեր սեղանի համար / Arduino նախագծերի համար. Ես փորձեր եմ կատարում DS1307- ի և Arduino- ի հետ, ես պետք է միջոց գտնեի CR1212 մարտկոցը միացնելու համար: Ես մտա իմ միակցիչների տուփի մեջ և չգտա ոչինչ, որը կարող էր օգնել: Հետո, eur ê ka! Ես ունեի լուսավորություն
ICSP- ի իմացություն PIC միկրոկառավարիչների համար. 4 քայլ (նկարներով)
ICSP հասկանալ PIC միկրոկոնտրոլերների համար. Միկրոկոնտրոլերների ծրագրավորումը դժվար չէ: Buildingրագրավորողի կառուցումը հիանալի առաջին էլեկտրոնիկայի նախագիծ է դարձնում: Այս հրահանգի նպատակն է բացատրել միկրոչիպի PIC- ներով օգտագործվող պարզ «միացման սերիական ծրագրավորման» մեթոդը
Ձեր նախագծերի համար ** ԱՆՎԱՐ ԱՌԱԱՐԿ ** ցուցակ. 8 քայլ
Ձեր ծրագրերի համար ** ԱՆՎԱՐ ԱՌԱՆՁՆԱՆԵԼՈ **ԹՅԱՆ ** ցուցակ: Սա այն վայրերի ցանկն է, որտեղից կարող եք ԱՆՎԱՐ նյութեր ձեռք բերել, կարող եք դրանք օգտագործել ձեր նախագծերում … Այն անվճար է, և իրերը առաքվում են անվճար: Այսպիսով, այո, հուսով եմ, որ ձեզ դուր կգա: ցանկը: Լավ, ես կազմակերպեցի այս դասավանդումը ըստ ապրանքի տեսակի: Պատվիրեք ինձ, եթե ունեք կայք