Forum: Mikrocontroller und Digitale Elektronik PWM mit 20 Bit Auflösung


von Super Goofy (Gast)


Lesenswert?

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.

von Alexander V. (avogra)


Lesenswert?

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

von Marek (Gast)


Lesenswert?

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.

von Hc Z. (mizch)


Lesenswert?

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

von Nippey (Gast)


Lesenswert?

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.

von Mario G. (mario)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

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

von Alexander V. (avogra)


Lesenswert?

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.

von Ulrich (Gast)


Lesenswert?

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.

von Hc Z. (mizch)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

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.

von Hc Z. (mizch)


Lesenswert?

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.

von Alexander V. (avogra)


Lesenswert?

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

von Hc Z. (mizch)


Lesenswert?

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.

von Andreas K. (derandi)


Lesenswert?

Und was will man mit 64 Hz PWM-Frequenz bitte anfangen?

von spess53 (Gast)


Lesenswert?

Hi

>Und was will man mit 64 Hz PWM-Frequenz bitte anfangen?

Es sind 64 MHz.

MfG Spess

von Daniel G. (daniel83)


Lesenswert?

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

von Hc Z. (mizch)


Lesenswert?

Was er damit machen will, hat der Anfrager nicht verraten.  Technisch 
machbar wär's (wahrscheinlich).

von Andreas K. (derandi)


Lesenswert?

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.

von Martin (Gast)


Lesenswert?

.... 64MHz/2^20 = ca. 64Hz ...

64 MHz / 2^20 ca. 61 Hz

Ansonsten halte ich den Threadstarter für einen Troll.

von Super Goofy (Gast)


Lesenswert?

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.

von Andreas K. (derandi)


Lesenswert?

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.

von Super Goofy (Gast)


Lesenswert?

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.

von hans (Gast)


Lesenswert?

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

von Mine Fields (Gast)


Lesenswert?

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.

von Andreas K. (derandi)


Lesenswert?

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?

von Stephan (Gast)


Lesenswert?

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.

von Super Goofy (Gast)


Lesenswert?

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]

von MarioT (Gast)


Lesenswert?

Super Goofy schrieb:
> Da ist ein Heizwiderstand auf einem Kupferblock.

Dann mach doch z.B. 3 Heizwiderstände mit 3x 8Bit o.ä.

von Alexander V. (avogra)


Lesenswert?

> 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

von Anja (Gast)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

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

von Ulrich (Gast)


Lesenswert?

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.

von Super Goofy (Gast)


Lesenswert?

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?

von drpepper (Gast)


Lesenswert?

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.

von rehaus (Gast)


Lesenswert?

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.

von Super Goofy (Gast)


Lesenswert?

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?

von PeterL (Gast)


Lesenswert?

bei einer angenommenen maximalen Heizleistung von 1000Watt, wären 20Bit
Auflösung ca. 1 Milliwatt....
(entspricht in etwa der Heizleistung eines Fliegenfurzes)

von Rene B. (themason) Benutzerseite


Lesenswert?

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

von Super Goofy (Gast)


Lesenswert?

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

von Bensch (Gast)


Lesenswert?

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.

von Super Goofy (Gast)


Lesenswert?

Bensch schrieb:
> Wenn ich den Kandidaten richtig verstanden habe, will er die
> Heizleistung STEUERN und nicht REGELN.

Haste falsch verstanden!

Code?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Super Goofy schrieb:
> Code?

Gegen Bezahlung? Gerne!

von blauzahnmeister (Gast)


Lesenswert?

Geht's noch weiter ?
hat gerade so'n Spass gemacht.

von Bernhard R. (barnyhh)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

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

von Super Dummy (Gast)


Lesenswert?

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
}

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

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

von MarioT (Gast)


Lesenswert?

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.

von Anja (Gast)


Lesenswert?

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

von Super Goofy (Gast)


Lesenswert?

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

von Schussel (Gast)


Lesenswert?

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?

von Rene B. (themason) Benutzerseite


Lesenswert?

Das Thema Regelung hab ich ja auch schon angeschnitten, aber prallte 
irgendwie an der "Code ?!"-Frage ab ....

von Super Goofy (Gast)


Lesenswert?

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.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Super Goofy (Gast)


Lesenswert?

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

von Super Goofy (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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.

von Anja (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
  }

von Andreas K. (derandi)


Lesenswert?

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.

von MarioT (Gast)


Lesenswert?

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?

von Andreas K. (derandi)


Lesenswert?

Da würden 5 Bit auch reichen, 6 cm Pedalweg lässt sich damit auf 2 mm 
genau auflösen.

von Stephan (Gast)


Lesenswert?

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.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von PeterL (Gast)


Lesenswert?

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 :-)

von Rolf Magnus (Gast)


Lesenswert?

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?

von Peter L. (Gast)


Lesenswert?

Nicht dass am Ende die Versorgung die Heizung steuert weil sie mal eben
um 0,00009% daneben liegt.

Ist sicher eine Herausforderung..........

von blauzahnmeister (Gast)


Lesenswert?

Ich vermute mal, dass es um einen Versuchsaufbau geht, um die 
SI-Normierung zur Messung der Dusseligkeit voranzutreiben.

von Super Goofy (Gast)


Lesenswert?

blauzahnmeister schrieb:
> Ich vermute mal, dass es um einen Versuchsaufbau geht, um die
> SI-Normierung voranzutreiben.
>

Genau!

von Andreas K. (derandi)


Lesenswert?

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.

von Bernhard R. (barnyhh)


Lesenswert?

Das Poti rauscht zu stark! Und erst die Operationsverstärker...

von Super Goofy (Gast)


Lesenswert?

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.

von Rene B. (themason) Benutzerseite


Lesenswert?

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

von MarioT (Gast)


Lesenswert?

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.

von Karlson (Gast)


Lesenswert?

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.

von MarioT (Gast)


Lesenswert?

@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ß?

von Peter D. (peda)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Quake (Gast)


Lesenswert?

@ 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

von Marko B. (glagnar)


Lesenswert?

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.

von Mine Fields (Gast)


Lesenswert?

Machs mit einem PLD. Die Einarbeitung ist innerhalb weniger Stunden 
erledigt, da es genug Beispielcode für PWM gibt.

von Super Goofy (Gast)


Lesenswert?

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?

von Hans Klein (Gast)


Lesenswert?

Super Goofy schrieb:
> Kannst du den Code bitte mal hier posten?

von Peter D. (peda)


Lesenswert?

Ne, kann ich nicht rausgeben.

Man muß OC1B als Ausgang nehmen (Mode 15).


Peter

von Super Goofy (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ne, kann ich nicht rausgeben.

Vielleicht nur das entscheidende Code-Fragment?
Seufz jammer bitte bitte bitte :-)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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