Forum: Mikrocontroller und Digitale Elektronik Suche Empfehlung für Mikrocontroller


von Reinhard M. (reinhardm)


Lesenswert?

Hallo,

kann mir jemand einen Mikrocontroller empfehlen, der einen 32bit-Timer 
mit min. 200Mhz bietet und der ähnliche Funktionalität wie die stm32 
bietet?
Wenn es den auch noch in Discovery-board ähnlichen Boards gäbe, wäre das 
spitzenmäßig.

Gruß Reinhard

von hp-freund (Gast)


Lesenswert?

Reinhard M. schrieb:
> ähnliche Funktionalität wie die stm32

Moin,
was spricht gegen die?

von hp-freund (Gast)


Lesenswert?

Ach so, Timer mit 108 MHz.

von STler (Gast)


Lesenswert?

Reinhard M. schrieb:
> Hallo,
>
> kann mir jemand einen Mikrocontroller empfehlen, der einen 32bit-Timer
> mit min. 200Mhz bietet und der ähnliche Funktionalität wie die stm32
> bietet?
> Wenn es den auch noch in Discovery-board ähnlichen Boards gäbe, wäre das
> spitzenmäßig.


Die Cortex M7 von ST.
Die F7 bis 216MHz, die H7 bis 400MHz, wobei letztere bisher nur als 
Muster erhältlich sind, Nukleo- und Discoveryboards kommen wohl erst 
Q2-2017.

Auf Discoveryboard:
http://www.st.com/en/microcontrollers/stm32f746ng.html

Nächstes Jahr dann:
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32h7-series/stm32h7x3/stm32h743zi.html

von Nico W. (nico_w)


Lesenswert?

STler schrieb:
> Die Cortex M7 von ST.
> Die F7 bis 216MHz,

Also der F7 schafft auf den Timern auch nur 108MHz. Die 32bit Timer 
laufen über APB1. Der darf maximal 54MHz betragen. APB1 Timer bekommen 
dort nen x2 und laufen dann auf 108MHz maximal.

Wie das beim H7 später aussieht weiß ich nicht.

von Falk B. (falk)


Lesenswert?

@  Reinhard M. (reinhardm)

>kann mir jemand einen Mikrocontroller empfehlen, der einen 32bit-Timer
>mit min. 200Mhz bietet und der ähnliche Funktionalität wie die stm32
>bietet?

Das ist die falsche Frage. Besser wäre, wenn du uns sagst, was du 
INSGESAMT erreichen willst, siehe Netiquette.

Ich rate mal. Du willst eine hochaufgelöste PWM amchen oder 
hochaufgelöste Zeitmessungen. Dazu nimmt man andere Technologien. Z.B. 
einen Time to digital Converter (Zeitmessung) oder PWMs mit Micro Edge 
Zeitschritten wie beim PICCOLO.

von STler (Gast)


Lesenswert?

Nico W. schrieb:
> STler schrieb:
>> Die Cortex M7 von ST.
>> Die F7 bis 216MHz,
>
> Also der F7 schafft auf den Timern auch nur 108MHz. Die 32bit Timer
> laufen über APB1. Der darf maximal 54MHz betragen. APB1 Timer bekommen
> dort nen x2 und laufen dann auf 108MHz maximal.


Siehe Link oben:
"Up to 18 timers: up to thirteen 16-bit (1x low- power 16-bit timer 
available in Stop mode) and two 32-bit timers, each with up to 4 
IC/OC/PWM or pulse counter and quadrature (incremental) encoder input. 
All 15 timers running up to 216 MHz. 2x watchdogs, SysTick timer"


> Wie das beim H7 später aussieht weiß ich nicht.


Siehe Link oben:
"1× high-resolution timer (2.5 ns max resolution)"

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


Lesenswert?

STler schrieb:
> Die Cortex M7 von ST.

Die darauf basierenden Microcontroller gehören aber auch zur 
STM32-Familie. Laut Threadersteller darf der Microcontroller aber nur 
eine ähnliche Funktionalität wie ein STM32 aufweisen. Warum auch immer 
diese Einschränkungen bestehen mag.

: Bearbeitet durch User
von Nico W. (nico_w)


Lesenswert?

STler schrieb:
> Siehe Link oben:
> "Up to 18 timers: up to thirteen 16-bit (1x low- power 16-bit timer
> available in Stop mode) and two 32-bit timers, each with up to 4
> IC/OC/PWM or pulse counter and quadrature (incremental) encoder input.
> All 15 timers running up to 216 MHz. 2x watchdogs, SysTick timer"

Ok, das habe ich überlesen. Ich hab das nur im CubeMX Konfigurator mal 
reingeschmissen. Und der meckert bei 108MHz am APB1.

STler schrieb:
> "1× high-resolution timer (2.5 ns max resolution)"

Hat der 32bit? Kann irgend ein Timer auf "high-resolution" gestellt 
werden?

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Andreas S. schrieb:
> STler schrieb:
>> Die Cortex M7 von ST.
>
> Die darauf basierenden Microcontroller gehören aber auch zur
> STM32-Familie. Laut Threadersteller darf der Microcontroller aber nur
> eine ähnliche Funktionalität wie ein STM32 aufweisen. Warum auch immer
> diese Einschränkungen bestehen mag.

Ich rate mal:

- er hat schon einen STM32 und ist damit vertraut
- er ist irgendwie an die Grenzen der Timer seines STM32 gestoßen
- er hat keinen anderen STM32 mit passenden Eigenschaften gefunden
- jetzt ist er bereit, auch bei der Konkurrenz zu suchen

von bitwurschtler (Gast)


Lesenswert?

Reinhard M. schrieb:
> kann mir jemand einen Mikrocontroller empfehlen, der einen 32bit-Timer
> mit min. 200Mhz bietet und der ähnliche Funktionalität wie die stm32
> bietet?


für 200 MHz brauchste ein SoC-FPGA, schau Dir mal das ZyBo board an: 
https://reference.digilentinc.com/reference/programmable-logic/zybo/start

Im SoC sind als mikrocontroller  ARM A9 verbaut.

von Jim M. (turboj)


Lesenswert?

NXP LPC43xx hätte 32 Bit Timer und bis zu 204 MHz Takt. Ist mit 
Cortex-M4F + Cortex-M0 aber vermutlich Kanonen auf Spatzen.

von Reinhard M. (reinhardm)


Lesenswert?

Hallo Leute,

danke für die zahlreichen Kommentare.
Diese lassen sich schnell in zwei Gruppen einteilen:
a) die, die sich mit stm32 und deren Datenblätter auskennen
b) die, die nur Propaganda lesen und nachplappern

Ja, wenn es einen stm32 geben würde, der einen 32bit Timer schneller als 
200MHz anbieten würde, dann hätte ich meine Frage garnicht stellen 
brauchen.
Aber wie die stm32-Kenner schon anmerkten, laufen die 32bit Timer max. 
mit halbem Systemtakt - d.h. ich bräuchte dann einen stm32 der mit 
400Mhz oder schneller läuft. Mir ist bislang noch kein so ein Exemplar 
begegnet.

Keine Ahnung, warum jemand den Andreas Schweigstill abwatschen musste - 
sein Einwand ist doch garnicht so verkehrt gewesen.

@Falk Brunner
Wenn ich Deinem Rat gefolgt wäre, hätte das wieder einen Shitstorm 
gegeben, bei dem mich alle ausgelacht hätten. Natürlich wäre ein FPGA 
richtiger - wenn es ein "richtiger" überhaupt gibt. Aber das habe ich 
nicht drauf. Deshalb bleibe ich lieber bei dem, was ich mir zutraue.

Klar geht es um ne PWM und ich wüsste auch, wie ich die mit 16bit-Timern 
erschlagen könnte - aber das würde mal eben den Speicherbedarf 
verdoppeln und die Interruptzeiten auch mindestens verdoppeln - beides 
Richtungen, die ich nicht einschlagen will.

Eigentlich™ bräuchte ich eine Timer-Auflösung von 1ns - das wäre aber 
1GHz und damit weit jenseits dessen, was ich mir zutraue. Deshalb habe 
ich mir gesagt: 5ns muss auch reichen - und kam so auf die 200MHz.

Jim Meba schrieb:
> NXP LPC43xx hätte 32 Bit Timer und bis zu 204 MHz Takt. Ist mit
> Cortex-M4F + Cortex-M0 aber vermutlich Kanonen auf Spatzen.

Herzlichen Dank! Du bist der Einzige, der auf meine Anfrage ernsthaft 
eingegangen ist. Mit "Kanonen auf Spatzen" könnte ich leben.
Lässt sich der auch mit gcc und Co programmieren?
Wie sieht es mit Programmern aus?
Nochmals danke für den Tip!

Ich werde mir mal das Datenblatt von dem Teil ziehen.

Gruß Reinhard

von uwe (Gast)


Lesenswert?

> Und der meckert bei 108MHz am APB1.
Das bedeutet aber nur, daß zugriffe auf den timer mit APB1 Takt 
erfolgen(lesen, schreiben, konfiguriern), der Timer kann jedoch mit 
216MHz Zählen.

von m.n. (Gast)


Lesenswert?

Reinhard M. schrieb:
> Aber wie die stm32-Kenner schon anmerkten, laufen die 32bit Timer max.
> mit halbem Systemtakt

Ich nutze immer den vollen Systemtakt, außer, ich möchte externe Impulse 
zählen.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

APBx Takt != Timertakt

Z.b. Datenblatt STM32F769 Seite 169 "TIM timer characteristics"

                                AHB/APBx prescaler=1
                                or 2 or 4, fTIMxCLK =   1 - tTIMxCLK
                                216 MHz
tres(TIM) Timer resolution time
                                AHB/APBx
                                prescaler>4, fTIMxCLK = 1 - tTIMxCLK
                                100 MHz

1. TIMx is used as a general term to refer to the TIM1 to TIM12 timers.

von Falk B. (falk)


Lesenswert?

@ Reinhard M. (reinhardm)

>Wenn ich Deinem Rat gefolgt wäre, hätte das wieder einen Shitstorm
>gegeben, bei dem mich alle ausgelacht hätten.

Wieso? Willst du mal wieder ein Perpetuum mobile bauen?

> Natürlich wäre ein FPGA
>richtiger

Von FPGA war bei mir keine Rede.

>Klar geht es um ne PWM und ich wüsste auch, wie ich die mit 16bit-Timern
>erschlagen könnte

Nö, denn auch eine 16 Bit PWM mit "niedirgem" Takt brungt dir nicht mehr 
Zeitauflösung.

> - aber das würde mal eben den Speicherbedarf
>verdoppeln und die Interruptzeiten auch mindestens verdoppeln - beides
>Richtungen, die ich nicht einschlagen will.

>Eigentlich™ bräuchte ich eine Timer-Auflösung von 1ns - das wäre aber
>1GHz und damit weit jenseits dessen, was ich mir zutraue. Deshalb habe
>ich mir gesagt: 5ns muss auch reichen - und kam so auf die 200MHz.

Eben darum sollst du den Mund aufmachen und dein eigentliches Problem 
beschreiben und NICHT deine vermeintliche Lösung!
Welche Spielerei willst du denn machen, worüber alle lachen können?

: Bearbeitet durch User
von Karl (Gast)


Lesenswert?

Reinhard M. schrieb:
> Klar geht es um ne PWM und ich wüsste auch, wie ich die mit 16bit-Timern
> erschlagen könnte - aber das würde mal eben den Speicherbedarf
> verdoppeln und die Interruptzeiten auch mindestens verdoppeln - beides
> Richtungen, die ich nicht einschlagen will.

Sicher? Jedes ungenutzte Byte Ram ist ein verschwendetes Byte Ram und 
jeder ungenutzte Takt ein verschwendeter ;-)

Ganz im Ernst: Auch die LPC43xx werden ihre Fallstriske und 
Einschränkungen haben und der Portierungsaufwand kann je nach genutzter 
Peripherie enorm sein. Und ein STM32F4 z.B. rechnet auch noch viel wenn 
er 50% seiner Zeit in einer ISR vergurkt. Upgradeoptionen nach F7 und H7 
mal ganz außen vor gelassen. Evtl. kann man auch durch Platzieren der 
ISR im Ram noch etwas Performance finden wenn es sein muss.

von Reinhard M. (reinhardm)


Lesenswert?

Uwe Bonnes schrieb:
> Datenblatt STM32F769 Seite 169 "TIM timer characteristics"

Hm, also ich habe mir das Referenz-Handbuch gezogen und laut dem können 
Timer2 und Timer5 als 32bit Timer konfiguriert werden.
Wenn ich mir dann die RCC-Register anschaue, dann kann ich weder Timer2 
noch Timer5 auf APB2 setzen.

Die Taktverteilung mache ich natürlich auch mit stmCube und wenn ich 
versuche APB1 schneller zu machen, dann bekomme ich lauter rote Felder.
Wenn es tatsächlich einen Weg gibt, z.B. beim stm32F407 einen 32bit 
Zähler auf Systemtakt laufen zu lassen, würde ich mich damit 
arrangieren!

Falk Brunner schrieb:
> Nö, denn auch eine 16 Bit PWM mit "niedirgem" Takt brungt dir nicht mehr
> Zeitauflösung.

Schon klar. Sagen wir mal so: ein 32bit-Timer mit 200MHz wäre (für mich) 
das Optimum, wenn ich den 32bit-Timer des stm32f407 mit Systemtakt zum 
Laufen bekäme, würde ich mich damit arrangieren.
Ich brauche die 1ns nicht als Frequenz, nur als Auflösung, d.h. ich 
könnte mit Vorteiler und 16bit Zähler durchaus den 32bit Timer 
simulieren. Nur eben deutlich langsamer in den Änderungszeiten.
Die Frequenz liegt im Bereich von 2-3 Mikrosekunden, also eher gemütlich 
;)

Ich habe gerade mal das Datenblatt des LPC4337 überflogen. Hm, weniger 
Timer, aber insgesamt erscheint mir das Chipdesign professioneller als 
beim stm32 zu sein. Wie ist denn die Chip-Qualität eines LPC 
einzustufen?

> Eben darum sollst du den Mund aufmachen und dein eigentliches Problem
> beschreiben und NICHT deine vermeintliche Lösung!

Lach - ich schrieb doch schon, dass ich eine PWM erzeugen will. Die 
PWM-Werte habe ich mir in einer Excel-Tabelle erzeugen lassen und die 
gerundeten Unterschiede gibt es eben an der 1ns Stelle. Ich habe mir 
dann auch die PWM für 6 und 10ns erstellen lassen - das wäre gerade noch 
akzeptabel. Es geht quasi darum, wieviel unterschiedliche Werte müssen 
mit den gleichen PWM-Werten auskommen.

von Karl (Gast)


Lesenswert?

Reinhard M. schrieb:
> Es geht quasi darum, wieviel unterschiedliche Werte müssen
> mit den gleichen PWM-Werten auskommen.

Ohne eine Lösung anbieten zu wollen, sondern aus reiner Neugier:
Was empfängt oder liest oder verarbeitet diese PWM dann? Im Bereich von 
1 ns hängt es wahrscheinlich langsam von Lust und Laune und Temperatur 
und kapazitiver Belastung des Pins ab.

von Falk B. (falk)


Lesenswert?

@  Reinhard M. (reinhardm)

>Ich brauche die 1ns nicht als Frequenz, nur als Auflösung,

1ns ist auch keine Frequenz sondern eine Zeit.

>Die Frequenz liegt im Bereich von 2-3 Mikrosekunden,

Kaum, das ist eine Zeit, bestenfalls eine Periodendauer. 2 us sind 
500kHz.

>> Eben darum sollst du den Mund aufmachen und dein eigentliches Problem
>> beschreiben und NICHT deine vermeintliche Lösung!

>Lach - ich schrieb doch schon, dass ich eine PWM erzeugen will. Die

WO hast du das geschrieben?

>PWM-Werte habe ich mir in einer Excel-Tabelle erzeugen lassen und die
>gerundeten Unterschiede gibt es eben an der 1ns Stelle. Ich habe mir
>dann auch die PWM für 6 und 10ns erstellen lassen - das wäre gerade noch
>akzeptabel. Es geht quasi darum, wieviel unterschiedliche Werte müssen
>mit den gleichen PWM-Werten auskommen.

Dann nimm einen PICCOLO, der schafft trotz nur 60 MHz Systemtekt 
150ps (PIKOsekunden) Zeitauflösung bei der PWM.
Ganz ohne Tricksen, einfach die Standardbeispiel vom Code Composer 
Studio / Control Suite nutzen.

von m.n. (Gast)


Lesenswert?

Reinhard M. schrieb:
> Wenn es tatsächlich einen Weg gibt, z.B. beim stm32F407 einen 32bit
> Zähler auf Systemtakt laufen zu lassen, würde ich mich damit
> arrangieren!

Einfach den F427 (F429) nehmen.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Du brauchst eine STM32 mit dem TIMPRE Bit und genuegend Systemtakt, wie 
F429.

von Lothar (Gast)


Lesenswert?

Karl schrieb:
> Auch die LPC43xx werden ihre Fallstriske und Einschränkungen haben und
> der Portierungsaufwand kann je nach genutzter Peripherie enorm sein

Die LPC sind im Vergleich zu den STM die deutlich einfacheren ARM. Dazu 
kommt noch, dass beim LPC4370 der gewünschte Timer ungestört über einen 
der M0 laufen kann, während sich der andere M0 um die Peripherie kümmert 
und der M4 um das Hauptprogramm.

Reinhard M. schrieb:
> 32bit-Timer mit min. 200Mhz

Jetzt muss ich doch mal testen was der 64bit SP804 Timer im Raspberry Pi 
BCM2835 so macht wenn man die PCLK mit 250MHz ohne Vorteiler nimmt ...

von Reinhard M. (reinhardm)


Lesenswert?

Uwe Bonnes schrieb:
> Du brauchst eine STM32 mit dem TIMPRE Bit und genuegend Systemtakt, wie
> F429.

Hm, ich habe gerade mal stmCube angeworfen und die Taktkonfiguration 
angeschaut - ich habe da keine Option für TIMPRE gefunden.

Beim F7 fand ich zumindest den Hinweis, dass es unter Ausnutzung des 
TIMPRE möglich wäre, die Timer mit 216MHz laufen zu lassen. Ob das aber 
für alle Timer gilt, konnte ich (noch) nicht herausfinden.

Falk Brunner schrieb:
>>Ich brauche die 1ns nicht als Frequenz, nur als Auflösung,
>
> 1ns ist auch keine Frequenz sondern eine Zeit.

Ach Falk - sei doch nicht päpstlicher als der Papst.

In der (Software-)PWM zähle ich doch die Schritte bis zum 
Wiederauftreten des Interrupts. Wenn ich von ns als Auflösung spreche, 
geht es um die Frage: sind es 5.037ns oder 5.038ns bis zum nächsten 
Interrupt (also 5 Mikrosekunden und paar zerquetschte ;) ). Klar habe 
ich dann im Interrupt noch die Verzögerung der Anweisungen, die die Pins 
umschalten, aber wenn ich die halbwegs konstant hinbekomme, sollte es 
doch einigermaßen passen :)

von der einfache Weg (Gast)


Lesenswert?

externer 74HC590 + beliebiger uC fertig sind die 200MHz

oder externer MC10EP016FAG + beliebiger uC und fertig sind die >1GHz

für die gewünschte Bitzahl kaskadieren.
ist das so schwer ?

von der einfache Weg (Gast)


Lesenswert?

ups,
74VHC4040 für  200MHz

von Reinhard M. (reinhardm)


Lesenswert?

> externer 74HC590 + beliebiger uC fertig sind die 200MHz
> ups, 74VHC4040 für  200MHz

Hm, dazu müsste ich vermutlich FPGA studiert haben.
Habe nämlich überhaupt keinen Plan, wie das funktionieren sollte/könnte.

Den 74VHC4040 hätte ich sogar im Fundus :)
Wie gesagt, es geht nicht darum 200MHz zu erzeugen, sondern 
unterschiedlich lange duty-Phasen zu erzeugen. Evtl sogar mit variabler 
Frequenz. Ich will mich weder auf eine Frequenz noch auf einen 
duty-Faktor festlegen.

Mit dem Timer will ich den nächsten Umschaltzeitpunkt festlegen und wenn 
der dann eintritt eben eine bestimmte Anzahl an Pins umschalten.

: Bearbeitet durch User
von ./. (Gast)


Lesenswert?

Wie hier auch schon andere schruben, wenn die PWM der
einzige Seinszweck sein soll: Sowohl die Piccolo als
auch die TMS320F28XX-Reihe haben da eine schnucklige
Hardware.
IDE und Compiler gibt es als 'kostenneutrale' XDS-100
Version. Die billigsten XDS-100 wirst du als JTAG auf
Evalsticks finden.

Wenn du in der Richtung noch gar nichts hast, würde ich
zu einem 28027 oder 28096 Launchpad raten.
Die haben eine ISO-Version des JTAG an Bord.

Bilder von einer HRPWM gibt es z.B. hier:
Beitrag "Re: Hantek 8000E Reihe Update auf 200MHz."

Die Zeiten sind auch für messtechnische Zwecke reproduzierbar.

von bitschupser (Gast)


Lesenswert?

Die Auflösung von einem Timer lässt sich auch mit einem Komparator und 
RC-Glied verdoppeln.

Die Reaktionsgeschwindigkeit auf Änderungen dagegen nicht.

von Lutz (Gast)


Lesenswert?

hm - es wäre vermutlich das Beste wenn man wüsste wozu das ganze 
gebraucht wird. Oder ist das Projekt streng geheim? :-)

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

STM32F334 hat auch ein High-resolution PWM, aber mit 16 bit. Die 
urspruengliche Frage war aber nach 32-bit Timern. Haben die anderen 
angebotenen Typen 32 Bit HR Timer?

Allerdings ist das eigentliche Problem, das geloest werden soll, hier 
immer noch nicht dargestellt worden...

von m.n. (Gast)


Lesenswert?

Reinhard M. schrieb:
> Hm, ich habe gerade mal stmCube angeworfen und die Taktkonfiguration
> angeschaut - ich habe da keine Option für TIMPRE gefunden.

Es ist Bit24 im Register RCC_DCKCFGR, wenn ein Blick ins Reference 
Manual gestattet ist :-(

von Karl (Gast)


Lesenswert?

Reinhard M. schrieb:
> Mit dem Timer will ich den nächsten Umschaltzeitpunkt festlegen und wenn
> der dann eintritt eben eine bestimmte Anzahl an Pins umschalten.

Also soft "PWM", wobei es eben nicht um eine PWM geht sondern um das 
timen von events bei denen dann unter anderem auch Pins umgeschaltet 
werden können? Klar. Dann brauchst du schon 1 ns Auflösung wenn ein 
Prozessor mit einigen hundert ns Variation in der ISR Latenz das dann 
bearbeitet. Scnr Bekommt man sicher für genau einen Fall so 
hinoptimiert.

von der einfache Weg (Gast)


Lesenswert?

>Hm, dazu müsste ich vermutlich FPGA studiert haben.
>Habe nämlich überhaupt keinen Plan, wie das funktionieren sollte/könnte.

Den Eindruck habe ich auch. Vielleicht erst mal mit einem Stromstudium 
anfangen. Und darauf aufbauend Jura für die 3 Ohmschen Gesetze.

Der TO veralbert hier ein paar Leute.

von Nico W. (nico_w)


Angehängte Dateien:

Lesenswert?

m.n. schrieb:
> Reinhard M. schrieb:
>> Hm, ich habe gerade mal stmCube angeworfen und die Taktkonfiguration
>> angeschaut - ich habe da keine Option für TIMPRE gefunden.
>
> Es ist Bit24 im Register RCC_DCKCFGR, wenn ein Blick ins Reference
> Manual gestattet ist :-(

Excellenter Hinweis! Danke, den kannte ich nicht. Datenblatt hin oder 
her, alles kann man da einfach nicht immer direkt rauslesen.

von Reinhard M. (reinhardm)


Lesenswert?

> Also soft "PWM", wobei es eben nicht um eine PWM geht sondern um das
> timen von events bei denen dann unter anderem auch Pins umgeschaltet
> werden können? Klar. Dann brauchst du schon 1 ns Auflösung wenn ein
> Prozessor mit einigen hundert ns Variation in der ISR Latenz das dann
> bearbeitet

Huch - Variation in der ISR Latenz? Wie das?

Was ich aber völlig verpeilt habe: die Pins haben ja eine eigene 
Taktfrequenz. Da bringt mir eine höhere Auflösung garnix.
Vielleicht muss ich die Aufgabe doch den Kollegen von der FPGA-Fraktion 
überlassen :(

Trotzdem danke ich allen, die mich trotz meines Denkfehlers ernst 
genommen und versucht haben mir zu helfen.

von Reinhard M. (reinhardm)


Lesenswert?

Danke Nico für das Bild.
Ich habe es dann mit dem Nucleo446 auch probiert, aber natürlich das x4 
hinten nicht hinbekommen.
Dann habe ich entdeckt, dass man bei Configuration bei RCC das 
entspechende Bit setzen kann. Nennt sich "TIM Prescaler Selection"

Klasse, das hat mich jetzt ein großes Stück weiter gebracht :)

von Nico W. (nico_w)


Lesenswert?

Ja, mich hat es auch weiter gebracht.

Hab mir den F446 gerade erst bestellt und es wäre ja schade gewesen wenn 
der Timer langsamer wäre als der von nem 100MHz F411.

von Gästchen (Gast)


Lesenswert?

Wenn man wegen nur einer einzelnen Funktion einen dicken µC braucht, hat 
es die Stunde externer Hardware geschlagen!

Man sollte mal die Selektoren bei TI, Fairchild, Maxim und NXP anwerfen. 
Wetten, dass man die PWM mit einem externen IC auch mit einem kleinen 
STM32 auf 32bit mit 1ns Zeitauflösung hinbekommt? Ohne Klimmzüge oder 
VHDL?

NXP hat beispielsweise eine nette Auswahl an Zählern und Timern:
http://www.nxp.com/products/discretes-and-logic/logic:MC_50808

Leider kann ich dir adhoc keinen nennen, ich habe sowas noch nicht 
gebraucht. Aber eine PWM ist doch etwas relativ alltägliches, da solltes 
es schon etwas geben.

Kuck doch wenigstens eine Stunde mal nach solchen IC. Du tust dir einen 
Gefallen - erstens wirst du deine PWM vermutlich genauer lösen können 
als mit dem µC, zweitenst kannst du deinen dir vertrauten STM32 
behalten.

von Karl (Gast)


Lesenswert?

Reinhard M. schrieb:
> Huch - Variation in der ISR Latenz? Wie das?

Unterschiedliche Register sind zu sichern, es könnte gerade eine andere 
ISR aktiv sein die schön Register gesichert hat, buszugriff von dma im 
Burst blockiert, ISR nicht im cache, io Pins hängen an langsamen Bus etc 
etc.
Wenn du tatsächlich Pins schalten willst kann ein timer auch einen dma 
request auslösen der von einer Tabelle auf die Pins schreibt. Dann ist 
wenigstens die CPU raus aus dem Spiel.

von Reinhard M. (reinhardm)


Lesenswert?

> Wetten, dass man die PWM mit einem externen IC auch mit einem kleinen
> STM32 auf 32bit mit 1ns Zeitauflösung hinbekommt?

Hm, wenn es nur das wäre, wären die Atmegas aus dem Automotive-Bereich 
auch sehr interessant! Die arbeiten intern auch mit PLL und bieten eine 
PWM mit deadtime-Generator an. Nennt sich Powerstage.
Sogar der ADC wird mit der PLL verknüpft und kann so 2Msps

Ich mache eine "Software"-PWM, weil ich 10 oder mehr Pins gleichzeitig 
schalten will. Dafür bereite ich das Muster der Pins vor und schalte nur 
zum richtigen Zeitpunkt um.
Das geht meines Wissens mit "normalen" PWMs nicht.

> Wenn du tatsächlich Pins schalten willst kann ein timer auch einen dma
> request auslösen der von einer Tabelle auf die Pins schreibt. Dann ist
> wenigstens die CPU raus aus dem Spiel.

Das klingt sehr interessant. Hättest Du da ein Beispiel oder Links zu 
Beispielen?
Ich habe zwar im Referenzhandbuch gelesen, dass ein Timer auch DMA 
triggern kann, aber wie man das mit Pins verknüpfen kann, ist mir noch 
nicht klar.
... und wie ist das Zeitverhalten der DMA?
Kann man da von konstanter Verzögerung ausgehen, oder gibt es da auch 
Variationen zu befürchten?

von Falk B. (falk)


Lesenswert?

@ Reinhard M. (reinhardm)

>Ich mache eine "Software"-PWM, weil ich 10 oder mehr Pins gleichzeitig
>schalten will. Dafür bereite ich das Muster der Pins vor und schalte nur
>zum richtigen Zeitpunkt um.

Und da willst du ECHTE 5ns Auflösung erzielen? Nur mit der CPU? Viel 
Spaß.

>Ich habe zwar im Referenzhandbuch gelesen, dass ein Timer auch DMA
>triggern kann,

Kann er.

>aber wie man das mit Pins verknüpfen kann, ist mir noch
>nicht klar.

Ganz einfach, die DMA kopiert Daten aus dem RAM an den IO-Port deiner 
Pins. Das gleiche was dein CPU macht, nur deutlich cleverer.

>... und wie ist das Zeitverhalten der DMA?

Deutlich besser als deiner CPU, wenn gleich nicht so perfekt wie reine 
Hardware in einem FPGA.

>Kann man da von konstanter Verzögerung ausgehen, oder gibt es da auch
>Variationen zu befürchten?

Gibt es, wenn die DMA auf den Buszugriff warten muss, das können schon 
ein paar Takte sein. Damit jittert deine Datenausgabe um wenige Takte.
Wenn du WIRKLICH Datenmuster mit 5ns Zeitauflösung erzeugen willst, nimm 
ein FPGA. Dort packt man die Mustr einfach in einen internen RAM und 
gibt sie mit einer einfachen Logik aus. Da jittert nix, das Timing ist 
felsenfest.
200 MHz sind mit modernen FPGAs auch relativ leicht machbar.
Profis schaffen so auch 1ns, aber dazu muss man schon wissen was man 
tut.

Trotzdem nochmal die Frage. Was soll das INSGESAMT bewirken? Was ist die 
Anwendung?

von Reinhard M. (reinhardm)


Lesenswert?

> Trotzdem nochmal die Frage. Was soll das INSGESAMT bewirken? Was ist die
> Anwendung?

Die Anwendung ist ein "einfacher" Motor-Controller für ein 
Beleuchtungsprojekt (mit dem ich ansonsten nix zu tun habe).
Der Controller soll 4-8 Leuchtköpfe steuern, wobei jeder Kopf 2 
Achsen/Motoren hat.

> Und da willst du ECHTE 5ns Auflösung erzielen? Nur mit der CPU? Viel
> Spaß.

Ich wills versuchen. Da man auf die Entfernung jeden unerwarteten 
Ruckler sieht, sollen die Bewegungen so gleichmäßig wie möglich werden.

Die PWM ist ja nur ein Aspekt. Auf der anderen Seite der Todo-Liste 
steht noch die Kommunikation via Ethernet aus ...

>> Ich habe zwar im Referenzhandbuch gelesen, dass ein Timer auch DMA
>> triggern kann,
>
> Kann er.

Ok, habe die entsprechenden Kapitel im Handbuch gerade überflogen.
Anscheinend kann DMA nur 32bit-Werte als kleinste Einheit übertragen. Da 
trifft es sich doch gut, dass das Ausgaberegister der Ports 32bit breit 
ist ;)

Sehe ich das richtig, dass der zu übertragenden Wert in die 
Compare-Register des Timers gepackt werden muss?

Könnte ich dann den Timer-Interrupt verwenden, um den Wert für die 
nächste Übertragung zu berechnen und die Übertragung dann per DMA 
ausführen lassen?
Beide Events bei Timer-Überlauf?

von Falk B. (falk)


Lesenswert?

@Reinhard M. (reinhardm)

>Die Anwendung ist ein "einfacher" Motor-Controller für ein
>Beleuchtungsprojekt (mit dem ich ansonsten nix zu tun habe).
>Der Controller soll 4-8 Leuchtköpfe steuern, wobei jeder Kopf 2
>Achsen/Motoren hat.

>> Und da willst du ECHTE 5ns Auflösung erzielen? Nur mit der CPU? Viel
>> Spaß.

>Ich wills versuchen. Da man auf die Entfernung jeden unerwarteten
>Ruckler sieht, sollen die Bewegungen so gleichmäßig wie möglich werden.

;-)

Naja, ich bezweifle, daß man dazu diesen Krampf mit 5ns Zeitauflösung 
braucht. 10ns tuns locker, der Knackpunkt liegt woanders.
Gescheite Endstufen, Stromregler, Dithering etc.
Und auch hier kann der PICCOLO punkten, denn der ist EXAKT für sowas 
gebaut. Egal ob mit oder ohne High Resolution PWM.

Außerdem hast du im Moment nicht mal ansatzweise reale Meßwerte, wieviel 
Ruckeln man sieht. Mach das erstmal mit der klassischen PWM in Hardware 
und DANN kann man weiterreden.

https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung

Das gilt auch für Hardware!

>Die PWM ist ja nur ein Aspekt. Auf der anderen Seite der Todo-Liste
>steht noch die Kommunikation via Ethernet aus ...

Du du hoffetnlich nicht mit Soft-PWM generieren willst ;-)

>Ok, habe die entsprechenden Kapitel im Handbuch gerade überflogen.
>Anscheinend kann DMA nur 32bit-Werte als kleinste Einheit übertragen.

Kann ich nicht ganz glauben, das ist bestimmt einstellbar.

>Sehe ich das richtig, dass der zu übertragenden Wert in die
>Compare-Register des Timers gepackt werden muss?

Nein. Der kommt in den RAM! Dort packst du eine Ganze LISTE von Werten 
rein, die dein DMA dann Schritt für Schritt übertragen kann.

>Könnte ich dann den Timer-Interrupt verwenden, um den Wert für die
>nächste Übertragung zu berechnen und die Übertragung dann per DMA
>ausführen lassen?

Kann man, klingt aber eher weniger sinnvoll.

: Bearbeitet durch User
von Reinhard M. (reinhardm)


Lesenswert?

> Gescheite Endstufen, Stromregler

da muss ich mich glücklicherweise nicht drum kümmern. Die sind gegeben.
Ich muss "nur" die Pulse erzeugen (40.000 pro Umdrehung).

> Dithering etc.

Dafür hatte ich mir ja die Excel-Tabelle gemacht, um zu sehen, wie die 
Rampen aussehen. Denn ich habe quasi keine Strecken mit konstanter 
Geschwindigkeit.
Wenn man sich vorstellt, dass ein Lichtpunkt eine Strecke auf einer 
Fläche beschreiben soll und der Lichtpunkt wird nur durch Rotation der 
Lichtquelle bewegt, dann leuchtet schnell ein, dass jede konstante 
Geschwindigkeit im Grunde doch wieder auf Beschleunigung hinausläuft.
Deshalb ging ich davon aus, dass - egal wann und wo - ich im Grunde nur 
Beschleunigungen unterschiedlicher Steigung habe.
... und genau da schlägt das Dithering voll rein.

> Mach das erstmal mit der klassischen PWM in Hardware
> und DANN kann man weiterreden.

Bei der Aufgabenstellung sehe ich keine Einsatzmöglichkeit für "echte" 
PWM. Ich habe im Prinzip die Zeit bis zum nächsten Impuls (steigende 
Flanke).
Die Pulse müssen nicht symmetrisch sein, d.h. ich kann die Zeit zwischen 
steigender und fallender Flanke konstant halten. Für die Beschleunigung 
muss ich dann nur die Frequenz ändern.

>> Anscheinend kann DMA nur 32bit-Werte als kleinste Einheit übertragen.
>
> Kann ich nicht ganz glauben, das ist bestimmt einstellbar.

Hm, hast Du beim stm32 schon mit DMA gearbeitet?
Scheint die Achillesferse der Chips zu sein.

>> Sehe ich das richtig, dass der zu übertragenden Wert in die
>> Compare-Register des Timers gepackt werden muss?

> Nein. Der kommt in den RAM! Dort packst du eine Ganze LISTE von Werten
> rein, die dein DMA dann Schritt für Schritt übertragen kann.

Wenn ich das falsch verstanden habe, hättest Du mir bitte einen Link zu 
einem Beispiel o.ä.?

>> Könnte ich dann den Timer-Interrupt verwenden, um den Wert für die
>> nächste Übertragung zu berechnen und die Übertragung dann per DMA
>> ausführen lassen?
>
> Kann man, klingt aber eher weniger sinnvoll.

Was wäre dann sinnvoller? Wenn ich den ganzen Port statt einzelner Pins 
umschalte, dann bin ich doch nicht nur schneller, sondern habe auch eine 
konstante Ausführungszeit.

Als Trigger habe ich nur den Timer-Überlauf.

Wie sähe denn ein sinnvolleres Konzept aus?

von Reinhard M. (reinhardm)


Lesenswert?

Im Datenblatt zu der stm32F76x Serie ist auf Seite 38 eine Übersicht der 
Timer aufgeführt.
Laut der können die 32bit-Timer (TIM2 und TIM5) mit 216MHz betrieben 
werden (letzte Spalte).
Die max. "interface clock" beträgt für diese Timer nur 54MHz.

Wann gilt denn die Schnittstellen-Geschwindigkeit?

Gilt die "nur" zum Beschreiben der Timer-Register, oder auch für die 
Anbindung des Timers an DMA?

Wenn letzteres zuträfe und ich würde einen Port aus dem 
Überlaufinterrupt heraus beschreiben, würden dann die 54MHz oder die 
216MHz gelten?

Pins können max. mit 108MHz zappeln (Seite 1 des Datenblattes).
Bedeutet das, dass das Setzen von Portpins 2 Takte benötigt, oder wie 
ist das zu Interpretieren?

von Falk B. (falk)


Lesenswert?

@Reinhard M. (reinhardm)

>> Gescheite Endstufen, Stromregler

>da muss ich mich glücklicherweise nicht drum kümmern. Die sind gegeben.

Jaja, der liebe Tunnelblick ;-)
Eine MUSS sich um das GESAMTkonzept kümmern und den Überblick bzw. 
Weitblick behalten.

>Ich muss "nur" die Pulse erzeugen (40.000 pro Umdrehung).

Pulse für Stellmotoren? Schrittmotoren? Dann hängt da also noch eine 
weitere Intelligenz dazwischen.
Dafür reicht eine Puleerzeugung mittels normalem Timer und 100 MHz Takt 
LOCKER aus. Der Glaube, daß diese wie auch immer gestrickte Elektronik 
EXAKT auf ns genaues Timing EXAKT reagiert ist reichlich naiv ;-)

>Dafür hatte ich mir ja die Excel-Tabelle gemacht, um zu sehen, wie die
>Rampen aussehen. Denn ich habe quasi keine Strecken mit konstanter
>Geschwindigkeit.

Das ist nebensächlich. Siehe oben!

>Wenn man sich vorstellt, dass ein Lichtpunkt eine Strecke auf einer
>Fläche beschreiben soll und der Lichtpunkt wird nur durch Rotation der
>Lichtquelle bewegt, dann leuchtet schnell ein, dass jede konstante
>Geschwindigkeit im Grunde doch wieder auf Beschleunigung hinausläuft.

Hä?

Du bist nicht der Erste, der einen Laserscanner oder ähnliches bauen 
will. Entscheidend ist dafür NICHT deine vermeintlich notwendige ns 
Zeitauflösung sondern ein gescheites Konzept.

>Bei der Aufgabenstellung sehe ich keine Einsatzmöglichkeit für "echte"
>PWM. Ich habe im Prinzip die Zeit bis zum nächsten Impuls (steigende
>Flanke).

Dann nenn es Output COmpare Funktion, welche zu festgelegten Zeiten 
einen Ausgang schaltet. Aber zum 100. Mal, dafür braucht man keine 5ns 
Zeitauflösung.

>>> Anscheinend kann DMA nur 32bit-Werte als kleinste Einheit übertragen.
>
>> Kann ich nicht ganz glauben, das ist bestimmt einstellbar.

>Hm, hast Du beim stm32 schon mit DMA gearbeitet?

Nein, aber ich hab irgendwann mal das Datenblatt überflogen. Außerdem 
sagt es der gesunde Menschenverstand.

>Scheint die Achillesferse der Chips zu sein.

Glaub ich immer noch nicht.

>> Nein. Der kommt in den RAM! Dort packst du eine Ganze LISTE von Werten
>> rein, die dein DMA dann Schritt für Schritt übertragen kann.

>Wenn ich das falsch verstanden habe, hättest Du mir bitte einen Link zu
>einem Beispiel o.ä.?

Nein, schau dir Beispielprogramme von ST an. Dort ist ganz sicher auch 
ein DMA Beispiel dabei.

>Wie sähe denn ein sinnvolleres Konzept aus?

Dazu braucht man erstmal ein paar mehr Informationen und 
Randbedingungen. So wie ich es rudimentär verstanden habe, willst du 
eine variable Frequenz im Bereich von 300-500kHz ausgeben. Das ist kein 
großes Ding.
Mittels DDS Prinzip kann man die Frequenz auch nahezu beliebig fein 
einstellen, im Bereich von mHz (Millihertz!) wenn es sein muss. Bei 100 
MHz Timertakt sind das halt max. 10ns Jitter. Deine Anwendung wird das 
aller Wahrscheinlichkeit nach nicht stören.
Wie man sowas machen kann, ist im Artikel

AVR - Die genaue Sekunde / RTC

beschrieben. Das geht prinzipiell auch für 500kHz, wenn gleich dann die 
CPU SEHR ausgelastet ist, auch ein 200 MHz ARM. Mit etwas Know How kann 
man aber viel vorausberechnen und mittels DMA und deutlich weniger 
CPU-Last das Ganze generieren.
Oder man nimmt gleich einen DDS-IC, der macht dann die "Drecksarbeit" 
und die CPU muss den nur mit Frequenzdaten füttern.

Vor allem sollte man sich nicht zu früh in Details vertiefen und in 
einer fixen Idee verrennen. Das ist IMO dein Problem. Darum noch einmal 
meine Empfehlung. Vergiss die 5ns, nimm den noralen Timer deines STM32, 
auch wenn der vielleicht nur mit 50 MHz läuft (bzw. die IOs nur mit 50 
MHz getaktet werden), mach erstmal eine einfache Umsetzung deines 
Konzepts und miss nach.
Dann kann man über Optimierungen reden.

von m.n. (Gast)


Lesenswert?

Reinhard M. schrieb:
>>> Anscheinend kann DMA nur 32bit-Werte als kleinste Einheit übertragen.
>>
>> Kann ich nicht ganz glauben, das ist bestimmt einstellbar.
>
> Hm, hast Du beim stm32 schon mit DMA gearbeitet?
> Scheint die Achillesferse der Chips zu sein.

Hör doch mal auf, die Datenblätter nur zu 'überfliegen' und lies mal 
richtig und vollständig. Der DMAC kann eine Menge, wenn er etwas nicht 
kann, dann ist es ein variables Inkrement und Rückwärtszählen. Aber von 
diesen Problemen bist Du weit entfernt.
Die Problematik mit MHz und ns scheint mir rein theoretisch, es sei 
denn, Du hast passende Treiberbausteine, die mit 5 ns Schaltzeit umgehen 
können.

von Reinhard M. (reinhardm)


Angehängte Dateien:

Lesenswert?

> Hör doch mal auf, die Datenblätter nur zu 'überfliegen' und lies mal
> richtig und vollständig.

Soso - wenn Du meinst, dann schau Dir mal die Übersicht an und sag mir, 
wie man da eine Übertragung von 1x 16Bit hinbekommt ;)

Für mich sind 4x 8bit oder 2x 16bit oder 1x 32bit immer das gleiche, 
nämlich 32bit Minimum zu übertragen.

> Hä?
>
> Du bist nicht der Erste, der einen Laserscanner oder ähnliches bauen
> will.

Jetzt müsste ich "Hä?" ausrufen. Wie kommst Du denn auf das schmale 
Brett?
Ich will keinen Laserscanner bauen - könnte ich auch garnicht.

Wie auch immer - nachdem ich die Datenblätter etwas intensiver 
betrachtet habe, bin ich geneigt, dem NXP-Tip nachzugehen. Der hat die 
schnellste Pin-Frequenz und echte 32bit-Timer mit Systemtakt ...
Das Picolo ist dagegen gänzlich ungeeignet. Ich mach ja keinen 
Spannungswandler ...
Da ich keine feste Frequenz habe, kann ich auch das PWM-Modul nicht 
verwenden - und der Rest ist eher gemächlich ;)

Bei dem kommenden H7 von st lassen sich nur 4 Pins mit Highspeed 
schalten. Da bringt der F7 sogar mehr Speed an der Front ;)

von Falk B. (falk)


Lesenswert?

@Reinhard M. (reinhardm)

>> Hör doch mal auf, die Datenblätter nur zu 'überfliegen' und lies mal
>> richtig und vollständig.

>Soso - wenn Du meinst, dann schau Dir mal die Übersicht an und sag mir,
>wie man da eine Übertragung von 1x 16Bit hinbekommt ;)

Das wird mit einem anderen Parameter eingestellt. Welcher? Keine Ahnung!
Aber man sieht ja schon in der Tabelle, daß dort Byte, Half Word (16 
Bit) und Word (32 Bit) Zugriffe möglich sind.

>Für mich sind 4x 8bit oder 2x 16bit oder 1x 32bit immer das gleiche,
>nämlich 32bit Minimum zu übertragen.

Nein.

>> Du bist nicht der Erste, der einen Laserscanner oder ähnliches bauen
>> will.

>Jetzt müsste ich "Hä?" ausrufen. Wie kommst Du denn auf das schmale
>Brett?
>Ich will keinen Laserscanner bauen - könnte ich auch garnicht.

"oder ähnliches"

"Die Anwendung ist ein "einfacher" Motor-Controller für ein
Beleuchtungsprojekt (mit dem ich ansonsten nix zu tun habe).
Der Controller soll 4-8 Leuchtköpfe steuern, wobei jeder Kopf 2
Achsen/Motoren hat."

Also eine Art Moving Head für Disco etc.

>Da ich keine feste Frequenz habe, kann ich auch das PWM-Modul nicht
>verwenden

Doch, kann man.

>Bei dem kommenden H7 von st lassen sich nur 4 Pins mit Highspeed
>schalten. Da bringt der F7 sogar mehr Speed an der Front ;)

Jaja, immer schön Vollgas, auch wenn die Räder durchdrehen. Mach mal.

von Ignaz (Gast)


Lesenswert?

Hallo Reinhard,

Reinhard M. schrieb:
> Soso - wenn Du meinst, dann schau Dir mal die Übersicht an und sag mir,
> wie man da eine Übertragung von 1x 16Bit hinbekommt ;)

Natürlich beherrscht der STM32 auch 8 Bit und 16 Bit DMA Transfers. Wenn 
du das nicht weißt oder das Datenblatt falsch interpretierst, dann 
deswegen bitte nicht sarkastisch werden.

Dein Grundproblem ist, dass du einfach nicht ausführlich darlegen willst 
wie dein Gesamtprojekt bzw. zumindest das Ansteuerkonzept aussieht. 
Welcher Motortyp, was für Treiber, welche geforderte Winkelauflösung, 
welche Geschwindigkeit etc. Und wiederhole bitte nicht wieder, welche 
Nanosekundenauflösung die PWM haben muss in die du dich verrannt hast. 
Sondern sag lieber, was am Ende physikalisch an deinem Lampenkopf(?) 
gefordert ist.

Ich finde die Leute hier haben echt viel Geduld bewiesen dich zu 
beraten, aber mit so wenig Input von deiner Seite, gepaart mit dem 
sturen Festhalten an der Hochpräzisen PWM eines STM32-ähnlichen 
Controllers, das wird echt schwierig.

Gruß Ignaz

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.