Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
elektronik:schrittmotorsteuerung_mit_dem_easydriver [2013/04/13 13:51] – [Schrittmotor] Datenblatt octoate | elektronik:schrittmotorsteuerung_mit_dem_easydriver [2014/03/13 08:23] (aktuell) – [Einstellung der Spulenstrombegrenzung] Wording... octoate | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
Für mein [[sonstiges: | Für mein [[sonstiges: | ||
- | ===== EasyDriver ===== | + | ====== EasyDriver |
- | {{: | + | {{: |
Die von mir verwendete Version des EasyDriver ist v4.4. Er unterstützt Schrittmotoren, | Die von mir verwendete Version des EasyDriver ist v4.4. Er unterstützt Schrittmotoren, | ||
- | ===== Schrittmotor ===== | + | **Wichtig: |
+ | |||
+ | ====== Schrittmotor | ||
{{: | {{: | ||
Zeile 21: | Zeile 23: | ||
{{: | {{: | ||
+ | |||
+ | ====== EasyDriver am Arduino ====== | ||
+ | Beim Anschluss an den Arduino habe ich mich ganz nach einem Tutorial auf [[http:// | ||
+ | Hier also der Schaltplan für die Verbindung des Arduino Uno mit dem EasyDriver und einem Schrittmotor: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | In meinem Setup habe ich zusätzlich noch ein paar Stecker und Buchsen verbaut, um einfachere Kabeldurchführungen in den Projektor zu ermöglichen und um evtl. später selbst Teile einfach austauschen zu können. | ||
+ | |||
+ | ===== Einstellung der Spulenstrombegrenzung ===== | ||
+ | Die technischen Daten oben zeigen, dass mein Schrittmotor üblicherweise mit 330mA arbeitet. Wenn man ein Netzteil am EasyDriver verwendet, das auch die Spannung erzeugt, die der Schrittmotor benötigt, braucht man am EasyDriver den Ausgangsstrom für die Spulen nicht begrenzen, da der Innenwiderstand des Schrittmotors den Strom begrenzt. Verwendet man aber ein Netzteil mit einer höheren Spannung als der Schrittmotor benötigt, muss man den Strom begrenzen, damit man den Schrittmotor nicht zerstört. Zum Einstellen wird ein Multimeter mit TP1 und GND verbunden und die Spannung an diesem Punkt gemessen. 1V entspricht einer Begrenzung von 150mA und 5V einer Begrenzung von 750mA. Durch simplen Dreisatz erhält man dann den einzustellenden Spannungswert. In meinem Fall waren das 2.2V. | ||
+ | ===== Ansteuerung (Quellcode) ===== | ||
+ | Glücklicherweise hat [[http:// | ||
+ | |||
+ | Beiden Methoden kann man zusätzlich noch einen " | ||
+ | |||
+ | In der " | ||
+ | |||
+ | <code c 1> | ||
+ | ////////////////////////////////////////////////////////////////// | ||
+ | //©2011 bildr | ||
+ | //Released under the MIT License - Please reuse change and share | ||
+ | //Using the easy stepper with your Arduino | ||
+ | //use rotate and/or rotateDeg to control stepper motor | ||
+ | //speed is any number from .01 -> 1 with 1 being fastest - | ||
+ | //Slower Speed == Stronger movement | ||
+ | ///////////////////////////////////////////////////////////////// | ||
+ | |||
+ | |||
+ | #define DIR_PIN 2 | ||
+ | #define STEP_PIN 3 | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(DIR_PIN, | ||
+ | pinMode(STEP_PIN, | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | |||
+ | //rotate a specific number of degrees | ||
+ | rotateDeg(360, | ||
+ | delay(1000); | ||
+ | |||
+ | rotateDeg(-360, | ||
+ | delay(1000); | ||
+ | |||
+ | |||
+ | //rotate a specific number of microsteps (8 microsteps per step) | ||
+ | //a 200 step stepper would take 1600 micro steps for one full revolution | ||
+ | rotate(1600, | ||
+ | delay(1000); | ||
+ | |||
+ | rotate(-1600, | ||
+ | delay(1000); | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | void rotate(int steps, float speed){ | ||
+ | //rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement) | ||
+ | //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger | ||
+ | int dir = (steps > 0)? HIGH:LOW; | ||
+ | steps = abs(steps); | ||
+ | |||
+ | digitalWrite(DIR_PIN, | ||
+ | |||
+ | float usDelay = (1/speed) * 70; | ||
+ | |||
+ | for(int i=0; i < steps; i++){ | ||
+ | digitalWrite(STEP_PIN, | ||
+ | delayMicroseconds(usDelay); | ||
+ | |||
+ | digitalWrite(STEP_PIN, | ||
+ | delayMicroseconds(usDelay); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void rotateDeg(float deg, float speed){ | ||
+ | //rotate a specific number of degrees (negitive for reverse movement) | ||
+ | //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger | ||
+ | int dir = (deg > 0)? HIGH:LOW; | ||
+ | digitalWrite(DIR_PIN, | ||
+ | |||
+ | int steps = abs(deg)*(1/ | ||
+ | float usDelay = (1/speed) * 70; | ||
+ | |||
+ | for(int i=0; i < steps; i++){ | ||
+ | digitalWrite(STEP_PIN, | ||
+ | delayMicroseconds(usDelay); | ||
+ | |||
+ | digitalWrite(STEP_PIN, | ||
+ | delayMicroseconds(usDelay); | ||
+ | } | ||
+ | } | ||
+ | </ |