mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmels mit schneller PWM und Totzeit?


Autor: Stephan S. (outsider)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es einen ATMEGA mit schnellen PWM's und Totzeit? Ich habe 
ATTiny261/461/861 gefunden die das haben, sind das die einzigen mit so 
einer Funktion? In der Parametric Table ist diese Funktion leider nicht 
gelistet und bei allen Datenblättern die ich angesehen habe gibts so 
etwas nicht. Ich bräuchte einfach nen größeren Controller mit mindestens 
32kB Flash, 20MHz und 44 oder mehr Pins.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan S. wrote:
> Gibt es einen ATMEGA mit schnellen PWM's und Totzeit? Ich habe
> ATTiny261/461/861 gefunden die das haben, sind das die einzigen mit so
> einer Funktion?

ATtiny25/45/85.  Bei den ganzen AT90PWMx bin ich mir nicht ganz
sicher.

> Ich bräuchte einfach nen größeren Controller mit mindestens
> 32kB Flash, 20MHz und 44 oder mehr Pins.

Ich weiß nicht, wie's beim Xmega aussieht, aber bei normalen ATmegas
gibt's das nicht.  Die Annahme ist sicher, dass man für derartige
Aufgaben besser einen kompletten ATtiny abstellt, der sich dann um
den ganzen Echtzeit-Krempel kümmern kann, während parallel ein fetter
ATmega herumwerkelt und die Steuerung ringsrum übernimmt.

Autor: Stephan S. (outsider)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für die Xmegas ist mir die Versorgungslage noch zu schlecht, könnte mir 
aber auch gut vorstellen dass da eher was ginge.

Das mit der Steuerung durch großen ATMEGA und Echtzeit-Krempel in den 
Tinys sieht fast so aus. Aber eigentlich könnte man das auch locker mit 
dem Controller der die Steuerung macht mit übernhemen weil gerade sowas 
wie PWM ja selbständig läuft und nicht vom Programmablauf beeinflusst 
wird. Zumindest bei einfacheren Situationen.

Wenn ich 2 Controller einsetze muss ich mich um ne Kommunikation 
zwischen den beiden bemühen was man sich eigentlich sparen könnte. Hab 
da noch keinen Überblick wie man so etwas am besten realisiert. UART? 
Wäre eh mal ein interessantes Thema, besonders auch wenn man mit einem 
Controller mehrere kleine ansteuert, die Problematik wird sich mir wohl 
noch öfters stellen. Aber dazu find ich bestimmt schon einiges im Forum, 
das will ich jetzt nich unbedingt hier nochmal aufziehen wo ich mich 
noch garnicht informiert habe.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan S. wrote:

> Das mit der Steuerung durch großen ATMEGA und Echtzeit-Krempel in den
> Tinys sieht fast so aus. Aber eigentlich könnte man das auch locker mit
> dem Controller der die Steuerung macht mit übernhemen weil gerade sowas
> wie PWM ja selbständig läuft und nicht vom Programmablauf beeinflusst
> wird. Zumindest bei einfacheren Situationen.

Ich glaube, das ist eher eine Risikofrage: wenn die PWM unter keinen
Umständen ,,fest gehen'' darf, dann kann man halt die Qualitäts-
sicherung der Software für einen kleinen abgesetzten Controller
viel besser beherrschen als für die eierlegende Wollmilchsau -- bis
hin zu solchen Dingen, dass der PWM-Controller ggf. per Wachhund
einen Tritt in den Hintern bekommen kann, während man das für den
Hauptcontroller nicht möchte.

> Wenn ich 2 Controller einsetze muss ich mich um ne Kommunikation
> zwischen den beiden bemühen was man sich eigentlich sparen könnte. Hab
> da noch keinen Überblick wie man so etwas am besten realisiert. UART?

USART, auch im Synchronbetrieb möglich.  SPI, ist allerdings als Slave
ein wenig eklig.  Wenn du aber beide Seiten in der Hand hast, kann man
im Master ja einfach lange genug warten, bis man sich sicher ist, dass
der Slave nach dem Ziehen des /SS jetzt bereit sein wird.  TWI, aber
da ist die Software doch relativ aufwändig.  Dafür kann hier der Slave
das Timing beeinflussen, wenn er noch nicht bereit ist für die
Transaktion.

Schließlich bliebe noch die Möglichkeit einer kompletten Parallel-
Datenübertragung.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan S. wrote:
> Gibt es einen ATMEGA mit schnellen PWM's und Totzeit?

Die großen (ATMega2560) haben bis zu 20 PWMs.
Die Totzeit machst Du, indem Du 2 PMW-Timer nimmst. Die eine Totzeit 
machst Du durch Timerversatz und die andere durch den PWM-Versatz (fast 
PWM mode).


Peter

Autor: Stephan S. (outsider)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dann die beiden PWM's UND-verknüpfen? Oder gibts da eine interne 
Lösung die ich bisher noch nicht erkannt habe?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal ATmega 16 M1 und Konsorten an. Da ist die Totzeit 
einstellbar. Und über PLL bis zu 64MHz.

MW

Autor: Stephan S. (outsider)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Sache mit den 2 PWM's gibt mir noch mehr zu denken. Könnts mir 
prinzipiell schon vorstellen, stelle mir das aber recht schwierig vor 
dass ich die Timer genau so nacheinander starten lasse wie ich es gerne 
hätte. Kann mir kaum vorstellen wie ich die Totzeit dann zu 50 ns machen 
kann. Die Zeiten um die es bei mir geht sind sehr klein. Es ist wirklich 
nötig auf 1 CPU Cycle genau timen zu können.

ATmega 16 M1 kann ich keinen finden. Nur ATmega32M1 Automotive und der 
geht nur bis 16 MHz.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan S. wrote:
> Die Sache mit den 2 PWM's gibt mir noch mehr zu denken. Könnts mir
> prinzipiell schon vorstellen, stelle mir das aber recht schwierig vor
> dass ich die Timer genau so nacheinander starten lasse wie ich es gerne
> hätte. Kann mir kaum vorstellen wie ich die Totzeit dann zu 50 ns machen
> kann.

Es geht ganz einfach: Jeder Timer hat mindestens 2 PWMs. Da beide den 
selben Zähler verwenden, sind beide synchron. Da die OCR Register nahezu 
alle doppelt gepuffert sind, hat man mit dem Schreiben der beiden Werte 
1 PWM Zyklus lang Zeit, das sollte reichen.
Verwendet man jetzt den Frequency & Phase Correct Modus, invertiert z.B. 
den B Kanal, und stellt die beiden PWM Werte unterschiedlich ein, dann 
hat man die Differenz der beiden Werte an Totzeit.
Möchte man also z.B. 4 Takte Totzeit dann stellt man das OCRxB Register 
auf 4 mehr ein, als das OCRxA Register. Dadurch ist der B Ausgang 4 
Takte länger auf Low als A (weil B ja invertiert ist), wodurch eine 
Lücke zwischen dem Umschalten von A nach B bzw. umgekehrt entsteht.
Das ganze habe ich schon mehrfach gemacht, funktioniert wunderbar. Man 
muss nur bei den Minimal und Maximalwerten aufpassen dass man da nicht 
über den maximalen Wert drüber rausläuft.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.