Hallo Leute,
ich habe vor ein paar Tagen angefangen, mit dem ATtiny25, AVR Studio4
und WINAVR GCC rumzufummeln.
Jetzt mal die Frage:
Ist es möglich, den Timer auf 64MHz zu boosten und dann eine PWM mit
20-Bit Auflösung hinzukriegen?
Es würde mir vollkommen reichen wenn ich das Tastverhältnis der PWM
zwischen 10% und 90% einstellen kann.
Bei einer PWM mit 20 Bit Auflösung erwarte ich eine PWM-Frequenz von
64MHz/2^20 = ca. 64Hz.
Kann mir mal der eine oder andere von den erfahrenen Experten da helfen?
Ich verliere bei der langen Beschreibung im Datenblatt irgendwie den
Überblick.
Also 64MHz mit nem Tiny halt ich für sehr gewagt. Entweder musst du den
kompletten µC von 20MHz Maximal-Frequenz auf 64MHz übertakten. Kann mir
nicht vorstellen dass das klappt. Nur den Timer über Capture schnell
laufen lassen wird erst recht nicht gehen (max. Timer-Takt < 1/2
µC-Takt). Wie hast du dir das mit der Takt-Frequenz denn vorgestellt?
Andere Frage: wozu brauchst du denn die hohe Frequenz und Auflösung?
Gruß, Alex
nö, das wird nicht funktionieren.
nimm nen CPLD, integriere die zähler dort und lass den rest im µC
laufen.
eine andere möglichkeit wäre ein softcore. nimm den AX8 von opencores
und bau dir die benötigten counter da dran.
> Also 64MHz mit nem Tiny halt ich für sehr gewagt. Entweder musst du den> kompletten µC von 20MHz Maximal-Frequenz auf 64MHz übertakten.
Der Tiny25 hat eine interne PLL, die den 8fachen Takt für Timer 1 (8
Bit) erzeugt. 64 MHz sind somit nicht das Problem, aber die 20 Bit.
Man könnte 12 Bit mit einer Hilfsvariablen zählen, die beim Überlauf
inkrementiert wird und und mit ihr zusammen bestimmen, wann ein
Compare-Match eintritt.
Das Problem ist nur, dass deine ISR dann vermutlich DEUTLICH zulange
läuft, wenn die Interrupts mit einer Fequenz von 250kHz reinkommen. Sehr
genau wirds auch dann nicht, wenn der Compare-match direkt hinter der
Isr erfolgen muss.
Marek schrieb:> nö, das wird nicht funktionieren.
wieso denn nicht. Timer 1 des Attiny25 verfügt über eine eigene 64Mhz
PLL und kann asynchron laufen. Ich denke darauf bezieht sich auch der
Orginal-Poster.
Allerdings bist du mit der Auflösung an die 8-Bit des Timers gebunden.
Das heißt du erreichst maximal 8 bit Auflösung (OCR1C = 255).
Für was braucht man denn 20 bit Auflösung? Erläuter das mal genauer.
Vielleicht gibt es ja eine bessere Lösung als die, die du dir ausgedacht
hast.
Ich hoffe du willst keine LEDs dimmen! ;)
Gruß, Jens
Ui, das mit der PLL is ja toll :) Wenn ichs grad richtig gelesen hab,
dann läuft die aber auf Basis des internen RC-Oszillators. Ob bei dessen
Ungenauigkeit 20bit in irgendeiner Weise Sinn machen? Mich würds auch
interessieren, wofür du das brauchst.
Wenn man kein wirkliches PWM Signal braicht, sondern nur eine variables
tastverhältnis, könnte man ein 16 oder 8 Bit PWM Signal nehmen, und dann
per Software zwischen verschiedenen Werten umschalten. Das ist dann aber
kein echtes 20 Bit PWM, sondern moduliertes 8 Bit PWM - für einige
Anwendungen geht das aber sogar besser.
Mit dem 64 MHz PLL Takt aus dem TinyX26 oder so hat man aber nur sehr
wenig zeit, aber es könnte gerade noch gehen. Für die Timer ISR hat man
64 Zyklen zeit, um den neuen PWM Wert zu berechen. Für die Genauigkeit
gibt es da kein extra Problem, denn der Wert wird nochmal von der
Hardware syncronisiert.
Für echtes PWM mit 20 Bit auflösung könnte die Genauigkeit des Internen
Taktes beim Tiny... etwas knapp werden, denn als Taktbasis hat man so
weit ich weiss nur den internen RC Takt, keinen Quarz.
> [PWM] Wenn ichs grad richtig gelesen hab,> dann läuft die aber auf Basis des internen RC-Oszillators. Ob bei dessen> Ungenauigkeit 20bit in irgendeiner Weise Sinn machen?
Ja natürlich, denn für den Mittelwert (und nur der ist bei PWM
typischerweise gefragt) ist einzig die Kurzzeitstabilität von Interesse.
Hc Zimmerer schrieb:> Ja natürlich, denn für den Mittelwert (und nur der ist bei PWM> typischerweise gefragt) ist einzig die Kurzzeitstabilität von Interesse.
Jepp.
Ich frag mich aber wofür 20Bit-PWM Sinn machen könnte. Da muss die
Versorgung schon extremst sauber sein.
Man müsste etwa 1/2 8-Bit-Periode (< 1 Periode) vor dem Schaltzeitpunkt
feststellen, dass ein Schaltvorgang bevorsteht und den OC-Ausgang scharf
schalten. Ca. 1/2 Periode (<1 Periode) später müsste man den OC-Ausgang
wieder deaktivieren und auf den neuen Stand festnageln. Dasselbe für
den Nulldurchlauf des 20-Bit-Zählers (8 Bit Hard- und 12 Bit
Software-Zähler).
Da nur 10..90% PWM gefordert sind, ist man den Sonderfall los, dass
beide Flanken in dieselbe Periode fallen.
So könnte es gehen.
Hc Zimmerer schrieb:>> [PWM] Wenn ichs grad richtig gelesen hab,>> dann läuft die aber auf Basis des internen RC-Oszillators. Ob bei dessen>> Ungenauigkeit 20bit in irgendeiner Weise Sinn machen?>> Ja natürlich, denn für den Mittelwert (und nur der ist bei PWM> typischerweise gefragt) ist einzig die Kurzzeitstabilität von Interesse.
Das ist natürlich vollkommen richtig!
Dann frag ich mich aber, wie man so eine PWM auf der elektrischen Seite
weiterführt, ohne dass beliebige Störeinflüsse die Auflösung wieder
zunichte machen (vorrausgesetzt, die PWM soll überhaupt nach draußen).
Ohne den Einsatz-Zweck wirds wahrscheinlich schwierig, hier weitere Tips
zu geben.
Gruß, Alex
Klar. Immerhin habe ich bei einer 20-Bit-PWM den Vorteil, dass ich die
als PWM weiterleiten kann, ohne große Verluste an Genauigkeit
einzufahren (vorausgesetzt mal, ich verschleife die Flanken nicht
unsymmetrisch). Erst ab dort, wo die Mittelwertbildung erfolgt, wirds
sehr kritisch.
Daniel G. schrieb:>>Es sind 64 MHz>> Flasch, denn im eingangspost steht:>>>Bei einer PWM mit 20 Bit Auflösung erwarte ich eine PWM-Frequenz von>>64MHz/2^20 = ca. 64Hz.
Richtig, so meine ich das.
Heraus kommt ein PWM-Signal dessen ti/tp-Verhältnis sich in
millionstel-Schritten (bei 64 Hz also etwa 15 ns/Schritt) einstellen
lässt. Was will man mit diesem Präzisions-Overkill bitte anfangen? Als
Zeitbasis macht so ein ATTiny ja auch keinen großen Sinn.
Andreas K. schrieb:> Heraus kommt ein PWM-Signal dessen ti/tp-Verhältnis sich in> millionstel-Schritten (bei 64 Hz also etwa 15 ns/Schritt) einstellen> lässt. Was will man mit diesem Präzisions-Overkill bitte anfangen?
Da ist ein Heizwiderstand auf einem Kupferblock.
Die Spannung an dem Heizwiderstand wird mit der PWM geschaltet.
Die Spannungsquelle ist stabilisiert.
Der Kupferblock ist dick in Styropor eingepackt.
Die Heizleistung soll halt extrem feinfühlig regelbar sein.
>Ansonsten halte ich den Threadstarter für einen Troll.
Ansonsten halte ich den *Martin (Gast)* für einen Troll.
Super Goofy schrieb:> Die Heizleistung soll halt extrem feinfühlig regelbar sein.
Ok, das wäre ein mögliches Szenario.
Jetzt aber mal im ernst, Das nenn ich mit Kanonen auf Spatzen schießen.
So genau kannst du die Temperatur deines Kupferblocks ja nicht mal
messen, wie du sie regeln willst.
Mit dem Standardmäßig vorhandenen 16-Bit-Timer ließe sich das viel
einfacher realisieren, und dir bleiben trotzdem noch 65536 mögliche
Leistungsstufen.
Andreas K. schrieb:> Mit dem Standardmäßig vorhandenen 16-Bit-Timer ließe sich das viel> einfacher realisieren, und dir bleiben trotzdem noch 65536 mögliche> Leistungsstufen.
Ein Test mit einer DAC-Karte hat ergeben, das 12 oder 16 Bit nicht
ausreichen.
Bei 24 Bit Auflösung erscheint mir die PWM-Frequenz mit 3,8Hz als etwas
klein.
Deshalb dieser Kompromiß mit 20 Bit und 61Hz.
Hat jemand mal etwas Code für mich, ich muss doch gestehen, das ich ein
totaler Anfänger mit C und AVR bin.
Mach es doch so wie es früher auch gegengen ist, also
ohne Timer.
Erzeuge dir einen Sägezahn (oder ein Dreiecksignal), einen
guten DA-Wandler mit deinen 20 BIT und einen Komperator zum
PWM-Signal erzeugen.
Deine Frequenz kannst du dann (fast) frei wählen und die
Software wird recht einfach ;)
hans
Ich kann mir gut vorstellen, dass bei 64 Hz der Ripple höher sein dürfte
als die Genauigkeit deiner PWM. Außerdem brauchst du eine extrem gute
Messung, um überhaupt richtig regeln zu können. Und ohne Regelung macht
eine extrem genaue Einstellung auch wenig Sinn, da die Störgrößen einen
wesentlichen Einfluss haben (in Vergleich zu deiner PWM-Auflösung).
Ich würde dann lieber auf eine schnellere Regelung setzen, damit hast du
im Endeffekt einen ähnlichen Nutzen wie eine hochgenaue
Spannungsstellung.
Super Goofy schrieb:> Ein Test mit einer DAC-Karte hat ergeben, das 12 oder 16 Bit nicht> ausreichen.
Das kauf ich dir nicht ab, den Regelbereich auf 10...90% begrenzen aber
dann nicht mit den verbleibenden 52.428 werten (80% vom Werteumfang des
16-bitters)
Welchen Effekt hat es denn, das die Einstellgenauigkeit nicht ausreicht?
Super Goofy schrieb:> Da ist ein Heizwiderstand auf einem Kupferblock.> Die Spannung an dem Heizwiderstand wird mit der PWM geschaltet.> Die Spannungsquelle ist stabilisiert.> Der Kupferblock ist dick in Styropor eingepackt.> Die Heizleistung soll halt extrem feinfühlig regelbar sein.
In dem Szenario ist eine 8-Bit-PWM genauso gut wie 20-Bit. Es kommt
ausschließlich auf die Sensorik und den Regler an.
Über den Zeitraum von 1/64 s (bzw. 1/61 s) landest du wieder bei 20 Bit.
Die höhere PWM-Frequenz hat sogar noch den Vorteil schneller reagieren
zu können. Obwohl die Zeitkonstante deines Systems vmtl. eh einiges
höher liegt als 1/61 s.
Stephan schrieb:> Obwohl die Zeitkonstante deines Systems vmtl. eh einiges> höher liegt als 1/61 s.
[ironie]
Leider hab ich heute meine Supernüsse nicht dabei, ohne die kann ich den
Kupferblock leider nicht anheben. Kann die Zeitkonstante (wie lange ich
brauche um den Kupferblock um 1m anzuheben) jetzt nicht ad hoc
ermitteln.
[/ironie]
> Ein Test mit einer DAC-Karte hat ergeben, das 12 oder 16 Bit nicht> ausreichen.
da wärs interessant, inwiefern die nicht ausreichen. was für ein
Verhalten hast du dir denn gewünscht und wie ist es in der Realität
davon abgewichen? Ich geh auch schwer davon aus, dass es nicht an der
PWM-Auflösung lag :-P
Kannst du uns noch mehr Hintergrund geben? Also wofür ist der ganze
Versuch da, wie ist er genau aufgebaut etc. Ich bin mir fast sicher,
dass hier in sehr kurzer Zeit eine gute und einfache Lösung für dich
rauskommt, wenn die Leute verstehen, um was es eigentlich geht :)
Gruß, Alex
Andreas K. schrieb:> Mit dem Standardmäßig vorhandenen 16-Bit-Timer ließe sich das viel> einfacher realisieren, und dir bleiben trotzdem noch 65536 mögliche> Leistungsstufen
Wobei man das dann noch mit einer "modulation" versehen könnte um in 16
Perioden auf 20 Bit Auflösung zu kommen. (Halte ich aber bei bestehendem
Aufbau für unsinnig s.u.).
Super Goofy schrieb:> Da ist ein Heizwiderstand auf einem Kupferblock.
Da hast Du ein ganz anderes Problem: Wenn Du feinfühlig regeln willst
sollte der Heizwiderstand gleichmäßig IM Kupferblock verteilt sein.
Ansonsten sind die Temperaturgradienten zu groß für eine gute Regelung.
Du hast viel zu große Zeitkonstanten.
> Die Spannungsquelle ist stabilisiert
Aber sicher nicht mit einer Genauigkeit von 1 ppm. eher irgendwas im
Prozent oder Promille Bereich.
> Der Kupferblock ist dick in Styropor eingepackt.
Wenn Du wirklich genau werden willst reicht eine einzelne Stufe nicht.
Du solltest auch außerhalb des Styroporblocks die Temperatur konstant
regeln.
Super Goofy schrieb:> Ein Test mit einer DAC-Karte hat ergeben, das 12 oder 16 Bit nicht> ausreichen.
Liegt aber sicher nicht an der Auflösung.
Gruß Anja
Super Goofy schrieb:> [ironie]> Leider hab ich heute meine Supernüsse nicht dabei, ohne die kann ich den> Kupferblock leider nicht anheben. Kann die Zeitkonstante (wie lange ich> brauche um den Kupferblock um 1m anzuheben) jetzt nicht ad hoc> ermitteln.> [/ironie]
Was das mit Ironie zu tun hat erschließt sich mir leider nicht...
Die Vorschläge waren durchaus ernst gemeint. Wie alle anderen bin ich
der Ansicht, dass eine PWM-Auflösung über 8-12 Bit nichts bringt.
Die Defizite liegen an anderer Stelle. Punkt
Ein 20 Bit PWM Signal wird hier nicht gebraucht. Ein 16 Bit PWM - Signal
und dann eine Modulation drüber wäre für die Anwendung schon viel
besser, nötig wäre es aber auch nicht.
Wenn man schon den Aufwand treibt, die Spannung auf 1 ppm zu
stbilisieren, kann man ein 20 Bit PWM Signal auch per FPGA oder CPLD und
einem Quarztakt erzeugen.
Ich muss meine Temperatur gar nicht so genau messen können, wichtig ist
nur sie mit hoher Auflösung zu stabiliesieren.
Natürlich ist die Umgebung auch temperaturstabilisiert.
Spannungsreferenz ist LTZ1000 mit 0,05µV/°C
Für ein FPGA oder CPLD fehlt mir die Zeit...
Hat mal jemand ein paar Code-Schnipsel?
Wie könnte man die 16-Bit PWM auf 20 Bit anboosten?
Wie den Algorithmus gestalten?
Mir scheint, als könnten dir ein paar Fetzen Regelungstechnik ganz
guttun.
Da wirst du nämlich bemerken, dass (wie oben schon geschrieben) deine
Zeitkonstanten sehr wahrscheinlich in einem Bereich liegen wo es egal
ist, ob du konstant einen 20 Bit-wert draufgibst, oder ob du dir für
einen 16-bit-timer nochmal 16 Zeitslots, in denen du einen Zählerwert
höher oder niedriger gehst, anlegst, um damit die zusätzlichen 4 bit zu
bekommen.
Der Mittelwert hat 20 Bit, und durch den Tiefpasseffekt der
Wärmekapazität kaum Rippel.
welche Masse hat dein Kupferblock ?
wie stabil soll die Temperatur sein ? Zahlen!
welche Temperatur?
Welche Heizleistung?
durch die Isolierung hast du unterschiedliche Zeitkonstanten beim Heizen
und
Kühlen. Kann zu Regelproblemen führen.
drpepper schrieb:> oder ob du dir für> einen 16-bit-timer nochmal 16 Zeitslots, in denen du einen Zählerwert> höher oder niedriger gehst, anlegst, um damit die zusätzlichen 4 bit zu> bekommen.
Code?
bei einer angenommenen maximalen Heizleistung von 1000Watt, wären 20Bit
Auflösung ca. 1 Milliwatt....
(entspricht in etwa der Heizleistung eines Fliegenfurzes)
>wichtig ist nur sie mit hoher Auflösung zu stabiliesieren.
Stabilisierung setzt eine hinreichend genaue Messung voraus.
Denn wie will der Stabilisierungsteil wissen in welche Richtung (und vor
allem um wieviel) er regeln muß wenn die Eingangsgröße (also die
momentane Temperatur) nicht hinreichend genau ist. Dann macht auch die
20Bit PWM keinen Sinn.
PeterL schrieb:> bei einer angenommenen maximalen Heizleistung von 1000Watt, wären 20Bit> Auflösung ca. 1 Milliwatt....
stimmt so, und soll so auch sein.
Man will den Block in einer vernüftigen Zeit auf Temperatur bringen und
dort halten.
> (entspricht in etwa der Heizleistung eines Fliegenfurzes)
stimmt nicht siehe FFN "Fliegen furzen nicht" Werbekampagne
Wenn ich den Kandidaten richtig verstanden habe, will er die
Heizleistung STEUERN und nicht REGELN.
Da reicht dann schon der zitierte "Fliegenfurz", um die Temperatur zu
verfälschen. SO macht man das üblicherweise NICHT.
Andreas Schweigstill schrieb:
> Super Goofy schrieb:>> Code?>> Gegen Bezahlung? Gerne!
Vorsicht, der will das Geld zurück, wenn es nicht so funktioniert, wie
er es sich vorgestellt hat!
meint
Bernhard
Bernhard R. schrieb:> Vorsicht, der will das Geld zurück, wenn es nicht so funktioniert, wie> er es sich vorgestellt hat!
Das geht nur im Paket mit der Hardware. Der TE geht ja anscheinend
weiterhin davon aus, dass seine Messung nicht genau sein muss...
Was soll denn damit gemacht werden?
Mir fallen dazu nur Sachen ein, die entweder was mit der Messung des
Temperaturausdehnungskoeffizienten (tolles Wort), supergenaue
IR-Teleskope oder extrem genauen Quarzoszillatoren zu tun haben!
Wenn der Sinn genauer bekannt wäre,
könnte man dazu mehr sagen...
Mit freundlichen Grüßen,
Valentin Buck
Bernhard R. schrieb:> Vorsicht, der will das Geld zurück, wenn es nicht so funktioniert, wie> er es sich vorgestellt hat!
Wenn es nicht funktioniert, dann 24Bit.
Super Dummy schrieb:> Vielleicht so in der art...
Besser nach dem Bresenham-Algorithmus, sonst verteilt sich der Heizwert
nicht gleichmäßig über der Zeit. Außerdem könnte sich ja der Heizwert
bei jeder Ausgabe Ändern und sich dadurch Artefakte ergeben.
also besser etwa so:
init();
{
Rest = 8;
}
ReglerAusgabe();
{
h=heizwert >> 4; // 16 bit msb abschneiden
Rest = Rest + (heizwert & 15);
if ((Rest >= 16) && (h<0xFFFF)) then
{
setze_pwm(h+1)
Rest = Rest & 0x0F; // 16 abziehen
}
else setze_pwm(h);
}
bei h = 8 wird so jeder 2. Wert als höherer Wert ausgegeben.
Bei sich ändernden Heizwerten werden die fehlenden Bits gespeichert und
nachträglich berücksichtigt.
Gruß Anja
Hallo Anja,
der Programm-Code von dir ist sehr gut :-) und einleuchtend.
Toll das du in deiner if Abfrage && (h<0xFFFF) mit drin hast,
ich hätte das voll vergessen, hab eine Weile gebraucht, den Sinn zu
erkennen.
Du bist toll, willst du mich heiraten? ;-)
Super Goofy schrieb:> Ich muss meine Temperatur gar nicht so genau messen können, wichtig ist> nur sie mit hoher Auflösung zu stabiliesieren.
OK, ich transferiere mal in einen anderen Bereich.
Du willst einem Auto genau 50km/h fahren. und kannst das Gaspedal in
einer Millionen schritte genau einstellen.
Wie ermittelst du die Geschwindigkeit? In dem du auf einen Tacho schaust
den du vielleicht auf 0,1Km/h genau ablesen kannst.
Jetzt sellst du fest das du nur 49,9 km/h schnell bist.
Um wie viele schritte verstellst du das Gaspedal?
Wie lange wartest du dann bis du wieder eine Änderung vornimmst?
Schussel schrieb:> OK, ich transferiere mal in einen anderen Bereich.>> Du willst einem Auto genau 50km/h fahren. und kannst das Gaspedal in> einer Millionen schritte genau einstellen.>> Wie ermittelst du die Geschwindigkeit? In dem du auf einen Tacho schaust> den du vielleicht auf 0,1Km/h genau ablesen kannst.>> Jetzt sellst du fest das du nur 49,9 km/h schnell bist.> Um wie viele schritte verstellst du das Gaspedal?> Wie lange wartest du dann bis du wieder eine Änderung vornimmst?
Das ist ein sehr schöner Vergleich, an dem sich vieles erklären lässt.
Es kommt bei dem Auto vieleicht nicht genau darauf an, genau die 50 km/h
einzuhalten. Da fährt z.B. ein zweites Fahrzeug neben dem Auto her und
gibt die Geschwindigkeit vor. Die beiden Fahrzeuge sind mit einer Stange
aus einem leicht brechenden Material verbunden. Die Kräfte die auf die
Stange einwirken werden mit Dehnungsmeßstreifen gemessen. Dieses Signal
geht auf einen PI- oder PID-Regler. Dieser steuern das Gaspedal.
Super Goofy schrieb:> Dieser steuern das Gaspedal.
Trotzdem müssen das Gaspedal und die dahinter befindliche Ansteuerung
nicht eine so hohe Auflösung besitzen wie die zu fahrende
Geschwindigkeit. Gleiches gilt auch hier für den Thermostaten.
Super Goofy schrieb:> geht auf einen PI- oder PID-Regler. Dieser steuern das Gaspedal.
Aber auch dazu muss das Gaspedal nicht in 2^20 Abstufungen zur Verfügung
stehen.
Vor allen Dingen dann nicht, wenn, wie bei dir, das eine Auto mit einem
etwas elastischem Abschleppseil an einem Abschleppwagen angehängt ist.
Das Gaspedal des Abschleppwagens muss nicht über 1 Million verschiedene
Stellungen unterscheiden können, es reicht wenn der Fahrer (die
Regelung) auf Zack ist.
Andreas Schweigstill schrieb:> Trotzdem müssen das Gaspedal und die dahinter befindliche Ansteuerung> nicht eine so hohe Auflösung besitzen wie die zu fahrende> Geschwindigkeit.
Ja eben doch. Gesetzt den Fall der Abstand beider Fahrzeuge hat eine
gewisse Zeit übereingestimmt. Jetzt driften sie auseinander.
Die Kraft auf die Stange wird grösser.
Die Regelung greift ein und erhöht die Gescheindigkeit um eine Stufe.
Oh Verflixt, das war jetzt aber zu schnell, schnell eine Stufe runter.
Oder noch ein etwas drastischeres Beispiel, stell dir vor, bei deinem
Auto hat das Gaspedal nur 5 mögliche Stellungen. Viel Spass im
Stadtverkehr ;-)
Karl heinz Buchegger schrieb:> Vor allen Dingen dann nicht, wenn, wie bei dir, das eine Auto mit einem> etwas elastischem Abschleppseil an einem Abschleppwagen angehängt ist.
Naja, es soll auch kein elastisches Seil sein, sondern ein Stange aus
einem leicht brechenden Material...
Super Goofy schrieb:> Karl heinz Buchegger schrieb:>> Vor allen Dingen dann nicht, wenn, wie bei dir, das eine Auto mit einem>> etwas elastischem Abschleppseil an einem Abschleppwagen angehängt ist.>> Naja, es soll auch kein elastisches Seil sein, sondern ein Stange aus> einem leicht brechenden Material...
Ich rede von deinem Kupferblock.
Der verzögert dir die Regelung!
Super Goofy schrieb:> Andreas Schweigstill schrieb:>> Trotzdem müssen das Gaspedal und die dahinter befindliche Ansteuerung>> nicht eine so hohe Auflösung besitzen wie die zu fahrende>> Geschwindigkeit.>> Ja eben doch. Gesetzt den Fall der Abstand beider Fahrzeuge hat eine> gewisse Zeit übereingestimmt. Jetzt driften sie auseinander.
Jep.
Das eine Auto ist ein klein wenig schneller. Nach 3 Erdumkreisungen hat
es soviel Vorsprung, dass die Stange brechen wird.
> Die Kraft auf die Stange wird grösser.> Die Regelung greift ein und erhöht die Gescheindigkeit um eine Stufe.
um ganze 2 Millimeter/Jahrhundert.
Na dann viel Spass beim angleichen.
Wenn man dir so zuhört ist es ein Wunder, dass man einen
Auto-Geschwindigkeitsregeler als Mensch in Sekundenbruchteilen so
einstellen kann, dass der Abstand zum Vordermann auf ebener Strecke über
mehr als 10 Minuten konstant bleibt.
Und ja: Das geht. Überhaupt kein Problem.
> Oder noch ein etwas drastischeres Beispiel, stell dir vor, bei deinem> Auto hat das Gaspedal nur 5 mögliche Stellungen. Viel Spass im> Stadtverkehr ;-)
Man muss nicht von einem Extrem ins Andere fallen.
Super Goofy schrieb:> Oder noch ein etwas drastischeres Beispiel, stell dir vor, bei deinem> Auto hat das Gaspedal nur 5 mögliche Stellungen. Viel Spass im> Stadtverkehr ;-
Also viel mehr hat ein Gaspedal wirklich nicht. Du mußt froh sein wenn
du da auf 2-5% Auflösung kommst. Das was das Auto dann "fahrbar" macht
sind so Dinge wie "Fahrverhaltenfilter", "Zwischendrehzahlregler" und
"Ruckel-Dämpfer".
Womit wir wieder beim Thema Regler wären.
Gruß Anja
Ich glaub der hat garkeine Regelung und will die Heizleistung so klein
machen können, das sich der Kupferblock bei seiner gewünschten
Temperatur von selbst einpendelt.
Methoden wie in der Steinzeit.
Super Goofy schrieb:> Oder noch ein etwas drastischeres Beispiel, stell dir vor, bei deinem> Auto hat das Gaspedal nur 5 mögliche Stellungen. Viel Spass im> Stadtverkehr ;-)
Wenn Du schon mal Trabant gefahren währst, dann wüßtest Du das man sogar
mit 3 Gasstellungen fahren kann. Bei einem PKW mit 500PS reichen 256
Stellungen (8Bit) auch voll auf. Ich möchte mal sehen wie Du das mit dem
Fuß Regelst oder meinst Du doch Steuern?
Ich denke Super Goofy ist die Temperatur egal.
Er will eigentlich was anderes und sagts nicht. Und wir mühen uns
sinnlos ab.
Die Temperatur kann nicht genau gemessen werden.
Die absolute Temperatur ist nicht so wichtig.
Ich phantasier mal:
Gehts eigentlich um die Ausdehnung des Kupferblocks, oder die Kraft die
er dabei auf irgendwas ausübt? Würde zu den Salzstangen passen.
Wenns um die Kraft geht: Die könnte bei 100% PWM z.B. bei 10kN liegen.
Gemessen werden kann bis 10N (bei mehr ist die Probe eh kaputt) und
einer Auflösung von 10mN.
Da wär dann ei geeigneter Messwert für die Regelung...
> stell dir vor, bei deinem Auto hat das Gaspedal nur 5 mögliche> Stellungen. Viel Spass im Stadtverkehr ;-)
Warum? Wenn Du mit dem Pedal 10x pro Sekunde zwischen Stellung 1 und 2
wechselts wird recht gut eine Stellung 1,5 daraus.
Dein Kupferblock hat vmtl. ne Zeitkonstante ähnlich nem Auto, mit
16-Bit_PWM wechselst Du die Stellungen aber nicht 10x sondern 15000x pro
Sekunde.
@Goofy:
Mal ein paar Fragen aus dem Off:
Wenn du unbedingt eine 20-Bit-PWM willst, warum dann nicht einen 32-Bit
µC verwenden? Lass doch einfach das "Rumgefummel mit dem ATtiny" :-)
Das Rumfummeln hat deinen Brötchengeber schon deutlich mehr gekostet,
als einfach nen 32-Bit µC zu besorgen und loszulegen.
Hast du es schon mal mit einer 16-Bit PWM versucht?
Um wieviel liegst du damit neben der anvisierten Genauigkeit?
Wie ermittelst du den Fehler und wie regelst du?
@ Stephan (Gast)
>Ich denke Super Goofy ist die Temperatur egal.
Nöö, der ABSOLUTWERT ist egal. Ob es 60 oder 60,4 °C sind spielt keine
Rolle. Aber egal wie groß der wahre Absolutwert ist, er soll STABIL
anliegen. Siehe Auflösung und Genauigkeit. Der OP will AUFLÖSUNG;
keine GENAUIGKEIT. Wenn gleich ich 20 Bit PWM für akademisch halte, wie
der Rest des Forums.
>16-Bit_PWM wechselst Du die Stellungen aber nicht 10x sondern 15000x pro>Sekunde.
Du hast einen 983 MHz Prozessor? Im PC vielleicht. Eine 16 Bit PWM hat
bei 16 MHz Takt 244 Hz. Das ist für einen Wärmereglung schon SEHR
schnell. Wenn man die, wie mehrfach angedeutet, nun statistisch
gemittelt mal mit X und X+1 laufen lässt, kommt da als Wärme X,y raus.
MFG
Falk
MarioT hat ja schon eine praktikable Lösung genannt:
Ein Heizwiderstand mit sagen wir mal 1kW mit 16bit Ansteuerung,
einen zweiten mit 15 Milliwatt und 8 Bit Ansteuerung.
ergibt 24 bit!
Ist sicher was für den LHC :-)
Was für ein seltsamer Aufbau mag das sein, der es erfordert, 61 mal pro
Sekunde die Leistung einer Heizung mit einer Schrittweite von 0,00009%
zu verstellen?
Um wieviel µK darf die Temperatur denn schwanken?
Wozu überhaupt PWM wenn er eh nix zu regeln hat?
Da kannste ja gleich für die Temperatur-Halte-Heizstufe einen
Linearregler bauen und ein Poti dranhängen.
Andreas K. schrieb:> Wozu überhaupt PWM wenn er eh nix zu regeln hat?
Wer behauptet sowas denn nur?
Natürlich ist das ganze in einer Regelschleife eingebunden.
In diesem Thread sollte es eigentlich um einen C-Code gehen, wenn der
auch auf kleinen µC's wie dem ATtiny25 laufen würde, wär's schön.
Erstes Ziel ist es erst mal eine 16-Bit PWM zu erreichen.
Später soll es eine 20-Bit PWM sein.
Problem ist bei der 16 und 20 Bit PWM den richtigen Moment zu erwischen,
wann der PWM-Wert geändert werden kann.
Das sollte mit einem Timer-Interruppts zu erreichen sein.
Es soll dies nicht ein Forum sein um die Sinnhaftigkeit einer 16 oder 20
Bit PWM zu bequatschen. Es geht hier schließlich nicht um einen
Brutschrank für Hühnereier.
Bei einem Brutschrank für Hühnereier würde natürlich auch ein 2-Punkt
Regler ausreichen. Es geht hier um einen Versuchsaufbau, der sich sehr
deutlich von Brutschrank für Hühnereier unterscheidet.
@Super Goofy
Also es wird immer konfuser ....
>den richtigen Moment zu erwischen, wann der PWM-Wert geändert werden kann
Wir reden hier von der Steuerung einer Heizung richtig ? Und dir ist
bewusst das du bei ner 20 Bit-PWM und 64MHz gerademal irgendwas im
einstelligen nano-Sekunden Bereich an Zeitversatz hast ?!
Poste mal ein paar mehr Infos zum Aufbau. Wenns nicht gerade eine
Gigawatt Heizung ist die innerhalb von Millisekunden dir die Temperatur
versaut dann liegt dein Problem definitiv nicht an einer 20-Bit PWM ...
aber das wird/wurde hier ja schon gepostet.
Wenn du unbedingt eine 20-Bit PWM haben willst, nimm nen CPLD. Wenn
schon overkill dann auch bitte richtig. Und das bischen
Einarbeitungszeit haste ganz schnell wieder raus wenn du statt ner
20-Bit PWM ne 24-Bit/32-Bit haben willst ... da kannst du auch alles
machen um die Heizung auf 10-20 Nanosekunden genau anzusteuern.
Super Goofy schrieb:> Problem ist bei der 16 und 20 Bit PWM den richtigen Moment zu erwischen,> wann der PWM-Wert geändert werden kann.> Das sollte mit einem Timer-Interruppts zu erreichen sein.
Eine Regelung mit Timer umschalten von 16Bit PWM auf 20Bit PWM um eine
Temperatur von einem Kupferblock konstant zu halten. Ich behaupte jetzt
mal, das hat von den ganz Großen noch keiner gemacht. Mich würde das
Endergebnis auch interessieren.
Super Goofy schrieb:> Die Regelung greift ein und erhöht die Gescheindigkeit um eine Stufe.> Oh Verflixt, das war jetzt aber zu schnell, schnell eine Stufe runter.
Genauso funktioniert eine Regelung nun mal. Wenn das schnell genug
hintereinander passiert gibts keinen Unterschied zu einer stufenlosen
Einstellung mehr.
@Super Goofy
So kommt man hier nicht weiter. Jetzt mal eine konkrete Frage. Wie lange
braucht der Kupferblock um z.B. 10°C wärmer zu werden, wenn die Heizung
permanent eingeschalten bleibt? Wie soll man denn Code schreiben, wenn
man nichts weiß?
Ich hab mal nen Thermostat gebaut mit ATtiny84. Der Timer 1 macht die
16Bit PWM und per ICP das Auslesen des Sensors SMT160.
Damit schafft man durchaus auf 0,1°C konstant zu halten.
Ehe drinne alles auf stabiler Temperatur ist, dauerts aber schon
Stunden.
Rechenmäßig ist der MC weit unterlastet, die Regelung benötigt
Zeitkonstanten von vielen Sekunden, damit sie nicht schwingt.
Geheizt wird mit mehreren Transistoren, die stromgeregelt sind, d.h. die
PWM wird geglättet. Dadurch ist die Heizleistung linear und die 16Bit
reichen dicke.
Bei nem Heizwiderstand wäre die Leistung quadratisch zur Steuerspannung
und man verliert Auflösung.
Peter
Ich hab mal einen 16bit PWM gebaut mit 16MHz Clock und 64kHz PWM
Frequenz. Der PWM Counter lief auf 8 bit, der PWM konnte dadurch kleine
Spulen verwenden. Und die niederen 8 bit wurden Sub harmonisch gemacht.
Die Subharmonische Geschwindigkeit war daher dann 256 Hz. Hier nochmals
4 bit anzuhaengen waeren nicht sonderlich schwierig.
Auch wären ein paar Worte dazu
> Die Heizleistung soll halt extrem feinfühlig regelbar sein.
bzw. wie genau die Regelung denn die Temperatur nun halten soll
angebracht.
Zahlenwerte, nicht irgendwelche nichtssagende Aussagen, die für jeden
etwas anderes bedeuten.
@ Super Goofy
Wie Karl schon schreibt lass mal ein paar Zahlen rüber wachsen.
-Gewicht des Kupferblocks
-Heizleistung
-Art des Temperatursensors
-Gewünschte Temp.-Tolleranz
Ist doch ganz einfach. Man braucht 2 Heizwiderstaende
x Ohm Heizwiderstand
x/2^16 Ohm Heizwiderstand
Beide mit jeweils 16 Bit PWM angesteuert. High Word ist der x Ohm
Widerstand, Low Word ist der x/2^16 Ohm Widerstand.
Dies ergibt eine Aufloesung von 32 Bit.
Super Goofy schrieb:> Peter Dannegger schrieb:>> Ne, kann ich nicht rausgeben.>> Vielleicht nur das entscheidende Code-Fragment?> Seufz jammer bitte bitte bitte :-)
Steht doch alles im Datenblatt!
Der Tiny84 kann 16 Bit PWM in Hardware.
Ausserdem ist das nicht die Lösung für dein Problem.
Du brauchst eine vernünftige Regelung und nicht eine PWM mit einer
irrwitzigen Auflösung.
@ Super Goofy (Gast)
>Vielleicht nur das entscheidende Code-Fragment?>Seufz jammer bitte bitte bitte :-)
Versuch mal das Datenblatt zu lesen, dort steht alles drin. Und für die
Faulen, siehe LED-Fading.
MfG
Falk