Stap 10: Firmware
De code bestaat uit verschillende onderdelen:
- Een virtuele seriële poort wordt geïmplementeerd met behulp van de code die door PJRC . Als u de stuurprogramma's nodig, ga naar hun site.
- Ik schreef drie functies om te communiceren met de LCD via I2C, vervolgens verschillende meer functies voor het initialiseren van het LCD-scherm en tekenen van spullen op het LCD-scherm. Er is ook een 8 x 5 pixel lettertype dat wordt opgeslagen in flash-geheugen zodat ik gemakkelijk tekst op het LCD-scherm schrijven kan. (Het lettertype wordt gegenereerd door een aangepast hulpprogramma die ik schreef, maar vindt u ook een vergelijkbaar lettertype op de website van Newhaven Display)
- Één bestand omgaat met het gedrag van de menu's, een ander bestand handgrepen temperatuurmetingen monster te verzamelen, een ander bestand is verantwoordelijk voor opslaan/laden gegevens uit de EEPROM geheugen.
- Het hoofdbestand behandelt berekeningen voor temperatuurregeling, en automatisch de reflow solderen stadia doorlopen. Het behandelt ook de initialisatie van de verschillende interne hardware van de AVR zoals timers.
Er zijn enkele belangrijke details moet ik hier wijzen:
- Wanneer u "%d" met "printf" gebruikt, is het argument genomen als een 16-bits ondertekend geheel getal zelfs als de variabele niet, dus ik schreef "str_from_int" te overwinnen van deze beperking. Ik schreef ook "str_from_double" voor het gemak als het gebruik van "%f" niet bieden veel opmaak controle en "dtostrf" maakt de code rommelig.
- De LCD, NHD-C160100DiZ, is een gegevensblad waarin wordt gemeld dat de maximale I2C klokfrequentie voor het gebruik van 400 KHz. Dit is onjuist, het reageert niet met die frequentie en de I2C-bus volledig zal bevriezen. Ik heb ook geprobeerd 280 KHz en het nog steeds niet zou werken. Tot slot ik gebruikte 100 KHz, en het begon te werken.
- De framesnelheid van het LCD-scherm is belachelijk traag vanwege mijn relatief langzame microcontroller (draait op 8 MHz), de lage frequentie van de I2C bus (100 KHz) en het feit dat een heleboel lettertype gegevens wordt opgeslagen in geheugen van de Flits in plaats van RAM.
- Ik ben met behulp PWM de solid state relais. Mijn redenering is dat ik het verwarmingselement controleren kan alsof ik was de controle van de helderheid van een LED. De frequentie PWM moet, voor het redeneren achter dit gering, zie de bijlage.
- De waarde van de PWM wordt gebruikt is varieerden tussen 0 en 65535. Dus OCR waarde 0 betekent taakcyclus van 0%, OCR waarde 5000 betekent taakcyclus van 7,6%, de waarde van de OCR 40000 betekent taakcyclus van 61%, en OCR waarde 65535 betekent taakcyclus van 100%.
- De AD595AQ-chip uitgangen een blokgolf in plaats van een constante spanning, de top van de blokgolf is de spanning die moet worden gelezen als de temperatuur. Ik ben niet zeker als dit is opzettelijk en heeft ze een deel van de AD595AQ van ontwerp (I cant uitzoeken dit uit het gegevensblad) of als het is mijn schuld een of andere manier. Ongeacht de redenering doet de sensor lezen routines ik schreef rekeningen voor dit en zal genieten van alleen de bovenkant van de vierkante golven, het ook gemiddeld.
- De ruwe sensor-waarde is varieerde van 0 tot 1023 omdat het ADC op de AVR 10 bits van resolutie heeft. 1023 betekent dat de lezing is 3,3 v omdat het analoge referentie voltage 3,3 v. Volgens het gegevensblad van de AD595AQ, is de uitgangsspanning voor 320 graden celcius 3.227V (0 graden is 0.027 volt, door de manier, vrij dicht bij 0, de AD595AQ is verondersteld te uitvoer 10 mV per graad Celsius). Van deze nummers weet ik dat 1 graad Celsius 3.125 rauwe ADC lezing eenheden is, en 1 rauwe ADC lezing eenheid ongeveer 0.32 graden Celsius is. Deze conversie berekeningen zijn hard gecodeerd in mijn broncode. Je moet niet vergeten de constante van 0,32 omgang met de log-bestanden.
- Een PID-regelaar wordt gebruikt voor het berekenen van de juiste hoeveelheid stroom te leveren aan het verwarmingselement. De gebruiker kan bewerken van de PID-constanten zijn, met behulp van de gebruikersinterface.
- Deze PID-regelaar is niet een typische PID-regelaar, zij wordt bijgestaan door de hand van gegevens die al bekend is over de broodroosteroven kenmerken. U mag voor het invoeren van de hoogste constante temperatuur die de oven kan bereiken, en hoe lang het duurt om die temperatuur te bereiken. Uit deze informatie weet de controller hoe te schatten van de juiste hoeveelheid stroom te leveren. De PID-regelaar wordt gebruikt om tweak deze raming, die voor de niet-lineariteit van de schatting corrigeert.
- Opmerking: Gebruik de "handmatige PWM-controle"-modus voor het meten van de hoogste temperatuur die je kunt bereiken en hoe lang het duurt om deze te bereiken. Doe dit door in te gaan die in de modus van het menu, en opdagen van de PWM max, en vervolgens opslaan van de log-lezing (of gebruik een stopwatch).
- Er zijn controleren op fouten in de temperatuurinstellingen profiel en apparaat. De software zal niet toestaan dat u te maken bewerkingen die geen steek houden, en als er iets mis is, op zal vragen u te corrigeren voordat u verdergaat.
Verwijzen naar de vorige "Instructable stap" over de bootloader te zien hoe te compileren en bootload de toepassingscode, er is zelfs een video in.