PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATiny2313+L293D+Schrittmotor



oratus sum
28.03.2009, 22:04
Hallo,

Also...

Ich habe wie oben erwähnt folgende Bauteile:

ATiny2313 mit diesem Code:


$regfile = "2313def.dat"
$crystal = 8000000
$baud = 9600

Config Portb = Output
Ddrd = &B0001000 'Pin PD3 als Ausgang konfigurieren
Portd = &B11111111 'PD0...PD7 auf High setzen

Portd.5 = 0
Portd.6 = 0
Main:
'STEP1
Waitms 10
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0

'STEP2
Waitms 10
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0

'STEP3
Waitms 10
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.3 = 1

'STEP4
Waitms 10
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Goto Main
End

Dann noch den L293D.

Portb.0 ist am Input 1 vom L293D
Portb.1 ist am Input 2 vom L293D

Portb.2 ist am Input 3 vom L293D
Portb.3 ist am Input 4 vom L293D

Der Rest vom L293 ist an 5V außer GND natürlich, ist an GND

Mein Schrittmotor hat 4 Anschlüsse. Also 2 die zwei Spulen ohne Common Ground.

Ich habe allerdings kein Datenblatt für den Motor (NEOCENE 2T2354272, 5ohm)

Die 4 Leitungen sind farblich gekennzeichnet:

Braun/Schwarz = 1. Spule
Orange/Gelb = 2. Spule

In dieser Reihenfloge:
Braun/Schwarz/Orange/Gelb

Wenn ich es nun wie folgt anschließe:

Braun an Output1 vom L293D
Schwarz an Output2 vom L293D

Orange an Output3 vom L293D
Gelb an Output4 vom L293D

Zuckt es nur ständig.

Außerdem hatte ich gerade ein komisches Phänomen:
Wenn ich MotorVCC nicht anschließe scheint es sich in nur in eine Richtung zu drehen, aber das nur sehr ruckelig...

Ich weiss jetzt nicht ob das am Motor, L293 oder so liegt....

Vielleicht bricht auch einfach die Spannung zusammen...

Währe super wenn ihr mir helfen könntet...

vklaffehn
29.03.2009, 00:53
Moin!
Ist das nicht der Motor von Pollin? Davon stecken zwei in meinem MiniPanoBot, auf mit einem L293D. Ich kriege es auch nie auf Anhieb hin, die richtigen Bits für die Spulen rauszuschubsen, deswegen baue ich immer eine 'riesige' Verzögerung, so ca. 1 Sekunde, zwischen den Schritten ein, so daß man sieht, was der Motor macht. Dann prokele ich so lange an den Bits für den L293D herum bzw. vertausche die Leitungen am Motor, bis alles so funktioniert, wie ich mir das vorstelle. Meistens nehme ich die Bitreihenfolge aus dem RN-Wissen und tausche solange die Motorleitungen, bis es passt (so viele Möglichkeiten gibt es ja zum Glück nicht). Bei mir laufen die Motoren mit 4x1.2 AAA Akkus wunderbar, zwischen den Schritten muß ich ca 1.5 ms warten, sonst kommen die nicht hinterher.
MfG
Volker

P.S.:Ich hab mir grad Deinen Code angeschaut (als Nicht-Bascom-Programmierer), was hat es denn mit dem Krams für Portd da oben auf sich? Und entspricht das

Config Portb = Output
einem

Ddrd = &B11111111
?(Darauf bin ich letztens hereingefallen......)

oratus sum
29.03.2009, 10:04
nein nicht ganz

Ddrd = &B11111111

Setzt alle Ports von PORTD auf High.

Portb = Output konfiguriert PortB als Ausgang


Das habe ich mir auch gedacht, dass dieser Motor ähnlich ist wie das vom Pollin die Typen bez. stimmt aber nicht zu 100% überein. Vom Aussehen ehr sieht er aber gleich aus.

HAst du vllt ein Datenblatt?

vklaffehn
29.03.2009, 10:27
Moin!
Ein Datenblatt habe ich leider nicht.....
Bist Du sicher, daß das mit den Befehlen passt? DDRx sind doch eigentlich die Datenrichtungsregister? Hmmmm, außerdem sieht Deine Bitfolge etwas merkwürdig aus?

1010
0110
0011
1001

lese ich bei dir, lt. RN-Wissen sollte das aber eher so aussehen für Vollschrittbetrieb:

1010
1001
0101
0110

Wie gesagt, bau mal eine 1 Sek Pause zwischen den Schritten ein, mein Motor macht pro Schritt 7,5 Grad, da sieht man, ob er sich in die richtige Richtung dreht. Meine liefen zuerst auch im Vollschrittbetrieb, ich bin dann auf Halbschritt umgestiegen, weil die Motoren dann deutlich mehr Drehmoment bei 5V haben.
MfG
Volker

oratus sum
29.03.2009, 10:52
OK Danke so werde ich es probieren.

Die Schrittfolge ist deswegen so komsich weil ich mich an einem anderen Schrittmotr oriantiert habe, und dort stehts eben so im Datenblatt...

Diser HOWARD Motor auch von Pollin, deer Große schwarze^^

vklaffehn
29.03.2009, 11:22
Moin!
Den Howard hab ich auch :-) Der läuft bei mir mit der selben Bitfolge wie der kleine Motor, ich habe einfach die Leitungen entsprechend angeschlossen.
Viel Erfolg!
MfG
Volker

oratus sum
30.03.2009, 18:54
Okay also noch eine Frage:
ich habe das jetzt so:

Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0

wie dus gesagt hast

Wie schließe ich jetzt AVR und L293D an?
Also welche Ports kommen an welche Input pins?

rob_88_20p
30.03.2009, 19:30
Ich habe auch so einen Schrittmotor mit Braun/Schwarz , Orange/Gelb und einem L293D aber keinen ATtiny2313 sondern ein Atmega88 20PU.
Hab allerdings in C programmiert und mit zwei Schaltern weis nicht obs Dir hilft aber der Code sieht so aus :



#define F_CPU 1000000UL
#include <util/delay.h>
#include <avr/io.h>

#define Time 25

#define STATSLED0_ON (PORTC |= 1<<PC0)
#define STATSLED0_OFF (PORTC &= ~(1<<PC0))
#define STATSLED1_ON (PORTC |= 1<<PC1)
#define STATSLED1_OFF (PORTC &= ~(1<<PC1))
#define STATSLED2_ON (PORTC |= 1<<PC2)
#define STATSLED2_OFF (PORTC &= ~(1<<PC2))

#define SWITCH_1 (PINB & 1<<PB0)
#define SWITCH_2 (PINB & 1<<PB1)

// L
void StepA1(){
// Step 1
PORTD |= 1<<PD0;
PORTD &= ~(1<<PD2);
}

void StepA2(){
// Step 2
PORTD |= 1<<PD2;
PORTD &= ~(1<<PD0);
}

void StopA(){
//stop
PORTD &= ~(1<<PD0);
PORTD &= ~(1<<PD2);
}


//R
void StepB1(){
// Step 1
PORTD |= 1<<PD4;
PORTD &= ~(1<<PD6);
}

void StepB2(){
// Step 2
PORTD |= 1<<PD6;
PORTD &= ~(1<<PD4);
}

void StopB(){
//stop
PORTD &= ~(1<<PD4);
PORTD &= ~(1<<PD6);
}

int main(){

DDRC = 1<<PC0 | 1<<PC1 | 1<<PC2; // LED's

DDRD = 1<<PD0 | 1<<PD2 | 1<<PD4 | 1<<PD6; // Step1 + Step2;

DDRB &= ~(1<<PB0 | 1<<PB1); // SWITCH_1 / SWITCH_2

while(1){


if(! SWITCH_1 && ! SWITCH_2){
STATSLED0_ON;
STATSLED1_OFF;
STATSLED2_OFF;
StopA();
StopB();
}


else if(! SWITCH_1 && SWITCH_2){

StepA1();
_delay_ms(Time);
StepA2();
_delay_ms(Time);
STATSLED0_OFF;
STATSLED1_ON;
STATSLED2_OFF;
}

else if(SWITCH_1 && ! SWITCH_2){

StepB1();
_delay_ms(Time);
StepB2();
_delay_ms(Time);

STATSLED0_OFF;
STATSLED1_OFF;
STATSLED2_ON;

}

}
}