Სარჩევი:

RGB LED მატრიცა: 5 ნაბიჯი
RGB LED მატრიცა: 5 ნაბიჯი

ვიდეო: RGB LED მატრიცა: 5 ნაბიჯი

ვიდეო: RGB LED მატრიცა: 5 ნაბიჯი
ვიდეო: Make your own 15x10 RGB LED Matrix - Part 1 2024, ივლისი
Anonim
Image
Image
აპარატურის დიზაინი
აპარატურის დიზაინი

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

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

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

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

ნაბიჯი 1: აპარატურის დიზაინი

ჩემი აპარატურის დიზაინის უპირველესი მიზანი იყო RGB LED- ების მასივის შექმნა, რომელთა დაპროგრამებაც შემეძლო, მაგრამ ასევე არ მინდოდა ბევრი ფულის დახარჯვა. მიდგომა, რომელზეც განვსაზღვრე, იყო 74HC595 ცვლის რეგისტრატორების გამოყენება LED- ების გასაკონტროლებლად. ცვლის რეგისტრატორების რაოდენობის შესამცირებლად, მე დავამუშავე RGB LED- ები მატრიცულ განლაგებაში, სადაც საერთო ანოდები რიგებში იყო მიბმული და წითელი, მწვანე და ლურჯი კათოდური კავშირები სვეტებში იყო მიბმული. 4x4 მატრიცისათვის წრიული დიაგრამა ჰგავდა თანდართულ წრიულ დიაგრამას.

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

ვინაიდან მე ვიყენებ საერთო ანოდის LED- ებს, ეს ნიშნავს, რომ რიგები უზრუნველყოფენ დადებით ძალას და სვეტები იძირება მიწაზე. კარგი ამბავი ის არის, რომ 74HC595 ცვლის რეგისტრატორებს შეუძლიათ ენერგიის წყაროც და ჩაძირვაც, მაგრამ ცუდი ამბავი ის არის, რომ მათ აქვთ შეზღუდვა იმაზე, თუ რამდენ ენერგიას მიიღებენ ან იძირებიან. 74HC595– ის ცალკეულ ქინძისთავებს აქვთ მაქსიმალური დენი 70 mA, მაგრამ უმჯობესია შეინახოთ 20 mA– ზე ნაკლები. ჩვენს RGB LED- ების ინდივიდუალურ ფერებს თითოეულს აქვს დაახლოებით 20 mA გათამაშება. ეს ნიშნავს, რომ 74HC595 პირდაპირ ვერ გაააქტიურებს LED- ების მთელ რიგს, თუ მსურს მათი ჩართვა.

ამრიგად, მწკრივის უშუალოდ გააქტიურების ნაცვლად, 74HC595 თითოეული ტრასისთვის ტრანზისტორი ამოძრავებს, ხოლო ტრანზისტორი ჩართავს ან გამორთავს მწკრივზე მიმდინარე ენერგიას. ვინაიდან დიზაინი იყენებს საერთო ანოდის LED- ებს, გადართვის ტრანზისტორი იქნება PNP. თუ ჩვენ ვიყენებდით საერთო კათოდურ LED- ს, გადართვის ტრანზისტორი იქნებოდა NPN. გაითვალისწინეთ, რომ PNP ტრანზისტორი რიგის დასაძრავად, ცვლის რეგისტრის პარამეტრი, რომ ის ჩართოთ, ახლა დაბალი ხდება, რადგან PNP ტრანზისტორს სჭირდება უარყოფითი ძაბვა ემიტერსა და ფუძეს შორის ჩართვისთვის, რაც საშუალებას მისცემს პოზიტიური დენის შემოდინებას რიგი

კიდევ ერთი გასათვალისწინებელია ცვლის რეგისტრატორების სასურველი ბიტი განლაგება. ანუ, ცვლის რეგისტრებს შორის, რომელიც ბიტი აკონტროლებს მატრიქსში არსებულ რიგებს ან სვეტებს. დიზაინი, რომელსაც მე გამოვგზავნე, არის იქ, სადაც პირველი ბიტი, ან "ყველაზე მნიშვნელოვანი ბიტი", რომელიც გადაგზავნილია გვირილაში მიჯაჭვული ცვლის რეგისტრებში, აკონტროლებს LED- ების წითელი ელემენტის სვეტს, მეორე ბიტი აკონტროლებს პირველი სვეტის მწვანე ელემენტს, მესამე ბიტი აკონტროლებს პირველ სვეტს ლურჯი ელემენტი, მეოთხე ბიტი აკონტროლებს მეორე სვეტის წითელ ელემენტს,… ეს ნიმუში მეორდება სვეტებზე მარცხნიდან მარჯვნივ. შემდეგ გაგზავნილი მომდევნო ბიტი აკონტროლებს ბოლო, ან ქვედა, რიგს, მომდევნო მეორე ბოლო რიგს,… ეს მეორდება ბოლო გაგზავნილ ბიტამდე, ან "უმნიშვნელოდ უმნიშვნელო ბიტამდე", აკონტროლებს პირველ ან ზედა რიგს მატრიცაში რა

დაბოლოს, მე მჭირდებოდა იმის განსაზღვრა, თუ რა რეზისტორებს გამოვიყენებ RGB LED- ის თითოეული LED- ისთვის. მიუხედავად იმისა, რომ თქვენ შეგიძლიათ გამოიყენოთ სტანდარტული ფორმულა, რომელიც აერთიანებს წინამორბედ ძაბვას და სასურველ დენს საჭირო რეზისტორის გამოსათვლელად, აღმოვაჩინე, რომ თითოეული LED- ის დენის 20 მილიამპერზე დაყენება გამოიწვია თეთრი ფერის შეფერილობამ, როდესაც ყველა წითელი, მწვანე და ლურჯი LED- ები იყო ჩართული რა ასე დავიწყე თვალის დახამხამება. თეთრში ძალიან ბევრი წითელი ნიშნავდა წითელი LED- ის რეზისტენტული ომის გაზრდას დენის შესამცირებლად. მე ვიმეორებდი სხვადასხვა ომის რეზისტორების გამოცვლას, სანამ არ ვიპოვე ისეთი კომბინაცია, რომელიც წარმოშობდა თეთრ ფერს და მიმაჩნდა სწორად. საბოლოო კომბინაცია იყო 180 Ω წითელი LED, 220 Ω მწვანე LED და 100 Ω ლურჯი LED.

ნაბიჯი 2: აპარატურის კონსტრუქცია - პურის დაფა

აპარატურის კონსტრუქცია - პურის დაფა
აპარატურის კონსტრუქცია - პურის დაფა
აპარატურის კონსტრუქცია - პურის დაფა
აპარატურის კონსტრუქცია - პურის დაფა

ტექნიკის კონსტრუქტორის პირველი ეტაპი იყო პურის ჩასხდომა. აქ მე გავაკეთე 4x4 მატრიცა RGB LED- ებით. ამ მატრიცას დასჭირდება 16 ბიტი გასაკონტროლებლად, 12 RGB სვეტისთვის და 4 თითოეული რიგისთვის. ორი 74HC595 ცვლის რეგისტრატორს შეუძლია გაუმკლავდეს ამ ყველაფერს. მე ჯერ გამოვიკვლიე და შევიმუშავე წრე, რომელიც მეგონა, რომ იმუშავებდა, შემდეგ ავაშენე ის პურის დაფაზე.

ალბათ ყველაზე დიდი გამოწვევა breadboard- ის მშენებლობაში იყო ყველა მავთულის მართვა. მე ავიღე წინასწარ ჩამოყალიბებული მავთულის ნაკრები პურის დაფებისთვის, მაგრამ მაშინ ეს იყო ცოტა მძიმე. ხრიკი, რომელიც მე დამხმარე აღმოვაჩინე, იყო "პორტის" შექმნა არდუინოს დაფასთან დასაკავშირებლად. ანუ, ვიდრე არდუინოს ქინძისთავები პირდაპირ დააკავშიროთ პურის დაფაზე არსებულ სხვადასხვა IC ქინძისთავებთან, დაუთმეთ რამოდენიმე მწკრივი პურის დაფაზე, რომ იყოს არდუინოს დამაკავშირებელი წერტილი და შემდეგ დაუკავშიროთ შესაბამისი ID ქინძისთავები ამ რიგებს. ამ პროექტისთვის თქვენ გჭირდებათ მხოლოდ ხუთი კავშირი Arduino– სთან: +5V, მიწა, მონაცემები, საათი და ჩამკეტი.

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

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

Image
Image

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

  • მიაწოდეთ მაღალი დონის API, რომ შეძლოთ პროგრამულად შექმნათ სურათები და ანიმაციები. მძღოლების უმეტესობა, რომლებიც ვნახე, უფრო მეტად იყო ორიენტირებული მყარ კოდირებულ სურათებზე. ასევე, ვინაიდან მე ვარ C ++ პროგრამისტი პროფესიით, მინდოდა გამომეყენებინა კარგი ობიექტზე ორიენტირებული დიზაინი, რათა განეხორციელებინა და განეხორციელებინა LED მატრიცაზე ხატვის აქტივობები.
  • გამოიყენეთ ორმაგი ბუფერული მიდგომა ეკრანზე გამოსახულების მართვისთვის. ერთი ბუფერი არის ის, რაც პროგრამულად ხვდება, ხოლო მეორე წარმოადგენს მატრიცის პიქსელების მდგომარეობას ნებისმიერ მომენტში. ამ მიდგომის უპირატესობა ის არის, რომ თქვენ არ გჭირდებათ სრულად განახორციელოთ ეკრანის შემდეგი ჩარჩო განახლება მულტიპლექსირების განახლების ციკლებს შორის.
  • გამოიყენეთ PWM, რათა დაუშვათ შვიდზე მეტი პრიმიტიული ფერი, რომელსაც RGB- ს შეუძლია გამოიმუშაოს წითელი, მწვანე და ლურჯი ელემენტების მარტივი კომბინაციები.
  • ჩაწერეთ მძღოლი ისე, რომ ის "უბრალოდ იმუშაოს" სხვადასხვა ზომის RGB LED მატრიცებით, რომელიც მოჰყვა ჩემს ზოგად მატრიცის დიზაინის მიდგომას. გაითვალისწინეთ, რომ სანამ ჩემი აპარატურის დიზაინი იყენებს 74HC595 ცვლის რეგისტრატორებს, მე ველოდები, რომ ჩემი მძღოლი იმუშავებს/გამორთავს ნებისმიერი ცვლის რეგისტრის სტილში, რომელიც ასახულია მსგავსი ბიტიანი განლაგების გამოყენებით, როგორც ჩემი აპარატურის დიზაინი. მაგალითად, მე ველოდი, რომ ჩემი მძღოლი იმუშავებდა ტექნიკის დიზაინზე, რომელიც იყენებდა DM13A ჩიპებს სვეტების გასაკონტროლებლად და 74HC595 ჩიპს რიგების გასაკონტროლებლად.

თუ გსურთ პირდაპირ გადახედოთ მძღოლის კოდს, შეგიძლიათ იპოვოთ ის GitHub– ზე აქ.

ჩემი მძღოლის პირველი გამეორება იყო სწავლის მრუდი არდუინოს პლატფორმის შესაძლებლობებზე. ყველაზე აშკარა შეზღუდვა არის RAM, რომელიც არის 2K ბაიტი Arduino Uno და Nano– სთვის. ასეთ სცენარში C ++ ობიექტების გამოყენება ხშირად არ არის რეკომენდებული ობიექტების მეხსიერების გამო. თუმცა, მე ვიგრძენი, რომ თუ ყველაფერი სწორად გაკეთდა, C ++ - ში ობიექტების სარგებელმა გადააჭარბა მათ ღირებულებას (RAM– ში).

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

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

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

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

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

ნაბიჯი 4: LED Ghosting

LED მოჩვენებები
LED მოჩვენებები
LED მოჩვენებები
LED მოჩვენებები

LED მატრიცაში "აჩრდილი" არის ფენომენი LED მატრიცაში, რომელიც ანათებს, როდესაც ეს არ არის სასურველი, ჩვეულებრივ ძალიან შემცირებული დონე. ჩემი ორიგინალური აპარატურის დიზაინი მგრძნობიარე იყო აჩრდილებისთვის, განსაკუთრებით ბოლო რიგში. ამის მიზეზი ორი რამ არის: ტრანზისტორი დაუყოვნებლივ არ ითიშება და პარაზიტული ტევადობა RGB LED- ებში.

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

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

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

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

ნაბიჯი 5: საბოლოო წარმოება და შემდეგი ნაბიჯები

Image
Image

ამ პროექტის ბოლო ეტაპი იყო ჩემთვის ბეჭდური მიკროსქემის დაფის (PCB) შექმნა. მე გამოვიყენე ღია კოდის პროგრამა Fritzing ჩემი PCB- ის შესაქმნელად. მიუხედავად იმისა, რომ ბევრი განმეორებადი ამოცანა იყო 10x10 დაფაზე 100 LED- ის განლაგების შესასრულებლად, მე რეალურად აღმოვაჩინე პროექტის ეს ეტაპი უცნაურად დამაკმაყოფილებელი. იმის გარკვევა, თუ როგორ დაიგება თითოეული ელექტრული გზა თავსატეხს ჰგავდა და ამ თავსატეხის ამოხსნამ შექმნა მიღწევის გრძნობა. მას შემდეგ, რაც მე არ ვარ დაფუძნებული მიკროსქემის დაფების წარმოებაზე, მე გამოვიყენე ერთ – ერთი იმ მრავალი ონლაინ რესურსიდან, რომელიც ასრულებს პერსონალურ PCB– ს მცირე მუშაობას. ნაწილების ერთმანეთთან შედუღება საკმაოდ წინ იყო, რადგან ჩემს დიზაინში გამოყენებული იყო ყველა ხვრელი.

ამ ინსტრუქციის წერის დროს, მე მაქვს შემდეგი გეგმები ჩემი RGB LED მატრიქსის პროექტებისთვის:

  1. განაგრძეთ დრაივერის გაუმჯობესება API ფენაში, რათა პროგრამისტს მიაწოდოს უფრო მაღალი დონის ფუნქციონირება, განსაკუთრებით ტექსტის გადახვევა.
  2. შექმენით უფრო დიდი მატრიცის დიზაინი, მაგალითად 16x16 ან თუნდაც 16x32.
  3. შეისწავლეთ MOSFET– ების გამოყენება BJT– ების ნაცვლად რიგის ენერგიის გადართვისთვის
  4. შეისწავლეთ DM13A როგორც მუდმივი დრაივერები, ვიდრე 74HC595s სვეტის გადართვისთვის
  5. შექმენით დრაივერები სხვა მიკრო კონტროლის პლატფორმებისთვის, როგორიცაა Teensy, ODROID C2 ან Raspberry Pi.

გაითვალისწინეთ, რომ ტექნიკის დიზაინი და დრაივერი გამოქვეყნებულია GPL v3 ღია კოდის ლიცენზიით ამ GitHub საცავში. გარდა ამისა, მიუხედავად იმისა, რომ PCB- ის მწარმოებლები აკეთებენ ჩემი PCB დიზაინის "მცირე გაშვებებს", მე მაინც იმაზე მეტს ვიღებ, ვიდრე მე პირადად მჭირდება. ასე რომ, მე ვყიდი სრულ კომპლექტებს ჩემი სხვადასხვა RGB LED მატრიცის დიზაინისთვის (PCB და ყველა ნაწილი შედის) ჩემი ვებ გვერდიდან აქ.

გირჩევთ: