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
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
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.
@ 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.
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)"
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
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
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
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.
NXP LPC43xx hätte 32 Bit Timer und bis zu 204 MHz Takt. Ist mit Cortex-M4F + Cortex-M0 aber vermutlich Kanonen auf Spatzen.
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
> 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.
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.
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.
@ 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
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.
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.
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.
@ 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.
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.
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 ...
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 :)
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 ?
> 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
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.
Die Auflösung von einem Timer lässt sich auch mit einem Komparator und RC-Glied verdoppeln. Die Reaktionsgeschwindigkeit auf Änderungen dagegen nicht.
hm - es wäre vermutlich das Beste wenn man wüsste wozu das ganze gebraucht wird. Oder ist das Projekt streng geheim? :-)
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...
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 :-(
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.
>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.
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.
> 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.
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 :)
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.
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.
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.
> 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?
@ 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?
> 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?
@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
> 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?
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?
@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.
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.
> 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 ;)
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.