Wie kann der Arduino Uno bis zu 12 Servos unterstützen, wenn er nur 6 digitale PWM-Pins hat?

8

Nach dieser :

Die Servobibliothek unterstützt bis zu 12 Motoren auf den meisten Arduino-Boards und 48 auf dem Arduino Mega. Auf anderen Karten als der Mega deaktiviert die Verwendung der Bibliothek die AnalogWrite () (PWM) -Funktionalität an den Pins 9 und 10, unabhängig davon, ob sich an diesen Pins ein Servo befindet oder nicht. Auf dem Mega können bis zu 12 Servos verwendet werden, ohne die PWM-Funktionalität zu beeinträchtigen. Bei Verwendung von 12 bis 23 Motoren wird die PWM an den Pins 11 und 12 deaktiviert.

Doch nach dieser :

Digitale E / A-Pins 14 (von denen 6 einen PWM-Ausgang liefern)

Wie kann der Uno mehr als 6 Servos steuern, wenn er nur 6 digitale E / A-Pins hat, die einen PWM-Ausgang liefern können?

user1265
quelle

Antworten:

4

Obwohl ich mir die Quelle selbst nicht angesehen habe, verwenden sie in solchen Situationen normalerweise den Interrupt-Timer 1 , der im PWM-Modus den Pins 9 und 10 zugeordnet worden wäre. Dies würde erklären, warum Sie die Pulsweitenmodulation nicht verwenden können diese Stifte. Tatsächlich können Sie jeden der drei Timer für PWM an jedem digitalen Pin verwenden, obwohl er nicht so gut ist wie die integrierten PWM-Optionen .


(Quelle: bansky.net )

( Quelle )

Das obige Bild beschreibt genau, wie die Signale an den Servomotor gesendet werden. Eine solche Wellenform ähnelt einer Standard-PWM. Die Servobibliothek kann einen Grad in eine Wellenform umwandeln, mit der der IC des Servos die Position des Motors mit Motor und Potentiometer einstellen kann.

Anonymer Pinguin
quelle
1
Es simuliert also im Wesentlichen PWM? Was ist dann der Sinn der digitalen Pins mit PWM-Kanälen?
user1265
@ user1265 Mehr oder weniger ... es werden die Timer verwendet, die PWM steuern. In Bezug auf PWM, IIRC verfügt der ATmega328 über Schaltkreise, um PWM effizienter zu machen.
Anonymer Pinguin
2
@ user1265, Hardware-PWM ist "kostenlos", dh es hat keinerlei Auswirkungen auf die Leistung des restlichen Programms (es bindet nur einen Timer oder zumindest einen Teil davon). Die Wartung von Interrupt-Routinen für emulierte PWM ist vergleichsweise kostspielig. In diesem Fall beträgt die PWM-Frequenz jedoch nur etwa 50 Hz, was nicht allzu tragisch ist (die Standard-PWM-Frequenz von Arduino beträgt 31/62 kHz, PWM für z. B. Beleuchtungsanwendungen bei 50 Hz wäre wahrscheinlich eher flackernd).
microtherion
What is the point of the digital pins with PWM channels then?- Sie können viel höhere Frequenzen (bis zu 8 MHz) und sehr genaue Arbeitszyklen erhalten. Dies ist nicht möglich, wenn Sie sich auf einen Interrupt verlassen, um dies für Sie zu tun.
Nick Gammon