Hallo, Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben softwaremäßig ? Ich arbeite auf raspberry pi pico 2040 und programmiere auf Micropython. Vielen Dank im voraus
Linda schrieb: > Hallo, > > Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben > softwaremäßig ? > Ich arbeite auf raspberry pi pico 2040 und programmiere auf Micropython. > > Vielen Dank im voraus Das ist ein Rechtecksignal. Hier geht es um Timing, nicht um Grad (wie z.B. bei enem Sinussignal). Fuer exaktes Timing auf dem Pi Pico benutzt du besser PIO. Hier geht es weiter: https://github.com/search?q=pi+pico+pio+programming
Linda schrieb: > Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben > softwaremäßig ? Verschieben zu welcher Referenz, d.h . wodurch werden 0° definiert? Prinzipiell kannst du das Signal nur um eine Zeit verschieben. Um diese Zeit zu berechnen benötigst du eine Frequenz und eine 0° Phase als Referenz. Wenn das original-Signal die 0° Referenz darstellt, dann benötigst du noch die Frequenz. 90° sind 360°/4, d.h. die Zeit ergibt sich zu T/4 mit T=1/f. Michael
Linda schrieb: > Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben > softwaremäßig ? Ja klar, da gibt es bestimmt viele wunderbare Menschen mit vielen wunderbaren Ideen. Aber die müssten wissen ob es plus oder minus neunzig Grad sein sollen. > Ich … programmiere auf Micropython. Das finde ich spannend. Wie kommt man denn da drauf? Ist es sehr hoch? Erreicht man das mit einer Leiter? Zumindest halb, mit 'ner Halbleiter?
> wie kann ich ein PWM Signal um 90 Grad vershieben
Das ist doch nun einfach:
Mit einer passend gestarteten zweiten PWM.
Vielen Dank für ihre Antworten. Ich habe einen Timer implementiert Timer.One_Shot mit period = 1/4*f aber wie kann ich das zweite Pwm Signal in dieser Zeit erzwingen anzufangen ?
Linda schrieb: > wie kann ich das zweite Pwm Signal in dieser Zeit erzwingen > anzufangen ? Weg von der Hochsprache und mit der HW beschäftigen. Deine Python Anweisung tut irgendwas zu irgendeiner Zeit. Kontrolle über exaktes Timing bekommst du so nicht. Beschäftige Dich mit den PIO des RP2040, die sich ausschliesslich in ASM programmieren lassen.
Im Datenblatt ist präzise beschrieben wie man eine Phasenverschiebung bewerkstelligen bzw. einstellen kann. Und selbstverständlich kann man das auch mit ›normalen‹ MicroPython Instruktion erreichen und muss für solche simplen Dinge die PIO gar nicht bemühen. (Man kann die PIO aber hervorragend für eine Messung der Phase bzw. deren automatische Anpassung nutzen)
Beitrag #7383443 wurde vom Autor gelöscht.
Norbert schrieb: > Im Datenblatt ist präzise beschrieben wie man eine Phasenverschiebung > bewerkstelligen bzw. einstellen kann. Tatsächlich? Zeig' mal. > Und selbstverständlich kann man das auch mit ›normalen‹ MicroPython > Instruktion erreichen Tatsächlich? Zeig' mal. Mal ganz abgesehen davon, dass schon die Aufgabe einigermaßen trollig suspekt erscheint. Wozu sollte eine derartige Phasenverschiebung überhaupt nützlich sein? Mir fällt da echt nichts ein. 180°, ja. Das kann tatsächlich gelegentlich nützlich sein. Aber 90°? Wozu, zum Teufel, soll das jemals gut sein?
Max M. schrieb: > Weg von der Hochsprache und mit der HW beschäftigen. > Deine Python Anweisung tut irgendwas zu irgendeiner Zeit. > Kontrolle über exaktes Timing bekommst du so nicht. > Beschäftige Dich mit den PIO des RP2040, die sich ausschliesslich in ASM > programmieren lassen. Unsinn! Man kann einfach zwei PWM mit zwei getrennten Timern erzeugen, dann geht das mit der Phasenverschiebung spielend. Auch in Phyton, wenn man weiß was man tut.
Falk B. schrieb: > Unsinn! Dir auch einen schönen Abend. Interessanter wäre nun wie man das in Python tut was Linda will. Zeig doch mal bitte, da Du es zu wissen scheinst. Ist das dann so ungefähr 90° mit enormen Jitter oder kommt da ein exaktes Timing raus?
C-hater schrieb: > 180°, ja. Das kann tatsächlich gelegentlich nützlich sein. Aber 90°? > Wozu, zum Teufel, soll das jemals gut sein? Quadratursignal, siehe Inkrementalgeber. Grüßle, Volker
C-hater schrieb: > Norbert schrieb: >> Im Datenblatt ist präzise beschrieben wie man eine Phasenverschiebung >> bewerkstelligen bzw. einstellen kann. > > Tatsächlich? Zeig' mal. Gut, ich muss gestehen das ich hier mit extremen Werkzeugen arbeite. Mein PDF Viewer zB. kann beim Datenblatt auf der linken Seite eine Liste anbieten. Da kann ich dann auf PWM klicken und - es grenzt an Magie - man kann dann alles auf der rechten Seite lesen. OK, man muss lesen … und verstehen. (v1.8 Kap.4.5 S.523 und weitere…) > Norbert schrieb: >> Und selbstverständlich kann man das auch mit ›normalen‹ MicroPython >> Instruktion erreichen > > Tatsächlich? Zeig' mal. Gut, ich muss gestehen das ich hier mit extremen Werkzeugen arbeite. Mein lokal installierter Webserver stellt ua. die komplette Dokumentation zu MikroPython zur Verfügung. Da kann ich auf der linken Seite zB. auf MicroPython-specific libraries klicken und finde - es grenzt an Magie - das machine Modul. Darin mem8/16/32.
Volker B. schrieb: > C-hater schrieb: > >> 180°, ja. Das kann tatsächlich gelegentlich nützlich sein. Aber 90°? >> Wozu, zum Teufel, soll das jemals gut sein? > > Quadratursignal, siehe Inkrementalgeber. Wofür braucht man da ein PWM-Signal?
Linda schrieb: > Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben > softwaremäßig ? Welcher Frequenzbereich und wieviel Phasenjitter ist tolerierbar?
Max M. schrieb: >> Unsinn! > Dir auch einen schönen Abend. > Interessanter wäre nun wie man das in Python tut was Linda will. > Zeig doch mal bitte, da Du es zu wissen scheinst. RTFM! RP2040 Datasheet "4.5.2.8. On-the-fly Phase Adjustment For some applications it is necessary to control the phase relationship between two PWM outputs on different slices. The global enable register EN contains an alias of the CSR_EN flag for each slice, and allows multiple slices to be started and stopped simultaneously. If two slices with the same output frequency are started at the same time, they will run in perfect lockstep, and have a fixed phase relationship, determined by the initial counter values. The CSR_PH_ADV and CSR_PH_RET fields will advance or retard a slice’s output phase by one count, whilst it is running. They do so by inserting or deleting pulses from the clock enable (the output of the clock divider), as shown in Figure 113."
Axel S. schrieb: >> Quadratursignal, siehe Inkrementalgeber. > > Wofür braucht man da ein PWM-Signal? ...um einen solchen zu simulieren? Sorry, meine Glaskugel ist gerade etwas angestaubt und ich kann in den Kopf der/des TO momentan nicht hineingucken. Grüßle, Volker
Volker B. schrieb: > Axel S. schrieb: > >>> Quadratursignal, siehe Inkrementalgeber. >> >> Wofür braucht man da ein PWM-Signal? > > ...um einen solchen zu simulieren? Ich wiederhole meine Frage: wofür braucht man da ein PWM-Signal? Ein Rechtecksignal, keine Frage. Aber PWM?
Axel S. schrieb: > Ich wiederhole meine Frage: wofür braucht man da ein PWM-Signal? > Ein Rechtecksignal, keine Frage. Aber PWM? Ich kann leider auch nur wiederholen: Ich bin nicht die/der TO und kann also nur für mich sprechen. Auf dem ATxmega kann man sehr einfach phasenstarr gekoppelte Rechtecksignale über Timer im PWM-Modus erzeugen, die sich gegenseitig über das Eventsystem triggern. Aber, wie gesagt, frag' doch besser die/den TO, denn ich kann wirklich nicht in diesen Kopf gucken. Grüßle, Volker
Volker B. schrieb: > Axel S. schrieb: > >> Ich wiederhole meine Frage: wofür braucht man da ein PWM-Signal? >> Ein Rechtecksignal, keine Frage. Aber PWM? > > Ich kann leider auch nur wiederholen: Ich bin nicht die/der TO und kann > also nur für mich sprechen. Auf dem ATxmega kann man sehr einfach > phasenstarr gekoppelte Rechtecksignale über Timer im PWM-Modus erzeugen, > die sich gegenseitig über das Eventsystem triggern. Aber, wie gesagt, > frag' doch besser die/den TO, denn ich kann wirklich nicht in diesen > Kopf gucken. Warum soll er die/den TO fragen? Du hast doch Quadratursignal und Inkrementalgeber in Zusammenhang mit PWM ins Spiel gebracht ...
Jens G. schrieb: > Warum soll er die/den TO fragen? Du hast doch Quadratursignal und > Inkrementalgeber in Zusammenhang mit PWM ins Spiel gebracht ... ...und auch beantwortet, wie ich mittels Timern im PWM-Modus phasenstarre Rechtecksignale erzeuge. Grüßle, Volker
🕵︎ Joachim L. schrieb: > Das ist ein Rechtecksignal. Hier geht es um Timing, nicht um Grad (wie > z.B. bei enem Sinussignal). Korrektur: Ein digitales Signal ist nur eine dreduzierte Form eines analogen Signals. Alles, was für analoge Signale gilt, kann man auf digitale auch anwenden. Michael D. schrieb: > Verschieben zu welcher Referenz, d.h . wodurch werden 0° definiert? Die Frage stellt sich generell und im Analogen noch viel mehr,da dort ein komplizierteres Frequenzgemisch vorliegen kann, während bei Rechtecken nur ungerade ganzzahlige Oberwellen der maximalen Frequenz der Grundwelle enthalten sind, die selber wieder ganzzahlige Bruchteile des Taktes sind. Üblicherweise sind digitale PWM streng synchron getaktet, damit liegt die Frequenz und die Phasenvorgabe vor. Lösung: Man falte das Signal zweimal mit sich selber, erhalte die 4 fache Frequenz als Grundwelle und filtere alles darüber weg. Mit einer digitalen PLL geht das in 2 EXOR + FFs, sowie einem breiten Oder-Gatter. Dieser 4-fache Takt wird benutzt, um die eingelesene PWM mit einem FF zu verzögern. Fertig ist die Laube.
Georg B. schrieb: >> Das ist ein Rechtecksignal. Hier geht es um Timing, nicht um Grad (wie >> z.B. bei enem Sinussignal). > Korrektur: Ein digitales Signal ist nur eine dreduzierte Form eines > analogen Signals. Alles, was für analoge Signale gilt, kann man auf > digitale auch anwenden. Im Prinzip ja, aber leider gibt es Unterschiede z.B. was wenn auf die abfallende Flanke getriggert wird? Wie machste das dann mit deinen 90 Grad? Uebers Timing ist genau, deine Annahme nicht.
C-hater schrieb: > 180°, ja. Das kann tatsächlich gelegentlich nützlich sein. Aber 90°? > Wozu, zum Teufel, soll das jemals gut sein? Zum Beispiel, um einen Stepper-Motor anzusteuern.
Ich glaube, Linda will uns nur mit unsinnigen Fragen beschäftigen, die sie selbst gar nicht ernst meint. Inzwischen wurde ihr Account gelöscht. Wir verschwenden hier nur unsere Zeit. Siehe auch ihr parallel-Thread: Beitrag "Zwei um 90 Grad vershobenen Sinussignaale mit Micropython"
Stefan F. schrieb: > Ich glaube, Linda will uns nur mit unsinnigen Fragen beschäftigen, die > sie selbst gar nicht ernst meint. Inzwischen wurde ihr Account gelöscht. > Wir verschwenden hier nur unsere Zeit. Hatte ich schon im ersten Thread recht nahe am Anfang deutlich gemacht. Allerdings gab es eine Anzahl ›Spezialisten‹ welche dies nicht sahen. Oder sehen wollten, wohl aus Beschützerinstinkt. ;-)
Stefan F. schrieb: > Ich glaube, Linda will uns nur mit unsinnigen Fragen beschäftigen, die > sie selbst gar nicht ernst meint. Natürlich war das ein typischer Traffic-Troll. > Inzwischen wurde ihr Account gelöscht. "Es" (wahres Geschlecht unbekannt und auch unerheblich) wird bald einen neuen anlegen und wieder ähnlichen Scheiß verzapfen. Sind halt geistig Kranke, die sowas machen. Und es scheint eine gewisse Abhängigkeit, ähnlich wie bei Drogen, zu bestehen. D.h.: die wird man nicht los, die kommen immer wieder. Ich habe eine KI laufen, die solche Postings erkennt. Allerdings ist die KI meist nicht cleverer als ich selber. Nunja, ich habe sie trainiert, was will man da erwarten. Aber es gab auch schon einige Fälle mit wirklich neuen Traffic-Trolls, da hat die KI sofort gewarnt, ich selber habe es aber nicht auf Anhieb erkannt (im weiteren Verlauf des Threads dann allerdings schon, i.d.R. entlarvt schon die erste Antwort des TO die Sache ziemlich zweifelsfrei, das wissen auch die Trolle und verzögern sie deshalb gerne oder vermeiden es überhaupt, eine zu geben).
Trink einfach 🍒saft, das hilft.
🕵︎ Joachim L. schrieb: > Wie machste das dann mit deinen 90 > Grad? Mit 90° bekommt man alle Phasen, die fürs IQ-Falten, Verschieben und Invertieren nötig sind. >Uebers Timing ist genau, deine Annahme nicht. Wie meinen?
Falls es sich noch nicht herumgesprochen hat: Das Ding hier war vom ersten Moment an ein schlecht gemachter Trollversuch. OK, nicht ganz schlecht gemacht, eine stattliche Anzahl ›Spezialisten‹ konnten ihre reflexartigen Triebe^H^H Beschützerinstinkte nicht im Zaum halten wie man weiter oben sehen kann. Das Thema ist beerdigt, der Account ist gelöscht, der Papagei ist tot!
Linda schrieb: > Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben > softwaremäßig ? Eine PWM hat keinen Winkel, also läßt sich auch nichts verschieben. Eine PWM dient dazu, eine sich langsam ändernde Gleichspannung zu erzeugen, diese entspricht dem Mittelwert der PWM.
Peter D. schrieb: >> Hat jemand eine Idee wie kann ich ein PWM Signal um 90 Grad vershieben >> softwaremäßig ? > > Eine PWM hat keinen Winkel, also läßt sich auch nichts verschieben. Aber sicher, spätestens wenn zwei PWM-Kanäle parallel laufen. Und selbst wenn nur ein Kanal ohne Zeitreferenz läuft, kann man bei den meisten Controllern zwischen Single Slope und Dual Slope Operation wählen. Das bewirkt, daß der Pulsanfang (Single Slope) oder die Pulsmitte (Dual Slope) im Zeitraster konstant liegen. Bei speziellen Anwendungen ist das wichtig, z.B. wenn man mit einem PWM-Signal sowohl das Tastverhältnis als auch die Taktfrequenz bzw. Phase zur Informationsübertragung nutzt. Hab ich mal in einer Anwendung getan. Eine PLL (4046) synchronisiert sich auf ein 24kHz PWM-Signal, gleichzeitig wird mittels der PWM ein Sollwert übertragen. > Eine PWM dient dazu, eine sich langsam ändernde Gleichspannung zu > erzeugen, diese entspricht dem Mittelwert der PWM. Das ist korrekt, aber nicht vollständig.
Norbert schrieb: > OK, nicht ganz schlecht gemacht, eine stattliche Anzahl ›Spezialisten‹ > konnten ihre reflexartigen Triebe^H^H Beschützerinstinkte nicht im Zaum > halten wie man weiter oben sehen kann. Kann man das? Wo denn?
Hallo zusammen, habe zwar keine Lösung - aber eine ähnliche Herausforderung: 3 Rechtecksignale, jeweils um 120° verschoben. So wie Drehstrom - nur eben als Rechteck. Und wenn das ginge, dann noch mit PWM. Frequenz? Von 1 Hz bis ca 50 Hz. Ich würde damit gerne Optokoppler ansteuern. Wofür ich das benötiger: Einen Labortest im Bereich Antriebstechnik. Seite 525 des 2030 Datasheets habe ich gefunden - und versuche gerade das zu verstehen. Phase-Retard dürfte der Schlüssel sein. Wäe bei meiner niedigen Frequenz MicoPython verwendbar? Danke und Gruß Emil
Thomas schrieb: > Phase-Retard dürfte der Schlüssel sein. > > Wäe bei meiner niedigen Frequenz MicoPython verwendbar? PWM beim RP2040 startet bei ~7.5Hz, da TOP 16bit und DIV 8bit haben. (125MHz ÷ 2^24) Mach' es dir leicht und nutze den PIO-ASM, da hast du volle Kontrolle und volle Freiheit. Edit: Ganz vergessen, natürlich geht das problemlos mit MicroPython. Bei allen Frequenzen.
:
Bearbeitet durch User
Thomas schrieb: > 3 Rechtecksignale, jeweils um 120° verschoben. So wie Drehstrom - nur > eben als Rechteck. Und wenn das ginge, dann noch mit PWM. > > Frequenz? Von 1 Hz bis ca 50 Hz. Nimm einen Takt mit der 6-fachen Frequenz, einen Zähler, der von 0 bis 5 zählt und eine Tabelle, über die deine drei Signale kodiert werden. Damit bekommst du deine drei Signale mit 50% Tastverhältnis. Für PWM brauchst du einen entsprechend der gewünschten Auflösung höheren Basistakt.
:
Bearbeitet durch User
Thomas schrieb: > Hallo zusammen, > habe zwar keine Lösung - aber eine ähnliche Herausforderung: > > 3 Rechtecksignale, jeweils um 120° verschoben. So wie Drehstrom - nur > eben als Rechteck. Und wenn das ginge, dann noch mit PWM. Dazu muss man halt die PWM-Ausgänge passen konfigurieren. Das geht in praktisch jeder Programmiersprache. > Frequenz? Von 1 Hz bis ca 50 Hz. Schnarchlangsam. > Wäe bei meiner niedigen Frequenz MicoPython verwendbar? Siehe oben. Wenn die PWM-Frequenz zu niedrig ist, um sie per Hardware zu erzeugen, kann man auch Soft-PWM benutzen. GGf. sogar in der Hipstersprache MicroPhyton, wenn gleich das überproportional Hardwareleistung frisst. Aber was solls, ist eh nur ein Testaufbazú. Norbert schrieb: > PWM beim RP2040 startet bei ~7.5Hz, da TOP 16bit und DIV 8bit haben. > (125MHz ÷ 2^24) Man kann die CPU auch langsamer takten. > Mach' es dir leicht und nutze den PIO-ASM, da hast du volle Kontrolle > und volle Freiheit. Witzbold! Als ob die Programmierung der PIO-ASM mal eben so gemacht ist! Da würde ich dreimal eher auf Spft-PWM gehen. Oder einfach den Pico weglegen und einen Arduino MEGA nehmen, der kann das ohne Handstände problemlos, auch mit 1 Hz! Der hat massenhaft Timer, die auch dreiphasig arbeiten können.
Falk B. schrieb: > Man kann die CPU auch langsamer takten. Jetzt hör aber auf … das geht? So etwas geht? Ich bin über alles Grenzen menschlichen Vorstellungsvermögens hinaus gleichermaßen sprachlos und entsetzt. Geht das etwa mit: machine.freq(n)? Du meine Güte, man lernt ja jeden Tag etwas Neues hinzu. Demnächst kommt jemand und erzählt man könnte GPIOs umschalten… ;-) Falk B. schrieb: > sogar in der > Hipstersprache MicroPhyton, wenn gleich das überproportional > Hardwareleistung frisst. Das muss man selbstverständlich in Maschinensprache programmieren, damit die beiden CPUs später zu 99.9% im Leerlauf sind und nicht nur zu 99%.
:
Bearbeitet durch User
Hallo zusammen, schlussendlich hab ich mir zum Ausprobieren wegen der Papierform einen Nucleo-F446RE besorgt. 3 PWM Signale mit fester Phasenverschiebung zueinander bei 100Hz (fest) waren realisierbar - und zwar so: 90MHz Sys Clock eingestellt Timer - setting (Abweichung von default): Prescaler auf 89 -> 1 Mhz runterteilen Counter Period/AutoReload auf 9999 -> 100Hz Trigger Event Selection auf Output compare PWM-Generation Channel1: PWM Channel 1 Pulse auf 3000 -> ergibt 30% DutyCycle Output Compare: Active Level on match Pulse -> 3333 : Das wirft den nächsten Timer nach 33% der Periodenzeit an und erzeugt so eine 120° Phasenverschiebung für das nächste Signal. Time 2 genauso konfiguriert, Timer 3 etwas simpler, da der keinen Nachfolger hat. Die Signale kann ich an PA8 (=TIM1), PA0 (=TIM2) und PA6 (=Tim3) abgreifen. Funktioniert. So soll es weitergehen (ich wühle aktuell das Refence Manual der CPU durch…): 2 Drehencoder über die Funktion Timer Encoder Mode einbinden und mit den zur Verfügung gestellten Ergebnissen 1. Die Frequenz – also den Wert des Counter Period/Autoreload für TIM1-3 2. Das Tastverhältnis - also den Wert in PWM Channel1 Pulse für TIM1-3 beeinflussen. Hat sowas schonmal jemand gemacht? Bitte um Tipps!! Vor über 30 Jahren hab ich das letzte Mal C Programmiert (Lattic-C….) – und da bin ich mich aktuell am „Wiedereingliedern“. Danke und Gruß Emil
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.