breznsuezer
03.10.2006, 02:32
Hallo miteinander,
ich bräuchte etwas Unterstützung.
Situation: RN-Control 1.4 mit einem Schrittmotor ( PL15S-020 von NMB) aus einem CD-Laufwerk, Motor ist an Motoren-Pins (über L293D) angeschlossen.
Datenblatt Schrittmotor:http://www.fh-augsburg.de/~mgoebel/free/wasauchimmer/PermanentMagnetLeadScrewLinearMotors.pdf
Mein Quellcode sieht so aus:
;*************************************************
;
;Autor: Göbel Markus
;
;Schrittmotor PL15S-020 an RN-Control V1.4 über L293D
;
;Stand: läuft halbwegs
;
;Datum: 02.10.06
;
;************************************************* *
;*****includes
.include "c:\m32def.inc"
;*****Namen****
;*****INIT*****
.org 0x0000
rjmp main ;starting at 0x00
.org 0x0060
;*****Main*****
main:
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
immer: rcall fahr
rjmp immer
;*****Subr. fahr
fahr: ;I/0 Register init
ldi r16,0xFF
out DDRB,r16 ;Port B as output
out DDRC,r16 ;Port C as output
;A1=PC6 A3=PC7 B1=PB0 B3=PB1
;step 1
fah_lo: cbi PORTC,6 ;-++-
sbi PORTC,7
sbi PORTB,0
cbi PORTB,1
rcall wait ;step 2
cbi PORTC,6 ;-+-+
sbi PORTC,7
cbi PORTB,0
sbi PORTB,1
rcall wait ;step 3
sbi PORTC,6 ;+--+
cbi PORTC,7
cbi PORTB,0
sbi PORTB,1
rcall wait ;step 4
sbi PORTC,6 ;+-+-
cbi PORTC,7
sbi PORTB,0
cbi PORTB,1
rcall wait
ret
;*****Subr. wait
wait: ;ca 1 700 000 cycles
ldi r20,0x03 ;ca 0,1 sec. --> 10 steps/sec
out_lo: subi r20,1
breq wa_end
ldi r21,0xFF
in_lo: subi r21,1
breq out_lo
ldi r22,0xFF
iin_lo: subi r22,1
breq in_lo
rjmp iin_lo
wa_end: ret
Dabei treten 2 Probleme auf:
1: Der Motor wird sehr schnell sehr heiss, auch bei der schnellsten Drehzahl die ich hinbekomme (was das 2. Problem ist). Ich habe gelesen, dass die Dinger heiss werden, aber so schnell und so heiss? Im Datenblatt steht nix über ne max. Temperatur drin. Anfassen kann man ihn jedenfalls nach 2 Sekunden nicht mehr.
2: Die schnellste Drehzahl, die funktioniert, sind ca. 10 Schritte pro Sekunde. Wenn ich versuche, den Motor schneller laufen zu lassen, indem ich die wait-Schleife weniger Durchläufe machen lasse, bewegt sich das Ding gar nicht. Laut Datenblatt sollen da 1400 PPS (soll das 1400 Schritte pro Sekunde heissen??!) gehen.
Ich habe ausser die INx vom L283D und DDRx von den entsprechenden Ports nichts belegt.
Könnte das Problem daran liegen, dass ich die einzelen Leitungen (A1,A3,B1,B3) nacheinander schalte, und so immer (wenn auch nur SEHR kurz) eine falsche Schaltfolge entsteht?
Ist es möglich, dass ich das Ding einfach (trotz mehrfacher Prüfung) falsch angeschlossen habe? Würde sich dann überhaupt irgendwas bewegen?
Wenn nur das Hitzeproblem wäre, würd ich mir denken, alles is schon o.k. irgendwie, aber das mit der niedrigen Drehzahl macht mich nachdenklich.
Wer weis was??
Danke schonmal,
Gruss
Markus
*edit: Quellcode besser Formatiert, danke für den Hinweis
ich bräuchte etwas Unterstützung.
Situation: RN-Control 1.4 mit einem Schrittmotor ( PL15S-020 von NMB) aus einem CD-Laufwerk, Motor ist an Motoren-Pins (über L293D) angeschlossen.
Datenblatt Schrittmotor:http://www.fh-augsburg.de/~mgoebel/free/wasauchimmer/PermanentMagnetLeadScrewLinearMotors.pdf
Mein Quellcode sieht so aus:
;*************************************************
;
;Autor: Göbel Markus
;
;Schrittmotor PL15S-020 an RN-Control V1.4 über L293D
;
;Stand: läuft halbwegs
;
;Datum: 02.10.06
;
;************************************************* *
;*****includes
.include "c:\m32def.inc"
;*****Namen****
;*****INIT*****
.org 0x0000
rjmp main ;starting at 0x00
.org 0x0060
;*****Main*****
main:
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
immer: rcall fahr
rjmp immer
;*****Subr. fahr
fahr: ;I/0 Register init
ldi r16,0xFF
out DDRB,r16 ;Port B as output
out DDRC,r16 ;Port C as output
;A1=PC6 A3=PC7 B1=PB0 B3=PB1
;step 1
fah_lo: cbi PORTC,6 ;-++-
sbi PORTC,7
sbi PORTB,0
cbi PORTB,1
rcall wait ;step 2
cbi PORTC,6 ;-+-+
sbi PORTC,7
cbi PORTB,0
sbi PORTB,1
rcall wait ;step 3
sbi PORTC,6 ;+--+
cbi PORTC,7
cbi PORTB,0
sbi PORTB,1
rcall wait ;step 4
sbi PORTC,6 ;+-+-
cbi PORTC,7
sbi PORTB,0
cbi PORTB,1
rcall wait
ret
;*****Subr. wait
wait: ;ca 1 700 000 cycles
ldi r20,0x03 ;ca 0,1 sec. --> 10 steps/sec
out_lo: subi r20,1
breq wa_end
ldi r21,0xFF
in_lo: subi r21,1
breq out_lo
ldi r22,0xFF
iin_lo: subi r22,1
breq in_lo
rjmp iin_lo
wa_end: ret
Dabei treten 2 Probleme auf:
1: Der Motor wird sehr schnell sehr heiss, auch bei der schnellsten Drehzahl die ich hinbekomme (was das 2. Problem ist). Ich habe gelesen, dass die Dinger heiss werden, aber so schnell und so heiss? Im Datenblatt steht nix über ne max. Temperatur drin. Anfassen kann man ihn jedenfalls nach 2 Sekunden nicht mehr.
2: Die schnellste Drehzahl, die funktioniert, sind ca. 10 Schritte pro Sekunde. Wenn ich versuche, den Motor schneller laufen zu lassen, indem ich die wait-Schleife weniger Durchläufe machen lasse, bewegt sich das Ding gar nicht. Laut Datenblatt sollen da 1400 PPS (soll das 1400 Schritte pro Sekunde heissen??!) gehen.
Ich habe ausser die INx vom L283D und DDRx von den entsprechenden Ports nichts belegt.
Könnte das Problem daran liegen, dass ich die einzelen Leitungen (A1,A3,B1,B3) nacheinander schalte, und so immer (wenn auch nur SEHR kurz) eine falsche Schaltfolge entsteht?
Ist es möglich, dass ich das Ding einfach (trotz mehrfacher Prüfung) falsch angeschlossen habe? Würde sich dann überhaupt irgendwas bewegen?
Wenn nur das Hitzeproblem wäre, würd ich mir denken, alles is schon o.k. irgendwie, aber das mit der niedrigen Drehzahl macht mich nachdenklich.
Wer weis was??
Danke schonmal,
Gruss
Markus
*edit: Quellcode besser Formatiert, danke für den Hinweis