Სარჩევი:

Arduino ტალღის გენერატორი: 5 ნაბიჯი (სურათებით)
Arduino ტალღის გენერატორი: 5 ნაბიჯი (სურათებით)

ვიდეო: Arduino ტალღის გენერატორი: 5 ნაბიჯი (სურათებით)

ვიდეო: Arduino ტალღის გენერატორი: 5 ნაბიჯი (სურათებით)
ვიდეო: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, ნოემბერი
Anonim
Arduino ტალღის გენერატორი
Arduino ტალღის გენერატორი

2021 წლის თებერვლის განახლება: შეამოწმეთ ახალი ვერსია 300x შერჩევის მაჩვენებლით, Raspberry Pi Pico– ს საფუძველზე

ლაბორატორიაში ხშირად გვჭირდება გარკვეული სიხშირის, ფორმის და ამპლიტუდის განმეორებითი სიგნალი. ეს შეიძლება იყოს გამაძლიერებლის შესამოწმებლად, მიკროსქემის, კომპონენტის ან აქტივატორის შემოწმება. მძლავრი ტალღის გენერატორები კომერციულად არის ხელმისაწვდომი, მაგრამ შედარებით ადვილია საკუთარი თავის გაკეთება Arduino Uno ან Arduino Nano– ს საშუალებით, იხილეთ მაგალითად:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

აქ არის მეორის აღწერა შემდეგი მახასიათებლებით:

* ზუსტი ტალღის ფორმები: 8 ბიტიანი გამომავალი R2R DAC გამოყენებით, 256 ნიმუშის ფორმა

* სწრაფი: 381 kHz შერჩევის სიჩქარე

* ზუსტი: 1 მჰც ნაბიჯების სიხშირის დიაპაზონი. ისეთივე ზუსტი, როგორც არდუინოს ბროლი.

* მარტივი ოპერაცია: ტალღის ფორმა და სიხშირე რეგულირდება ერთი მბრუნავი კოდირებით

* ამპლიტუდის ფართო სპექტრი: მილივოლტი 20 ვოლტამდე

* 20 წინასწარ განსაზღვრული ტალღის ფორმა. პირდაპირ მეტის დასამატებლად.

* ადვილი გასაკეთებელია: Arduino Uno ან Nano პლუს სტანდარტული კომპონენტები

ნაბიჯი 1: ტექნიკური მოსაზრებები

ანალოგური სიგნალის გაკეთება

Arduino Uno და Nano– ს ერთი ნაკლი ის არის, რომ მას არ აქვს ციფრული-ანალოგური (DAC) გადამყვანი, ამიტომ შეუძლებელია მისი ანალოგური ძაბვის გამოტანა პირდაპირ ქინძისთავებზე. ერთი გამოსავალი არის R2R კიბე: 8 ციფრული ქინძისთავი უკავშირდება რეზისტორულ ქსელს ისე, რომ გამომავალი 256 დონის მიღწევა იყოს შესაძლებელი. პორტის პირდაპირი წვდომის საშუალებით, Arduino– ს შეუძლია დააყენოს 8 პინი ერთდროულად ერთი ბრძანებით. რეზისტორული ქსელისთვის საჭიროა 9 რეზისტორი R მნიშვნელობით და 8 8R მნიშვნელობით. მე გამოვიყენე 10kOhm, როგორც მნიშვნელობა R, რომელიც ინარჩუნებს დენს ქინძისთავებიდან 0.5mA- ზე ან ნაკლები. ვფიქრობ, R = 1kOhm ასევე შეუძლია იმუშაოს, რადგან Arduino– ს შეუძლია ადვილად მიაწოდოს 5mA პინზე, 40mA თითო პორტზე. მნიშვნელოვანია, რომ R და 2R რეზისტორებს შორის თანაფარდობა მართლაც 2. იყოს, რაც ყველაზე ადვილად მიიღწევა რიგით 2 R რეზისტორის სერიულად დაყენებით, სულ 25 რეზისტენტზე.

ფაზის აკუმულატორი

ტალღის ფორმირება წარმოიქმნება რამოდენიმეჯერ 8-ბიტიანი რიცხვების მიმდევრობის გაგზავნით არდუინოს ქინძისთავებზე. ტალღის ფორმა ინახება მასივში 256 ბაიტი და ეს მასივი სინჯდება და იგზავნება ქინძისთავებში. გამომავალი სიგნალის სიხშირე განისაზღვრება იმით, თუ რამდენად სწრაფად მიიწევს წინ მასივი. ამის მძლავრი, ზუსტი და ელეგანტური გზაა ფაზის აკუმულატორი: 32 ბიტიანი რიცხვი იზრდება რეგულარული ინტერვალებით და ჩვენ ვიყენებთ 8 ყველაზე მნიშვნელოვან ბიტს მასივის ინდექსის სახით.

სწრაფი შერჩევა

შეფერხებები იძლევა ნიმუშის აღებას კარგად განსაზღვრულ დროს, მაგრამ შეფერხებების ზედნადები ზღუდავს შერჩევის სიხშირეს ~ 100kHz. უსასრულო მარყუჟი ფაზის განახლების, ტალღის ფორმის აღსადგენად და ქინძისთავების დასაყენებლად იღებს 42 საათის ციკლს, რითაც აღწევს შერჩევის მაჩვენებელს 16MHz/42 = 381kHz. მბრუნავი კოდის შემობრუნება ან ბიძგი იწვევს ქინძისთავის ცვლილებას და შეწყვეტას, რომელიც გამოდის მარყუჟიდან, პარამეტრების შესაცვლელად (ტალღის ფორმა ან სიხშირე). ამ ეტაპზე მასივის 256 ნომერი ხელახლა გამოითვლება ისე, რომ ტალღის ფორმის რეალური გამოთვლები არ იყოს საჭირო მთავარ მარყუჟში. აბსოლუტური მაქსიმალური სიხშირე, რომელიც შეიძლება წარმოიქმნას, არის 190 კჰც (შერჩევის მაჩვენებლის ნახევარი), მაგრამ შემდეგ მხოლოდ ორი ნიმუშია პერიოდულად, ასე რომ, არც ისე ბევრია კონტროლი ფორმაზე. ამრიგად, ინტერფეისი არ იძლევა სიხშირის 100 კჰც -ზე ზემოთ დაყენების საშუალებას. 50 კჰც სიხშირეზე არის 7-8 ნიმუში თითო პერიოდში და 1.5 კჰც სიხშირით და ქვემოთ 256 რიცხვი, რომელიც ინახება მასივში, ხდება თითოეული პერიოდის შერჩევა. ტალღის ფორმებისთვის, სადაც სიგნალი შეუფერხებლად იცვლება, მაგალითად სინუსური ტალღა, ნიმუშების გამოტოვება არ არის პრობლემა. ვიწრო ნაკაწრების მქონე ტალღების ფორმებისთვის, მაგალითად, კვადრატული ტალღა მცირე მოვალეობის ციკლით, არსებობს საფრთხე, რომ 1.5 კჰც -ზე ზემოთ სიხშირეებზე ერთი ნიმუშის გამოტოვებამ შეიძლება გამოიწვიოს ტალღის ფორმა არ მოიქცეს ისე, როგორც მოსალოდნელი იყო

სიხშირის სიზუსტე

რიცხვი, რომლითაც ფაზა იზრდება თითოეულ ნიმუშზე, არის სიხშირის პროპორციული. სიხშირე შეიძლება დადგინდეს 381kHz/2^32 = 0.089mHz სიზუსტით. პრაქტიკაში ასეთი სიზუსტე თითქმის არ არის საჭირო, ამიტომ ინტერფეისი ზღუდავს სიხშირის დადგენას 1 მჰც საფეხურზე. სიხშირის აბსოლუტური სიზუსტე განისაზღვრება არდუინოს საათის სიხშირის სიზუსტით. ეს დამოკიდებულია არდუინოს ტიპზე, მაგრამ უმეტესობა განსაზღვრავს 16.000 MHz სიხშირეს, ანუ სიზუსტე ~ 10^-4. კოდი საშუალებას გაძლევთ შეცვალოთ სიხშირის თანაფარდობა და ფაზის ზრდა, რათა გამოსწორდეს 16 მჰც -იანი ვარაუდის მცირე გადახრები.

ბუფერირება და გაძლიერება

რეზისტორულ ქსელს აქვს მაღალი გამომავალი წინაღობა, ამიტომ მისი გამომავალი ძაბვა სწრაფად იკლებს, თუ დატვირთვა ერთვის. ამის მოგვარება შესაძლებელია გამომავალი ბუფერული ან გამაძლიერებელი საშუალებით. აქ, ბუფერირება და გაძლიერება ხდება ოპამპით. მე გამოვიყენე LM358, რადგან მქონდა რამდენიმე. ეს არის ნელი გამტარიანობა (დარტყმის სიჩქარე 0.5V მიკროწამში), ამიტომ მაღალი სიხშირისა და მაღალი ამპლიტუდის დროს სიგნალი დამახინჯებულია. კარგი ის არის, რომ მას შეუძლია გაუმკლავდეს ძაბვებს ძალიან ახლოს 0V. გამომავალი ძაბვა შეზღუდულია V 2V რკინიგზის ქვემოთ, ამიტომ +5V სიმძლავრის გამოყენება ზღუდავს გამომავალ ძაბვას 3 ვ -მდე. შემდგომი მოდულები კომპაქტური და იაფია. კვებავს +20V ოპამპს, მას შეუძლია წარმოქმნას სიგნალები ძაბვით 18 ვ -მდე. (NB, სქემატურად ნათქვამია LTC3105, რადგან ეს იყო ერთადერთი ნაბიჯი, რომელიც აღმოვაჩინე Fritzing– ში. სინამდვილეში მე გამოვიყენე MT3608 მოდული, იხილეთ სურათები შემდეგ ნაბიჯებში). მე ვირჩევ რომ ცვლადი შესუსტება გამოვიყენო R2R DAC– ის გამომავალზე, შემდეგ გამოვიყენო ერთი ოპამპი სიგნალის გამაძლიერებლად გამაძლიერებლის გარეშე და მეორე 5,7 – ით გასაძლიერებლად, ისე რომ სიგნალმა მიაღწიოს მაქსიმალურ გამომუშავებას დაახლოებით 20 ვ. გამომავალი დენი საკმაოდ შეზღუდულია, ~ 10mA, ამიტომ უფრო ძლიერი გამაძლიერებელი შეიძლება დაგჭირდეს, თუ სიგნალი დიდი დინამიკის ან ელექტრომაგნიტის მართვას მოითხოვს.

ნაბიჯი 2: საჭირო კომპონენტები

ძირითადი ტალღის ფორმის გენერატორისთვის

არდუინო უნო ან ნანო

16x2 LCD დისპლეი + 20kOhm საპარსები და 100Ohm სერიის რეზისტორი უკანა განათებისთვის

5 პინიანი მბრუნავი კოდირება (ინტეგრირებული ღილაკით)

25 წინააღმდეგობა 10 კმ

ბუფერ/გამაძლიერებლისთვის

LM358 ან სხვა ორმაგი ოპამპი

გააქტიურების მოდული, რომელიც ემყარება MT3608

50kOhm ცვლადი რეზისტორი

10kOhm რეზისტორი

47kOhm რეზისტორი

1muF კონდენსატორი

ნაბიჯი 3: მშენებლობა

მშენებლობა
მშენებლობა
მშენებლობა
მშენებლობა

მე ყველაფერი შევკარი 7x9 სმ პროტოტიპის დაფაზე, როგორც სურათზეა ნაჩვენები. ვინაიდან ცოტა არეული იყო ყველა მავთულთან, მე შევეცადე შემეღებინა ლიდები, რომლებიც ატარებენ პოზიტიურ ძაბვას წითლად და ისეთებს, რომლებიც ადგილზე შავს.

კოდირება, რომელსაც მე ვიყენებ, აქვს 5 ქინძისთავები, 3 ერთ მხარეს, 2 მეორე მხარეს. გვერდი 3 ქინძისთავით არის ფაქტიური კოდირება, მხარე 2 ქინძისთავით არის ინტეგრირებული ღილაკი. 3 პინიან მხარეს, ცენტრალური პინი უნდა იყოს მიწასთან დაკავშირებული, დანარჩენი ორი ქინძისთავი D10 და D11. 2 ქინძისთავზე, ერთი პინი უნდა იყოს მიწასთან დაკავშირებული, მეორე კი D12.

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

R - ნედლეული სიგნალი R2R DAC– დან

B - ბუფერული სიგნალი

A - გაძლიერებული სიგნალი

T - ტაიმერის სიგნალი პინიდან 9

G - ადგილზე

+ - პოზიტიური "მაღალი" ძაბვა გაძლიერების მოდულიდან

ნაბიჯი 4: კოდი

კოდი, არდუინოს ესკიზი, თან ერთვის და უნდა აიტვირთოს არდუინოში.

20 ტალღის ფორმა წინასწარ არის განსაზღვრული. სხვა ტალღის დამატება პირდაპირ უნდა იყოს. გაითვალისწინეთ, რომ შემთხვევითი ტალღები ავსებენ 256 მნიშვნელობის მასივს შემთხვევითი მნიშვნელობებით, მაგრამ ერთი და იგივე ნიმუში მეორდება ყოველ პერიოდს. ჭეშმარიტი შემთხვევითი სიგნალები ჟღერს როგორც ხმაური, მაგრამ ეს ტალღის ფორმა ბევრად უფრო ჰგავს სასტვენს.

კოდი ადგენს 1kHz სიგნალს pin D9– ზე TIMER1– ით. ეს სასარგებლოა ანალოგური სიგნალის დროის შესამოწმებლად. ასე აღმოვაჩინე, რომ საათის ციკლების რაოდენობა 42 -ია: თუ ვივარაუდებ 41 -ს ან 43 -ს და წარმოქმნის 1kHz სიგნალს, მას აშკარად აქვს განსხვავებული სიხშირე სიგნალისგან pin D9- ზე. 42 მნიშვნელობით ისინი იდეალურად ემთხვევა.

ჩვეულებრივ, Arduino წყვეტს ყოველ მილიწამს, რათა თვალყური ადევნოს დროს millis () ფუნქციას. ეს შეაფერხებს სიგნალის ზუსტ გენერირებას, ამიტომ კონკრეტული შეფერხება გამორთულია.

შემდგენელი ამბობს: "ესკიზი იყენებს პროგრამის შენახვის სივრცის 7254 ბაიტს (23%). მაქსიმალური არის 30720 ბაიტი. გლობალური ცვლადები იყენებენ 483 ბაიტს (23%) დინამიურ მეხსიერებას, რის გამოც 1565 ბაიტი რჩება ადგილობრივ ცვლადებზე. მაქსიმუმია 2048 ბაიტი." ასე რომ, საკმარისი სივრცეა უფრო დახვეწილი კოდისთვის. ფრთხილად იყავით, რომ შეიძლება დაგჭირდეთ "ATmega328P (ძველი ჩამტვირთავი)" ნანოზე წარმატებით ატვირთვა.

ნაბიჯი 5: გამოყენება

სიგნალის გენერატორი შეიძლება იკვებებოდეს Arduino Nano– ს მინი USB კაბელის საშუალებით. ეს საუკეთესოდ კეთდება დენის ბანკით, ისე რომ არ იყოს შემთხვევითი მიწისქვეშა მარყუჟი იმ აპარატთან, რომელთანაც ის შეიძლება იყოს დაკავშირებული.

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

ამპლიტუდის რეგულირება შესაძლებელია პოტენომეტრით და შეიძლება გამოყენებულ იქნას ბუფერული ან გამაძლიერებელი სიგნალი.

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

ძალიან დაბალი სიხშირეებისთვის, გამომავალი შეიძლება იყოს ვიზუალიზებული LED სერიით 10kOhm რეზისტორით. აუდიო სიხშირეების მოსმენა შესაძლებელია დინამიკით. დარწმუნდით, რომ დააყენეთ სიგნალი ძალიან მცირე ~ 0.5V, წინააღმდეგ შემთხვევაში დენი ძალიან მაღალი გახდება და სიგნალი იწყებს კლიპს.

გირჩევთ: