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

Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով `3 քայլ
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով `3 քայլ

Video: Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով `3 քայլ

Video: Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով `3 քայլ
Video: ESP32 Tutorial 14 - Playing Custom Music Note Using SunFounder ESP32 IoT Learnig kit 2024, Նոյեմբեր
Anonim
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով
Բարձր լուծման PWM ազդանշանի ստեղծում RC սերվերների համար STM32 սարքերով

Ներկայումս ես կառուցում եմ RC հաղորդիչ/ընդունիչ ՝ հիմնված SX1280 RF չիպի վրա: Projectրագրի նպատակներից մեկն այն է, որ ես ուզում եմ 12 բիթանոց servo լուծում ձողիկներից մինչև սերվոներ: Մասամբ այն պատճառով, որ ժամանակակից թվային սերվերն ունեն 12 բիթ թույլատրություն, երկրորդ հերթին բարձրակարգ հաղորդիչն ամեն դեպքում օգտագործում է 12 բիթ: Ես ուսումնասիրում էի, թե ինչպես կարող եմ բարձր լուծման PWM ազդանշաններ առաջացնել STM32 սարքերում: Այս պահին ես օգտագործում եմ սև հաբ (STM32F103C8T8) նախատիպի համար:

Քայլ 1: Մասերի ցուցակ

Սարքավորումներ

  • STանկացած STM32F103 զարգացման տախտակ (կապույտ դեղահատ, սև դեղահատ և այլն)
  • USB սնուցման բանկ ՝ որպես սնուցման աղբյուր
  • STM32 ծրագրավորող (Segger j-links, ST-LINK/V2 կամ պարզապես st-link clone)

Ծրագրային ապահովում

  • STM32CubeMX
  • Atollic TrueSTUDIO STM32- ի համար
  • Նախագծի աղբյուր github- ից

Քայլ 2: Ակնհայտ լուծում

Ակնհայտ լուծում
Ակնհայտ լուծում
Ակնհայտ լուծում
Ակնհայտ լուծում
Ակնհայտ լուծում
Ակնհայտ լուծում

Հավանաբար, ամենահեշտ լուծումն այն ժամաչափերից մեկի օգտագործումն է, որը կարող է առաջացնել PWM ազդանշաններ, ինչպես TIM1-3- ը STM32F103- ի վրա: Digitalամանակակից թվային servo- ի համար շրջանակի արագությունը կարող է իջնել մինչև 5 ms կամ ավելի, բայց հին անալոգային servo- ի համար այն պետք է լինի 20 ms կամ 50 Hz: Այսպիսով, որպես ամենավատ սցենար, եկեք դա ստեղծենք: 72 ՄՀց ժամացույցով և 16 բիթ ժամաչափի հաշվիչի լուծաչափով մենք պետք է ժմչփի նախաչափը դնենք նվազագույն 23 -ի վրա, որպեսզի ծածկենք 20 մկս շրջանակի արագությունը: Ես ընտրեցի 24 -ը, որովհետև այն 20 ms- ի համար պետք է հաշվիչը ճշգրտորեն դնի 60000 -ի: Սքրինշոթերում կարող եք տեսնել CubeMX կարգավորումը և առաջացած 1 և 1.5 ms PWM ազդանշանները: Unfortunatelyավոք, 1 ms- ի համար ժամաչափի հաշվիչը պետք է սահմանվի 3000 -ի, ինչը մեզ կտա ընդամենը 11 բիթ թույլատրելիություն: Վատ չէ, բայց նպատակը 12 բիթ էր, ուստի եկեք այլ բան փորձենք:

Իհարկե, եթե ես ընտրեի միկրոհսկիչ 32 բիթ ժամաչափով, ինչպես STM32L476- ը, այս լուծումը կարող է շատ ավելի բարձր լինել, և խնդիրը կլուծվեր:

Բայց այստեղ ես կցանկանայի առաջարկել այլընտրանքային լուծում, որն էլ ավելի կբարձրացնի բանաձևը նույնիսկ STM32F103- ի վրա:

Քայլ 3. Բարձր լուծման ժամաչափերի կասկադավորում

Կասկադային ժամաչափեր ավելի բարձր լուծման համար
Կասկադային ժամաչափեր ավելի բարձր լուծման համար
Կասկադային ժամաչափեր ավելի բարձր լուծման համար
Կասկադային ժամաչափեր ավելի բարձր լուծման համար
Կասկադային ժամաչափեր ավելի բարձր լուծման համար
Կասկադային ժամաչափեր ավելի բարձր լուծման համար

Նախորդ լուծման հիմնական խնդիրն այն է, որ շրջանակի արագությունը (20 ms) համեմատաբար բարձր է իրականում առաջացած PWM ազդանշանի համեմատ (1 -ից 2 ms), այնպես որ մենք վատնում ենք որոշ գնահատված բիթեր մնացած 18 ms- ի համար, երբ սպասում ենք: հաջորդ շրջանակը: Սա կարող է լուծվել ժմչփերի կասկադի միջոցով `համաժամացման համար օգտագործելով ժամաչափի հղման հնարավորությունը:

Գաղափարն այն է, որ ես կօգտագործեմ TIM1- ը որպես վարպետ ՝ շրջանակի արագությունը (20 ms) և TIM2, TIM3- ը ՝ PWM ազդանշաններին որպես ստրուկներ հաղթահարելու համար: Երբ վարպետը գործարկում է ստրուկներին, նրանք միայն մեկ զարկերակային ռեժիմում առաջացնում են PWM ազդանշան: Հետևաբար, ես պետք է ծածկեմ միայն 2 ms այդ ժամանակաչափերում: Բարեբախտաբար, դուք կարող եք կասկադ անել այդ ժամաչափերը ապարատային համակարգում, այնպես որ այս համաժամացումը պրոցեսորի կողմից որևէ միջամտության կարիք չունի, և դա նույնպես շատ ճշգրիտ է, ցնցումը գտնվում է ps տարածաշրջանում: Սքրինշոթերում կարող եք տեսնել CubeMX- ի կարգավորումը:

Ինչպես տեսնում եք, ես ընտրեցի 3 -ը որպես նախալարային, այնպես որ 2 ms- ի համար ես պետք է 48000 -ը դնեմ ժամաչափի հաշվիչում: Սա մեզ տալիս է 24000 1 ms- ի համար, ինչը իրականում ավելի շատ է, ինչ մեզ պետք է 14 բիթ լուծման համար: Թադաաա…

Վերջնական արդյունքի համար խնդրում ենք դիտել oscilloscope- ի սքրինշոթները ներածության մեջ: 3 -րդ ալիքը (մանուշակագույն) հիմնական ժամանակաչափի ընդհատումն է, որը կհանգեցնի սալերի մեկ զարկերակի առաջացմանը: 1 -ին և 4 -րդ ալիքները (դեղին և կանաչ ճառագայթ) տարբեր ժամանակաչափերի կողմից առաջացած իրական PWM ազդանշաններն են: Ուշադրություն դարձրեք, որ դրանք համաժամեցված են, բայց սինքրոնացված են հետևի եզրերին, այսինքն `PWM ռեժիմի 2 -ի պատճառով: Սա խնդիր չէ, քանի որ որոշակի սերվոյի PWM փոխարժեքը դեռ ճիշտ է:

Այս լուծման մյուս առավելությունն այն է, որ շրջանակային դրույքաչափը փոխելը կնշանակի փոխել միայն TIM1- ի ժամանակահատվածը: Digitalամանակակից թվային սերվերի համար կարող եք իջնել նույնիսկ մինչև 200-300 Հց, բայց խնդրում ենք խորհրդակցել սերվոյի ձեռնարկին, եթե ցանկանում եք կատարելագործել:

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