schrittmotor rn-stepp 297

Gulliver

Neues Mitglied
20. Nov. 2012
21
0
0
Sprachen
Guten Morgen,

wie die überschrift schon sagt , würde ich gerne eine einfache ansteuerung realisieren.

hab mich also für das l297 ic entschieden und die vorgefertigte platine dazu "rn-stepp 297"
Also aufgebaut mit spannung versorgt, referenzspannung eingestellt und einen sy42sth47-1206A an die schaltung gebracht. ( http://www.robotikhardware.de/download/schrittmotor_po1206a.pdf ) - Datenblatt.

Er baut auch direkt haltekraft auf. ich bekomme ihn nur nicht zum drehen..

Also die Pinbelegung sieht wie folgt aus :

Pinbelegung
Pin 1 Clock/Takt (bei GND Flanke bewegt sich Motor einen Schritt)
Pin 2 CW/CCW (Drehrichtung, Pullup vorhanden)
Pin 3 RESET (Pullup vorhanden)
Pin 4 CNTL
Pin 5 H/F (Halb- oder Vollschritt, Pullup vorhanden)
Pin 6 Enable (Motor wird durch GND ausgeschaltet, Pullup vorhanden)
Pin 7 SYNC
Pin 8 HOME
Pin 9 GND / Masse
Pin10 Logikspannung +5V (dient zur Versorgung der Schaltung)


wenn ich nun also pin 1 "toggel" müsste sich doch die achse jeweils um einen schritt drehen, oder ?


habe also ein Motorinit2 prog geschreibselt dass das versucht.

Code:
; Musterprogramm


.nolist								;include-file nicht in Listing

.include "m32def.inc"				;Definitionen für ATmega einbinden

.list								;Listing erstellen


.equ NurMuster = 10


.equ	LEDPort          	= PortB			;.equ für Variablenzuweisungen
.equ	LEDPortDirection 	= DDRB			;.def für Registerzuweisungen
.equ	LED_On_Off_Bit		= 7
.equ	LED_R_L_Bit			= 6
.equ	LED_Cont_Step_Bit	= 5
.equ	LED_ADC_Tast_Bit	= 4
.equ	LED_V1_Bit			= 3
.equ	LED_V2_Bit			= 2
.equ	LED_Unused1_Bit		= 1
.equ	LED_DoStep_Bit		= 0


.equ	MotorPort 	= PortC
.equ	MotorPortDirection 	= DDRC


.def	akku    	= r16	;r16 als Arbeitsregister "akku" 


.equ 	MyCount_A		= 255
.equ 	MyCount_i		= 255







.equ	CyBitNr	= 0
.equ	ZBitNr	= 1


;********************************************************************************************************************
; Macros

.macro	PinTog
	sbis	@0,@1						;Pin toggeln 
	rjmp	SetPin						;I/O-Adresse und Pin-Nr. werden
ClrPin:	cbi	@0,@1						;an das Macro übergeben
	rjmp	PinTogX
SetPin:	sbi	@0,@1
PinTogX:
.endmacro



.macro	push_sreg						;SREG auf Stack sichern
	in	akku,sreg
	push	akku
.endmacro

.macro	pop_sreg						;SREG vom Stack zurückholen
	pop	akku
	out	sreg,akku
.endmacro

;********************************************************************************************************************
.cseg							    	;Beginn des Code-Segmentes


.org 	0x0000							;Interrupt-Vektor für RESET
rjmp 	Progstart	





.org 0x0045							;Ende der Interrupt-Vektor-Tabelle


;********************************************************************************************************************
;Beginn des Hauptprogrammes

progstart:
		ldi		akku,LOW(RAMEND)			;Stack initialisieren
		out		SPL,akku					;Wichtig: Immer Low-Byte zuerst
		ldi		akku,HIGH(RAMEND)			
		out		SPH,akku		

	

		

		call	MotorInit2
		call	SysInit
	  	
		
loop:  	ldi		akku,NurMuster
loop1:	dec		akku
		brbc	ZBitNr,loop1				; Zu Loop1, wenn Z-Bit nicht gesetzt
		PinTog	MotorPort,0                         ;motorpuls
	
    
		call delay
	     

		jmp		loop




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

Delay:

		ldi		r20,MyCount_i
		ldi 	        r21,MyCount_A

loopa:
loopi:

		NOP
		NOP

 		DEC		r20
		brne	loopi

		dec		r21
		brne 	loopa

		ret
;********************************************************************************************************************
;für rn297 stepper und atmega32
;
Motorinit2:

push 	 akku
		ldi 	 akku,0xfe
		out		 MotorPortDirection,akku
		sbi		 Motorport, 5 ;enable
		sbi		 Motorport, 1 ;drehrichtung
		cbi		 Motorport, 2 ;reset
		nop
		nop
		nop
		sbi 	 MotorPort,2 ;reset

pop		 akku
ret
;*********************************************************************


;********************************************************************************************************************
;
;SysInit: 
; Aufgaben: - LED-Port als Ausgang
;			- Alle LEDs aus	
; Eingangsgrößen: keine
; Ausgangsgrößen: keine


SysInit:push	akku							;Akku nicht zerstören
		ser		akku				  			;Alle Bits in akku setzen
		out		LEDPortDirection,akku			;LED-Port als Ausgang
		out		LEDPort,akku					;LED "an" würde durch Ausgabe einer Null erreicht.
		pop		akku
		ret



ich höre leider nur gefiepse vom motor... :/
 
Nicht jedes toggeln, sondern jede fallende Flanke...
Bist Du Dir mit dem korrekten Anschluß des Motors am 298 sicher? (RN verwendet doch die klassische 297-298-Kombi, oder?)
Die Mittelabgriffe der Motorspulen sollten frei bleiben, die Enden (mit'nem Ohmmeter ausmessen) an den 298, oder? Vertausch mal bei einer der Spulen die Leitungen.
 
Bringe ich nicht durch das toggeln der logikspannug, also bit von 0 auf 1 oder 1 auf 0 eine flanke zu stande ?

Ich nutze nur den l297.
Die mittelanzapfungen sind frei. Bin auch die Anschlüsse schon durchgegenagen mit dem ohmmeter. das passt alles.
Auch das vertauschen habe ich bereits probiert..
habe ein spulenendenpaar auf die beiden linken anschlussbuchen, und eines auf die beiden übrigen anschlussbuchsen.
Denke das ist soweit richtig
 
Hallo Gulliver,

probiere einmal das delay zu erhöhen, vielleicht ist dieses zu klein und der Motor "kommt nicht nach".

Übrigens funktioniert dein delay nur richtig, wenn MyCount_i = 255 ist. Damit es auch für andere Werte richtig funktioniert, müsstest du nach loopa den Wert MyCount_i in r20 laden.

Datenblatt habe ich mir jetzt nicht angesehen.

Dirk :ciao:
 
Das Datenblatt ist nur 2 seiten lang ^^ sagt eben nur 1 seite was der motor kann und auf der 2ten wie die motorspulen "aussehen" :)

habe in der def. vor dem programmstart meine schleifen variablen definiert

Code:
.equ 	MyCount_A		= 255
.equ 	MyCount_i		= 255

meintest du das ?

müsste mind. 50 ms ergeben...

mehr delay hat mein problem leider noch nicht gelöst..
 
mehr delay hat mein problem leider noch nicht gelöst..

Ok, hätte ja sein können, dass die Frequenz zu hoch ist.

habe in der def. vor dem programmstart meine schleifen variablen def

Code:
.equ     MyCount_A        = 255
.equ     MyCount_i        = 255

meintest du das ?

müsste mind. 50 ms ergeben...

Folgendes bringt dich sicher nicht zur Lösung deines Problems, ich wollte trotzdem mal drauf hinweisen, vielleicht baust du dir dadurch irgendwo mal einen Fehler ein:
Nein, das meinte ich nicht. Schau dir mal deine Routine Delay genauer an. Das Register r20 wird nur beim erstem Durchlauf mit MyCount_i geladen. Danach fängt die innere Schleife immer mit r20=255 an, auch wenn du zum Beispiel MyCount_i=30 vorgibst. Aber wie schon geschrieben, das nur mal als Hinweis.
 
Ja, das toggeln führt zu einer Flanke, aber nur jedes 2te toggeln davon ist eine fallende. Dazwischen liegt logischerweise immer auch eine steigende Flanke. Du wirst sicher das richtige gemeint haben - eine Schritt erhälst Du nur bei jedem 2ten toggeln.

Dein RN-Board kenne ich nicht - aber da wird sicher die Standard-Schaltung aus dem Datenblatt vom L298 (S.8) übernommen worden sein. Der 298 enthält 2 H-Brücken - an die beiden Ausgänge einer jeden Brücke gehört eine Spule des Steppers.
Meiner Meinung nach solltest die Zustände an den Ausgängen direkt messen können. Ohne Stepper drann. Also nach jeder fallenden Flanke der Clock die Spannung der Ausgänge messen. Dann solle sich je nach Vorgabe am Half/!Full-Pin die entsprechende Tabelle wiederfinden lassen.
Mit welcher Frequenz kommen Deine fallenden Flanken - schafft der Stepper das?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)