Hallo, ich will 3 100Hz PWM-Signale (5V Pegel) mit 16 Bit Auflösung und möglichst geringem Stromverbrauch erzeugen. Anforderung für die Linearität der angeschlossenen Analog-Schaltung ist daß alle 3 PWM-Signale synchron erzeugt werden. http://www.edn.com/article/471981-DC_accurate_32_bit_DAC_achieves_32_bit_resolution.php Bei den beiden PICs die ich verwendet habe, kann man für den PWM-Ausgang entweder den Timer frei wählen (dsPIC30F4013, PIC24FJ64GA002) oder es gibt eine Synchronisationsmöglichkeit (PIC24FV32KA302). Mit letzterem habe ich 2,1 mA (Datenblattwert 1,45mA bei 13,1MHz) erreicht. Mit dem ATMega1284P wären theoretisch bei 5V Versorgung 1,2mA (im Sleep-Mode bei 6,5536 MHz) (Stromangabe mit/ohne Quarz-Oszillator?) drin. Punkt1: Laut Datenblatt gibt es keine Möglichkeit die Timer1 + 3 zu synchronisieren: außer man startet sie kurz nacheinander mit gestaffelten Startwerten und zählt die Takte im Assembler ab (und hofft darauf daß sich der Timer nie verzählt). Punkt2: Außerdem möchte ich für Kalibrierzwecke+Linearitätsmessungen 100% PWM ausgeben können. Beim PIC setze ich einfach das gemeinsame Periodendauerregister < dem PWM-Wert 0xFFFF. Beim ATMega scheidet das wohl aus da ja sonst die Gefahr besteht daß die Timer wieder auseinanderlaufen. Wie würdet Ihr die beiden Problempunkte behandeln? Gruß Anja
Anja schrieb: > man startet sie kurz nacheinander mit > gestaffelten Startwerten und zählt die Takte im Assembler ab (und hofft > darauf daß sich der Timer nie verzählt). So müßte es gehen. Warum sollte sich ein Timer verzählen? Anja schrieb: > Außerdem möchte ich für Kalibrierzwecke+Linearitätsmessungen 100% PWM > ausgeben können. Außer bei Fast-PWM kannst Du 100% einstellen. Du kannst aber auch einfach die IO-Pins auf high setzen und wieder von der PWM abschalten (Normal port operation, OCnA/OCnB disconnected). Peter
Peter Dannegger schrieb: > Warum sollte sich ein Timer verzählen? Evtl wegen einer EMV-Störung so daß auf Grund von Toleranzen der eine Timer mal kurz stehen bleibt oder resetiert wird und der andere normal weiterläuft. Oder wenn ich den einen PWM auf 100% setze also die PWM deaktiviere und dann wieder auf einen kleineren Wert setze. (Zyklische Kalibrierung bei längeren Messungen). Da werde ich wohl einen Check auf gleichbleibende Differenz im Timer Overflow-Interrupt einbauen müssen. Und im Fehlerfall resetieren. Ein kurzer Fehler ist wohl besser wie ein stundenlanger Offset bei der Messung. Peter Dannegger schrieb: > Außer bei Fast-PWM kannst Du 100% einstellen. Geht bei voller 16-Bit-Auflösung nicht. Peter Dannegger schrieb: > Du kannst aber auch einfach die IO-Pins auf high setzen und wieder von > der PWM abschalten (Normal port operation, OCnA/OCnB disconnected). Das wäre eine Möglichkeit vorausgesetzt der PWM-Timer läuft normal weiter. Werde ich mal testen. Gruß Anja
Anja schrieb: > Evtl wegen einer EMV-Störung so daß auf Grund von Toleranzen der eine > Timer mal kurz stehen bleibt oder resetiert wird und der andere normal > weiterläuft. Das ist aber schon Schwarzmalerei. Da müßte man auch den Stack ins EEPROM legen, damit er nicht zerschossen werden kann :-)
Anja schrieb: > Evtl wegen einer EMV-Störung so daß auf Grund von Toleranzen der eine > Timer mal kurz stehen bleibt oder resetiert wird und der andere normal > weiterläuft. Der Timer ist ne separate Hardwareeinheit. Wenn Du soviel Störungen auf den CPU-Takt einkoppelst, wird viel eher die CPU sich verrechnen. Du kannst davon ausgehen, daß bei vernünftigen Platinenlayout und ordentlicher VCC die Timer immer richtig zählen. Und wenn Du einen externen Takt nimmst, können sie maximal einen CPU-Takt auseinander liegen. Die einzige Möglichkeit, daß sie falsch zählen, ist, daß Du sie absichtlich in Software falsch setzt. Peter
Anja schrieb: > Peter Dannegger schrieb: >> Außer bei Fast-PWM kannst Du 100% einstellen. > Geht bei voller 16-Bit-Auflösung nicht. Dann muß wohl das Datenblatt lügen: "If the OCRnx is set equal to BOTTOM the output will be continuously low and if set equal to TOP the output will be continuously high for non-inverted PWM mode." Peter
Peter Dannegger schrieb: > "If the OCRnx is set equal to BOTTOM the > output will be continuously low and if set equal to TOP the output will > be continuously high for > non-inverted PWM mode." Ups, 0 (Bottom) = 0% 0xFFFF (top) = 100 % (erwartet hätte ich 99,9985% = 65535/65536) und welcher Wert fehlt dann in der Reihe dazwischen der Wert 1 oder der Wert 0xFFFE oder sogar 0x8000? Ist mir schon bei den PICs aufgefallen daß es da mindestens 2 verschiedene Vorgehensweisen gibt: Beim PIC24FV32KA302 ist der tatsächlich ausgegebene Wert Register -> Output 0 = 0 1 = 2 (= 153uV) 0xFFFE = 0xFFFF 0xFFFF = 0x10000 = 100% bei den beiden anderen PICs ist es so wie ich erwartet hätte: Register -> Output 0 = 0 1 = 1 (= 76uV) 0xFFFE = 0xFFFE 0xFFFF = 0xFFFF Dauerhigh nur dann wenn das Periodendauer-Register < PWM-Wert ist. Gruß Anja
Peter Dannegger schrieb: > Dann muß wohl das Datenblatt lügen: > > "If the OCRnx is set equal to BOTTOM the > output will be continuously low and if set equal to TOP the output will > be continuously high for > non-inverted PWM mode." Tut es auch: ich habe jetzt mal TOP in ICR = 0xFF gesetzt (mein Hameg ist bei 0xFFFF leider zu dunkel) und Bottom ist ja in Mode 14 = 0. Das ganze bei 6,5536 MHz also Periode rund 40us. Bei OCR = 0x00FF erhalte ich continouously high. Aber bei OCR = 0x0000 ist der entsprechende Ausgang für 150ns high was auch zur Beschreibung paßt daß der Flankenwechsel an dem Takt nach Erkennung auf Gleichheit erfolgt. The 16-bit comparator continuously compares TCNTn with the Output Compare Register (OCRnx). If TCNT equals OCRnx the comparator signals a match. A match will set the Output Compare Flag (OCFnx) at the next timer clock cycle. Bei OCR = 0x0001 dann 300ns high Zeit. Also immer 150ns zu viel. Um einen Offset-Abgleich (0uV) zu machen muß ich also den Timer ausschalten. Jetzt gibt es also schon 3 Varianten wie ein 16 Bit PWM in der Praxis aussehen kann. Gruß Anja
Anja schrieb: > Tut es auch: > ich habe jetzt mal TOP in ICR = 0xFF gesetzt (mein Hameg ist bei 0xFFFF > leider zu dunkel) und Bottom ist ja in Mode 14 = 0. Mode 14 ist Fast-PWM. Der Text gilt wie gesagt nur für nicht Fast-PWM. Peter
Falls noch aktuell: Müssen das unbedingt 16Bit PWM-Auflösung sein? So bei <14Bit-PWM und >12Mhz Taktfrequenz könnte man das vielleicht mit einem Timer und 'in Software' machen.
Ralf G. schrieb: > Falls noch aktuell: > Müssen das unbedingt 16Bit PWM-Auflösung sein? Ja, (die Regeln gebe ich vor) Der PWM für die oberen 16 Bit ist entscheident für die Gesamtlinearität der Schaltung. > So bei <14Bit-PWM und >12Mhz Taktfrequenz könnte man das vielleicht mit > einem Timer und 'in Software' machen. >12 MHz bedeutet mehr Stromverbrauch. (Dann bleibe ich beim PIC). Die 0% lassen sich gut über das TCCR1A Register realisieren. -> die Sonderbehandlung bei 0% ist kein großer Aufwand. Die synchronisation bleibt erhalten. Synchronisationsverluste habe ich nur wenn ich die Periodendauerregister verändere. (Was beim TCCR1A-Register nicht notwendig ist). Aktuell habe ich den Stromverbrauch des ATMega1284P gemessen: Bei 6,5536 MHz Quarz + Takt (und entsprechend eingestellten Fuses) und die meiste Zeit im Sleep Mode bei deaktivierem ADC/VREF komme ich auf 2,1 - 2,15 mA. Also trotz besserem Datenblattwert beim AVR gleichauf mit dem PIC24FV32KA302 bei 3,2768 MHz Quarz und 4*PLL also 13,1 MHz. Das einzige Problem das ich im Moment noch habe ist daß die Schaltung plötzlich "über Nacht" nach Auschalten und wiedereinschalten nicht mehr funktioniert hat. Ich wollte gerade neu Flashen als beim Anstecken der ISP-Schnittstelle die Schaltung plötzlich angelaufen ist. Ich weiß jetzt nicht ob es daran liegt daß ich beim Reset-Pin auf den Internen Pull-up vertraut habe und keinen externen angeschlossen habe. (Bei mir ist nur ein 1nF Entstörkondensator und der Stecker für die ISP-Schnittstelle angeschlossen). Oder eventuell kommt der AVR mit der Low-Power-Einstellung für den Quarz nicht klar. FUSEL ist bei mir auf 0xFD. Ich werde mal einen 10k pull-up am Reset nachrüsten und beobachten. Falls jedoch der Oszillator unzuverlässig anschwingt ist der PIC klar im Vorteil. Gruß Anja
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.