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


von Stephan S. (outsider)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Stephan S. (outsider)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Peter D. (peda)


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

von Stephan S. (outsider)


Lesenswert?

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

von Michael Wilhelm (Gast)


Lesenswert?

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

MW

von Stephan S. (outsider)


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.

von Benedikt K. (benedikt)


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.

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.