Სარჩევი:

როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით .: 4 ნაბიჯი
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით .: 4 ნაბიჯი

ვიდეო: როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით .: 4 ნაბიჯი

ვიდეო: როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით .: 4 ნაბიჯი
ვიდეო: ეკჰარტ ტოლე - "აწმყოს ძალა" - აუდიო წიგნი - Audible Read Along 2024, ივლისი
Anonim
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით
როგორ გავზომოთ მაღალი სიხშირის და სამუშაო ციკლი, ერთდროულად, მიკროკონტროლერის გამოყენებით

მე ვიცი რას ფიქრობთ: "ჰა? არსებობს უამრავი ინსტრუქცია იმის შესახებ, თუ როგორ გამოიყენოთ მიკროკონტროლერები სიგნალის სიხშირის გასაზომად. Yawn." დაელოდეთ, ამაში არის სიახლე: მე აღვწერ სიხშირეების გაზომვის მეთოდს ბევრად უფრო მაღალი ვიდრე მიკროკონტროლერს (MCU) შეუძლია გაუძლოს და სიგნალის სამუშაო ციკლი - ყველა ერთდროულად!

მოწყობილობის სიხშირის დიაპაზონი მოიცავს ~ 43 ჰერციდან ~ 450 კჰც -მდე, ხოლო სამუშაო ციკლი 1% -დან 99% -მდეა.

ნება მომეცით აგიხსნათ ნაწილი "გაუძლებს": MCU ზომავს კვადრატული ტალღის სიგნალის პერიოდს, T, ორ მომდევნო გარდამავალ მოვლენას შორის დროის თვალყურის დევნებით. მაგალითად, დაბალიდან მაღალი ძაბვის ხტომა მის ერთ I/O ქინძისთავზე. ის ამას აკეთებს საკუთარი შიდა საათის იმპულსების რაოდენობის დათვლით. გულუბრყვილოდ, გაზომილი სიხშირეების ზედა ზღვარი უნდა ემორჩილებოდეს ნიკვისტ-შენონის შერჩევის თეორემას; ანუ, უხეშად უდრის MCU– ს საათის სიხშირის ნახევარს. სინამდვილეში ლიმიტი გაცილებით დაბალია, რადგან MCU– მ უნდა შეასრულოს კოდი, რომ შეაფერხოს, ცვლადები შეინახოს, გააკეთოს არითმეტიკული ოპერაციები, აჩვენოს შედეგები და ა.შ. დაახლოებით 106. მაშასადამე, გაზომვადი სიხშირის დიაპაზონის ზედა ზღვარი ამ შემთხვევაში იქნება 48, 000 /212 /2 = 226.4 კჰც.

მიუხედავად იმისა, რომ MCU ზომავს სიგნალის პერიოდს, მას ასევე შეუძლია განსაზღვროს მისი პულსის სიგანე, P: სიგნალის ძაბვის დრო რჩება მაღალი. სხვა სიტყვებით რომ ვთქვათ, დრო დაბალიდან მაღალ და მაღალ დაბალ გადასვლებს შორის. სიგნალის სამუშაო ციკლი განისაზღვრება შემდეგი პროცენტით:

მოვალეობა = 100% * P / T

ისევე როგორც სიხშირის შემთხვევაში, არსებობს პრაქტიკული შეზღუდვა პულსის სიგანეზე. ზემოთ მოყვანილი მაგალითის გამოყენებით, 106 საათის ციკლი ზღუდავს პულსის სიგანეს არანაკლებ 2.21 მიკროწამამდე. ან, არანაკლებ 50% 226.4 kHz.

კვადრატული ტალღის სიგნალების ზედა სიხშირის ლიმიტის გაზრდის ერთ-ერთი გზა არის ციფრული გამყოფების გამოყენება, რომლებიც იყენებენ ფლიპ-ფლოპებს. N შეყვანის სიხშირის დაყოფა n გახანგრძლივებს გაზომვადი ზედა დიაპაზონს n ჯერ. ეს შესანიშნავი ამბავია, ციფრულ გამყოფებს აქვთ ერთი ფუნდამენტური ნაკლი: გაყოფილი სიგნალი კარგავს პულსის სიგანეს (და მოვალეობის ციკლს) ინფორმაციას! გამყოფი საშუალებების მუშაობის გამო, მათ გამოსავალს ყოველთვის აქვს 50% სამუშაო ციკლი. ბუმბერაზი…

თუმცა მომდევნო გვერდებზე მე ვაჩვენებ, თუ როგორ უნდა გავყოთ ციფრული სიხშირე და შევინარჩუნოთ პულსის ორიგინალური სიგანე, რაც საშუალებას მომცემს გავზომო სიგნალები საზღვრებს მიღმა, პირდაპირი დათვლისას.

ნაბიჯი 1: ციფრული სიხშირის განყოფილება

ციფრული სიხშირის განყოფილება
ციფრული სიხშირის განყოფილება
ციფრული სიხშირის განყოფილება
ციფრული სიხშირის განყოფილება
ციფრული სიხშირის განყოფილება
ციფრული სიხშირის განყოფილება

ტრადიციული ციფრული სიხშირის გამყოფი იყენებს ფლიპ-ფლოპებს; ეს სახელმძღვანელო ლამაზად განმარტავს პრინციპებს, თუ როგორ უნდა ავაშენოთ გამყოფი სტანდარტული JK ფლიპ-ფლოპების გამოყენებით. ეს წყვეტს MCU– სთვის ძალიან მაღალი სიხშირეების პრობლემას, მაგრამ აქვს ერთი მნიშვნელოვანი ნაკლი: გაყოფილი სიგნალის აქვს 50% სამუშაო ციკლი, მიუხედავად შეყვანის სიგნალის მოვალეობისა! იმის გასაგებად, თუ რატომ არის საქმე, გადახედეთ პირველ ორ ფიგურას. ორიგინალური სიგნალი პერიოდით T და პულსის სიგანე P იკვებება JK ფლიპ-ფლოპის საათის პინში, ხოლო მისი J და K ქინძისთავები ყოველთვის მაღალია (პირველი ფიგურა). 3.3V ლოგიკა ვარაუდობს მთელ. დავუშვათ, რომ ფლიპ-ფლოპი გამოწვეულია საათის პოზიტიური (ანუ, მზარდი) კიდეებით. ამ პირობებში, გამომავალი ქინძის მდგომარეობის ცვლილებები (ინდივიდუალური "გადატრიალებები" და "ფლოპები") ხდება ყოველ ჯერზე, როდესაც საათის პინი დაბალიდან მაღალზე გადადის. საათის მაღალიდან დაბალი გადასვლა (ანუ უარყოფითი ზღვარი) სრულიად იგნორირებულია. იხილეთ მეორე ფიგურა. გამომავალი პინი, Q, გამოსცემს სიგნალს, რომლის პერიოდი ორჯერ აღემატება თავდაპირველ პერიოდს, ანუ მისი სიხშირე განახევრდება. გამომავალი პულსის სიგანე ყოველთვის ტოლია T. შესაბამისად, ორიგინალური პულსის სიგანე, P, იკარგება.

მესამე ფიგურაში ნაჩვენები კონფიგურაციის სხვა JK ფლიპ ფლოპის დამატება თავდაპირველ სიხშირეს ყოფს 4 – ზე. იმავე თანმიმდევრული წესით მეტი ფლიპ ფლოპების დამატება სიხშირეს ყოფს მომდევნო სიმძლავრეებზე 2: 8, 16, 32 და ა.

პრობლემა: როგორ გავყოთ კვადრატული ტალღის სიხშირე მისი პულსის სიგანის შენარჩუნებისას?

იდეა არის სწორად დაამატოთ ნეგატიური ზღვარი, რომელიც გამოწვეულია JK ფლიპ-ფლოპით. მოდით ვუწოდოთ მას "Neg FF"; იხილეთ მეოთხე ფიგურა. აქ, "სწორად" ნიშნავს, რომ ახალი ფლიპ-ფლოპის J და K ქინძისთავები მიბმულია Q და Qbar გამომავალი ქინძისთავებით, შესაბამისად, გამყოფი -4-ით ("Pos FF"), რომელიც ილუსტრირებულია წინა ფიგურაში. (აქ "ბარი" არის ჰორიზონტალური ზოლი Q სიმბოლოზე, რომელიც მიუთითებს ლოგიკურ უარყოფაზე.) იმის დასადგენად, თუ რას მიაღწევს ეს, გადახედეთ "Neg FF" - ის ფუნქციების ცხრილს მეხუთე ფიგურაში: Neg– ის გამომავალი ქინძისთავები, Q და Qbar, ასახავს მისი შეყვანის ქინძისთავების მდგომარეობას, შესაბამისად, J და K. რაც იმას ნიშნავს, რომ ისინი ასახავენ პოზი Q- ს და Qbar- ის მდგომარეობას. მაგრამ, ნეგის ფლიპ-ფლოპის მოქმედება უნდა დაელოდოს ორიგინალური სიგნალის უარყოფით ზღვარს, რომელიც P დროს მოდის პოზიტიური ზღვრის შემდეგ. აჰა!

შედეგად მიღებული ტალღის ფორმები ნაჩვენებია მეექვსე ფიგურაში. "Pos Q" გამოსცემს სიგნალს 1/4 სიხშირით, "Pos Qbar" არის შებრუნებული, "Neg Q" მიჰყვება "P Q", რომელიც გადადის პულსის სიგანე P- ით, ხოლო "Neg Qbar" არის მისი შებრუნებული. თქვენ შეგიძლიათ დაადასტუროთ, რომ "Pos Qbar" და "Neg Q" ლოგიკური AND აწარმოებს პულსის მატარებელს, რომელიც ხასიათდება ორიგინალური პულსის სიგანით P და 1/4 სიხშირით. ბინგო!

თავიდან ზუსტად ამ გამომავალ სიგნალს ვიყენებდი MCU– ს შესანახად. თუმცა, ეს აღმოჩნდა პრობლემური პულსის ძალიან მოკლე სიგანისთვის MCU– ს 106 ციკლის შეზღუდვის გამო, რომელიც ნახსენებია შესავალში. მე მოვაგვარე ეს პატარა პრობლემა სხვა გამომავლის არჩევით: "Pos Qbar" და "Neg Qbar" ნაცვლად. ტალღების ფორმების ერთი შეხედულება უნდა დაგარწმუნოთ, რომ ამ კონკრეტული ტალღის ფორმის P 'სიგანე მერყეობს T- სა და 2T- ს შორის (0, T) დიაპაზონის ნაცვლად P- სთვის.

P = 2T - P '

ნაბიჯი 2: რეკომენდებული აპარატურა

რეკომენდებული აპარატურა
რეკომენდებული აპარატურა
რეკომენდებული აპარატურა
რეკომენდებული აპარატურა
რეკომენდებული აპარატურა
რეკომენდებული აპარატურა

მე ნამდვილად მომწონს ელექტრონული მოყვარულთა შედარებით ახალბედა: Atmel SAM D21 MCUs დაფუძნებული 32 ბიტიანი ARM Cortex M0+ პროცესორით, რომელიც მუშაობს 48 MHz საათის სიხშირით, ბევრად უფრო მაღალი ვიდრე ძველი Atmels. ამ პროექტისთვის შევიძინე:

  • ItsyBitsy M0 Express MCU დაფა Adafruit– დან
  • მე შემთხვევით მქონდა დატენვის LiPo ბატარეა Adafruit– დან
  • მონოქრომული 128x32 SPI OLED ჩვენება (თქვენ მიხვდით: Adafruit)
  • ორმაგი დადებითი პირით გამოწვეული JK ფლიპ-ფლოპი SN74HC109 ტეხასური ინსტრუმენტებიდან
  • ორმაგი უარყოფითი პირით გამოწვეული JK ფლიპ-ფლოპი SN74HC112 ტეხასური ინსტრუმენტებიდან
  • ოთხმაგი და კარიბჭე CD74AC08E ტეხასის ინსტრუმენტებიდან
  • ოთხმაგი ან კარიბჭე CD74AC32E ტეხასის ინსტრუმენტებიდან

ნაბიჯი 3: წრე

წრე
წრე
წრე
წრე

პირველი ფიგურა გვიჩვენებს სიხშირის/მოვალეობის მრიცხველის გამარტივებულ სქემას. 3.3 V CMOS ლოგიკა ვარაუდობს მთელ. შესაბამისად, შეყვანის კვადრატული ტალღის ამპლიტუდა უნდა იყოს შესაბამის V- ს შორისIH დონე (ანუ 2 V) და 3.3 V. წინააღმდეგ შემთხვევაში, თქვენ უნდა გააფართოვოთ იგი შესაბამისად ზემოთ ან ქვემოთ. უმეტეს შემთხვევაში მარტივი ძაბვის გამყოფი საკმარისი იქნება. თუ გსურთ თქვენი მრიცხველის ვერსია შეიმუშაოთ სხვა ლოგიკურ დონეზე, მაშინ უნდა გამოიყენოთ სხვა მიკრო კონტროლერი (MCU), ბატარეა და ეკრანი, რომელიც მუშაობს სასურველ დონეზე. ამ პროექტში გამოყენებული ლოგიკური კარიბჭეები და ფლიპ-ფლოპები მუშაობს ლოგიკურ დონეზე 2 V– დან 6 V– მდე და უმეტეს შემთხვევაში უნდა იყოს ნორმალური.

როგორც ნაჩვენებია, ItsyBitsy MCU იყენებს ქინძისთავებს 9-13 ეკრანთან კომუნიკაციისთვის პროგრამული უზრუნველყოფის SPI პროტოკოლის საშუალებით. 3V პინი აწვდის ენერგიას მთელ წრეს. ციფრული შეყვანის pin 3 იღებს გაანალიზებულ სიგნალს, ხოლო 2 და 4 pin აკონტროლებს სიგნალის წყაროს: ან პირდაპირი სიგნალი მოდის კარიბჭე AND3 (დაბალი შეყვანის სიხშირეები), ან სიგნალი იყოფა 4 გავლით კარიბჭე AND4 (მაღალი შემავალი სიხშირეები), როგორც ეს აღწერილია მე –2 ნაბიჯში. კოდი, რომელიც განხილულია შემდეგ ეტაპზე, ავტომატურად ამოიცნობს შემომავალი სიხშირის დიაპაზონს და სათანადოდ ცვლის სიგნალის წყაროს.

სქემატურად არ ჩანს ციფრული ჩიპური კავშირების ნამდვილი სირთულე. მეორე სურათი გვიჩვენებს, თუ როგორ გამოიყურება პროექტი პურის დაფაზე. შეყვანის სიგნალი მოდის წითელი მავთულის მეშვეობით 2CLK პინზე ორმაგი პოზიტიური პირას ფლიპ-ფლოპისკენ. სიფრთხილე: ჩვეულებრივ, ამ ფლიპ ფლოპის ყველა J და K ქინძისთავები უნდა იყოს მაღალი, მაგრამ მის ნაცვლად SN74HC109 განსაკუთრებით შეიცავს Kbar pin - ინვერსიულ K პინს. აქედან გამომდინარე, ეს პინი უნდა იყოს დასაბუთებული! SN74HC112– ის პირველ უარყოფით ფლიპ ფლოპს აქვს თავისი 1K და 1J პინი, რომელიც დაკავშირებულია SN74HC109– ის 1Q და 1Qbar ქინძისთავებთან. მეორე ფლიპ-ფლოპი SN74HC112– ში გამოუყენებელია და მისი შეყვანის ქინძისთავები (2K, 2J, 2CLRbar) დასაბუთებულია. ყველა სხვა დამატებითი ქინძისთავები PREbar (წინასწარ) და CLRbar (წმინდა) ყველა ფლიპ-ფლოპში უნდა იყოს დაკავშირებული ლოგიკურ მაღალთან. გამოუყენებელი საათი და გამომავალი ქინძისთავები დაუკავშირებელია. ანალოგიურად, ყველა კარიბჭეში გამოუყენებელი შესასვლელი ქინძისთავები დასაბუთებულია, ხოლო გამოუყენებელი გამომავალი ქინძისთავები დაუკავშირებელი რჩება. როგორც მე განვიხილე ჩემს "ტელეფონის ბეჭდის უხილავი მკვლელი" ინსტრუქციულად, ლოგიკური ჩიპების გამოუყენებელი საკინძების დამიწება გამორიცხავს შემთხვევით რხევას და დაზოგავს ბატარეის ენერგიას.

ნაბიჯი 4: კოდი და დაბალი სიხშირის გაზომვა

ბუნებრივია, ყველა მოქმედება ხდება ქვემოთ მოცემულ კოდში. როდესაც pin 3 -ზე შემომავალი გადადის ციფრულიდან დაბალიდან მაღალზე, MCU იწყებს მისი შიდა 48 MHz საათის იმპულსების ათვლას. ის აღნიშნავს მაღალიდან დაბალი გადასვლის მომენტს და აგრძელებს დათვლას მომდევნო დაბალიდან მაღალ გადართვამდე, როდესაც იგი კვლავ განაახლებს მთელ პროცესს. პირველი რიცხვი წარმოადგენს პულსის სიგანეს, ხოლო მთელი რიცხვი წარმოადგენს სიგნალის პერიოდს. და ეს არის მთელი საიდუმლო.

პროცესორი აღნიშნავს ამ გადასვლებს აპარატურის შეფერხებების საშუალებით. SAMD21– ს აქვს რამდენიმე საათი; ჩემი კოდი იყენებს TC3 ერთს. თავდაპირველად, მე დავიწყე M0– ის მონაცემების ფურცლის წაკითხვა დიდი ძალისხმევისთვის შეფერხების დამმუშავებლის კოდირებაში, მაგრამ მალე აღმოვაჩინე ძალიან დაკავშირებული კოდი Arduino ფორუმზე მომხმარებლების მიერ electro_95, MartinL და Rucus, რომელთა წვლილიც არის სათანადოდ აღიარებული. მე ჩავრთე და შევცვალე მათი კომბინირებული კოდი ჩემში; დაზოგავს ბევრ დროს!

როგორც უკვე აღვნიშნე, სიგნალის გარჩევადობა შემოიფარგლება 6 106 პროცესორის ციკლით, რათა შეასრულოს კოდი შეფერხებებს შორის. ციფრული განყოფილება პულსის სიგანის დაცვით ზრუნავს მაღალ სიხშირეებზე. დაბალი სიხშირეები, მეორეს მხრივ, წარმოადგენს სხვა გამოწვევას: ვინაიდან TC3 საათის მრიცხველი 16 ბიტიანია, ის გადმოდის 65, 536 რიცხვის ლიმიტის გადალახვის შემდეგ. შეიძლება გაუმკლავდეს ამ სიტუაციას გადავსების შეწყვეტის დამატებით, მაგრამ აირჩია სხვა გამოსავალი: TC3– ს შეუძლია გამოიყენოს წინასწარ დაყენებული (ანუ პროგრამულად გაყოფილი) პროცესორის საათი 48 მჰც აპარატურის ნაცვლად. ამრიგად, თუ სიგნალის პერიოდი უახლოვდება გადავსების ლიმიტს, კოდს შეუძლია დაავალოს TC3 გამოიყენოს 24 MHz რიცხვები მომდევნო პერიოდისთვის და, voila, მრიცხველი დაეცემა ქვემოთ 32, 768 რაოდენობა. კიდევ უფრო დაბალი სიხშირეებისთვის TC3- ს შეიძლება დაევალოს 12 MHz პულსის დათვლა და ა.შ. შესაბამისი პრეკალერი ავტომატურად განისაზღვრება სიგნალის სიხშირის მიხედვით, ჰისტერეზისით, რათა TC3 მრიცხველი იყოს გადავსების ლიმიტში. შედეგად, მოწყობილობის დიაპაზონის ქვედა ბოლო არის დაახლოებით 43 ჰერცი.

კეთილი იყოს თქვენი მობრძანება, რომ გამოაგზავნოთ კოდი და გამოიყენოთ იგი თქვენს პროექტში, მაგრამ შედეგების გამოქვეყნებისას გთხოვთ მიუთითოთ მისი წყარო.

კოდის ბმული.

გირჩევთ: