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.
Hi
>Und was will man mit 64 Hz PWM-Frequenz bitte anfangen?
Es sind 64 MHz.
MfG Spess
>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.
Was er damit machen will, hat der Anfrager nicht verraten. Technisch machbar wär's (wahrscheinlich).
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.
.... 64MHz/2^20 = ca. 64Hz ... 64 MHz / 2^20 ca. 61 Hz Ansonsten halte ich den Threadstarter für einen Troll.
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]
Super Goofy schrieb: > Da ist ein Heizwiderstand auf einem Kupferblock. Dann mach doch z.B. 3 Heizwiderstände mit 3x 8Bit o.ä.
> 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.
Bensch schrieb: > Wenn ich den Kandidaten richtig verstanden habe, will er die > Heizleistung STEUERN und nicht REGELN. Haste falsch verstanden! Code?
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...
Super Goofy schrieb: > Code? Vielleicht so in der art...
1 | for (i=0; i<16; i++) |
2 | { |
3 | h=heizwert >> 4; // 16 bit msb abschneiden |
4 | if (i > (heizwert & 15)) then |
5 | setze_pwm(h+1) |
6 | else |
7 | setze_pwm(h); |
8 | } |
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?
Das Thema Regelung hab ich ja auch schon angeschnitten, aber prallte irgendwie an der "Code ?!"-Frage ab ....
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
Apropos: Wie sieht eigentlich deine Regelung aus, wenn du mit 16 Bit nicht hinkommst. Sag jetzt bitte nicht
1 | while( 1 ) { |
2 | |
3 | istwert = .... |
4 | |
5 | if( istwert < sollwert ) |
6 | pwm++; |
7 | else if( istwert > sollwert ) |
8 | pwm--; |
9 | }
|
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?
Da würden 5 Bit auch reichen, 6 cm Pedalweg lässt sich damit auf 2 mm genau auflösen.
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?
Nicht dass am Ende die Versorgung die Heizung steuert weil sie mal eben um 0,00009% daneben liegt. Ist sicher eine Herausforderung..........
Ich vermute mal, dass es um einen Versuchsaufbau geht, um die SI-Normierung zur Messung der Dusseligkeit voranzutreiben.
blauzahnmeister schrieb: > Ich vermute mal, dass es um einen Versuchsaufbau geht, um die > SI-Normierung voranzutreiben. > Genau!
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.
Machs mit einem PLD. Die Einarbeitung ist innerhalb weniger Stunden erledigt, da es genug Beispielcode für PWM gibt.
Peter Dannegger schrieb: > Ich hab mal nen Thermostat gebaut mit ATtiny84. Der Timer 1 macht die > 16Bit PWM Kannst du den Code bitte mal hier posten?
Ne, kann ich nicht rausgeben. Man muß OC1B als Ausgang nehmen (Mode 15). Peter
Peter Dannegger schrieb: > Ne, kann ich nicht rausgeben. Vielleicht nur das entscheidende Code-Fragment? Seufz jammer bitte bitte bitte :-)
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
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.