TXos, Arduino Sender Software

S_a_S

User
Gemacht hab ich noch keine PWM mit dem ESP32.
Und so wie ich die Timer Group (TIMG) sehe, gibt es da keine Konfigurationsmöglichkeit auf einen Ausgang, nur Auslösen eines Interrupts.

Eventuell lohnt sich der Blick in die Motor-PWM oder LED-Control - da ist zumindest der HW-Ausgang direkt vom Timer abhängig und muss nicht erst durch einen Interrrupt mehr im Manual.

Allerdings geht das alles von konstantem PWM-Signal aus, da muss dennoch vor dem nächsten Kanal per Interrupt der neue On-Wert in die Schatten-Register gesetzt werden.

Dürfte zumindest bei der Konfiguration über WLAN beim RTOS an die Grenzen gehen.

Grüße Stefan
 

Wolfi

User
Hallo Stefan, @S_a_S

Ja, Ich werde mir die PWM Generatoren beim ESP32 mal genauer ansehen. Über die PWM Hardware mache ich das auch bei der AVR Version, das funktioniert hervorragend.

Grüße
Wolfgang
 

Wolfi

User
@wimalopaan

Ja, es geht um PPM, nicht PWM.
Bei Timer + ISR hast du immer Jitter, außer es läuft sonst nix anderes auf dem Controller, oder die Timer ISR hat die höchste Priorität.
Bischen Jitter (2-3 uSec) merkt man auch nicht. Wahrscheinlich hat's auch noch keiner genau nachgemessen :)
Was verstehst du unter Timer + DMA ?

Grüße
Wolfgang
 
Bei Timer + ISR hast du immer Jitter,
Nein (wenn man es richtig macht).
Was verstehst du unter Timer + DMA ?
Der DMA-Controller macht bei jedem Update-Event des Timers einen Transfer vom RAM in die Timer-Preload-Register, die dann beim wiederum nächsten Update des Timers in die Timer-Register geladen werden. Eigentlich genauso wie mit einer ISR, nur dass diesmal die CPU gar nichts zu tun hat. Die 8 / 16 Werte für die PPM-Folge sind in einem Array, der DMA-Controller liest zyklisch aus diesem Array.
Das geht natürlich auch für den PWM-Fall, dann hat das Array die Länge 1, gegeneriert also zu einem einzelnen Wert.

Jetzt kommt das aber: die kleinen AVR haben keinen DMA-Controller (eine der größten Schwachstellen dieser ansonsten so knuffigen µC). Den ESP32 kenne ich nicht, bin mir aber sicher, dass er auch einen DMA-Controller hat.
 

S_a_S

User
der ESP32 hat zwar DMA, aber nicht alle Signale können als Trigger genutzt werden:
In the ESP32, 13 peripherals are capable of using DMA for data transfer, namely, UART0, UART1, UART2, SPI1, SPI2, SPI3, I2S0, I2S1, SDIO slave, SD/MMC host, EMAC, BT, and Wi-Fi.
Wäre zwar schön, aber man kann bei dem Preis auch nicht alles erwarten ;)

Jitterfrei geht das, wenn die ISR bis zum Setzen der Timer-Register/Ports immer dieselbe Ausführzeit hat. Dann muss aber der Timerwert ggf. um diese angepasst werden.

Beim ESP Kann man den Interrupt sogar auf eine der beiden CPU-Kerne zuweisen. Priorität ist bereits für die Timer unterschiedlich festgelegt (Timer.0 1, Timer.1 3, Timer.2 5), aber andere Peripheriequellen haben aber selbe Priorität, von daher gibt es da dann keine definierte Ausführungszeit. Aber da muss man dann tief ins RTOS einsteigen (und das geht dann nicht so einfach über Arduino)...

Grüße Stefan
 
...Bei Timer + ISR hast du immer Jitter, außer es läuft sonst nix anderes auf dem Controller, oder die Timer ISR hat die höchste Priorität.
Ich glaube, wir reden aneinander vorbei ;-)

Was ich meine, ist, dass der Timer-Compare-Event direkt den Pin setzt. Das ist naturgemäß absolut jitterfrei. Die ISR braucht man dann bei PPM nur, um den nä. Timer-Wert für den nä. Impuls zu laden. Dazu hat man ausreichend Zeit, sollten die 1ms dazu nicht ausreichen, hat man ein lost-update, aber immer noch kein Jitter.

Was Du meinst, ist, wenn man den PIN per ISR setzt. Das it natürlich sehr ungeschickt, und man macht das eigentlich nur, wenn HW-Design wenig optimal ist.
 

S_a_S

User
die Timer im ESP32 können keinen Pin setzen, nur einen Interrupt auslösen.

Hat dafür andere Schwerpunkte (WLAN, BT, Audio...).

Grüße Stefan
 
die Timer im ESP32 können keinen Pin setzen, nur einen Interrupt auslösen.

Hat dafür andere Schwerpunkte (WLAN, BT, Audio...).

Grüße Stefan

Ich muss zugeben, dass ich die folgenden Artikel nur diagonal gelesen habe, doch aus dem Blockdiagramm und dem Text lese ich schon heraus, dass das in HW geht. Andernfalls könnte man vvlt auch die angegebenen hohe PWM-Frequenzen nicht generieren.


 
Der ESP32 hat meiner Meinung nach genügen Möglichkeiten HW-PWM zu erzeugen ...

... und das meinte ich damit (kein Jitter mit HW-PWM) ;-)
Sorry, aber solche Kommentare sind sehr verwirrend. Er schrieb explizit von der Softwarevariante. Da ist "Doch das geht", wenn man ohne es zu erwaehnen eine andere Variante meint, sehr irrefuehrend.

Genauso wie auf ELRS zu verweisen, das gar kein PPM kann, wenn es um PPM geht.
 

Wolfi

User
OK, dann sind wir ja beinand.
Rein per Software in der ISR ist nicht gut.
Also, ich sehe mir die PWM HW genauer an und finde einen Weg um Jitterfrei PPM zu generieren.
Alles andere funktioniert auf ESP mindestens genauso gut wie unter den AVRs.
User interface ist etwas flotter und mehr Modellspeicher sind auch möglich.
Portierung was relativ straightforward.


Danke Euch.
 
OK, dann sind wir ja beinand.
Rein per Software in der ISR ist nicht gut.

Mein reden ;-) So etwas macht man nicht ...

Also, ich sehe mir die PWM HW genauer an und finde einen Weg um Jitterfrei PPM zu generieren.

Es geht.

Alles andere funktioniert auf ESP mindestens genauso gut wie unter den AVRs.

Na, das sollte es ...
User interface ist etwas flotter und mehr Modellspeicher sind auch möglich.
... und das auch auf einem Dual-Core-240MHz Boliden. Da könntest Du Dich gleich an den Port von EdgeTx machen ;-)
Portierung was relativ straightforward.


Danke Euch.
Gerne.
 
Sorry, aber solche Kommentare sind sehr verwirrend.

Ja, Vorschläge, es besser zu machen, sind zuweilen "verwirrend" ;-)

Er schrieb explizit von der Softwarevariante.

Weil er es nicht besser wusste.

Da ist "Doch das geht", wenn man ohne es zu erwaehnen eine andere Variante meint, sehr irrefuehrend.

Ich habe doch geschrieben, wo der Unterschied ist.

Genauso wie auf ELRS zu verweisen, das gar kein PPM kann, wenn es um PPM geht.
Bzgl. des hier beschriebenen Problems sind PWM und PPM identisch: das eine Mal ist die Impuls-Länge variabel, das andere Mal die Periodendauer.
 
Ansicht hell / dunkel umschalten
Oben Unten