Endmontage
Contact us
stepper1

Unipolar stepper Motor

stepper7

Wenn Sie die Schrittmorsteuerung für kleine Projekte wie in Modellbau, Robotik oder für Spielzeuge suchen, könnte es sein, dass Sie die passenden Steuerungen nicht finden weil die meisten Angebote im Internet für CNC Maschinen oder 3D gedacht sind und fast nur mit einem PC funktionieren. Aber vielleicht wäre es zuerst wichtig zu wissen wo man überhaupt kleinere Schrittmotore findet.

Sie können solche Schrittmotore(siehe Bild) kostenlos von Ihrem alten Drucker ausbauen oder auf Ebay findet man gelegentlich welche.

Man klassifiziert die Schrittmotore grob in zwei Kategorien. Die bipolaren Schrittmotore. Sie haben vier farbige Anschlüsse bzw Leitungen und die unipolaren Schrittmotore. Diese haben fünf Leitungen. Die fünte Leitung(sehr oft rot) ist für Spannungsversorgung.

Sobald Sie Ihren Stepper Motor identifiziert haben bleibt es zu wissen in welcher Reinfolge diese Anschlüsse geschaltet werden müssen.

Wir können die unipolar Stepper Motore in verschiedenen Modus betreiben aber um die Situation simpel zu lassen, betrachten wir nur den Forward and Reverse, Full Step High Torquen (siehe Tabelle). Leitung1(gelb), Leitung2(schwarz), Leitung3(orange), Leitung4(braun) und Leitung5(rot). Um unseren Schrittmotor in Bewegung zu setzen, benötigen wir nur noch einen Mikrocontroller und den Baustein ULN2803.

erste Schritte
cnc works
cnc Komponente
Wenn wir Programme für Geräte oder Maschinen schreiben, müssen wir auch den Anwendern die Möglichkeit geben mit Ihren Geräten zu kommunitieren. LCD Module sind hier genau richtig. Sie erlauben uns eine große Menge an Daten zu visualisieren. Denken Sie an einen Taschenrecher. Die Ansteuerung eines LCD Moduls scheint vielleicht sehr komplex zu sein aber bei genauer Betrachtung doch zu überwinden.
table4

LDC Ansteuerung

Bipolar Stepper Motor

stepper4
Mit einem bipolar Stepper Motor ist der Aufwand geringer. Der Driver A4988 z.B macht die Aufgabe für Sie.

; **********************************************************

; Author : www. camtronics.tk

; 03. 03. 2016

; **********************************************************

 

; Description

; LCD Ansteuerung

;Nur zwei Leitungen werden für die Steuerung benötigt

; Acht Leitungen für Datentransfer

; Alle Befehle und die Daten für das LCD Modul sind in Flash gelegt

 

.include "m8def.inc"

.LIST

.Org 0x0000

rjmp principal

.org OVF0addr

rjmp timer0_overflow ; Timer0 Overflow Handler

.def temp1 = r17

.def temp2 = r18

.def temp3 = r16

.def Overflowcounter = r19

.equ firstevent = 5

.equ secondevent = 25

.equ thirdevent = 45

.equ lastone = 0x00

.equ lasttwo = 0x6B

principal:

ldi temp1, HIGH(RAMEND) ; Stackpointer initialisieren

out SPH, temp1

ldi temp1, LOW(RAMEND)

out SPL, temp1

ldi temp1, 0xFF

out DDRD,temp1 // für Daten

ldi temp1, (1<< DDC1)|(1<< DDC0)

out DDRC,temp1 // PC2: E = Enable, PC0 : RS = Register Select

ldi temp1, (1<< CS01)|(1<<CS00) // Systemfrequenz 1Mhz/1024

out TCCR0, temp1

clr temp1

ldi temp1, (1<<TOV0)

out TIFR, temp1

clr temp1

ldi temp1, (1<<TOIE0) ; TOIE0: Interrupt bei Timer Overflow

out TIMSK, temp1

clr temp1

cbi PORTC,PC0

sbi PORTC,PC2


 

projects
lcd
lcdcontrol1

ldi Overflowcounter,0x00

data:

.db 0x43,0x4E,0x43,0x2F,0x33,0x44,0x20,0x50,0x52,0x49,0x4E,0x54

.db 0x45,0x52,0x00,0x77,0x77,0x77,0x2E,0x63,0x61,0x6D,0x74,0x72

.db 0x6F,0x6E,0x69,0x63,0x73,0x2E,0x74,0x6B,0x00

ldi ZH, HIGH(2*data)
ldi ZL, LOW(2*data)

 

sei

main:

rjmp main

 

timer0_overflow: ; Timer 0 Overflow Handler

 

 

 

 

 

inc Overflowcounter

cpi Overflowcounter,firstevent

breq gotofirstevent ; if equal go to this section

nop ; if not

cpi Overflowcounter,secondevent

breq gotosecondevent ; if equal go to this section

nop ; if not

cpi Overflowcounter,thirdevent

breq gotothirdevent ; if equal go to this section

nop ; if not

rjmp end2

 

 

 

gotofirstevent:

clr temp2

ldi temp2,0x38 ; two lines mode

out PORTD,temp2
sbi PORTC,PC2 ; enable LCD module

rjmp end

 

 

 

gotosecondevent:

clr temp2

ldi temp2,15 ; cursor blinks

out PORTD,temp2
sbi PORTC,PC2

rjmp end

 

 

 

gotothirdevent:

clr temp2

lpm temp2,z+

cpi temp2,lastone ; is end of the first line

breq nextline

nop

cpitemp2,lasttwo

breq stoptimer

sbi PORTC,PC0

out PORTD,temp2

sbi PORTC,PC2

ldi Overflowcounter,0x27

rjmp end

 

 

 

nextline:

clr temp2

cbi PORTC,PC0

ldi temp2,C0 ;new line address

out PORTD,temp2
sbi PORTC,PC2

rjmp end

stoptimer:

sbi PORTC,PC0

out PORTD,temp2
sbi PORTC,PC2

ldi temp3,240

 

 

 

loop0:

dec temp3

brne loop0

cbi PORTC,PC2

ldi Overflowcounter,250

ldi temp1, (0<< CS01)|(0<<CS00) // Stop TIMER

out TCCR0, temp1

cbi PORTC,PC2

rjmp end2

end:

ldi temp1,240

loop1:
dec temp1
brne loop1
cbi PORTC,PC2

end2:

reti

DAQ

Matlab bietet eine sehr bequeme Möglichkeit zur Auswertung von Messwerten. Über Ihre serielle Schnittstelle können Sie Ihr Microcontroller als PC Oszilloskop einsetzen. Die Übertragung ist hervorragend. Der Matlabcode übernimmt die Umwandlung von digitaler zur analoger Darstellung.
Matlabcode
Assemblercode
DAQ2
Home
C_code

 

Home
software

Unipolar Stepper Motor

Sie können unipolar Stepper Motor in verschiedenen Modus wie hier in der Tabelle gezeigt ist betreiben. In Single Stepping Motion z.B wird nur eine Spule pro Schritt geschaltet. Jeder Schritt bewegt den Motor um 7.5 Grad. Um eine komplette Umdrehung zu erreichen, braucht man 48 Schritte. Wie schnell soll sich Ihr Motor drehen, können Sie am besten mit Ihrem Mikrocontroller festlegen.
Schamatic unipolar Stepper Motor Steuerung

; **********************************************************

; Author : www. cnc-3dprinter.com

;Date : 18. 04. 2017

; **********************************************************

 

; Description

; Unipolar Stepper Motoransteuerung

; Forward and Reverse, Full Step, High Torque

; TIMER0 als Taktgeber

; 5 Umdrehungen pro Sekunde

// Systemfrequenz 4Mhz, 64 prescaler

 

.include "m8def.inc"

.LIST

.Org 0x0000

rjmp principal

.org OVF0addr

rjmp timer0_overflow ; Timer0 Overflow Handler

.def temp1 = r17

.def Overflowcounter = r19

// ZeitFestlegung.

.equ firststep = 2 ; nach 2 overflows

.equ secondstep = 4

.equ thirdstep = 6

.equ fourthstep = 8

 

principal:

 

ldi temp1, HIGH(RAMEND) ; Stackpointer initialisieren

out SPH, temp1

ldi temp1, LOW(RAMEND)

out SPL, temp1

ldi temp1, (1<< DDD5)|(1<< DDD4)|(1<< DDD3)|(1<< DDD2)

out DDRD,temp1 // die vier Pins von PORTD als Ausgang( Motoranschlüsse)

ldi temp1, (0<< DDB1)|(0<< DDB0)

out DDRC,temp1 // zwei Pins vvon PORTC als Eingang für die Richtung und Start/Stop

ldi temp1, (1<< PORTB1)|(1<< PORTB0)

out PORTC,temp1 // Pullup Widerstände

ldi temp1, (1<< CS01)|(1<<CS00) // 64 Prescaler

out TCCR0, temp1

clr temp1

ldi temp1, (1<<TOV0)

out TIFR, temp1

clr temp1

ldi temp1, (1<<TOIE0) ; TOIE0: Interrupt bei Timer Overflow

out TIMSK, temp1

ldi Overflowcounter,0x00

 

main:

rjmp main

 

timer0_overflow: ; Timer 0 Overflow Handler

 

 

 

 

; right

sbic PINC, PB1; wenn low da liegt start den Motor

rjmp end

inc Overflowcounter

sbic PORTC, PB0 ; check the direction

rjmp left

cpi Overflowcounter, firststep

breq gotofirststep ; if equal go to this section

nop ; if not

cpi Overflowcounter, secondstep

breq gotosecondstep ; if equal go to this section

nop ; if not

cpi Overflowcounter,thirdstep

breq gotothirdstep ; if equal go to this section

nop ; if not

cpi Overflowcounter,fouthstep

breq gotofoourthstep ; if equal go to this section

nop ; if not

rjmp end

 

 

 

 

gotofirststep:

clr temp1

ldi temp1,0x30

out PORTD, temp1

rjmp end

 

 

 

gotosecondstep :

clr temp1

ldi temp1,0x18

out PORTD, temp1

rjmp end

 

 

 

gotothirdstep :

clr temp1

ldi temp1,0x0C

out PORTD, temp1

rjmp end

 

 

 

gotofourthstep :

clr temp1

ldi temp1,0x24

out PORTD, temp1

ldi Overflowcounter,0x00

rjmp end

 

 

 

left:

cpi Overflowcounter, firststep

breq fourthtstepback ; if equal go to this section

nop ; if not

cpi Overflowcounter, secondstep

breq thirdstepback ; if equal go to this section

nop ; if not

cpi Overflowcounter,thirdstep

breq secondstepback ; if equal go to this section

nop ; if not

cpi Overflowcounter,fouthstep

breq firststepback ; if equal go to this section

nop ; if not

rjmp end

 

 

 

fourthtstepback:

clr temp1

ldi temp1,0x24

out PORTD, temp1

rjmp end

 

 

 

thirdstepback :

clr temp1

ldi temp1,0x0C

out PORTD, temp1

dec stepcounter

rjmp end

 

 

 

secondstepback

clr temp1

ldi temp1,0x18

out PORTD, temp1

rjmp end

 

 

 

firststepback :

clr temp1

ldi temp1,0x30

out PORTD, temp1

ldi Overflowcounter,0x00

rjmp end

 

 

 

end:

 

reti

electronics1

Wissen Sie schon, dass Sie mit einem einzigen Assembler-Programm, LCD Module, Schrittmotore, Gleichstrommotore ansteuern oder PWM Signale erzeugen können?

Nehmen wir ein Beispiel vom realen Leben um alles besser zu verstehen.

Um 5:30 klingelt unser Wecker

Um 6:00 nehmen wir eine Tasse Kaffee

Um 6:30 fahren wir los

Um 7:00 Besprechung mit den Kollegen und danach konzentriert sich jeder auf seine Arbeit.

Nach diesem sequentiellen Ablaufschema wurde dieses multifunktionale Assembler-Programm entwickelt. Das ist ein solider Baustein, der immer und immer wieder verwendet wird.

Logo

CNC/3D PRINTER