Innehållsförteckning:

Designa en multi -nod LED PWM -lampa: 6 steg (med bilder)
Designa en multi -nod LED PWM -lampa: 6 steg (med bilder)

Video: Designa en multi -nod LED PWM -lampa: 6 steg (med bilder)

Video: Designa en multi -nod LED PWM -lampa: 6 steg (med bilder)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, November
Anonim
Designa en Multi Node LED PWM -lampa
Designa en Multi Node LED PWM -lampa

Denna instruerbara kommer att visa hur jag utformade en LED PWM -lampstyrning. Flera lampor kan bindas ihop för att skapa stora strängar av ljus. Att skapa några blinkande LED -lampor till jul har alltid stått på min önskelista. Förra julen började jag verkligen tänka på att bygga något. Min första tanke var att varje LED -lampa helt enkelt kunde anslutas till ett par ledningar. Strömmen till LED -lamporna kan vara en AC -signal som skulle svepa från en låg frekvens till en hög frekvens. Ett bandpassfilter inbyggt i varje lampa skulle tända lysdioden när frekvensen matchade mittfrekvensen för bandpassfiltret. Om bandpassfiltren var rätt inställda kunde en LED-jakt-sekvens göras. Genom att hoppa till olika frekvenser istället för att svepa kan man verkligen slå på någon av lysdioderna. Att använda ett H -Bridge -drivrutinschip borde inte vara för svårt att köra önskad frekvens längs ledningarna. Tja, jag stinker bara av analog design - jag är mer av programvara som en kille. Efter ett par bänktester gav jag snabbt upp med att använda analog. Vad jag egentligen ville var en LED -lampa som kunde styras helt för att visa vilken färg jag ville. Åh, och den borde kunna använda PWM (pulsbreddsmodulering) så att lysdioderna kan slås på eller av i riktigt coola mönster. som föll ur min önskan om julgransljus. Ta en snabb titt på videon nedan för att snabbt se vad Kemper LED PWM Lamp Controller kan visa. Observera att det är svårt att få en bra video av lysdioder i funktion som använder PWM för intensitetskontroll. Det är samma problem när du försöker spela in en datorskärm. 60Hz av lysdioderna kommer in i en slagfrekvensstrid med videokamerans 30Hz. Även om det ibland är så att videon av lysdioderna är lite "glitchy", så är detta inte riktigt fallet. Lysdioderna verkar inte ha några fel när de ses av det mänskliga ögat. Se programvarusteget nedan för mer diskussion om videoavlyssning av lysdioder.

Steg 1: Designmål

Designmål
Designmål

Efter att ha tillbringat jullovet med att tänka på det här projektet kom jag på en önskelista. Här är några av de funktioner (sorterade i ordning) jag ville ha med min LED -styrenhet: 1) Varje LED -lampa måste vara så billig som möjligt. En sträng med 100 lampor kommer att kosta ett gäng om varje lampa kostar mycket. Kostnaden är därför en viktig faktor. 2) Varje lampa har en liten mikro ombord som driver lysdioderna. Den lilla mikron genererar PWM -signaler så att lysdioderna kan dämpas eller bleknas. Lysdioder kan se hårda ut när de bara slås på och av. Genom att använda PWM-signaler kan lysdioderna blekna upp och ner utan de hårda kanterna som är normala för lysdioder. 3) För att hålla kablarna enkla accepterar varje lampa kommandon med ett tvåtrådigt gränssnitt. Ström och kommunikation kommer att dela samma två ledningar. Kommandona till lamporna kommer att berätta ombordmikron vilken av lysdioderna som ska köras med PWM.4) Måste se cool ut! Jag antar att det här verkligen borde numreras om så det är nummer ett. Här är några av de mindre designmålen (ingen särskild ordning): 1) För utveckling måste det vara lätt att om- / omprogrammera kretsen. 2) En dator ska kunna generera kommandon till lamporna. Detta gör utvecklingen av mönster mycket enklare än att använda en annan inbäddad mikro.3) Varje lampa ska ha en unik adress. Varje lysdiod, inom en lampa, måste också vara unikt adresserbar.4) Kommandoprotokollet bör stödja Många lampor på en trådsträng. Den nuvarande designen stöder 128 lampor på en sträng. Med 4 lysdioder per lampa som räcker till 512 lysdioder på en sträng med två ledningar! Observera också att var och en av dessa 512 lysdioder har full PWM som driver den. 5) Protokollet bör ha ett kommando som säger "Börja blekna lysdioden från denna nivå till den nivån". När blekning startar kan andra lysdioder också ställas in och blekna på samma lampa. Med andra ord, ställ in en lysdiod i ett blekningsmönster och glöm det sedan att veta att lysdioden kommer att utföra kommandot. Detta innebär multitasking -programvara på micro! 6) Det bör finnas globala kommandon som påverkar alla lampor samtidigt. Därför kan alla lysdioder kommanderas med bara ett kommando. Här är några riktigt mindre designmål (igen, ingen särskild ordning): 1) Behöver ett sätt att få en lampan rapport när ett komm fel uppstår. Detta skulle tillåta att kommandot skickas igen. 2) Kommandoprotokollet behöver ett sätt att ha ett fint globalt matchningsmönster. Detta gör att varje x antal lampor kan väljas med ett kommando. Detta skulle göra det lättare att göra jaktmönster med ett stort antal lampor. Som ett exempel skulle detta möjliggöra att ett kommando skickas till var tredje lampa på en lampsträng. Därefter kan nästa kommando skickas till nästa grupp om tre. 3) Ett logiskt system för auto comm polarity detect skulle också vara bra. Då blir polariteten hos de två matningskablarna till LED -lamporna oviktig. Se hårdvaruavsnittet för mer information om den här funktionen.

Steg 2: Prototypning:

Prototyper
Prototyper
Prototyper
Prototyper
Prototyper
Prototyper

Det är nu i början av januari och jag åker. Jag hittade 10F206 på Digikey och det är riktigt billigt! Så, jag snurrar en proto board för att hålla en 10F206 micro från Microchip. Jag konstruerade en snabbkort eftersom 10F2xx inte finns i ett DIP -paket. Kort sagt, jag ville inte krångla med det lilla chipet. (Jag var så säker redan i januari) Jag gick också iväg och köpte en ny CSS C -kompilator riktad mot 10F2xx -mikroerna. Chipsfamiljen 10F2xx är riktigt billig! Med stora förhoppningar dök jag in och började skriva massor av kod. 10F206 har hela 24 byte RAM - chipet har också 512 byte flash och en åtta -bitars timer. Medan resurserna är glesa är priset bra på 41 cent i stora mängder. Herregud, en miljon instruktioner per sekund (1 MIPS) för 41 cent! Jag bara älskar Moores lag. Evan till engångspriser, 10F206 från Digikey är noterad till 66 cent. Jag tillbringade mycket tid med att arbeta med 10F206. När jag arbetade med 10F206 upptäckte jag att multitasking är absolut nödvändigt. PWM -utsignalerna MÅSTE hållas uppdaterade även när nya kommunikationsmeddelanden tas emot. Varje avbrott i uppdateringen av PWM -signalerna kommer att ses som fel på lysdioderna. Det mänskliga ögat är riktigt bra på att se misslyckanden. Det finns ett par grundläggande problem med 10F206 -chipet. Åtminstone grundläggande problem för min ansökan. Det första problemet är att det inte finns några avbrott! Att fånga starten på ny kommunikation med hjälp av en omröstningsslinga ger tidsfel. Ett andra problem är att det bara finns en timer. Jag kunde bara inte hitta ett sätt att ta emot kommandon samtidigt som jag behåller PWM -utgångarna. Lysdioderna glider varje gång ett nytt kommando tas emot. Att dela timern mellan att ta emot kommandon och köra PWM -utgångar var också ett stort problem med mjukvaran. Jag kunde inte återställa timern när jag fick ett nytt tecken eftersom timern också användes för att styra PWM -signalerna. Under arbetet med 10F206 såg jag en artikel i Circuit Cellar om Freescales nya lilla MC9RS08KA1 mikro. Jag älskar Freescale -chips - jag är ett stort fan av deras BDM -felsökning. Jag använde Star12 -chipsen mycket tidigare (jag skrev all programvara för GM Cadillac & Lacern ultraljudssystem på en Star12 - min ultraljudsprogramvara är i produktion nu på dessa två bilar). Så jag hoppades verkligen att deras nya små chips skulle vara bra. Priset är också rätt, Digikey har dessa marker listade till 38 cent i stor mängd. Fri skala var bra och skickade mig några gratisprover. Freescale 9RS08 -chipet verkade dock riktigt fånigt - jag kunde inte göra stora framsteg med det. Chippet lider också med brist på avbrott och bara en timer. Nåväl, jag kom åtminstone på det hela utan att slösa bort pengar på att snurra ytterligare en proto -bräda. Se bilderna nedan. Nu vet jag - för min ansökan måste jag ha avbrott och mer än en timer. Tillbaka till Microchip, jag hittade 12F609 -chipet. Den har avbrott och två timers. Den har också 1K flash och 64 byte RAM. Nackdelen är priset; Digikey listar dessa marker till 76 cent i stor mängd. Nåväl, Moores lag kommer att ta hand om det snart nog. På plussidan kan 12F609 också beställas i DIP -paket. På minussidan var jag tvungen att köpa nästa nivå upp kompilatorn - det brände lite min @#$%&.Det är nu april och jag har lärt mig mycket om vad som inte fungerar. Jag har snurrat en bräda och slösat bort pengar på en kompilator som jag inte behöver. Ändå är tester hittills uppmuntrande. Med den nya kompilatorn och 12F209 -chips i DIP -paket gick bänknivotester snabbt. Testet bekräftade att jag hade rätt chip. Dags att snurra ännu en prototavla! Vid denna punkt är jag bestämd.

Steg 3: 12F609 Development Board

12F609 Development Board
12F609 Development Board
12F609 Development Board
12F609 Development Board
12F609 Development Board
12F609 Development Board
12F609 Development Board
12F609 Development Board

OK, fräsch bänkprovning, jag är redo att prova ett nytt brädspinn. I denna bräddesign ville jag verkligen prova tanken på att skicka ström och kommunikation över samma två trådar. Om kommunikationsfel ignorerades skulle bara två ledningar behövas. Det är helt klart coolt! Även om det är häftigt att skicka kommunikation över strömkablarna krävs det inte. Alla lampor kan kopplas ihop på en enda kabeltråd om så önskas. Detta skulle innebära att varje lampa skulle kräva tre ledningar med en fjärde valfri återkopplingsstatuskabel. Se diagram nedan. Kraft och kommunikation kan kombineras med en enkel H-bro. H-bron kan driva stora strömmar utan problem. Många högströms -lysdioder kunde kopplas ihop på endast två ledningar. Polariteten för DC-strömmen till lamporna kan växlas mycket snabbt med H-bron. Så, varje lampa använder en helvågsbro för att rätta till omkopplaren DC till normal likström. En av mikrostiften ansluter till den inkommande växelströmsspänningen, så att kommunikationssignalen kan detekteras. Ett strömbegränsande motstånd skyddar den digitala ingången på mikro. Inuti mikroingångsstiften kläms den råa omkopplings DC -spänningen med hjälp av mikroens interna lägerdioder - omkopplings -DC spänns (noll till Vcc volt) av dessa dioder. Helvågsbron som rättar till inkommande effekt genererar två diodfall. De två diodfallet från bron övervinns helt enkelt genom att justera H-Bridge-matningsspänningen. En sex-volts H-Bridge-spänning ger en fin fem-voltsförsörjning vid mikro. Individuella begränsningsmotstånd används sedan för att trimma strömmen genom varje lysdiod. Detta power / comm -schema verkar fungera mycket bra. Jag ville också försöka lägga till transistorutgångar mellan mikro och lysdioder. Under bänkprovning, om 12F609 pressas till hårt (för mycket ström i dess utgångsväg) kommer det att flimra alla utgångar. Maxströmmen för hela chipet enligt databladet som 12F609 kan stödja är 90mA, totalt. Tja, det kommer inte att fungera! Jag kan bara behöva mycket mer aktuell än så. Att lägga till transistorer ger mig en kapacitet på 100mA per LED. Diodbron är klassad till 400mA så 100mA per LED -kapacitet passar bara. Det finns en baksida; transistorerna kostar 10 cent, vardera. Åtminstone de transistorer jag valde har inbyggda motstånd - Digikey -artikelnumret är MMUN2211LT1OSCT -ND. Med transistorerna på plats finns det ingen flimmer av lysdioderna. För produktionslampor tror jag att transistorerna inte kommer att behövas om "normala" 20mA lysdioder används. Utvecklingskortet som är utformat i detta steg är bara för testning och utveckling. Skivan kan vara mycket mindre om mindre motstånd används. Att eliminera transistorerna skulle också spara en massa styrelseutrymme. In-kretsprogrammeringsporten kan också tas bort för produktionskort. Huvudpunkten för utvecklingsnämnden är bara att bevisa power/comm -systemet. Faktum är att efter att ha mottagit brädorna upptäckte jag att det är ett problem med layouten på brädet. Helvågsbronchipet har en fånig pinout. Jag var tvungen att klippa två spår och lägga till två bygelkablar i botten av varje bräda. Dessutom är spåren till lysdioderna och kontakten alldeles för tunna. Nåja, lev och lär. Kommer inte att vara första gången jag goofed en ny brädlayout. Jag hade åtta brädor gjorda med BatchPCB. De har de bästa priserna men de är såååååååååå sjuka. Det tog veckor att få tillbaka brädorna. Fortfarande, om din priskänsliga är BatchPCB det enda sättet att gå. Men jag kommer att byta tillbaka till AP -kretsar - de är supersnabba. Jag önskar bara att de hade ett billigare sätt att skicka brädorna från Kanada. AP Circuits ger mig 25 dollar i frakt för varje beställning. Det gör ont om jag bara köper 75 dollar brädor. Det tog mig två dagar att löda upp de åtta små brädorna. Det tog ytterligare en dag att ta reda på att uppdragningsmotståndet R6 (se schematisk) bråkade med mig. Jag antar att motståndet R6 bara inte behövs. Jag var orolig efter att ha läst databladet och det indikerade att det inte finns några interna mikrouppdragningar på denna ingångsstift. I min design drivs stiftet aktivt hela tiden i alla fall så att det inte behövs någon pull-up trots allt. För att skicka kommandon till kortet använde jag enkla 9600-baud-meddelanden från ett Python-program. Den råa RS232 som kommer ut från datorn omvandlas till TTL med ett MAX232 -chip. RS232 TTL-signalen går till H-Bridge-kontrollingången. RS232 TTL går också genom en växelriktarport i ett 74HC04 -chip. Den inverterade RS232 går sedan till den andra H-Bridge-kontrollingången. Så utan RS232-trafik matar H-Bridge ut 6 volt. För varje bit på RS232 vänder H -bron polariteten till -6 volt så länge RS232 -biten håller. Se blockdiagrammen nedan. Python -programmet är också bifogat. För lysdioderna köpte jag ett gäng från https://besthongkong.com. De hade ljusa 120 graders lysdioder i rött/grönt/blått/vitt. Kom ihåg att lysdioderna jag använde bara är för testning. Jag köpte en 100 av varje färg. Här är siffrorna för lysdioderna jag använde: Blå: 350mcd / 18 cents / 3.32V @ 20mA Green: 1500mcd / 22 cents / 3.06V @ 20mA Vit: 1500mcd / 25 cents / 3.55V @ 20mARed: 350mcd / 17 cents / 2.00V @ 20mAAnvändning av dessa fyra lysdioder för att fylla ut lampan, de kostar lika mycket som mikro på 82 cent! Aj.

Steg 4: Programvara

programvara
programvara
programvara
programvara
programvara
programvara

Programvaran får verkligen detta projekt att kryssa! Källkoden i 12F609 är verkligen komplicerad. Jag använder den senaste minnesplatsen! Alla 64 byte har förbrukats av min kod. Jag har hela 32 byte flash kvar som reserv. Så jag använder 100% av RAM -minnet och 97% av blixten. Det är dock fantastiskt hur mycket funktionalitet du får för all den komplexiteten. Kommunikation till varje lampa arkiveras genom att skicka åtta-byte datapaket. Varje datapaket slutar med en kontrollsumma - så egentligen finns det sju byte med data plus en sista kontrollsumma. Vid 9600 baud tar ett datapaket drygt 8 millisekunder att komma fram. Tricket är att multitaska medan paketet med byte kommer. Om någon av lysdioderna är aktiva med en PWM -signal måste PWM -utgången hållas uppdaterad även när nya paketbyte tas emot. Det är tricket. Det tog mig veckor och veckor att reda ut det här. Jag tillbringade mycket tid med att arbeta med min Logiport LSA och försökte följa varje bit. Detta är en av de mest komplicerade koder jag någonsin skrivit. Det beror på att mikron är så begränsad. På mikroer som är mer kraftfulla är det lätt att skriva lös/enkel kod och få den snabba mikroen att riva igenom den utan att klaga. Med 12F609 kostar alla lösa koder dig mycket. All mikrokällkod är skriven i C förutom avbrottsrutinen. Varför ha så stora datapaket kan du fråga. Tja, för vi vill att lysdioderna rampar upp och ner på egen hand. När en rampprofil har laddats kan lysdioden slockna och börja rampa även när den tar emot nya kommandon för en annan lysdiod. Varje lampa måste ta emot och avkoda all datapaketstrafik även om paketet inte är avsett för det. En LED -profil består av en startnivå, starttid, ramphastighet, toppnivå, övre uppehållstid, ramp nedåt, nedre nivå. Se bifogat diagram. Wow, det är mycket för en LED. Nu multiplicera det gånger antalet lysdioder. Det blir för mycket - jag kunde bara hålla reda på tre lysdioder med fulla rampprofiler. Den fjärde (vita lysdioden på dev -kortet) har bara ramp från/till kapacitet. Det är en kompromiss. Ta en titt på den bifogade bilden på en rampprofil. PWM -signalen genereras från en timer som körs med 64uS per tick. Åtta bitars timern rullar över var 16,38 ms. Det betyder att PWM -signalen körs vid 61,04 Hz. Detta är inte bra för videoupptagning! Så jag använde ett mjukvarutrick och hoppade ett par extra räkningar i timern för att sträcka ut det till 60Hz. Detta gör att videoklipp ser mycket bättre ut. Vid varje roll-over av PWM-timern (16,67 mS) uppdaterar jag rampprofilerna. Därför är varje ramp/uppehållsfästing 1/60 sekund eller 60 Hz. Det längsta profilsegmentet (med en räkning på 255) kommer att pågå 4,25 sekunder och det kortaste (med en räkning av 1) varar 17 ms. Detta ger ett bra utbud att arbeta inom. Ta en titt på den bifogade bilden från logikanalysatorn. För att verkligen se detaljerna i bilden, öppna bilden i dess högupplösta läge. Detta tar ett par extra klick på den instruerbara webbplatsen. Det finns också en ritning av en profil som visas nedan. Dokumentation av kommandoprotokollet finns på min todo -lista. Jag planerar att skriva ett datablad typ av dokument för att beskriva till protokollet helt. Jag har startat ett datablad för chipet - en preliminär version finns på min webbplats nu.

Steg 5: Potentiella applikationer

Potentiella applikationer
Potentiella applikationer
Potentiella applikationer
Potentiella applikationer

Julgransljus: Visst, jag tror att ett träd fyllt med dessa bebisar skulle vara fantastiskt. Jag kan tänka mig en fin varm sken av gröna ljus med lätt snö som faller ner genom trädet. Kanske en långsam blekning från grönt till rött med slumpmässigt fallande snö. Chaserljus som gör ett spiralformat mönster upp och ner i trädet skulle också vara snyggt. Grovt, jag kommer att parkera det här trädet ute på gården och göra "Jones" bredvid galet. Försök att slå det! Accentbelysning: Allt som behöver accentbelysning är ett mål för dessa lampor. Min svåger vill lägga dem i botten av sin akvarium. En vän vill framhäva sin hot rod -motor - att trampa på gaspedalen skulle öka ett rött ljus. Jag övervägde också att bygga en av dessa med mina lampor: https://www.instructables.com/id/LED_Paper_Craft_Lamps/ Skulle göra ett bra Cub Scouts -projekt. Folding LED -sträng: En rad LED -lampor kunde vikas till former. Sju lampor kan fällas ihop till ett LED -mönster med sju segment. En enorm display skulle kunna göras - skulle vara en fantastisk nedräkning för nya år! Eller kanske en display för att visa börsen - röda siffror på dåliga dagar och gröna på bra. Kanske en stor display som visar utomhustemperatur. 3D -galler Genom att hänga och ordna en rad lysdioder kan ett 3D -rutnät med lysdioder enkelt skapas. Det finns några coola 3D LED -array -exempel på YouTube. Men de existerande exemplen jag har sett ser små ut och smärtsamma. Kanske ett stort 3D-rutnät ute på gården också under jul. WinAmp Plug-In: Alla som har varit i mitt labb och har sett lamporna frågar om de dansar till musik. Jag grävde lite, det ser ut att vara ganska enkelt att lägga till ett plug-in till WinAmp. Insticksprogrammet skulle skicka meddelanden till en bifogad sträng av lampor så att lamporna skulle synkroniseras med musiken som WinAmp spelade. Att synkronisera lite julmusik till min julgran vore bara fantastiskt. Embedded Baby Orangutan B-328 Robot Controller med H-Bridge: Den lilla kontrollen från Pololu skulle vara perfekt. Se: https://www.pololu.com/catalog/product/1220 Detta kort har redan en H-Bridge redo att användas. Lampmönster kan programmeras in i mikron så att datorn kan stängas av. 802.15.4: Genom att lägga till 802.15.4 kan lamporna bli trådlösa. För julgransljus spridda runt huset, det här skulle vara bra. Eller att lägga lampor till varje fönster i ett stort byggnadskomplex skulle vara möjligt. Cool. Rotating 'Lighthouse Beacon: Min son hade ett skolprojekt för att bygga en fyr. Tanken var att bygga en ostliknande batteridriven lampa med en gemklämma så att fyren skulle lysa upp. Ingen av mina son kommer att gå i skolan med det när han kan få en fullblåst roterande fyr! Ta en titt på bifogade bilder och video.

Steg 6: Sammanfattning

Det förvånar mig verkligen att varje lampa har 2 MIPS hästkrafter i en SOIC-8 för 80 cent. När en sträng lampor förlängs genom att lägga till fler lampor, ökar också mängden MIPS på strängen. Med andra ord är detta en skalbar design. En sträng med 16 lampor nynnar tillsammans med 32 MIPS processorkraft. Bara fantastiskt. Det finns fortfarande mycket arbete kvar att göra. Utvecklingskortet måste uppdateras. Det finns ett par layoutbuggar som behöver korrigeras. Komm.felutgångskablarna verkar inte fungera med transistorutgången. Vet inte varför ännu - jag har inte ägnat någon tid åt att reda ut det ännu. Den mottagande kommunikationskoden behöver också lite mer arbete. Genom att titta på lysdioderna kan jag se att det är kommande fel så ofta. Det verkar som att det i genomsnitt finns ett slumpmässigt fel per 1000 meddelanden. Jag måste hitta en SMD -tillverkare som skulle vilja göra lampskivor åt mig. Kanske Spark Fun skulle vara intresserad? Jag har en kompis i Hong Kong som kanske kan hitta en tillverkare åt mig. Styrelsemontage måste automatiseras. Det är helt enkelt inte möjligt att bygga dessa brädor för hand som jag gjorde. Ett PC -gränssnittskort måste utvecklas. Det här borde vara riktigt enkelt - det är bara att ta sig tid att göra det. Kostnad är kung - en minimerad lampkostnad (80 cent för mikro + tre lysdioder med 10 cent vardera + bräda / motstånd / 20 cent diodbrygga) totalt $ 1,50 dollar. Lägg till montering, ledningar och vinst så pratar vi $ 2,00 till $ 2,50 per lampa. Kommer nördar att betala 40 dollar för en sträng med 16 RGB -lampor på en sträng? Slutligen räknar jag med att det finns intresse från DIY -publiken. Med lite positiv feedback kommer jag att fortsätta att förvandla denna idé till en produkt. Jag kunde tänka mig att sälja chipsen, lamputvecklingsbrädorna och kompletta ljussträngar. Ge mig lite feedback och låt mig veta vad du tycker. För mer information och fortsatta utvecklingsnyheter besök min webbplats på https://www.powerhouse-electronics.com Tack, Jim Kemp

Rekommenderad: