Სარჩევი:

მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით: 3 ნაბიჯი
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით: 3 ნაბიჯი

ვიდეო: მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით: 3 ნაბიჯი

ვიდეო: მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით: 3 ნაბიჯი
ვიდეო: ESP8266 Diesel Injector Purging Station - PWM NodeMCU pump flow Control (Subtittled) 2024, ნოემბერი
Anonim
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით
მაღალი რეზოლუციის PWM სიგნალის გენერაცია RC სერვისებისთვის STM32 მოწყობილობებით

ამჟამად, მე ვაშენებ RC გადამცემს/მიმღებს SX1280 RF ჩიპის საფუძველზე. პროექტის ერთ -ერთი მიზანი ის არის, რომ მე მინდა 12 ბიტიანი სერვო რეზოლუცია ჩხირებიდან ყველა სერვისამდე. ნაწილობრივ იმიტომ, რომ თანამედროვე ციფრულ სერვისს აქვს 12 ბიტიანი გარჩევადობა, მეორე მხრივ, მაღალი დონის გადამცემი მაინც იყენებს 12 ბიტს. მე ვიკვლევდი როგორ შემიძლია გენერირება მაღალი რეზოლუციის PWM სიგნალების STM32 მოწყობილობებზე. პროტოტიპისთვის ამ მომენტში ვიყენებ შავ აბებს (STM32F103C8T8).

ნაბიჯი 1: ნაწილების სია

ტექნიკა

  • ნებისმიერი განვითარების დაფა STM32F103 (ლურჯი აბი, შავი აბი და ა.
  • USB დენის ბანკი, როგორც კვების წყარო
  • STM32 პროგრამისტი (Segger j-links, ST-LINK/V2, ან უბრალოდ st-link კლონი)

პროგრამული უზრუნველყოფა

  • STM32CubeMX
  • Atollic TrueSTUDIO STM32– ისთვის
  • პროექტის წყარო github– დან

ნაბიჯი 2: აშკარა გამოსავალი

აშკარა გამოსავალი
აშკარა გამოსავალი
აშკარა გამოსავალი
აშკარა გამოსავალი
აშკარა გამოსავალი
აშკარა გამოსავალი

ალბათ ყველაზე მარტივი გამოსავალია გამოიყენოთ ერთ – ერთი ტაიმერი, რომელსაც შეუძლია PWM სიგნალების გენერირება, მაგალითად TIM1-3 STM32F103– ზე. თანამედროვე ციფრული servo– სთვის ჩარჩოს სიჩქარე შეიძლება შემცირდეს 5 ms– მდე, მაგრამ ძველი ანალოგის servo– სთვის ეს უნდა იყოს 20 ms ან 50 Hz. ასე რომ, როგორც ყველაზე უარესი სცენარი, მოდით შევქმნათ ეს. 72 MHz საათის და 16 ბიტიანი ტაიმერის მრიცხველის გარჩევადობით, ჩვენ უნდა დავაყენოთ ტაიმერის წინასწარგამრიცხველი მინიმუმ 23 -ზე, რომ დაფაროს 20 ms კადრის სიხშირე. მე ავირჩიე 24, რადგან შემდეგ 20 ms უნდა მრიცხველი ზუსტად 60000 -ზე დავაყენო. თქვენ შეგიძლიათ ნახოთ CubeMX კონფიგურაცია და გენერირებული 1 და 1.5 ms PWM სიგნალები ეკრანის სურათებში. სამწუხაროდ, 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 ამ ტაიმერებში. საბედნიეროდ, თქვენ შეგიძლიათ კასკადი გაუკეთოთ ამ ქრონომეტრებს ტექნიკაში, ასე რომ ამ სინქრონიზაციას პროცესორის ჩარევა არ სჭირდება და ისიც ძალიან ზუსტია, jitter არის ps რეგიონში. თქვენ შეგიძლიათ ნახოთ CubeMX დაყენება ეკრანის ანაბეჭდებზე.

როგორც ხედავთ, მე შევარჩიე 3 როგორც პრესკალარი, ასე რომ, 2 ms– ისთვის მე უნდა დავაყენო 48000 ტაიმერის მრიცხველში. ეს გვაძლევს 24000 1 ms– ზე, რაც უფრო მეტია რაც ჩვენ გვჭირდება 14 ბიტიანი გარჩევადობისთვის. ტადაააა…

გთხოვთ გადახედოთ oscilloscope ეკრანის ანაბეჭდს შესავალში საბოლოო შედეგისთვის. არხი 3 (მეწამული) არის მთავარი ტაიმერის შეწყვეტა, რაც გამოიწვევს ხსნარებს ერთი პულსის გამომუშავებისათვის. არხი 1 და 4 (ყვითელი და მწვანე სხივი) არის PWM სიგნალები, რომლებიც წარმოიქმნება სხვადასხვა ქრონომეტრების მიერ. გაითვალისწინეთ, რომ ისინი სინქრონიზებულია, მაგრამ ისინი სინქრონიზებულია უკანა კიდეებზე, ეს არის PWM რეჟიმის 2. გამო. ეს არ არის პრობლემა, რადგან კონკრეტული სერვისის PWM მაჩვენებელი ჯერ კიდევ სწორია.

ამ გადაწყვეტილების სხვა სარგებელი ის არის, რომ კადრების სიხშირის შეცვლა ნიშნავს მხოლოდ TIM1 პერიოდის პერიოდის შეცვლას. თანამედროვე ციფრული სერვისებისთვის შეგიძლიათ დაიწიოთ თუნდაც 200-300 ჰერცამდე, მაგრამ გთხოვთ გაეცნოთ სერვოს სახელმძღვანელოს, თუ გსურთ სრულყოფილი მორგება.

გირჩევთ: