Abschnitt 8, „Analoge Werte verarbeiten“, Applikation servocontrol

Die Applikation servocontrol verwendet ein Potentiometer (mit 10 kOhm) und ein handelsübliches Modellbauservo: Über ein Drehen des Potentiometers wird die Helligkeit der LED und die Stellung des Servos verändert, wie im folgenden Video gezeigt.

Das Beispiel dient als Referenzimplementierung der Kapitel

  • Kapitel 8.1.3, „Messen am Spannungsteiler“
  • Kapitel 8.2, „Werte filtern“
  • Kapitel 8.5.4, „Pulsweitenmodulation (PWM)“

Schaltungsaufbau

Schaltungsaufbau am Steckbrett

Das Potentiometer links ist wie in Kapitel 8.1.3 besprochen über einen Spannungsteiler versorgt. Es wird GPIO2 als ADC-Eingang verwendet. Der Anschluss des Servos ist in Kapitel 8.5.4 mit der „Level Conversion“ durch den Transistor beschrieben. Als Pull-Up wird ein 10 kOhm-Widerstand verwendet, eine Strombegrenzung vom Ausgang GPIO3 zur Basis des Schalttransistors übernimmt ein 1 kOhm-Widerstand.

Schaltungsaufbau auf eine Lochrasterplatine gelötet

Sourcecode

components/ringbuffer

enthält die Implementierung eines Ringpuffers als abstrakter Datentyp, wie er in Kapitel 8.2.1 beschrieben wird.

components/filter

enthält Implementierungen eines allgemeinen Filters mit den polymorphen „Unterklassen“ FIRFilter und IIRFilter, wie er in Kapitel 8.2.1 beschrieben wird.

main

baut auf dem ADC-Beispiel des ESP-IDF auf. Kanal 2 von ADC 1, der auf GPIO 2 geleitet ist, wird in der Hauptschleife zyklisch mit einer Periode von 50 ms ausgelesen und in drei Filter, nämlich einen moving average FIRFilter 2. Ordnung, einen moving averge FIRFilter 10. Ordnung und einen IIRFilter 2. Ordnung geleitet. Über die Einstellung „use filter for servo control“ in der „servocontrol Configuration“ kann gewählt werden, welche Filterausgabe anschließend zum Stellen des Servos (und der LED-Helligkeit) verwendet wird.

Die Filterwerte werden per printf() auf der Konsole ausgegeben. Es ist nun möglich, die Daten per FlexiPlot auszuwerten (siehe Kapitel 8.2).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.