Stap 7: programmeren
Nadat ik de eerste lader geassembleerd, begonnen ik met de ontwikkeling van de code te laten werken.
Ik begon door te definiëren van alle de I/O pinnen en dan testen om ervoor te zorgen dat ik had alles goed gedefinieerd. Volgende stap was om te definiëren van het batterijniveau van de spanning waaraan de statuscomputers.
Vanaf daar begonnen ben ik met het draaien van de sudo-code staat machine die ik had op de vorige pagina in echte code.
de machine staat werkte OK maar er was een groot probleem veroorzaken problemen die ik gehad om aan te pakken alvorens verder. De analoge spanningsniveaus waren helemaal over de plaats. Wanneer de batterijen zijn opgeladen zakten de spanning gooien uit de cel spanning metingen aanzienlijk. Li-ion batterijen opnieuw moet kosten voor + - 0.05V nauwkeurigheid en ik kon gerst houden om +-0.25V met de standaard Arduino referentiespanning. Voordat ik opgetuigd omhoog een een externe regulator om te gebruiken als referentie, ik struikelde op deze https://code.google.com/p/tinkerit/wiki/SecretVolt...
Blijkbaar kunt u de interne 1.1V verwijzing om te controleren de Vin. Na het spelen met dit voor een beetje kon ik bijhouden van de ingangsspanning en aanpassen cel de omrekeningsfactoren om meer nauwkeurige metingen van spanning. Dit was nog niet genoeg... Ik heb gemerkt dat de ingangsspanning was drijvende +-0.2V rond wat mijn voltmeter gelezen. Ik dacht dat mijn goedkope eBay buck converter leverde waarschijnlijk niet de schoonste spanning en mijn goedkope meter was deze uitgang gemiddeld. Ik ben van plan om te kijken naar dit met mijn bereik om te zien wat er eigenlijk gaande is, maar 660uF over de input spanning zetten verminderd de spanning rimpel tot ruim onder de 0.05V. In theorie moet de gevoeligheid van de Arduino ADC van lezing over 0.005V, maar dat is moeilijk te krijgen in de praktijk. Ik heb sommige ideeën die zullen helpen me veel dichter bij dat theoretische gevoeligheid als ik ooit meer maken meer platen gemaakt krijgen.
De ingangsspanning kalibratie nemen ongeveer 140us plus een vertraging die ik was in staat terug te brengen tot 500us zo zo dat de ondergrens van de interrupt periode tot ongeveer 750us instellen. Ik heb niet geprofileerd het nog maar de toestandsmachine duurt minder dan 1 MS uit te voeren, zodat ik het opzetten van de timer-interrupt-frequentie 1000 Hz. 1000Hz is een van een paar leuke ronde getal u kunt uitstappen van de timers en vereenvoudigt de berekening van de capaciteit.
Op het einde ik maakte arrays voor elke variabele die wordt gebruikt door de machine staat en het geïmplementeerd als een functie die de cel nummer als de input voor het indexeren van alle de arrays. De functie retourneert het volgende frame. Er is een andere array waarin de huidige status voor elke cel.
Update oktober 24 2015:
Ik heb wat code die ik heb gepost de capaciteit continu in de sub van de interrupt routering, ongeacht de status werken vrij goed spelen met het berekend maar ruis op de ADC lijn oorzaak een schommelingen van over +-1mAh terwijl in koele omlaag en opladen staat die niet al te slecht.
Er is geen houtkap gedaan op de arduino. Mij zijn geweest using putty terminal te melden van de output naar een CSV-bestand ik kan omhoog laden importeren in excel. Het grootste probleem met het aanmelden van de arduino is dat duurt ongeveer 2ms voor het opslaan van een float of lang aan de eeprom die is een eeuwigheid in vergelijking met de < 1ms vereist door de functies uitgevoerd door de interrupt. Er is gewoon niet genoeg CPU-tijd om te doen elke die zich aanmeldt op de eeprom niet misschien opslaan de capaciteiten.
Ik kan er uitzien int met behulp van de psoc4 (http://www.cypress.com/file/141306/download) op de volgende versie van de analysator, ik heb een paar van hen tot rond en ik heb zin om een project mee te doen. Dat zou een nieuwe instructable.