PWM 10kHz Multi-Channel

#5383496
Lesenswert?

Hallo zusammen,

Bzgl. meinem Projekt benötige ich ein PWM-Signal mit einer Frequenz von 
10kHz-20kHz. Der Duty-Cycle (%) des PMW soll dabei ca. jede Millisekunde 
geändert werden. Beispielsweise:
 0-1ms =100%
 1-2ms 20%
 2-5ms 0%  (im loop).

Mit einem Arduino Uno kein Problem. Ich verwende PWM-Pin 9 und 10 im 
Mode 8 (PWM, Phase and Freq. correct). Mit dem ICRx kann ich damit meine 
gewünschte Freq. einstellen.

Allerdings benötige ich dieses PWM Signal auf mehreren Ausgängen mit 
unabhängigen DutyCylce-Werten.

Bsp. für ein zweites PWM Signal mit 10kHz:

0-1ms =100%
1-4ms 20%  (statt 1-2ms)
4-5ms 0%

Ist ein PWM Treiber à la PCA9685 dafür geeignet? Laut Datasheet ist nur 
eine Freq. von ca. 1.0kHz machbar. Gibt es hier eine Möglichkeit die 
Freq. auf 10kHz zu steigern?

Oder gibt es eine elegantere Lösung hierfür?
#5383511
Lesenswert?

@ Jk Mt (h4l9000)

>Mit einem Arduino Uno kein Problem. Ich verwende PWM-Pin 9 und 10 im
>Mode 8 (PWM, Phase and Freq. correct). Mit dem ICRx kann ich damit meine
>gewünschte Freq. einstellen.

Gut!

>Allerdings benötige ich dieses PWM Signal auf mehreren Ausgängen mit
>unabhängigen DutyCylce-Werten.

Wieviele denn? Der Arduino Uno hat mehrere Timer, damit kann man mehrere 
PWM-Signale erzeugen. Man muss halt nur die Register manuell einstellen.

>Ist ein PWM Treiber à la PCA9685 dafür geeignet?

Dieser nicht, andere schon. TLC5940 ist so einer, wenn gleich der per 
SPI angesteuert wird.

> Laut Datasheet ist nur
>eine Freq. von ca. 1.0kHz machbar.

Sieht so aus.

> Gibt es hier eine Möglichkeit die
>Freq. auf 10kHz zu steigern?

Eher nicht, den internen Frequenzteiler kann man nicht überbrücken.

>Oder gibt es eine elegantere Lösung hierfür?

Dazu müßte man deine Anforderungen kennen. Wieviele Kanäle brauchst du?

Wenn du nur grobe Schritte von 10% oder mehr brauchst, kann man das auch 
komplett in Software machen. Siehe Soft-PWM.
#5383531
Lesenswert?

Vielen Dank für deine schnelle Antwort!


Die Frequenz der PWM Signale müssen alle bei 10 kHz (Bzw. 20kHz) liegen. 
Das schaffe ich bei einem Arduino Uno nur mit dem Timer1 (Mode8).

16 Ausgänge wäre ein Anfang. Mehr wären besser.

Mit einem Arduino Mega könnte ich 11 solche PWM Signale generieren, ist 
das richtig?

Ich zähle die einzelnen PWM Peaks (10kHz) am Pin 9 und ändere nach "X" 
Peaks den DutyCycle am pin 10. Einen Solchen Pin 10 möchte ich aber 16+ 
mal haben, mit variablem "X". Daher würde ich die Schrittweite eher 
nicht als grob bezeichnen.
Gast #5383554
Lesenswert?

> Ich zähle die einzelnen PWM Peaks (10kHz) am Pin 9

Das heisst, du wirst eine sehr schnelle Interrupt-Rate haben. Und das 
womöglich auf mehreren Kanälen?

So oder so würde ich dann lieber einen µC verwenden, der wenigstens ein 
paar zig. MHz Taktfrequenz hat. Dann wird die Programmierung wesentlich 
entspannter ablaufen.

Schau Dir mal den STM32F103Vxxx an
https://de.aliexpress.com/wholesale?catId=0&initiative_id=SB_20180409075409&SearchText=STM32F103VET6+board

Falls ich mich nicht irre, hat der Chip 6 16bit Timer, mit jeweils 4 PWM 
Ausgängen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren