Guddn Abend, Zwecks Auslesen eines Akkupacks habe ich eine einfache Schaltung mit einem Atmel Tiny 45 erstellt. Diese gibt über den USI des Tiny (im SPI-Modus) den Aktuellen Ladezustand des Akkupacks sowie einige weitere Parameter (Spannung, Stom, etc) aus. Der µC läuft mit 5V und ist folgendermaßen beschaltet: PB5 : RESET PB4 : ANALOG_1 PB3 : ANALOG_2 PB2 : SCK PB1 : MISO PB0 : MOSI ANALOG_1 sowie ANALOG_2 sind jeweile an die beiden enden eines Widerstandes angeschlossen um den Strom in bzw. aus dem Akku zu messen, SCK, MISO, MOSI werden zum einen für ISP, zum anderen für die Übermittlung der Daten an einen Master-µC verwendet. Das Problem ist nun, dass ich für eben erwähnte Akku-Messung eine recht genaue Zeitbasis benötige damit ich die Akkukapatizät recht genau bestimmen kann. Ausserdem soll die Schaltung auch nur sehr wenig Strom aus dem Akku (14,4V / 6,9Ah) ziehen, um auch mal ein paar Monate am Akku angeschlossen bleiben zu können ohne ihn komplett zu entlehren. Nun ist die Frage wie ich einen recht genauen Takt erzeugen kann. Es gibt da ja einige Möglichkeiten. Genutzt wird im Moment der interne RC-Oszillator, für einen Quarz habe ich schlicht keinen Platz an den Portpins gefunden...ich kann nun natürlich den internen RC-Oszi mit dem Calibration-Byte anpassen, aber da bleibt die temperaturabhängigkeit. Diese wiederrum könnte ich ja über die interne Temperaturdiode auslesen und den Fehler korrigieren --> kompliziert und viel Rechenarbeit für den Tiny der mit eigentlich nur mit gut 100 khz laufen soll, ausreichend für den ADC, und schön wenig um den Akku nicht zu belasten. Ausserdem wäre es trotz kompensation vermutlich noch ziemlich ungenau. Was meint ihr, wie bekomme ich einen möglichst genauen Takt im Tiny45 ohne mit einem externen Quarz portpins zu "verschwenden" ? Netten Gruß, Marc
Ich würde mal sagen dass der Takt nur eine Ursache für Ungenauigkeiten seien wird. Wenn du Monate lang den Strom aufsummieren willst um die Kapazität zu berechnen, dann wird das mit einem solchen µC wahrscheinlich nix. Vielleicht solltest du auf einen Schaltkreis umsteigen ähnlich wie er in Laptops verwndet wird. Aber selbst die werden bei entladedauern von Monaten nur noch Schätzwerte anzeigen.
Ja, das ist mir bewusst. vor allem da an einem 50mOhm-Shunt gemessen wird ;) Da beträgt die kleinste theoretische Auflösung schon ein paar Milliampére wenn man Differenziell mit 20x Gain misst. Der eigentliche Betrieb der Schaltung sieht auch anders aus (also der Typische Einsatzfall): Laden bis aufs Maximum (erkennung über Spannung da LiFePO4-Akku). Anschließend lagerung über wenige Studen bis Tage. Anschließend entladen innerhalb von 1-10h. Der Akkupack ist in der Lage bis zu 120A zu liefern, die Erkennungsschaltung ist auf einen Messbereich bis 10A ausgelegt (und natürlich abgesichert). Die Applikation ist eine Tauchlampe auf LED-Basis mit o.g. Akku sowie 70W an LEDs. Ich mache mir da auch nichts vor, absolut exact wird das nicht werden. Ich möchte am ende eine Genauigkeit von besser 5% im Typischen Einsatzfall mit gelegentlichen Referenzladungen erhalten. Um aber erstmal so weit zu kommen sollten die Dinge die ich noch vergleichsweise einfach genauer machen kann auch so genau wie möglich sein. Und dazu zählen erstmal die Genauigkeit des A/D-Wandlers sowie die Taktquelle ;) Ich möchte allerdings auch nicht auf andere Chips umsteigen, der einzige IC neben einem LP2951 als 5V-Regler soll der Tiny45 sein.
@ Marc Seiffert (euro) >Was meint ihr, wie bekomme ich einen möglichst genauen Takt im Tiny45 >ohne mit einem externen Quarz portpins zu "verschwenden" ? Definiere "genau". Wenn du mit +/-5% zufrieden bist, kannst du den RC-Oszillator kalibrieren und wenn du dann die Temperatur auf +/-10Grad konstant hälst passt das so. Wenn nicht, brauchst du einen Quarz. Der ist ohne Kalibrierung und auch bei -40Grad..80Grad auch ca. +/-200ppm genau, das sind 0,02%. Entscheide selbst. MFG Falk
Ich weis ja nicht wie die restliche Schaltung aussieht, aber du kannst die Helligkeit doch bestimmt in 2-3 Stufen einstellen. Hat jede Stufe eine Konstantstromquelle? Wenn ja würdest du ja den Strom kennen und musst nur noch die Zeit aufsummieren. An den freigewordenen Pin kannst du einen Taktgenerator ranhängen. Oder du nimmst einen Tiny44, so viel größer ist der auch nicht.
@ Falk Brunner 5% sind etwas viel....<=1% wäre noch akzeptabel. Die Fehler Multiplizieren sich ja leider, daher will ich die beiden grundfehlerquellen so klein wie möglich halten. Der Temperaturbereich in dem die Schaltung agiert reicht von -10° (Im Winter im Kofferraum über nacht o.ä.) bis +60° (Betrieb im Sommer im Freien, die Schaltung regelt sich automatisch so dass die 60° im Akku unter keinen Umständen überschritten werden). Glaubst du ich könnte die Genauigkeit mit einer Korrekturtabelle erreichen in welcher ich den richtigen Kalibrierungswert je Temperatur (mit int. Temperaturdiode gelesen) speicher und ihn entsprechend in den µC lade ? Möglich wäre es auch das der µC von Zeit zu Zeit nachträglich kalibriert wird imdem ich das SPI-Signal vom Master (welcher einen 20MHZ-Quarz hat) nutze. Allerdings ist das Akkupack nicht immer in der Lampe d.h. es kann sein dass das Pack auch mal autak arbeiten muss. Im Anhang hab ich ma den Schaltplan angehängt. Für einen Quarz habe ich schlicht keinen Platz mehr. Ich wollte heute den ersten Prototypen layouten. @ Martin So einfach ist das nicht ;) zum einen ist die Schaltung sehr komplex (Kontrollplatine mit Mega644, welche über einen Bus den Akkuwächter sowie einen Endstufencontroller (Mega8) ansteuert, die Endstufen realisiert als hocheffiziente Step-Up-Wandler, 4 an der zahl um für Redundanz zu sorgen, Ausgabe sämtlicher wichtiger Parameter über ein GLCD, ...) Ich muss also definitiv am Akku messen und kann nicht einfach von einem festen Strom ausgehen ;)
@ Marc Seiffert (euro) >überschritten werden). Glaubst du ich könnte die Genauigkeit mit einer >Korrekturtabelle erreichen in welcher ich den richtigen >Kalibrierungswert je Temperatur (mit int. Temperaturdiode gelesen) >speicher und ihn entsprechend in den µC lade ? Nimm nen Quarz und gut. Alles andere ist Perlen vor die Säue. >Im Anhang hab ich ma den Schaltplan angehängt. Für einen Quarz habe ich >schlicht keinen Platz mehr. Ich wollte heute den ersten Prototypen >layouten. Also hast du noch Platz. Nimm nen Mega8 oder was ähnliches und alles ist paletti. Die Verrenkungen sind es nicht wert. MfG Falk
hmm...ich frage mich gerade wie du vom Schaltplan auf die Platine schließt ? die Platine ist 20mm breit, an beiden seiten laufen 4mm breite Leiterbahnen, die nacher, mit draht verstärkt, die 10A führen werden. Der Mega8 ist alleine schon 10mm breit (mit pads), da würden nur 2mm seitlich am mega übrigbleiben...das ist etwas knapp, ausserdem hab ich von den Tinys noch 5 da, die schon nen halbes jahr gammeln und möchte die gern verwenden, bisher habe ich nur mit den megas gebastelt. Zudem ist der mega8 im TQFP immer nur grausam zu beschalten wie ich finde, vor allem die Position des Reset-pins erfordert fast immer eine Drahtbrücke, eine einfache smd-brücke reicht meist nicht...
@ Marc Seiffert (euro) >hmm...ich frage mich gerade wie du vom Schaltplan auf die Platine >schließt ? Gar nicht ;-) Aber da das ein Hobbyprojekt ist und nciht 10 Millionen Stück zum Suoper Niedrigpreis benötigt werden UND das Layout noch nicht angefangen wurde ist ein Kompromiss immer möglich. > die Platine ist 20mm breit, an beiden seiten laufen 4mm Dann mach sie grösser und pack sie woanders hin. >ich von den Tinys noch 5 da, die schon nen halbes jahr gammeln und >möchte die gern verwenden, Dann lebe mit den Ungenauigkeiten. >Zudem ist der mega8 im TQFP immer nur grausam zu beschalten wie ich >finde, vor allem die Position des Reset-pins erfordert fast immer eine >Drahtbrücke, eine einfache smd-brücke reicht meist nicht... Um Gottes Willen, Soooo viel Aufwand! Ob das Kalibrieren per Temperaturdiode einfacher ist? MFG Falk
Wenn der Schaltplan nicht veraendert werden kann und der Attiny kein Platz mehr hat: lass doch den Atmega64 den OSCCAL Wert berechnen. Der Attiny sendet dem Atmega64 die Temperatur und erhaelt den neuen OSCCAL-Wert.
@ Falk Brunner (falk) Das Layout ist fertig nur noch nicht geätzt. Der Chip muss in einen Akku-"Ring" hineinpassen, da kann ich einfach nicht noch größer werden ;) Ich muss nacher eh noch einige andere Platinen mitfertigen, da werd ich mal einen solchen Akkuwächter beitun und mal testen wie genau es wird mit Kalibrierung und anschließender interner Temperaturkompensation....find ich persöhnlich auch interessant das mal zu testen wie genau man den internen Takt der Tinys bekommt :) Hab mir nu mal die Lösung mit dem ATMega8 angeschaut: - Der Platz ist knapp. Das wäre evtl. lösbar -die Platine mit dem Tiny kann man sehr schön routen, mit einem Mega8 schauts meistens weit weniger elegant aus -je einfacher die Platine desto geringer die Ausfallwahrscheinlichkeit -Der Tiny benötigt bei gleichem Takt nur halb so viel Strom wie der Mege8, 170µA vs 450µA bei 100khz aber das wichtigste: -Der Mega8 hat KEINEN differenziellen ADC....das würde die Auflösung meiner messung extremst negativ beeinflussen ! Bis aud die Quarzmöglichkeit alles nachteile, also kein Mega8.... hab grad mal geschaut der 8 MHZ interne RC hat einen fast linearen Temperaturverlauf, es sind etwa 26ppm / °C. Bei 5V werden die 8 MHZ bei etwa 45° erreicht. Ich denke eine Genauigkeit von etwa 1% mit dem internen RC sollte sich mit Kompensation im Temperaturbereich von -20 bis +80°C erreichen lassen. Ich werde einfach den RC auf 8 MHZ bei 20°C Trimmen und den rest mal die Software mit dem obigen ppm-wert machen lassen. Heute Abend dann dazu mehr ;)
Mit dem LP2951 wird nichts, da der viel zuviel Strom zieht. Schau dir mal was in der Gegend von einem TPS62056 an, der verbraucht um die 12uA fuer ich selbst.
@ hmm Der TPS62056 schaut echt nett aus, den kannte ich bisher nicht, werd ich für zukünftige Designs mal im Kopf behalten, danke für den Tipp :) Leider hat er aber auch nur 10V maximale Eingangsspannung. Bisher zieht die Schaltung (rechnerisch) 335µA. Das ist Akzeptabel. Eventuell werde ich eine Spätere Revision in dieser Beziehung verbessern, aber erstmal werde ich den LP2951 einsetzen.
Der LP2951 zieht 75uA fuer sich selbst bei 100uA am Ausgang, ist also fuer Stromsparanwendungen nicht optimal.
Hi! Mal von den 2 Pins Verschwendung abgesehen, du bekommst keinen SMD Quarz auf den Tiny geklebt? Die 2mm Höhe müssen doch machbar sein? Viel Erfolg, Uwe
@ hmm Optimal sicher nicht, aber erstmal zum Testen ob die Schaltung an sich funktioniert ausreichend, zudem denke ich dass der LP2951 als Linearregler einen geringeren Ripple erzeugt der für die Messung sicherlich von Vorteil ist ;) @ Uwe Klar, ein Quarz passt noch....nur hab ich da leider die Portpins für nicht mehr frei. In der Länge kann ich noch ein bisschen, in der Breite nicht mehr. @ all hab die Platine mittlerweile geätzt und gebohrt. Muss sie noch aus dem Nutzen trennen, chemisch Verzinnen und dann Bestücken. Hab nu erstmal 2h Vorlesung, im Anschluss werd ich mich da mal dran machen....
Hab das Modul nu komplett fertig gestellt und es ein wenig mit kaltkompressen und einem Föhn gequält (beim Föhn hab ich es sogar geschafft dass die Temperatursicherung durchbrennt, mal schaun wie ich das der Frau erkläre die das Ding heut Abend sicher wieder benutzen will :D). Das heist Temperaturen um 0°C mit Kaltkompressen aus der Tiefkühlrtuhe und temperaturen von ca 100°C mit dem nun defekten Föhn ;) Messmethode: Timer0 im Tiny läuft bei maximaler Geschwindigkeit ohne PLL, ein Interrupt wird bei jedem Überlauf erzeugt und ein Port des Tiny wird dabei getoggelt. Sollte bei einer Frequenz von 8 MHZ im Tiny 15 625 HZ ergeben. Nachdem ich den Tiny einmal bei 25°C Kalibriert habe ( mit dem OSCCAL-Register war mir eine Kalibrierung auf ~0,2% genau möglich, ) habe ich anschließend die Frequenz einmal bei größtmöglicher Hitze und einmal bei größtmöglicher Kälte gemessen: ~0°C 15 520 HZ (~ -0,64% Abweichung) 25° 15 590 HZ (~ -0,22% Abweichung) ~100°C 15 740 HZ (~ +0,80% Abweichung) Der interne RC ist also, nach einmaliger Kalibration, genauer als angenommen. Sicherlich mag es hier aber auch Unterschiede von Exemplar zu Exemplar geben...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.