Forum: Mikrocontroller und Digitale Elektronik ATTINY45 Taktgenauigkeit


von Marc S. (euro)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

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.

von Marc S. (euro)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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

von Martin (Gast)


Lesenswert?

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.

von Marc S. (euro)


Angehängte Dateien:

Lesenswert?

@ 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 ;)

von Falk B. (falk)


Lesenswert?

@ 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

von Marc S. (euro)


Lesenswert?

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...

von Falk B. (falk)


Lesenswert?

@ 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

von Mehmet K. (mkmk)


Lesenswert?

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.

von Marc S. (euro)


Lesenswert?

@ 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 ;)

von hmm (Gast)


Lesenswert?

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.

von Marc S. (euro)


Lesenswert?

@ 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.

von hmm (Gast)


Lesenswert?

Der LP2951 zieht 75uA fuer sich selbst bei 100uA am Ausgang, ist also 
fuer Stromsparanwendungen nicht optimal.

von Uwe (Gast)


Lesenswert?

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

von Marc S. (euro)


Lesenswert?

@ 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....

von Marc S. (euro)


Lesenswert?

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
Noch kein Account? Hier anmelden.