Мазмұны:

RGB жарықдиодты матрицасы: 5 қадам
RGB жарықдиодты матрицасы: 5 қадам
Anonim
Image
Image
Аппараттық құралдардың дизайны
Аппараттық құралдардың дизайны

Instructable іздеңіз, және сіз көптеген жарық диодты матрицалық жобаларды таба аласыз. Олардың ешқайсысы мен қалағандай болмады, ол бірдеңе шығару үшін аппараттық және бағдарламалық жасақтаманың өзара әрекеттесуін зерттеп, соңғы өнімді драйвермен ұқыпты ПХД-де шығаруға мүмкіндік берді. конструкциялар (мысалы, нақты пиксельдерді қоюға қарсы сызық салу). Бұл бөлік мен үшін маңызды болды, өйткені жарықдиодты матрицаның көптеген драйверлері сүйектерден тұрады және суретті немесе анимацияны бағдарламалық түрде жасау үшін көп нәрсе бермейді. Бұл басқа драйверлермен суреттер мен анимациялар жасай алмайсыз дегенді білдірмейді, тек жобадан жобаға дейін қайталанатын жұмыс жасау керек болады.

Сондықтан мен өз көзқарасымды жүзеге асыру үшін жолға шықтым. Бірінші қадам аппараттық құралдарды жобалау болды. Бұл мен үшін ең қиын шығар, себебі менің бағдарламалық жасақтамам көбірек. Тағы да, алдын ала дайындалған көптеген конструкциялар болды, мен оларды шабыт үшін қолдандым, бірақ мен үйрену арқылы үйренгім келді, сондықтан мен 4x4 матрицаны нан тақтасында прототиптедім. Мен бұл процестен көп нәрсені білдім, өйткені менің алғашқы қайталауым нәтиже бермеді. Бірақ мен жұмыс жасайтын аппараттық дизайн жасадым, бұл маған драйверді дамытуға мүмкіндік берді.

Мен Arduino -ны драйвер платформасы ретінде таңдадым, себебі ол кеңінен таралған және желіде көптеген сілтемелер бар. Мансаптық тәжірибе драйвердің жұмыс нұсқасына менің аппараттық күш -жігерімнен гөрі жұмсақ болуға мүмкіндік берді, бірақ мен ATMega микроконтроллерінің драйверінің жұмысын оңтайландырған кезде және маған ұнайтын бағдарламалау API -ін әзірлегенде әлі де көптеген қайталанулар болды.

Бұл нұсқаулық менің жобамның дизайны мен кейбір негізгі білімдерін құжаттайды. Бұл жоба туралы толығырақ ақпаратты менің веб -сайтымнан табуға болады, оның ішінде сіз өзіңіздің жеке RGB жарықдиодты матрицасын құру үшін сатып алуға болатын толық жинақтарды таба аласыз.

1 -қадам: Жабдықтың дизайны

Менің аппараттық дизайнның негізгі мақсаты - мен бағдарламалай алатын RGB светодиодтарын құру, бірақ мен де көп ақша жұмсағым келмеді. Мен шешкен әдіс - светодиодты басқару үшін 74HC595 ауысым регистрлерін қолдану. Қажетті ауысым регистрлерінің санын азайту үшін мен RGB светодиодтарын матрицалық схемаға орналастырдым, онда жалпы анодтар қатарға, ал қызыл, жасыл және көк катодтар бағандарға байланған. 4х4 матрица үшін схема бекітілген схемаға ұқсас болды.

Сіз бірден назар аударатын нәрсе - матрицалық схеманы ескере отырып, барлық жарық диодты жарықтандырудың конфигурациялары бар, олар бір мезгілде барлық қажетті жарықдиодты қосулы бола алмайды. Мысалы, матрица бір -бірінен диагональды екі светодиоды бір мезгілде жандыра алмайды, себебі жолдар мен бағандардың екеуі де керісінше жарықдиодтарға перпендикуляр диагональда қарама -қарсы екі жарықдиодты жарықтандырады. Бұл мәселені шешу үшін біз әр жолды сканерлеу үшін мультиплекстеуді қолданамыз. Интернетте мультиплекстеу техникасын қамтитын көптеген ресурстар бар, мен оларды мұнда қайталауға тырыспаймын.

Мен жалпы анодты жарықдиодты қолданатындықтан, бұл жолдар оң қуат береді және бағандар жерге түседі. Жақсы жаңалық - 74HC595 ауысымдық регистрлері қуатты да, энергияны да түсіре алады, бірақ жаман жаңалық - оларда қанша қуат көзі бар, не батып кетеді деген шектеулер бар. 74HC595 жеке түйреуіштерінің максималды ток күші 70 мА құрайды, бірақ 20 мА -дан аз ұстаған дұрыс. Біздің RGB светодиодтарындағы жеке түстердің әрқайсысы шамамен 20 мА тартуға ие. Бұл егер мен олардың барлығын қосқым келсе, 74HC595 светодиодтардың бүкіл қатарын тікелей қуаттай алмайды.

Жолды тікелей қосудың орнына, 74HC595 әр жол үшін транзисторды басқарады, ал транзистор жолды қосатын токты қосады немесе өшіреді. Дизайн жалпы анодты жарықдиодты қолданатындықтан, коммутациялық транзистор PNP болады. Егер біз жалпы катодты жарықдиодты қолданатын болсақ, коммутациялық транзистор NPN болады. PNP транзисторын қатарды пайдалану кезінде ауысым регистрінің оны қосатын параметрі төмен болады, себебі PNP транзисторына эмитент пен база арасындағы теріс кернеуді қосу қажет, бұл оң токтың жерге өтуіне мүмкіндік береді. қатар.

Тағы бір ескеретін нәрсе - ауысым регистрлерінің қажетті бит орналасуы. Яғни, матрицаның қай жолдарын немесе бағандарын басқаратын бит ауысатын регистрлердің арасында. Мен жіберген дизайн - бұл тізбекті ауыспалы регистрлерге жіберілген бірінші бит немесе «ең маңызды бит» жарықдиодты қызыл элементтің бағанын басқарады, екінші бит бірінші бағанның жасыл элементін басқарады, үшінші бит бірінші бағанды басқарады көк элемент, төртінші бит екінші бағанның қызыл элементін басқарады,… бұл үлгі солдан оңға қарай бағандар бойынша қайталанады. Содан кейін жіберілген келесі бит соңғы немесе төменгі, келесі жолды екіншіден екінші жолға дейін басқарады, бұл соңғы жіберілгенге дейін қайталанады немесе «ең аз бит» матрицаның бірінші немесе жоғарғы жолын басқарады..

Ақырында, мен RGB светодиодындағы жарықдиодтардың әрқайсысы үшін қандай резисторларды қолданатынымды анықтауым керек болды. Қажетті резисторды есептеу үшін тура кернеуді және қажетті токты біріктіретін стандартты формуланы қолдана отырып, мен әрбір жарықдиодты 20 миллиамперге орнату қызыл, жасыл және көк жарық диодтары қосулы кезде ақшыл түске әкелетінін анықтадым.. Сондықтан мен оны көзбен қарауға кірістім. Ақ түсте тым көп қызыл түс токты азайту үшін қызыл жарықдиодты резистордың омын ұлғайтуды білдіреді. Мен әр түрлі ом резисторларын ауыстыруды қайталадым, мен ақ түсті шығаратын комбинацияны тапқанша, мен дұрыс деп таптым. Соңғы комбинация қызыл жарықдиод үшін 180 Ω, жасыл жарық диоды үшін 220 Ω және көк жарық диод үшін 100 was болды.

2 -қадам: Жабдықтың құрылысы - Нан тақтасы

Аппараттық құралдардың құрылысы - Нан тақтасы
Аппараттық құралдардың құрылысы - Нан тақтасы
Аппараттық құралдардың құрылысы - Нан тақтасы
Аппараттық құралдардың құрылысы - Нан тақтасы

Аппараттық конструктордың бірінші кезеңі нанға отырғызу болды. Мұнда мен RGB светодиодтары бар 4х4 матрицаны жасадым. Бұл матрицаны басқару үшін 16 бит қажет, RGB бағандары үшін 12 және әр жол үшін 4 бит. 74HC595 ауысымдық екі регистр мұның бәрін өңдей алады. Мен алдымен жұмыс істейтін схеманы зерттеп, жобаладым, содан кейін оны тақтаға салдым.

Нан тақтасының ең үлкен қиындығы барлық сымдарды басқару болды. Мен тақтаға арналған алдын ала дайындалған сымды жинауды алдым, бірақ содан кейін оқиға сәл ыңғайсыз болды. Мен пайдалы деп тапқан амал - Arduino тақтасына қосылу үшін «порт» құру. Яғни, Arduino -дегі түйреуіштерді нан тақтасындағы әр түрлі IC түйреуіштеріне тікелей қосудың орнына, тақтадағы бірнеше жолды Arduino -ға қосылу нүктесі ретінде арнаңыз, содан кейін тиісті сәйкестендіру түйреуіштерін осы жолдарға қосыңыз. Бұл жоба үшін сізге Arduino -ға тек бес қосылым қажет: +5V, жер, деректер, сағат және ысырма.

Нан тақтасының құрылысы аяқталғаннан кейін, мен оны сынауым керек болды. Дегенмен, ауысым регистрлеріне дұрыс сигналдарды жіберетін драйвер болмаса, мен аппараттық орналасудың жұмыс істегенін тексере алмадым.

3 -қадам: драйверлердің бағдарламалық жасақтамасы

Image
Image

Бағдарламалық қамтамасыз етуді дамытудағы жеке мансаптық тәжірибемді ескере отырып, бұл жобаның бір бөлігі болды, мен, мүмкін, бұл жолды таңдадым. Мен басқа Arduino негізіндегі жарықдиодты матрицалық драйверлердің көпшілігін зерттедім. Әрине, жақсы драйверлер бар, бірақ олардың ешқайсысы мен қалаған дизайнға ие болмады. Жүргізушінің дизайнерлік мақсаттары:

  • Суреттер мен анимацияларды бағдарламалық түрде жасай алу үшін жоғары деңгейлі API қамтамасыз етіңіз. Мен көрген драйверлердің көпшілігі қатты кодталған суреттерге көбірек көңіл бөлді. Сонымен қатар, мен C ++ бағдарламашысы болғандықтан, мен светодиодты матрицаға сурет салу әрекетін жүзеге асыру және басқару үшін объектіге бағытталған жақсы дизайнды қолданғым келді.
  • Экрандағы кескінді басқару үшін екі буферлі әдісті қолданыңыз. Бір буфер - бұл бағдарламалық түрде енгізілетін нәрсе, ал екіншісі кез келген сәтте матрица пиксельдерінің күйін көрсетеді. Бұл әдістің артықшылығы мынада, мультиплекстеудің жаңарту циклдерінің арасында экран үшін келесі кадрлық жаңартуды толығымен көрсету қажет емес.
  • PWM көмегімен RGB қызыл, жасыл және көк элементтердің қарапайым комбинациялары арқылы көрсетуге болатын жеті қарапайым түстерге рұқсат беру үшін пайдаланыңыз.
  • Драйверді менің жалпы матрицалық дизайн тәсіліне сәйкес келетін RGB жарықдиодты әр түрлі өлшемді матрицалармен «жұмыс істейтін» етіп жазыңыз. Назар аударыңыз, менің аппараттық дизайн 74HC595 ауысымдық регистрлерін қолданса, мен драйверімнің кез келген ауысу регистрі стилін қосу/өшіру механизмімен жұмыс істеуін күтемін, ол менің қондырғылардың дизайны сияқты ұқсас орналасуды қолданады. Мысалы, менің жүргізушім бағандарды басқару үшін DM13A чиптерін және жолдарды басқару үшін 74HC595 чипін қолданатын аппараттық дизайнмен жұмыс жасайды деп күтер едім.

Егер сіз драйвер кодын іздегіңіз келсе, оны GitHub -дан таба аласыз.

Менің драйверімнің бірінші қайталануы Arduino платформасының мүмкіндіктерін үйрену қисығы болды. Ең айқын шектеу - бұл RAM, бұл Arduino Uno мен Nano үшін 2K байт. Мұндай сценарийде C ++ нысандарын пайдалану объектілердің жадының үстеме болуына байланысты жиі ұсынылмайды. Алайда, егер мен дұрыс жасасам, C ++ объектілерінің пайдасы олардың бағасынан асып кеткенін сездім (ЖЖҚ).

Екінші басты мәселе-RGB светодиодының жеті қарапайым түстерінен артық генерациялау үшін импульстік ен модуляциясын ауысым регистрлері арқылы қалай енгізу керектігін анықтау. Көптеген жылдар бойы Linux платформаларында бағдарламаланғандықтан, мен дәйекті уақытты қажет ететін процестерді басқару үшін ағындар сияқты конструкцияларды қолдануға үйрендім. Жылжу регистрін жаңарту операциясының уақыты мультиплекстеуді қолданатын жарықдиодты матрицаның драйверін жасау кезінде өте маңызды болып табылады. Мұның себебі, мультиплекстеу өте жылдам жүрсе де, сіздің көздеріңіз жарықдиодты шамдардың жанып -өшіп тұрғанын көре алмайтынына қарамастан, сіздің көздеріңіз светодиодтардың кез келгені қосылатын уақыттың жалпы айырмашылығын анықтай алады. Егер светодиодтардың бір қатары басқаларына қарағанда ұзақ уақыт бойы тұрақты түрде қосылып тұрса, мультиплекстеу кезінде ол жарқын болып көрінеді. Бұл матрицаның біркелкі емес жарықтылығына немесе тұтастай матрицаның периодты стрингіне әкелуі мүмкін (бұл бір жаңарту циклі басқаларына қарағанда ұзағырақ уақытқа созылады).

Маған ауысым регистрінің жаңартылуын келісу үшін дәйекті уақыт механизмі қажет болғандықтан, бірақ Arduino ағынды ресми түрде қолдамайды, мен өзімнің ағынға ұқсас механизмімді құруға тура келді. Менің бірінші қайталануым - Arduino loop () функциясына тәуелді цикл таймерін құру және әрекет соңғы рет аяқталғаннан кейін белгілі бір уақыт өткенде әрекетті отқа түсіру болды. Бұл «кооперативті көп тапсырма» формасы. Жақсы естіледі, бірақ іс жүзінде бұл атыс жылдамдығы микросекундтарда өлшенген кезде сәйкес келмеді. Мұның себебі, егер менде осы цикл таймерінің екеуі болса, олардың бір әрекеті жиі екінші әрекеттің қалағаннан кешірек өртенуіне себеп болады.

Мен бұл мәселенің шешімі Arduino -ның жергілікті сағатты үзу механизмін қолдану екенін білдім. Бұл механизм өте аз уақыт ішінде кодты іске қосуға мүмкіндік береді. Мен драйвер кодын матрицаның ауысуын жіберу кодын іске қосу үшін сағаттық үзілісті пайдаланудың дизайн элементінің айналасында мультиплекстік циклдегі келесі жаңартуды тіркедім. Мұны істеу үшін және ауысым регистрлеріне белсенді демпингке кедергі келтірмеу үшін экран суретін жаңартуға мүмкіндік беру үшін (біз оны «жарыс жағдайы» деп атайтын боламыз), мен ауысым регистрінің биттері үшін қосарланған буферге ие болу әдісін қолдандым. жазу үшін және біреуі оқу үшін. Қолданушы матрицалық кескінді жаңартқанда, бұл әрекеттер жазу буферінде орын алады. Бұл әрекеттер аяқталғаннан кейін үзілістер уақытша тоқтатылады (бұл сағат үзілісінің іске қосылмайтынын білдіреді) және жазу буфері алдыңғы оқу буферімен ауыстырылады және бұл жаңа оқу буфері емес, содан кейін интерпретациялар қайта қосылады. Содан кейін, ауысым регистрлеріне келесі бит конфигурациясын жіберу уақыты келгенін көрсететін сағаттық үзіліс пайда болған кезде, бұл ақпарат ағымдағы оқу буферінен оқылады. Осылайша, ауысым регистрлеріне жіберілген ақпаратты бүлдіруі мүмкін, қазіргі уақытта сағат үзілісі кезінде оқылуы мүмкін буферге ешқандай жазу болмайды.

Драйвердің қалған бөлігін жобалау объектіге бағытталған дизайнның салыстырмалы түрде қарапайым жағдайы болды. Мысалы, мен кез келген берілген экран күйі үшін жылжу регистрінің бит кескінін басқару үшін объект құрдым. Бит кескінін басқаруға қатысты кодты инкапсуляциялау арқылы жоғарыда айтылған егіз буферлік тәсілді жасаудың өзі қарапайым жаттығу болды. Бірақ мен бұл нұсқаулықты объектіге бағдарланған дизайнның артықшылықтарын дәріптеу үшін жазған жоқпын. Басқа дизайн элементіне Glyph және RGB Image түсінігі кіреді. Глиф - бұл туа біткен түс ақпараты жоқ негізгі сурет құрылымы. Сіз мұны ақ -қара сурет ретінде елестете аласыз. Глиф жарықдиодты экранға тартылған кезде «ақ» пикселдердің қалай боялуы керектігін көрсету үшін түс туралы ақпарат беріледі. RGB кескіні - бұл әр пиксельде өзінің түсі туралы ақпарат бар сурет.

Мен сізге RGB светодиодты матрицасында суреттер мен анимациялар жасау үшін драйверді қалай қолдану керектігін білу үшін Arduino эскиздерінің мысалдарын және драйвер тақырыбының құжаттамасын қарауға кеңес беремін.

4 -қадам: жарықдиодты жарықтандыру

Жарықдиодты жарықтандыру
Жарықдиодты жарықтандыру
Жарықдиодты жарықтандыру
Жарықдиодты жарықтандыру

Жарық диодты матрицада «елес» - бұл матрицадағы жарық диодты қажет емес кезде жарқырау құбылысы, әдетте өте төмен деңгей. Менің түпнұсқалық аппараттық дизайным елес алуға бейім болды, әсіресе соңғы қатарда. Мұның себебі екі нәрсеге байланысты: транзисторлар бірден өшпейді және RGB светодиодтарындағы паразиттік сыйымдылық.

Жолдарды сканерлегенде, транзисторлар бірден сөнбейтіндіктен, келесі жол қосылған кезде сканерлеу циклінің алдыңғы жолы әлі де жартылай қосылады. Егер алдыңғы қатарда өшірілген берілген баған жаңа жолға қосылғанда жаңадан қосылатын болса, алдыңғы қатардағы коммутатор транзисторы әлі бұрылу кезеңінде, алдыңғы қатардағы сол бағанның жарық диоды қысқа уақытқа жанады. өшірулі Транзистордың өшуіне айтарлықтай уақыт кетуіне себеп болатын нәрсе - бұл транзистордың негізіндегі қанықтылық. Бұл транзисторлық коллекторлық-эмитенттік жолды негізден ток шығарылған кезде, кем дегенде қанықтылық жойылғанша жалғастырады. Біздің мультиплекстеу жаңарту циклі жолдарды микросекундпен өлшенетін уақыт ішінде әдейі қосуға әкелетінін ескере отырып, алдыңғы жолдың қаныққан транзисторының өткізгіш болып қалатын уақыты оның айтарлықтай бөлігі болуы мүмкін. Нәтижесінде сіздің көзіңіз алдыңғы қатардағы жарықдиодты шам қосулы тұрған уақытты қабылдай алады.

Транзистордың қанықтылық мәселесін шешу үшін транзистор қосылған кезде базаға аздап кері ток әкелуі үшін транзистордың қанықтырылуына жол бермеу үшін база мен коллектор арасындағы транзисторға Шоткий диодын қосуға болады. Бұл өз кезегінде транзистор токтан базадан шығарылған кезде тезірек өшуіне әкеледі. Бұл әсерді терең түсіндіру үшін осы мақаланы қараңыз. Бұл бөлімдегі суреттен көріп отырғаныңыздай, диодсыз елестеу айтарлықтай байқалады, бірақ диодты әр қатарға схемаға қосу елестеуді айтарлықтай жояды.

RGB светодиодтары паразиттік сыйымдылық деп аталатын басқа құбылысқа сезімтал. Мұның негізгі себебі - RGB светодиоды қондырғысындағы үш түсті светодиодтың әрқайсысының тура бағыттауыш кернеуі әр түрлі болуы. Алға кернеулердегі бұл айырмашылық жарықдиодты түстердің әрқайсысы арасындағы электр сыйымдылығының әсерін тудыруы мүмкін. Жарық диодты қондырғыда электр заряды жиналғандықтан, қуат өшірілгенде паразиттік сыйымдылықты босату қажет. Егер сол жарық диодты баған басқа жолдың қуаты үшін қосулы болса, онда паразиттік заряд сол бағдаршамның светодиодтарынан ағып кетеді де, оның қысқа жарқылына әкеледі. Бұл әсер осы мақалада жақсы түсіндірілген. Шешім - бұл паразиттік зарядтың светодиодыдан басқа разряд жолын қосу, содан кейін бағананың қайта қуатталуына дейін жарықдиодты зарядтауға уақыт беру. Менің аппараттық дизайнымда бұл күшті жерге қосатын әр қатардың электр желісіне резисторды қосу арқылы жүзеге асады. Бұл қатарға қосылған кезде токтың көбірек тартылуына әкеледі, бірақ паразиттік сыйымдылық үшін разряд жолын қамтамасыз етпейді.

Айта кету керек, іс жүзінде мен паразиттік сыйымдылықтың әсерін айтарлықтай байқамаймын (егер сіз оны іздесеңіз, оны таба аласыз), сондықтан мен бұл қосымша резисторды міндетті емес деп санаймын. Қаныққан транзисторлар үшін баяу уақыттың әсері әлдеқайда күшті және байқалады. Осыған қарамастан, егер сіз осы бөлімде берілген үш фотосуретті тексерсеңіз, резисторлар баяу транзистордың жұмыс уақытынан асып кететін кез келген елесті толығымен жоятынын көре аласыз.

5 -қадам: Соңғы өндіріс және келесі қадамдар

Image
Image

Бұл жобаның соңғы кезеңі мен үшін баспа платасын (ПХД) жасау болды. Мен PCB құрастыру үшін Fritzing ашық бастапқы бағдарламасын қолдандым. 10х10 тақтаға 100 жарықдиодты орналастыру үшін қайталанатын тапсырмалар көп болғанымен, мен жобаның бұл кезеңін біртүрлі қанағаттандырды деп таптым. Әр электрлік жолдың қалай салынатынын білу жұмбақ сияқты болды, және бұл жұмбақты шешу сәттілік сезімін тудырды. Мен схемалық тақталарды шығаруға дайын болмағандықтан, мен ПКД -нің кішігірім жұмысымен айналысатын көптеген онлайн -ресурстардың бірін қолдандым. Бөлшектерді бір-бірімен дәнекерлеу өте қарапайым болды, өйткені менің дизайнымда тесік бөлшектері қолданылған.

Бұл нұсқаулықты жазу кезінде менің RGB LED Matrix жобаларым үшін келесі жоспарлар бар:

  1. API деңгейінде драйверді жетілдіруді жалғастырыңыз, бұл бағдарламашыға жоғары деңгейлі функцияларға мүмкіндік береді, әсіресе мәтінді айналдыру.
  2. Үлкен матрицалық конструкцияларды жасаңыз, мысалы 16x16 немесе тіпті 16x32.
  3. Қатарды ауыстыру үшін BJT орнына MOSFET қолданыңыз
  4. Бағанды ауыстыру үшін 74HC595 емес, DM13A тұрақты ток драйверлерін қолданыңыз
  5. Teensy, ODROID C2 немесе Raspberry Pi сияқты басқа микро басқару платформалары үшін драйверлер жасаңыз.

Аппараттық дизайн да, драйвер де GitHub репозиторийінде GPL v3 ашық бастапқы коды лицензиясы бойынша шығарылғанын ескеріңіз. Сонымен қатар, ПХД өндірушілері менің ПХД конструкциясымен «кішігірім» жұмыс жасайтынына қарамастан, мен әлі де өзіме қажет нәрсені аламын. Мен мұнда менің веб -сайтымнан RGB светодиодты матрицаның әр түрлі конструкцияларына (ПХД және оның барлық бөлшектері) арналған толық жинақтарды сатамын.

Ұсынылған: