Stap 5: Firmware
De belangrijkste functie van de firmware is voor bewaking van het besturingselement Helderheid (via VR1, seriële poort of externe IR) en beheersing van de uitvoer. Bij start, is het besturingselement helderheid via de potentiometer lezen via A/D(analog-to-digital) converter en gebruikt als eerste helderheid/dimmen niveau.Hoofdlus
De controller maakt referentie spanning V-REF (zie "Referentie spanning Generator" circuit van het schema), die wordt verbonden met een van de ingebouwde comparator positieve inbreng. Huidige zin spanning C-SENSE wordt vergeleken met deze spanning door de comparator. De microcontroller draait op de Q1 voor een snelle moment, dan zien als de huidige spoel was hoog genoeg om de "reis" de comparator (wat betekent dat de huidige L1 bereikt of het gewenste niveau overschreden). Als de comparator deed niet reis, de "on-time" wordt verhoogd en de cyclus herhaalt zich tot de reizen comparator. Als de reizen comparator, dan de "on-time" is een beetje verlaagd, vervolgt de lus. Dit vormt een eenvoudige feedback-lus-controller. Betrekking het uitvoerniveau is ingesteld door de spanning van de referentie.
Referentie spanning ontstaat door het uitvoeren van (software) PWM signaal van taakcyclus evenredig is aan de gewenste spanning. Het PWM-uitgang van de microcontroller is spanning geklemd door een diode (op dezelfde schaal/niveau als de huidige spanning van de zin), dan vloeiend door R15 en C8 (RC filter). Deze referentie spanning blijft tussen 0 tot 0.6V.
A/D converter is niet geschikt voor het lezen van de huidige spoel vanwege de snelheid (gebrek aan). Spoel krijgt korte uitbarstingen van huidige, in intervallen van microseconde. Comparateur kan reageren op een piekstroom uitzien, terwijl A/D converter de ingangsspanning vereist, terwijl de bemonstering stabiel te zijn.
De "on-time"-signaal wordt gegenereerd door de hardware PWM-module. Het is geconfigureerd voor het genereren van PWM frequentie tussen 32kHz tot 175kHz (instelbaar). De frequentie verandert overeenkomstig het dimmen niveau. Hoe lager de helderheid, hoe lager de frequentie. Als u de frequentie wijzigt, verandert ook het effectieve pulserend sproeien van de output. Het combineren van de plicht cyclus wijziging van de huidige wijziging via de switch-modus converter, wordt veel beter dimmen curve bereikt.
Uitvoer over de bescherming van de spanning
Wanneer de output is geopend (dat wil zeggen niets is aangesloten, slechte verbinding of dood LED) of teveel LEDs in serie zijn aangesloten, de uitgangsspanning krijg te hoog voor de MOSFET te behandelen. MOSFET gebruikt hier kan maximaal 60V tussen afvoer en bron verwerken. Hoger voltage kan vernietigen het apparaat (nogal snel roken dood als ik een paar keer tijdens de ontwikkeling ervaren).
De uitgangsspanning is verzwakt zodat de spanning veilig voor de microcontroller (lager dan 5V is), dan gevoed aan de Comparateur module. Interne referentie spanning wordt ingesteld zodat de comparator op over 59V (configureerbaar in over 3V stappen reizen). De comparator is intern aangesloten via hardware voor "shutdown" uitgang als PWM reizen. Dit uitgang over spanning bescherming werkt dus ogenblikkelijk zoals het hoort. (Een andere reden dat ik nodig comparatoren ingebouwde) Wanneer de bescherming begint (via hardware), de firmware speurder op, en stopt de werking, dan de status-LED knippert. Alleen macht fietsen kan resetten deze voorwaarde.
Voorziening Voltage verstand
Voedingsspanning wordt gelezen door A/D converter en de waarde wordt gebruikt om te compenseren voor het uitvoerniveau, zodat het vermogen over een bereik van voedingsspanningen strookt. Ook levering over spanning bescherming kicks in op xxV (instelbaar in ingebouwde programmatuur).
IR ontvanger
Externe IR-signaal wordt gedetecteerd door de sensor en genereert interrupts. Het signaal is gedecodeerd door de ISR (interrupt service routine).
U kunt het toegangsniveau helderheid/dimmen, uitvoer van in- en uitschakelen via de IR-afstandsbediening. Wanneer de helderheid wordt gewijzigd via IR ras, is de potmeter uitgeschakeld totdat het beweegt opnieuw.
Alleen Sony externe protocol wordt ondersteund op dit moment (natuurlijk kunt u altijd toevoegen andere protocollen).
Knoppen
Knop schakelaars zijn gepolst over elke 4 milliseconde en debounced in ingebouwde programmatuur. Helderheid omhoog/omlaag functie is geïmplementeerd voor nu. (maar ze kunnen doen wat die je wilt)
Wanneer de helderheid wordt gewijzigd via de knoppen, is de potmeter uitgeschakeld totdat het weer wordt verplaatst.
U kunt ook externe knoppen via SPI-poort voor snel en eenvoudig extern beheer. (Zie het schema)
Bi-directionele seriële/SPI controle
SPI stijl seriële kan worden gebruikt om te controleren van deze controller. Alleen helderheid/dimmen verandering wordt nu ondersteund. De 8-bit helderheid gegevens wordt verzonden via dezelfde poort als u de potmeter verplaatst. Dus als u twee of meer van deze domeincontrollers via SPI-poort aansluit, kan alle van de controller worden gecontroleerd door gewoon het verplaatsen van een van de potentiometers (bende dimmen). Dit is handig wanneer u een bos van domeincontrollers aan het licht een grote ruimte hebt.
SPI-poort en de schakelaars van de knop delen de zelfde I/O poorten, zodat de firmware de bron van het signaal door de duur van de pols bepaalt. Aangezien de mens kunnen alleen drukknoppen zo snel, pulsen die langer dan ongeveer 47 microseconden zijn worden beschouwd als knop push, en kortere audiobestanden splitsen zijn gedecodeerd als SPI signaal.
Notatie van gegevens is eenvoudig - stuur het helderheidsniveau in 8-bits indeling. Dat is het voor nu - misschien uitgebreid om andere dingen te doen...
Open Source
U kunt zowel de broncode als het HEX bestand de microcontroller te programmeren. Ik zou graag zien dat iemand mijn code uit te breiden.