Universal High-Power LED Driver med 3D-printable fall (5 / 8 steg)
Steg 5: Firmware
Den huvudsakliga funktionen av firmware är att övervaka ljusstyrka (via VR1, serieport eller IR-fjärr) och kontrollera produktionen. Början, ljusstyrkan kontrollen via potentiometern läses via A/D(analog-to-digital) omvandlare och används som första ljusstyrka/mörkläggning nivå.Huvudloop
Styrenheten skapar referensspänningen V-REF (se "Referens spänning Generator" krets av schematiskt), som ansluter till en av den inbyggda motsvarigheten positiva bidrag. Aktuell känsla spänning C-SENSE jämförs mot denna spänning av motsvarigheten. Mikrokontroller vänder på Q1 för en snabb stund, sedan se om induktor nuvarande var tillräckligt hög för att "resa" den motsvarigheten (vilket innebär att L1 nuvarande nått eller överskridit önskad nivå). Om motsvarigheten inte resa, den "i tid" höjs och cykeln upprepas tills den kontrollapparat resor. Om den kontrollapparat resor, då den "i tid" minskar lite, sedan fortsätter loopen. Detta bildar en enkel feedback-loop controller. Essentialy utgångsnivån bestäms av referensspänningen.
Referensspänningen skapas genom mata (programvara) PWM signal av intermittens proportionell mot den önskade spänningen. PWM utdata från mikrokontroller är spänning spänns av en diod (till samma skala/nivå som den nuvarande bemärkelse spänningen), sedan jämnas av R15 och C8 (RC-filter). Denna referens spänning vistelser mellan 0 till 0.6V.
A/D-omvandlare är inte lämplig för att läsa den aktuella induktor på grund av hastigheten (brist). Induktor får korta skurar av nuvarande, mikrosekund intervall. Jämförelseperson kan svara på en toppströmmen såhär, medan A/D-omvandlare kräver spänningen stabil medan provtagning.
"I tid" signalen genereras av hårdvara PWM modulen. Det är konfigurerad för att generera PWM frekvens mellan 32kHz till 175kHz (konfigurerbart). Frekvens ändras vid ljusreglering varje nivå. Ju lägre ljusstyrka den lägre frekvensen. Genom att ändra frekvensen, ändras också effektiva intermittensen av produktionen. Kombinera duty cycle ändringen till aktuella ändringen via switch mode converter, uppnås mycket bättre ljusreglering kurva.
Produktion över spänning skydd
När produktionen är öppen (dvs ingenting är ansluten, dålig anslutning eller död ledde) eller för många lysdioder är kopplade i serie, utspänningen kan få för hög för MOSFET att hantera. MOSFET används här klarar upp till 60V mellan Drain och Source. Högre spänning kan förstöra enheten (ganska snabb rökning död som jag upplevde ett par gånger under utveckling).
Utspänningen är försvagat så att spänningen är säker för mikrokontroller (under 5V), då matas till modulen komparator. Intern referens spänning är inställd så att motsvarigheten resor på om 59V (konfigurerbart i om 3V steg). Motsvarigheten är ansluten internt via hårdvara till "stängningen" PWM utgång när resor. Så fungerar detta utgång över spänning skydd omedelbart som det ska. (En annan anledning jag behövde kontrollapparater inbyggda) När skyddet sparkar i (via hårdvara), firmware upptäcker det, och stoppar driften då blinkar status-LED. Bara makt cykling kan återställa detta villkor.
Leverera spänning känsla
Matningsspänningen läses av A/D-omvandlare och värdet används för att kompensera för utgångsnivån, så att uteffekten är konsekvent över en rad olika matningsspänningar. Levererar också, över spänning skydd sparkar in på xxV (konfigurerbart i firmware).
IR-mottagare
IR-fjärr signal detekteras av sensorn och genererar avbrott. Signalen är avkodad av ISR (avbrottstjänstens rutin).
Du kan styra den ljusstyrka/ljusreglering, ut på och av via IR-fjärrkontroll. När ljusstyrkan ändras via IR-fjärr, är potentiometern inaktiverat tills den flyttas igen.
Bara Sony remote protokollet stöds vid denna tid (naturligtvis du kan alltid lägga till andra protokoll).
Knappar
Knappen växlar är tillfrågade om varje 4 millisekund och debounced i firmware. Ljusstyrka upp/ner funktion implementeras för nu. (men de kan göra vad du vill)
När ljusstyrkan ändras via knapparna är potentiometern inaktiverat tills den flyttas igen.
Du kan också ansluta externa knappar via SPI port för snabb och enkel fjärrkontroll. (se schemat)
Dubbelriktad seriell/SPI kontroll
SPI stil seriell kan användas till att styra den här domänkontrollanten. Bara ljusstyrka/mörkläggning förändring stöds nu. 8 bit ljusstyrka data skickas ut via samma port när du flyttar potentiometern. Så om du ansluter två eller fler av denna styrenheter via SPI port, kan alla av registeransvarige kontrolleras genom att bara flytta en av potentiometrar (gänget dimming). Detta är praktiskt när du har ett gäng kontrollanter att tända ett stort rum.
SPI-port och växlarna knappen dela samma I/O portar, så firmware bestämmer källan av signalen på varaktighet av pulsen. Eftersom människor kan bara tryckknappar så snabbt, pulser som är längre än ca 47 mikrosekunder betraktas knappen push och kortare sådana är avkodas som SPI signal.
Dataformatet är enkelt - skicka bara ljusstyrkan i 8-bitars format. Det var allt för nu - kanske expanderat till att göra andra saker...
Öppen källkod
Du kan hämta källkoden som HEX filen att programmera mikrokontroller. Jag skulle älska att se någon förlängning min kod.