Skip to content

Commit 100bc42

Browse files
author
Tobias Siegrist
committed
feat: added docs servo motor
1 parent 3661ed6 commit 100bc42

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
title: Servomotor
3+
tags: ["pwm"]
4+
---
5+
6+
## Funktionsweise
7+
8+
Bei einem Servomotoren sind in einer vielzahl von Bauformen und Grössen erhältlich. Eine Eigenschaft welche einen Servomotor von einem
9+
normalen Elektromotor unterscheidet ist die Existenz eines Regelkreises. Dieser Regelkreis ermöglicht also erst die Kontrolle über
10+
Drehgeschwindigkeit, Beschleunigung und Winkelposition des Motors. Im Gegensatz zum Schrittmotor sorgt also nicht der physikalische Aufbau
11+
für diese Kontrollmöglichkeiten, sondern eine Regelung. Die Regelung im Falle des beim CrowPi beiliegenden Servomotors wird durch ein
12+
simples Potentiometer erreicht. Bei industriellen, hochwertigen Servomotoren werden für die Positionsrückmeldung spezielle Encoder
13+
verwendet. Diese erlauben viel höhere Genauigkeiten als die Bauform mit Potentiometer. Verwendet wird diese vereinfachte Form häufig im
14+
Modellbau für die Einstellung von Stellwinkeln bei Modellflugzeugen.
15+
16+
Der Anschluss der Servomotors erfolg so: {{< img alt="Anschluss für Schrittmotor" src="components/servo-motor.jpg" height="500px" >}}
17+
18+
## Voraussetzungen
19+
20+
### DIP Switches
21+
22+
Für diese Komponente müssen zwei DIP Switches des rechten Blockes gesetzt werden. Die Stellung der DIP Switches sollte anschliessend so
23+
aussehen:
24+
25+
{{< dip-switches 15 16 >}}
26+
27+
## Verwendung
28+
29+
Nachfolgend wird die Verwendung der Klasse {{< javadoc class="com.pi4j.crowpi.components.StepMotorComponent" >}} beschrieben.
30+
31+
### Konstruktoren
32+
33+
| Konstruktor | Bemerkung |
34+
|:---------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------|
35+
| `ServoMotorComponent(com.pi4j.context.Context pi4j)` | Initialisiert einen Servomotor mit den Standardeinstellungen für den CrowPi. |
36+
| `ServoMotorComponent(com.pi4j.context.Context pi4j, float minAngle, float maxAngle, float minDutyCycle, float maxDutyCycle)` | Initialisiert einen Servomotor mit dem Standardpin. Hier sind jedoch benutzerdefinierte Winkelangaben sowie Tastgrad einstellbar. |
37+
| `ServoMotorComponent(com.pi4j.context.Context pi4j, int address, int frequency, float minAngle, float maxAngle, float minDutyCycle, float maxDutyCycle)` | Initialisiert einen Servomotor mit frei definierbarem Pin. Zusätzlich sind ebenfalls Winkelangaben sowie Tastgrad einstellbar. |
38+
39+
### Methoden
40+
41+
| Methode | Bemerkung |
42+
|:----------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
43+
| `void setAngle(float angle)` | Rotiert den Motor auf den übergebenen Winkel in Grad [°]. |
44+
| `void setPercent(float percent)` | Positioniert den Motor zwischen `minAngle` und `maxAngle` prozentual. |
45+
| `void moveOnRange(float value)` | Positioniert den Motor entsprechend des übergebenen Werts und anhand der Kalkulation aus den mit `setRange` gesetzten Grenzwerten. |
46+
| `void moveOnRange(float value, float minValue, float maxValue)` | Positioniert den Motor entsprechend des übergebenen Werts und anhand der Kalkulation aus den mit angegeben Grenzwerten. Hat keinen Einfluss auf die mit `setRange` gesetzten Properties. |
47+
| `void setRange(float minValue, float maxValue)` | Setzt die Unter- und Obergrenze der Werteskala. Wird für die Bewegungskalkulation mit `moveOnRange(float value)` benutzt. |
48+
| `float getMaxAngle()` | Gibt den maximal positionierbaren Winkel des Servomotors zurück. |
49+
| `float getMinAngle()` | Gibt den minimal positionierbaren Winkel des Servomotors zurück. |
50+
51+
52+
## Beispielapplikation
53+
54+
Die Beispielanwendung zeigt auf einfache Art und Weise wie die verschiedenen Methoden der `ServoMotorComponent` zu verwenden sind. Als
55+
Erstes wird demonstriert wie einfach mit der prozentualen Positionierung gearbeitet werden kann. Dazu wird die Methode `setPercent`
56+
verwendet. Als Zweites folgt dann ein Beispiel einer Positionierung mittels einer benutzerdefinierten Skalierung. Als Beispiel wird dabei
57+
eine Temperaturanzeige benutzt. Mittels `setRange` wird der Messbereich des Sensors einprogrammiert. Danach mit `moveOnRange` der Messwert
58+
in eine entsprechende Positionierung des Servomotors umgewandelt.
59+
60+
{{< code file="src/main/java/com/pi4j/crowpi/applications/ServoMotorApp.java" language="java">}}
61+
62+
## Weitere Möglichkeiten
63+
64+
- Anzeige von Messerwerten mittels eines an der Achse montierten Zeigers.
65+
2.02 MB
Loading

0 commit comments

Comments
 (0)