Სარჩევი:

სუპერ სწრაფი ანალოგური ძაბვები არდუინოდან: 10 ნაბიჯი (სურათებით)
სუპერ სწრაფი ანალოგური ძაბვები არდუინოდან: 10 ნაბიჯი (სურათებით)

ვიდეო: სუპერ სწრაფი ანალოგური ძაბვები არდუინოდან: 10 ნაბიჯი (სურათებით)

ვიდეო: სუპერ სწრაფი ანალოგური ძაბვები არდუინოდან: 10 ნაბიჯი (სურათებით)
ვიდეო: How to Interface Industrial Sensors with Arduino Nano 2024, ივლისი
Anonim
Image
Image

ეს ინსტრუქცია გვიჩვენებს, თუ როგორ უნდა შეიქმნას სუპერ სწრაფი ანალოგური ძაბვის ცვლილებები არდუინოდან და მარტივი რეზისტორი და კონდენსატორი წყვილიდან. ერთი პროგრამა, სადაც ეს სასარგებლოა არის ოსცილოსკოპზე გრაფიკის გენერირება. არის კიდევ რამდენიმე პროექტი, რომელმაც ეს შეძლო. Johngineer აჩვენებს უბრალო ნაძვის ხეს პულსის სიგანის მოდულაციის (PWM) გამოყენებით. სხვებმა გააუმჯობესეს ეს პროექტი რეზისტორული კიბის გამოყენებით ან ციფრული-ანალოგური გადამყვანი ჩიპის გამოყენებით.

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

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

თუ მოგეწონათ ეს ინსტრუქცია, გთხოვთ გაითვალისწინოთ ხმის მიცემა!:)

ნაბიჯი 1: წრის შექმნა

წრის შექმნა
წრის შექმნა

მიკროსქემის შესაქმნელად დაგჭირდებათ შემდეგი:

ა) Arduino დაფუძნებული Atmel 16MHz ATmega328P, როგორიცაა Arduino Uno ან Arduino Nano.

ბ) R მნიშვნელობის ორი რეზისტორი, რომელიც არის მინიმუმ 150Ω.

გ) C მნიშვნელობის ორი კონდენსატორი, როგორიცაა C = 0.0015 / R, მაგალითები:

  • R = 150Ω და C = 10μμ
  • R = 1.5kΩ და C = 1μμ
  • R = 15kΩ და C = 100nF
  • R = 150kΩ და C = 10nF

ამ ღირებულებების არჩევის მიზეზები ორგვარია. უპირველეს ყოვლისა, ჩვენ გვსურს არდუინოს ქინძისთავებზე შევინარჩუნოთ დენი 40mA მაქსიმალური რეიტინგული დენის ქვემოთ. 150 Ω მნიშვნელობის გამოყენება ზღუდავს დენს 30 mA– მდე, როდესაც გამოიყენება Arduino– ს მიწოდების ძაბვით 5 ვ. R- ის უფრო დიდი მნიშვნელობები შეამცირებს დენს და შესაბამისად მისაღებია.

მეორე შეზღუდვა არის ის, რომ ჩვენ გვსურს შევინარჩუნოთ დრო მუდმივი, რომელიც არის R და C პროდუქტი, ტოლი დაახლოებით 1.5ms. პროგრამული უზრუნველყოფა სპეციალურად არის მორგებული ამ დროის მუდმივისთვის. მიუხედავად იმისა, რომ შესაძლებელია პროგრამული უზრუნველყოფის R და C მნიშვნელობების მორგება, არსებობს ვიწრო დიაპაზონი, რომლის გარშემოც ის იმუშავებს, ასე რომ შეარჩიეთ კომპონენტები რაც შეიძლება ახლოს შემოთავაზებულ თანაფარდობასთან.

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

ნაბიჯი 2: ოსცილოსკოპის დაყენება

ოსცილოსკოპის დაყენება
ოსცილოსკოპის დაყენება

დემონსტრაციისთვის საჭიროა X/Y რეჟიმში დაყენებული ოსცილოსკოპი. საცდელი მილები უნდა იყოს შეკრული, როგორც ეს ნაჩვენებია სქემატებში. თქვენი ოსცილოსკოპი განსხვავდება ჩემგან, მაგრამ მე გავდივარ საჭირო ნაბიჯებს ჩემს ერთეულზე X/Y რეჟიმის დასაყენებლად:

ა) დააყენეთ ჰორიზონტალური გაწმენდა B არხის მიერ კონტროლირებად (X ღერძი).

ბ) დააყენეთ ოსცილოსკოპი ორმაგი არხის რეჟიმში.

გ) დააყენეთ ვოლტი/დივი ორივე არხზე ისე, რომ მას შეუძლია აჩვენოს ძაბვები 0V– დან 5V– მდე. მე დავაყენე 0.5V/div.

დ) დააყენეთ შეერთების რეჟიმი DC ორივე არხზე.

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

ნაბიჯი 3: ჩამოტვირთეთ და გაუშვით პროგრამული უზრუნველყოფა

Image
Image

ჩამოტვირთეთ პროგრამული უზრუნველყოფა Arduino– ს სწრაფი ვექტორული ჩვენებიდან. პროგრამული უზრუნველყოფა ლიცენზირებულია GNU Affero Public ლიცენზიით v3 და თავისუფლად შეიძლება გამოყენებულ იქნას და შეიცვალოს ამ ლიცენზიის პირობებით.

გახსენით ფაილი "fast-vector-display-arduino.ino" Arduino IDE- ში და ატვირთეთ თქვენს Arduino- ში. მომენტალურად, თქვენ ნახავთ ანიმაციას "გილოცავთ ახალ წელს" თქვენს ოსცილოსკოპის ეკრანზე.

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

ნაბიჯი 4: შექმენით თქვენი საკუთარი პერსონალური ნახაზი

გაიგე, რატომ არის PWM ასე ნელი
გაიგე, რატომ არის PWM ასე ნელი

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

აღმოვაჩინე, რომ Inkscape არის საკმაოდ კარგი ინსტრუმენტი საკუთარი ნახატის შესაქმნელად:

  1. შექმენით ტექსტი დიდი, თამამი შრიფტის გამოყენებით, როგორიცაა Impact.
  2. შეარჩიეთ ტექსტის ობიექტი და აირჩიეთ "ობიექტის გზა" მენიუდან "გზა".
  3. შეარჩიეთ ცალკეული ასოები და გადაფარეთ ისინი ერთმანეთთან დაკავშირებული ფორმის შესაქმნელად
  4. აირჩიეთ "კავშირი" "ბილიკი" მენიუდან, რომ დააკავშიროთ ისინი ერთ მოსახვევში.
  5. თუ რომელიმე ასოში არის ხვრელები, გაჭერით პატარა ნაკადი მართკუთხედის ხატვით მართკუთხედის ხელსაწყოთი და გამოაკლეთ იგი კონტურიდან "სხვაობა" ინსტრუმენტის გამოყენებით.
  6. ორჯერ დააწკაპუნეთ ბილიკზე კვანძების საჩვენებლად.
  7. მართკუთხედი შეარჩიეთ ყველა კვანძი და დააწკაპუნეთ ინსტრუმენტზე "გააკეთეთ შერჩეული კვანძების კუთხე".
  8. შეინახეთ SVG ფაილი.

მთავარია, რომ თქვენს ნახატს უნდა ჰქონდეს ერთი დახურული გზა და არანაირი ხვრელი. დარწმუნდით, რომ თქვენს დიზაინს აქვს 130 -ზე ნაკლები ქულა.

ნაბიჯი 5: ჩასვით კოორდინატები SVG ფაილიდან Arduino IDE– ში

  1. გახსენით SVG ფაილი და დააკოპირეთ კოორდინატები. ეს იქნება ჩადგმული "ბილიკის" ელემენტში. კოორდინატების პირველი წყვილი შეიძლება იგნორირებული იყოს; შეცვალეთ ისინი 0, 0.
  2. ჩასვით კოორდინატები არდუინოს ესკიზში ფრჩხილებში, "#განსაზღვრეთ USER_PATTERN" - ის შემდეგ.
  3. შეცვალეთ ყველა სივრცე მძიმეებით, წინააღმდეგ შემთხვევაში თქვენ მიიღებთ შედგენის შეცდომას. ინსტრუმენტი "ჩანაცვლება და ძებნა" შეიძლება სასარგებლო იყოს.
  4. შეადგინეთ და გაუშვით!
  5. თუ თქვენ გაქვთ რაიმე პრობლემა, უყურეთ სერიულ კონსოლს შეცდომებისთვის. კერძოდ, თქვენ ნახავთ შეტყობინებებს, თუ თქვენს ნიმუშს აქვს ძალიან ბევრი წერტილი შიდა ბუფერისთვის. ასეთ შემთხვევებში, გამოსახულება გამოავლენს გადაჭარბებულ ციმციმს.

ნაბიჯი 6: გაიგე, რატომ არის PWM ასე ნელი

დასაწყისისთვის, მოდით განვიხილოთ კონდენსატორის ქცევა დატენვისას.

კონდენსატორი, რომელიც დაკავშირებულია ძაბვის წყაროსთან Vcc გააძლიერებს მის ძაბვას ექსპონენციალური მრუდის მიხედვით. ეს მრუდი ასიმპტოტურია, რაც იმას ნიშნავს, რომ შენელდება სამიზნე ძაბვასთან მიახლოებისას. ყველა პრაქტიკული მიზნისთვის, ძაბვა არის "საკმაოდ ახლოს" 5 RC წამის შემდეგ. RC ეწოდება "დროის მუდმივს". როგორც ადრე ვნახეთ, ეს არის რეზისტორისა და კონდენსატორის ღირებულებების პროდუქტი თქვენს წრეში. პრობლემა ის არის, რომ 5 RC საკმაოდ დიდი დროა გრაფიკული ეკრანის თითოეული წერტილის განახლებისთვის. ეს იწვევს ბევრ ციმციმს!

როდესაც ჩვენ ვიყენებთ პულსის სიგანის მოდულაციას (PWM) კონდენსატორის დასატენად, ჩვენ უკეთესები არ ვართ. PWM– ით ძაბვა სწრაფად იცვლება 0V– დან 5V– მდე. პრაქტიკაში, ეს ნიშნავს იმას, რომ ჩვენ სწრაფად ვცვლით ალტერნატივას კონდენსატორში დატენვისა და მისი ოდნავ ამოღების შემდეგ - ეს ბიძგი და დაძაბვა უფრო მეტად ემსგავსება მარათონის გარბენის მცდელობას დიდი ნაბიჯის გადადგმით და შემდეგ პატარა უკან. უსასრულოდ.

როდესაც ამ ყველაფერს საშუალოდ გამოთვლით, კონდენსატორის დატენვის ქცევა PWM- ის გამოყენებით ზუსტად იგივეა, რაც კონდენსატორის დასატენად Vpwm- ის მუდმივი ძაბვა. ჩვენ კიდევ დაახლოებით 5 RC წამი გვჭირდება იმისათვის, რომ მივიღოთ "საკმარისად ახლოს" სასურველ ძაბვასთან.

ნაბიჯი 7: მიიღეთ A– დან B– მდე, ცოტა უფრო სწრაფად

მიიღეთ A– დან B– მდე, ცოტა უფრო სწრაფად
მიიღეთ A– დან B– მდე, ცოტა უფრო სწრაფად

დავუშვათ, რომ ჩვენ გვაქვს კონდენსატორი, რომელიც უკვე დატენულია Va- მდე. დავუშვათ, რომ ჩვენ ვიყენებთ analogWrite () - ს, b– ის ახალი მნიშვნელობის დასაწერად. რა არის მინიმალური დრო თქვენ უნდა დაელოდოთ Vb ძაბვის მიღწევას?

თუ თქვენ გამოიცანით 5 RC წამი, ეს მშვენიერია! 5 RC წამის ლოდინით, კონდენსატორი დაიტენება თითქმის Vb– მდე. მაგრამ თუ ჩვენ გვსურს, ჩვენ შეგვიძლია დაველოდოთ ცოტა ნაკლები.

შეხედეთ მუხტის მრუდს. ხედავთ, კონდენსატორი უკვე Va იყო, როდესაც ჩვენ დავიწყეთ. ეს ნიშნავს, რომ ჩვენ არ უნდა დაველოდოთ დროს t_a. ჩვენ გვექნება მხოლოდ იმ შემთხვევაში, თუ კონდენსატორს ნულიდან ვამუხტავთ.

ამრიგად, როდესაც ამ დროს არ ველოდებით, ჩვენ ვხედავთ გაუმჯობესებას. დრო t_ab რეალურად ოდნავ მოკლეა ვიდრე 5 RC.

მაგრამ მოითმინეთ, ჩვენ შეგვიძლია ბევრად უკეთესი! შეხედეთ მთელ სივრცეს v_b ზემოთ. ეს არის განსხვავება Vcc– ს შორის, ჩვენთვის ხელმისაწვდომი მაქსიმალური ძაბვა და Vb, რომლის მიღწევასაც ჩვენ ვაპირებთ. ხედავთ, როგორ გვეხმარება ეს დამატებითი ძაბვა უფრო სწრაფად იქამდე, სადაც გვსურს?

ნაბიჯი 8: გადადით A– დან B– მდე, ტურბო დამტენით

გადადით A– დან B– მდე, ტურბო დამტენით!
გადადით A– დან B– მდე, ტურბო დამტენით!

Სწორია. იმის ნაცვლად, რომ გამოვიყენოთ PWM მიზნობრივ ძაბვაზე V_b, ჩვენ მას ვამყარებთ სტაბილურ Vcc– ზე ბევრად, ბევრად უფრო მოკლე ვადით. მე ამას ვუწოდებ ტურბო დამტენის მეთოდს და ის მიგვიყვანს იქამდე, სადაც გვინდა, მართლაც სწრაფად! დროის შეფერხების შემდეგ (რაც ჩვენ უნდა გამოვთვალოთ), ჩვენ ვამხნევებთ მუხრუჭებს PWM– ზე V_b– ზე გადასვლით. ეს ხელს უშლის ძაბვას სამიზნეზე გადალახვისგან.

ამ მეთოდით, შესაძლებელია კონდენსატორში ძაბვის შეცვლა V_a– დან V_b– მდე დროის მცირე მონაკვეთში, ვიდრე მხოლოდ PWM– ის გამოყენებით. ასე იღებ ადგილებს, შვილო!

ნაბიჯი 9: გაიგე კოდი

გაიგე კოდი
გაიგე კოდი

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

  • გრაფიკული მონაცემები ინახება PROGMEM- ში (ანუ ფლეშ მეხსიერებაში) წერტილების სიის სახით.
  • თარგმანის, სკალირებისა და ბრუნვის ოპერაციების ნებისმიერი კომბინაცია გაერთიანებულია აფინის გარდაქმნის მატრიცაში. ეს კეთდება ერთხელ თითოეული ანიმაციური კადრის დასაწყისში.
  • ქულები იკითხება სათითაოდ გრაფიკული მონაცემებიდან და თითოეული მრავლდება შენახული ტრანსფორმაციის მატრიცაზე.
  • გარდაქმნილი წერტილები იკვებება მაკრატლის ალგორითმის საშუალებით, რომელიც ამუშავებს ნებისმიერ წერტილს ხილული არეალის გარეთ.
  • RC დაგვიანების საძიებო ცხრილის გამოყენებით, წერტილები გარდაიქმნება მამოძრავებელ ძაბვად და დროის შეფერხებებში. RC დაგვიანების საძიებელი ცხრილი ინახება EEPROM– ში და მისი ხელახლა გამოყენება შესაძლებელია კოდის მრავალჯერადი გაშვებისთვის. გაშვებისას, RC საძიებო ცხრილი შემოწმებულია სიზუსტისთვის და ნებისმიერი არასწორი მნიშვნელობა განახლდება. EEPROM– ის გამოყენება ზოგავს მნიშვნელოვან RAM მეხსიერებას.
  • მამოძრავებელი ძაბვები და შეფერხებები იწერება არააქტიურ ჩარჩოზე ჩარჩოს ბუფერში. ჩარჩოს ბუფერი შეიცავს ადგილს აქტიური ჩარჩოსთვის და არააქტიური ჩარჩოსთვის. მას შემდეგ რაც დაიწერება სრული ჩარჩო, არააქტიური ჩარჩო ხდება აქტიური.
  • შეწყვეტის სერვისის რუტინა მუდმივად ხატავს სურათს ძაბვის მნიშვნელობების წაკითხვით და შეფერხებით აქტიური ჩარჩო ბუფერიდან. ამ მნიშვნელობებზე დაყრდნობით, ის არეგულირებს გამომავალი ქინძისთავების მოვალეობის ციკლს. ტაიმერი 1 გამოიყენება დროის დაგვიანების გაზომვისთვის რამდენიმე ნანოწამი სიზუსტით, ხოლო ტაიმერი 2 გამოიყენება ქინძისთავების სამუშაო ციკლის გასაკონტროლებლად.
  • ძაბვის ყველაზე დიდი ცვლილების მქონე პინი ყოველთვის არის "ტურბო დამუხტული" სამუშაო ციკლით ნულოვანი ან 100%, რაც უზრუნველყოფს უსწრაფეს დატენვას ან განმუხტვის დროს. ძაბვის ნაკლები ცვლილებით პინი ამოძრავებს მოვალეობის ციკლს, რომელიც ემთხვევა პირველი პინის გადასვლის დროს-ამ დროს შესატყვისი მნიშვნელოვანია იმის უზრუნველსაყოფად, რომ ხაზები პირდაპირ იყოს შედგენილი ოსცილოსკოპზე.

ნაბიჯი 10: დიდი სიჩქარით, მოდის დიდი პასუხისმგებლობა

ვინაიდან ეს მეთოდი ბევრად უფრო სწრაფია ვიდრე PWM, რატომ არ იყენებს analogWrite () მას? ისე, რადგან მხოლოდ PWM გამოყენება საკმაოდ კარგია პროგრამების უმეტესობისთვის და ბევრად უფრო მიმტევებელი. "ტურბო დამტენი" მეთოდი მოითხოვს ფრთხილად კოდირებას და შესაფერისია მხოლოდ კონკრეტული შემთხვევებისთვის:

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

ამ შეზღუდვების დასაძლევად, ჩემი ვექტორული გრაფიკული კოდი აკეთებს შემდეგ რამეს:

  1. იგი იყენებს ტაიმერს 1 16 კჰც სიხშირეზე და შეწყვეტის სერვისს, ზუსტი გამომავალი მანიპულირებისა და დროისათვის.
  2. ის მოითხოვს RC დროის მუდმივის სპეციფიკურ მნიშვნელობას, რაც ზღუდავს კონდენსატორისა და რეზისტორის ღირებულებების არჩევანს.
  3. ის ინახავს დროის შეფერხებებს ანიმაციის ჩარჩოს ყველა წერტილისთვის მეხსიერების ბუფერში. ეს ნიშნავს რუტინას, რომელიც ითვლის დროის შეფერხებებს ბევრად უფრო ნელი ტემპით, ვიდრე შეწყვეტის სერვისი, რომელიც განაახლებს გამომავალ ქინძისთავებს. ნებისმიერი ჩარჩო შეიძლება ათეულობითჯერ იყოს დახატული, სანამ მომდევნო ჩარჩოს დაგვიანების ახალი ნაკრები გამოსაყენებლად მზად იქნება.
  4. მეხსიერების ბუფერის გამოყენება ზღუდავს პუნქტების რაოდენობას, რომელთა დახატვაც შესაძლებელია თითო კადრზე. მე ვიყენებ სივრცის ეფექტურ კოდირებას, რათა მაქსიმალურად გამოვიყენო არსებული RAM– დან, მაგრამ ის მაინც შემოიფარგლება დაახლოებით 150 ქულით. ასზე მეტი წერტილის მიღმა, ჩვენება მაინც დაიწყებს ციმციმებას, ამიტომ ის სადავოა!

გირჩევთ: